在开发Windows Phone应用程序的时候,或多或少会与图片打交道,下面总结下Windows Phone 中处理图片的一些技巧

1.  图片格式.
2.  图片编译方式
3.  图片加载方式
4.  图片缓存
5.  GIF图片
6.  图片大小限制
7. 图片选择器

1.  图片格式

我们知道在Windows Phone 中只支持JPG与PNG格式的图片,借助ImageTools类库我们可以在Windows Phone 中使用GIF图片。在Windows Phone 中推荐优先使用JPG格式的图片,因为在Windows Phone 中JPG图片的解码速度比PNG快,当然比GIF更快。除非是有透明背景的要求使用PNG图片,否则推荐使用JPG图片。除非要使用GIF动态图片,建议少使用ImageTools。

2. 图片编译方式

Windows Phone 7中图片为Resource和Content的区别: 生成方式为Resource的图片会被编译到应用程序集(DLL)里,而生成方式为Content的图片则会被部署到XAP包中。

当你把你的图片copy到项目中,图片的生成动作默认是资源(Resource),但我通常选择Content以获取更快的速度。我们应该如何选择图片的生成方式(Build Action)呢? 每种生成方式都有其用武之地:设置生成方式为Content意味着应用程序可以更快的加载图片资源;将生成方式设为Resource对你重新部署程序非常有用,这对类库项目十分合适的。

另外一个小区别是在引用的时候,斜杠(/ & \)的方向:

Content: <Image Source="/ImagesAsContent/smiley1.png"/>

Resource: <Image Source="..\ImagesAsResource\smiley3.png"/>

3.  图片加载方式

我们可以使用异步或者同步加载的方式去加载图片。 
设置其UriSource是异步加载:BitmapImage.UriSource = uriSource;
设置其文件流是同步加载: BitmapImage.SetSource(stream);   注意异步加载图片并不是完全开启另外一个线程去操作的,因为正在下载的图片的解码工作还是发生的主要的UI线程上的。下面是异步与同步加载的一点总结:
如果你同步加载一个不存在的图片文件,你会得到一个异常;
如果你异步加载一个不存在的图片文件,ImageFailed事件被触发(如果你注册了这个事件);
如果你同步加载一个存在的图片文件,当加载完成时ImageOpened事件被触发;
如果你异步加载一个存在的图片文件,当加载完成时ImageOpened事件不会被触发。

4. 图片缓存

图片缓存是一个很好用的功能,如果使用得当会将你应用程序的性能提高不少,Bitmap缓存将可视化元素(visual elements)保存为bitmap在他们第一次被渲染的时候,以后你如果用到这个元素,不会再去渲染他而是使用缓存的bitmap

5. GIF图片

关于如果在Windows Phone 中显示GIF图片,我专门写过一篇博客介绍,如需要大家可以去看看 Windows Phone 实用开发技巧(8):在Windows Phone显示GIF图片

6. 图片大小限制

由于屏幕大小限制,在Windows Phone对图片的分辨率也有一定的限制。MS推荐在Windows Phone 中使用图片的分辨率不要超过2000*2000

Due to the limited screen resolution of Windows Phone, another way to optimize performance is to limit the image size to 2000 x 2000 pixels, which is the size limit of images in Windows Phone environment. Larger images will be sampled at a lower resolution. Also, if you use images that are larger than 2000 x 2000 pixels, they will be significantly slower to appear.

7.图片选择器

我们的应用中可能需要提供用户自己选择的图片的功能,这时候PhotoChooserTask就有用武之地了,他有一个Completed事件,返回的是选中照片的文件流,我们可以将流设置到页面中的图片控件中,其常见的用法如下:

这里有个小技巧跟大家分享下:PhotoChooserTask 可以返回指定像素的图片,即如果你只想获取图片中的部分作为返回,你只需要设置task的PixelHeight与PixelWidth即可。

本文转自xshf12345 51CTO博客,原文链接:http://blog.51cto.com/alexis/595851,如需转载请自行联系原作者

