none
怎样在uwp中读取图片并显示 RRS feed

  • 问题

  • 我在win10下写了下面代码

    <Grid Background="AliceBlue" x:Name="lay">
            <Image Source="ms-appx:/Images/abc.jpg"/>
    </Grid>

    这个能正常显示,不过我是在工程文件里面建一个Images文件夹,再把jpg放进去才能访问,请问怎样才能将路径改变到程序外部,例如“C:\abc.jpg”?

    2016年8月2日 9:47

答案

  • 您好,

    你说的"ms-appx:///"访问安装包文件的Uri协议,有专门文档说明的:https://msdn.microsoft.com/en-us/library/windows/apps/windows.applicationmodel.package.installedlocation 

    这个是英文文档,因为没有中文的版本,所以你可能需要借助一下翻译工具。

    类似的还有"ms-appdata:///" 应用程序文件,相关文档给你参考:https://msdn.microsoft.com/zh-cn/windows/uwp/files/file-access-permissions 

    你上面的代码直接访问路劲是不行的,需要使用文件流:

    FileOpenPicker filePicker = new FileOpenPicker();
                filePicker.ViewMode = PickerViewMode.Thumbnail;
                filePicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
                filePicker.FileTypeFilter.Add("*");
                StorageFile file = await filePicker.PickSingleFileAsync();
                BitmapImage bitmap = new BitmapImage();
                using (var stream = await file.OpenAsync(FileAccessMode.ReadWrite))
                {
                    bitmap.SetSource(stream);
                }
                img.Source = bitmap;


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.


    2016年8月3日 2:26
    版主

全部回复

  • UWP禁止访问外部路径。你可以把图片放到服务器上,然后通过URL读取
    2016年8月2日 11:35
  • 首先谢谢你的回答,但是我发现win10自带的应用电影和电视,也能指定文件夹,跟着应用会在这个文件夹进行访问,请问这个是怎样实现的?就是“选择我们查找视频的位置”这个选项

    • 已编辑 AlfredNG 2016年8月2日 11:49 错字
    2016年8月2日 11:49
  • 话是这么说没错,我也一直很头疼这个问题。外部路径书里只讲了针对可移动存储设备的访问,要想访问任意路径,我刚刚看了一个帖子,希望有用。

    http://uwpbox.com/archives/19

    2016年8月2日 12:36
  • FileOpenPicker我试过,可能是我用的方法错了,反正不能保证有用。
    2016年8月2日 12:38
  • 我用FileOpenPicker能正常读取file,但是将它的路径放入Uri再赋值给Source也是不行

    FileOpenPicker filePicker = new FileOpenPicker();
    filePicker.ViewMode = PickerViewMode.Thumbnail;
    filePicker.SuggestedStartLocation = PickerLocationId.VideosLibrary;
    filePicker.FileTypeFilter.Add("*");
    StorageFile file = await filePicker.PickSingleFileAsync();
    img.Source = new BitmapImage(new Uri(file.Path));
    如果将file.path改成
    ”ms-appx:/Images/abc.jpg”
    就没有问题


    • 已编辑 AlfredNG 2016年8月2日 16:40
    2016年8月2日 16:39
  • 您好,

    你说的"ms-appx:///"访问安装包文件的Uri协议,有专门文档说明的:https://msdn.microsoft.com/en-us/library/windows/apps/windows.applicationmodel.package.installedlocation 

    这个是英文文档,因为没有中文的版本,所以你可能需要借助一下翻译工具。

    类似的还有"ms-appdata:///" 应用程序文件,相关文档给你参考:https://msdn.microsoft.com/zh-cn/windows/uwp/files/file-access-permissions 

    你上面的代码直接访问路劲是不行的,需要使用文件流:

    FileOpenPicker filePicker = new FileOpenPicker();
                filePicker.ViewMode = PickerViewMode.Thumbnail;
                filePicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
                filePicker.FileTypeFilter.Add("*");
                StorageFile file = await filePicker.PickSingleFileAsync();
                BitmapImage bitmap = new BitmapImage();
                using (var stream = await file.OpenAsync(FileAccessMode.ReadWrite))
                {
                    bitmap.SetSource(stream);
                }
                img.Source = bitmap;


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.


    2016年8月3日 2:26
    版主
  • 谢谢你的解答,在C#里面是可以这样设置图片的,我想问问怎样在xmal设置,下面那样

    <Grid Background="AliceBlue" x:Name="lay">
            <Image Source="ms-appx:/Images/abc.jpg"/>
    </Grid>

    怎样才能将Source设置成外部的路径?

    2016年8月3日 15:17
  • 您好,

    不可以。只能像我上面那样用文件流的方式。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2016年8月4日 0:36
    版主
  • 请问怎样才能做到好像系统自带的电影和电视应用那样,通过StorageFolder选择了播放文件所在的文件夹后,以后每次程序启动都能从那个上次选择了的文件夹的路径寻找想要的文件?
    • 已编辑 AlfredNG 2016年8月4日 15:05
    2016年8月4日 15:03
  • 您好,

    这个问题与你原始的问题是不一样的,请在一个帖子上只问一个问题,关于你这个问题,我这里给你个文档供你参考:StorageApplicationPermissions.MostRecentlyUsedList


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2016年8月5日 5:28
    版主
  • 感谢详细解答,我在另外一个贴子问
    2016年8月5日 5:49