在Win 8 App的安全沙箱内,除了使用文件选取器FileOpenPicker外,没有其他办法调用某个盘符的数据。

全新的Storage命名空间,借鉴了IOS与Android的设计。

下面引用一个图片绑定的简单例子:

原来WPF我们可以这样写:

     <Grid Background="Red">
<Image x:Name="bg1" Source="ms-appx:///Assets/shanghai.jpg"></Image>
</Grid>

也可以在Code-Behind这样写:

this.DataContext = new BitmapImage(new Uri("ms-appx:///Assets/shanghai.jpg"));

XAML:

 <Image x:Name="bg1" Source="{Binding}"></Image>

效果都是这样:

下面我们用Win8 App的Storage来重写一下上面的代码。

为了举例,我们需要引用本地图片库的图片文件。

在AppPackage.appxmanifest中,加上配置

   <Capabilities>
<Capability Name="picturesLibrary" />
</Capabilities>

Code-Behind:

             var file = KnownFolders.PicturesLibrary.GetFileAsync("shanghai.jpg").AsTask().Result;

             this.DataContext = new BitmapImage(new Uri(file.Path));

运行程序,图片并没有显示,这说明Storage是不支持Uri的。

解决方案1:通过读取File的Stream,Set Image的Source,代码如下:

             var file = await KnownFolders.PicturesLibrary.GetFileAsync("shanghai.jpg");
using (var fileStream = await file.OpenAsync(FileAccessMode.Read)) {
BitmapImage image = new BitmapImage();
image.SetSource(fileStream);
this.DataContext = image;
}

解决方案2:通过WriteBitmap类实现,代码如下:

         async private void GetImage() {
var file = await KnownFolders.PicturesLibrary.GetFileAsync("shanghai.jpg");
using (var stream = await file.OpenAsync(FileAccessMode.Read)) {
BitmapImage image = new BitmapImage();
image.SetSource(stream);
stream.Seek();
backgroundBmp = new WriteableBitmap(image.PixelWidth, image.PixelHeight);
await backgroundBmp.SetSourceAsync(stream);
this.DataContext = backgroundBmp;
}
} private WriteableBitmap backgroundBmp;

同样,也可以通过引用WriteableBitmapEx.WinRT简化写法,代码如下:

         async private void GetImage() {
var file = await KnownFolders.PicturesLibrary.GetFileAsync("shanghai.jpg");
using (var stream = await file.OpenAsync(FileAccessMode.Read)) {
BitmapImage image = new BitmapImage();
image.SetSource(stream);
stream.Seek();
backgroundBmp = await BitmapFactory.New(image.PixelWidth, image.PixelHeight).FromStream(stream);
this.DataContext = backgroundBmp;
}
} private WriteableBitmap backgroundBmp;

解放方案1和2的区别,WriteableBitmap可以精确指定生成的Image的区域,这样就可以通过WriteableBitmap实现图片的缩放,裁剪。

代码:戳