Windows Phone 实用开发技巧(10):Windows Phone 中处理图片的技巧相关推荐

  1. Windows Phone实用开发技巧(32):照片角度处理

    在实际项目中,可能需要用户从相册中选择图片然后进行相应的处理.但是不知道大家有没有发现这样一种情况,就是手机里看是竖着的,但是上传到微博或者哪里的时候确实横着的.一种情况是你拿手机竖着拍照得话,照片就 ...

  2. Windows Phone实用开发技巧(1):保存图片及加载图片

    在Windows Phone中,我们可能会有这样的需求:自定义应用程序的背景图片. 实际的流程是这样:用户选择图片,保存至隔离存储空间,(下一次启动时或者立即)加载图片使其成为背景图片. 下面以具体的 ...

  3. Windows Phone 实用开发技巧(9):自定义Windows Phone 页面切换动画

    在Silverlight for Windows Phone ToolKit 中默认中有自带的页面Transitions:RollTransition.RotateTransition.SlideTr ...

  4. Windows Phone 实用开发技巧(3):输入框自动聚焦并打开SIP

    大家看到这个标题,可以会问什么是SIP(看过我Windows Phone 7 Tips系列的童鞋应该知道),SIP全称为Soft Input Panel,即触摸屏中的输入键盘. 在Windows Ph ...

  5. Windows Phone 实用开发技巧(18):使用SystemTray显示全局消息提醒

    在Windows Phone 7 (Nodo)之前的版本中,我们要在应用程序显示消息提醒,或者是进度提示,通常的做法在页面的顶部放置一个专门的容器(如一个Grid),里面放置一些文本和Performa ...

  6. caps lock_如何在Windows 7、8、10或Vista中禁用Caps Lock键

    caps lock The caps lock key is a remnant of typewriters dating from the nineteenth century. Unless y ...

  7. 屌丝笔记本玩Windows Phone 8开发(在Windows Server 2012中安装WP8 SDK)

    众所周知,Windows Phone 8模拟器需要Hyper-V支持,而Win8安装Hyper-v需要cpu的虚拟化支持二级地址转换技术(SLAT). 对于intel而言,支持SLAT的cpu必须是至 ...

  8. 在Windows 7、8、10、11中恢复Word文件的简单方法

    "急急急!我使用快捷键"Shift + Delete"从我的电脑中删除了一些Word文件.但是我现在急需找回删除的Word文件,但我在回收站中找不到它们,并且我以前也没有 ...

  9. IOS开发笔记10-Object-C中的对象

    转载请标明出处: http://blog.csdn.net/hai_qing_xu_kong/article/details/53513004 本文出自:[顾林海的博客] 前言 关于c语言的基础部分已 ...

最新文章

  1. 区块链技术之以太坊ETH白皮书
  2. cd命令无法切换路径(Windows下)
  3. 全球首款AI的操作系统来了!100%国产,像用Windows一样简单
  4. [Ruby编程语言].弗拉纳根_松本行弘读书笔记
  5. MongoDB对文档的操作
  6. 集群中几种session同步解决方案的比较[转]
  7. 初中计算机vb知识点,全国计算机等级考试VB知识点总结(全部).docx
  8. linux操作系统之读写锁
  9. linear在HTML的作用,CSS3里的linear-gradient()函数
  10. 小波阈值去噪原理及实现
  11. SAP License:瞎搞!你真的懂什么是ERP、中台和低代码吗?
  12. jquery各类资源整理
  13. 5. Linux 设备文件名
  14. android软件开发 开题报告,基于Android手机app开发与设计 毕业设计 开题报告
  15. 计算机中8位二进制机器数,一个字节由8位二进制数组成,其最大容纳的十进制整数为()...
  16. 修改Ceph 监视器地址
  17. mercury MW300R(mt7620n)GPIO研究
  18. 求求你们了,有什么能搞钱的副业
  19. 数据只有被交换共享,才能创造价值 | 推荐收藏
  20. 跟李沐学AI:实用机器学习 | 第一章

热门文章

  1. SQL 注入详解扫盲
  2. [MySQL] 索引与性能(3)- 覆盖索引
  3. 用MXnet实战深度学习之二:Neural art
  4. 医学图像分割研究思路
  5. 学生如何提高专业英文阅读能力--施一公教授
  6. 算法分析中递推式的一般代数解法
  7. Day 23:使用 TimelineJS 构建精美的时间轴
  8. Day 13: Dropwizard —— 非常棒的Java REST服务器栈
  9. linux基础知识复习
  10. zabbix snmp 协议监控 dell iRDAC