2015-09-20 3 views
1

J'ai obtenu une image en utilisant FileOpenPicker. Je veux enregistrer le chemin de l'image dans la base de données, de sorte qu'en utilisant ce chemin, je peux obtenir cette image tout autre écran ,,obtenir le chemin de l'image sélectionnée par fileopenpicker windows phone 8.1 C#

Maintenant, je simplement envoyer mon chemin de l'image à la deuxième page. mais avec le même chemin je ne peux pas obtenir l'image.

Voici mon code.

private async void button_Click(object sender, RoutedEventArgs e) 
    { 

     ImagePath = string.Empty; 
     FileOpenPicker filePicker = new FileOpenPicker(); 
     filePicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary; 
     filePicker.ViewMode = PickerViewMode.Thumbnail; 


     filePicker.FileTypeFilter.Clear(); 
     filePicker.FileTypeFilter.Add(".bmp"); 
     filePicker.FileTypeFilter.Add(".png"); 
     filePicker.FileTypeFilter.Add(".jpeg"); 
     filePicker.FileTypeFilter.Add(".jpg"); 

     filePicker.PickSingleFileAndContinue(); 
     view.Activated += viewActivated; 
    } 

    private async void viewActivated(CoreApplicationView sender, IActivatedEventArgs args1) 
    { 

     FileOpenPickerContinuationEventArgs args = args1 as FileOpenPickerContinuationEventArgs; 

     if (args != null) 
     { 
      if (args.Files.Count == 0) return; 

      view.Activated -= viewActivated; 
      StorageFile storageFile = args.Files[0]; 
      var stream = await storageFile.OpenAsync(Windows.Storage.FileAccessMode.Read); 


      **//ImagePath is global string. I get the image path here** 


      ImagePath = storageFile.Path; 

      var bitmapImage = new Windows.UI.Xaml.Media.Imaging.BitmapImage(); 
      await bitmapImage.SetSourceAsync(stream); 

      var decoder = await Windows.Graphics.Imaging.BitmapDecoder.CreateAsync(stream); 

      //image is my image control in Xaml. 
      image.Source = bitmapImage; 
     } 

    } 

    private void image_click(object sender, TappedRoutedEventArgs e) 
    { 
     this.Frame.Navigate(typeof(detail), ImagePath); 
    } 

En tapant sur l'image je passe à l'écran de détail. où j'ai un autre contrôle d'image où je veux montrer la même image ,,,, traversant le chemin.

Mon code d'écran Détail est:

protected async override void OnNavigatedTo(NavigationEventArgs e) 
    { 
     var imagePath = e.Parameter as string; 
     image2.Source = new BitmapImage(new Uri(imagePath, UriKind.RelativeOrAbsolute)); 
    } 

Le code ci-dessus ne fonctionne pas.

Alors j'ai essayé une autre façon ,,

 var file = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(new Uri(imagePath)); 

     Stream stream = await file.OpenStreamForReadAsync(); 
     using (var memStream = new MemoryStream()) 
     { 
      await stream.CopyToAsync(memStream); 
      memStream.Position = 0; 

      BitmapDecoder decoder = await BitmapDecoder.CreateAsync(memStream.AsRandomAccessStream()); 

      // create a new stream and encoder for the new image 
      InMemoryRandomAccessStream mrAccessStream = new InMemoryRandomAccessStream(); 
      BitmapEncoder encoder = await BitmapEncoder.CreateForTranscodingAsync(mrAccessStream, decoder); 

      // convert the bitmap to a 400px by 600px bitmap 
      encoder.BitmapTransform.ScaledHeight = 400; 
      encoder.BitmapTransform.ScaledWidth = 600; 

      try 
      { 
       await encoder.FlushAsync(); 
      } 
      catch (Exception ex) 
      { 
       string s = ex.ToString(); 
      } 

      // render the stream to the screen 
      WB = new WriteableBitmap(500, 500); 
      WB.SetSource(mrAccessStream); 

      image2.Source = WB; 

Cela aussi ne fonctionnait pas. Je pense que le problème est dans le chemin. J'ai chemin chemin maladroit comme

 "C:\\Data\\Users\\Public\\Pictures\\Saved Pictures\\Image-130872081698409356.jpeg". 

S'il vous plaît aidez-moi à se débarrasser de ce problème.

+0

à droite. Windows Phone n'a pas une telle structure de fichiers. vous ne pouvez pas charger un fichier de ce genre. le chemin est incorrect - c'est le problème. avez-vous vu quelle était l'exception? Quelle était l'exception? –

+0

pour les deux façons, il n'y a pas d'exception. Je n'ai tout simplement pas obtenu l'image au contrôle de l'image. – Arsal

+0

Voulez-vous s'il vous plaît laissez-moi savoir que comment obtenir le chemin exact ,, de sorte que je pourrais l'utiliser n'importe où et obtenir l'image. – Arsal

Répondre

0

Ceci est inhérent à conception et c'est un problème de sécurité. Imaginez ce qui se passerait si vous connaissiez simplement le chemin d'accès à un fichier auquel vous pouviez accéder. Le modèle de sécurité des applications de magasin serait cassé.

Notez que c'est le sélecteur de fichiers qui vous fournit un fichier auquel vous avez accès. Vous pouvez démarrer à partir d'un sélecteur de fichiers pour accéder à un fichier. Vous ne pouvez pas démarrer à partir d'un chemin pour accéder à un fichier. Un sélecteur de fichiers garantit que l'utilisateur sera impliqué et donc conscient de ce qui se passe. Si vous étiez autorisé à démarrer à partir d'un chemin et à accéder par programme à un fichier qui enfreindrait les règles de sécurité pour les magasins d'applications.

+0

yup. mais quel serait le processus pour obtenir cette image? La seule façon est que je peux enregistrer le chemin de l'image ... et je vais utiliser ce chemin pour obtenir mon image à un autre écran. – Arsal

+0

Chargez le contenu de cette image sur la première page où vous obtenez l'accès au fichier. Stocker ce contenu en mémoire et transmettre ces données directement ou indirectement à la page suivante. Ensuite, utilisez ces données sur la page suivante. Une autre option est que sur la première page, vous copiez le fichier sur le stockage local auquel vous avez accès. Sur la deuxième page, vous pouvez accéder au fichier que vous avez copié sur le stockage local. – Ladi

+0

ouais. Tu as raison. Je dois copier le fichier image sur le stockage local.Pourriez-vous s'il vous plaît m'envoyer un exemple pour stocker l'image dans le stockage local? – Arsal