Windows store app[Part 2]:全新的File System与Uri不匹配的问题的更多相关文章

  1. 在桌面程序上和Metro/Modern/Windows store app的交互(相互打开,配置读取)

    这个标题真是取得我都觉得蛋疼..微软改名狂魔搞得我都不知道要叫哪个好.. 这边记录一下自己的桌面程序跟windows store app交互的过程. 由于某些原因,微软的商店应用的安全沙箱导致很多事情 ...

  2. Windows Store App 过渡动画

    Windows Store App 过渡动画     在开发Windows应用商店应用程序时,如果希望界面元素进入或者离开屏幕时显得自然和流畅,可以为其添加过渡动画.过渡动画能够及时地提示用户屏幕所发 ...

  3. Windows store app[Part 4]:深入WinRT的异步机制

    接上篇Windows store app[Part 3]:认识WinRT的异步机制 WinRT异步机制回顾: IAsyncInfo接口:WinRT下异步功能的核心,该接口提供所有异步操作的基本功能,如 ...

  4. Windows store app[Part 3]:认识WinRT的异步机制

    WinRT异步机制的诞生背景 当编写一个触控应用程序时,执行一个耗时函数,并通知UI更新,我们希望所有的交互过程都可以做出快速的反应.流畅的操作感变的十分重要. 在连接外部程序接口获取数据,操作本地数 ...

  5. Windows store app[Part 1]:读取U盘数据

    Windows 8系统下开发App程序,对于.NET程序员来说,需要重新熟悉下类库. 关于WinRT,引用一张网上传的很多的结构图: 图1 针对App的开发,App工作在系统划定的安全沙箱内,所以通过 ...

  6. 05、Windows Store app 的图片裁切(更新)

    在 Win Phone Silverlight api 中,有一个 PhotoChooserTask 选择器,指定宽.高属性,在选择图片的时候, 可以进行裁切,代码: PhotoChooserTask ...

  7. 01、Windows Store APP 设置页面横竖屏的方法

    在 windows phone store app 中,判断和设置页面横竖屏的方法,与 silverlight 中的 Page 类 不同,不能直接通过 Page.Orientation 进行设置.而是 ...

  8. Windows Store App JavaScript 开发:获取文件和文件夹列表

    在应用程序中有时可能需要获取用户库中的内容,以便执行相关的操作.如果要获取某个用户库中的内容,需要先获取到这个用户库,获得用户库可以通过Windows.Storage命名空间中的KnownFolder ...

  9. Windows Store App JavaScript 开发:选取文件和文件夹

    前面提到过,文件打开选取器由FileOpenPicker类表示,用于选取或打开文件,而文件夹选取器由FolderPicker类表示,用来选取文件夹.在FileOpenPicker类中,pickSing ...

随机推荐

  1. **深入了解lambda

    之前已经了解过lambda了,但是在学习了闭包之后,我们有必要在探讨一下lambda(匿名函数). 匿名函数本质上就是一个函数,它所抽象出来的东西是一组运算. 它的使用场景就是:你在某处就真的只需要使 ...

  2. t讯src的一点小秘密

    1.腾讯网首页发表评论未做限制 风险url:http://coral.qq.com/2774166934 使用burp的intruder模块生成payload 未做任何限制导致可批量提交大量的评论…… ...

  3. 好一个Time_Wait状态(TCP/IP)

    首先简单介绍一下Time_Wait是个什么鬼: 在TCP/IP协议中,我们都知道有三次握手四次挥手的过程,先来一个简单的图: 各个状态和基本的过程想必了解过TCP/IP协议的人都清楚,本次介绍的主题只 ...

  4. jsp出现getOutputStream() has already been called for this response异常的原因和解决方法

    jsp出现getOutputStream() has already been called for this response异常的原因和解决方法 在tomcat5下jsp中出现此错误一般都是在js ...

  5. 把http网站改为Https网站

    腾讯云申请完证书后添加到服务器的方法: https://www.qcloud.com/document/product/400/4143#2.-nginx.E8.AF.81.E4.B9.A6.E9.8 ...

  6. 10 华电内部文档搜索系统 search05

    上一节讲述了索引更新的处理方案,这一节首先讲述索引维护的相关方案.每创建一个索引,把文档相关的信息插入到数据库中.这个时候会产生一个唯一的对应的ID,获取这个ID之后,把这个ID又插入到对应的索引文件 ...

  7. 【LA3415 训练指南】保守的老师 【二分图最大独立集,最小割】

    题意 Frank是一个思想有些保守的高中老师.有一次,他需要带一些学生出去旅行,但又怕其中一些学生在旅行中萌生爱意.为了降低这种事情发生的概率,他决定确保带出去的任意两个学生至少要满足下面四条中的一条 ...

  8. 【POJ2151】Check the difficulty of problems

    题意 某场比赛有M道问题,T支队伍,和数字N给出每支队伍解决每道问题的概率. 问这场比赛满足下面两个条件的概率 1.每支队伍至少做出一道题 2.冠军队至少做出N道题. 分析 条件2是不是可以转化为 至 ...

  9. java-tip-各种Map的区别及如何选择

    这里主要讨论这三种:HashMap.LinkedHashMap.TreeMap 1. HashMap是常规的哈希表,查询以及插入的性能最好,如果没有特殊要求,应该使用这个 2. LinkedHashM ...

  10. 使用批处理命令设置windows系统的ip地址和dns

    找到对应的网卡名称 使用命令:ipconfig ipconfig/all Windows IP Configuration Host Name . . . . . . . . . . . . : D5 ...