【问题标题】:get path of selected image by fileopenpicker windows phone 8.1 C#通过fileopenpicker windows phone 8.1 C#获取所选图像的路径
【发布时间】:2015-09-20 20:59:16
【问题描述】:

我使用 FileOpenPicker 获得了一张图片。我想将图像的路径保存在数据库中,以便通过使用该路径,我可以在任何其他屏幕上获取该图像,

现在我只需将图像路径发送到第二页。但使用相同的路径我无法获得图像。

这是我的代码。

  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);
    }

通过点击图像,我移动到详细信息屏幕。我有另一个图像控件,我想在其中显示相同的图像,,,,通过路径。

我的详细信息屏幕代码是:

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

上面的代码不起作用。

然后我尝试了另一种方法,

        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;

这也不起作用。 我认为问题出在路径上。我的路径很尴尬,比如

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

请帮我解决这个问题。

【问题讨论】:

  • 正确。 Windows Phone 没有这样的文件结构。你不能加载任何类型的文件。路径不正确 - 这就是问题所在。你看到异常是什么了吗?有什么例外?
  • 两种方式都不例外。我只是没有在图像控制中获得图像。
  • 能否请您告诉我如何获取确切路径,以便我可以在任何地方使用它并获取图像。
  • 您是否尝试使用StorageApplicationPermissions.MostRecentlyUsedListStorageApplicationPermissions.FutureAccessList?您将通过令牌而不是完整路径来识别文件,但这就是“metro”应用程序保持文件可访问性的方式。
  • 不,我没有使用这个。你能给我一个样品吗?

标签: c# image windows-phone-8.1 fileopenpicker


【解决方案1】:

这是设计使然,这是一个安全问题。想象一下,如果只知道文件的路径就可以访问该文件会发生什么。商店应用程序的安全模型将被打破。

请注意,这是为您提供您有权访问的文件的文件选择器。您可以从文件选择器开始访问文件。您不能从路径开始访问文件。文件选择器保证用户将参与其中并因此了解正在发生的事情。如果您被允许从路径开始并以编程方式访问会违反应用商店安全规则的文件。

【讨论】:

  • 是的。但是获得该图像的过程是什么?唯一的方法是我可以保存图像路径......我将使用该路径在另一个屏幕上获取我的图像。
  • 在您可以访问该文件的第一页上加载该图像的内容。将该内容存储在内存中,并将该数据直接或间接传递到下一页。然后在下一页使用该数据。另一种选择是在第一页上将文件复制到您有权访问的本地存储中。在第二页上,您可以访问您在本地存储中复制的文件。
  • 是的。你说的对。我必须将图像文件复制到本地存储。请给我发送任何将图像存储在本地存储中的示例吗?
  • 我明白你的意思,请你为我提供这个问题的正确解决方案
猜你喜欢
  • 1970-01-01
  • 2021-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多