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

简介:

 在开发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,如需转载请自行联系原作者



相关文章
|
10天前
|
计算机视觉 Windows Python
windows下使用python + opencv读取含有中文路径的图片 和 把图片数据保存到含有中文的路径下
在Windows系统中,直接使用`cv2.imread()`和`cv2.imwrite()`处理含中文路径的图像文件时会遇到问题。读取时会返回空数据,保存时则无法正确保存至目标目录。为解决这些问题,可以使用`cv2.imdecode()`结合`np.fromfile()`来读取图像,并使用`cv2.imencode()`结合`tofile()`方法来保存图像至含中文的路径。这种方法有效避免了路径编码问题,确保图像处理流程顺畅进行。
75 1
|
7天前
|
开发者 C# Windows
WPF与游戏开发:当桌面应用遇见游戏梦想——利用Windows Presentation Foundation打造属于你的2D游戏世界,从环境搭建到代码实践全面解析新兴开发路径
【8月更文挑战第31天】随着游戏开发技术的进步,WPF作为.NET Framework的一部分,凭借其图形渲染能力和灵活的UI设计,成为桌面游戏开发的新选择。本文通过技术综述和示例代码,介绍如何利用WPF进行游戏开发。首先确保安装最新版Visual Studio并创建WPF项目。接着,通过XAML设计游戏界面,并在C#中实现游戏逻辑,如玩家控制和障碍物碰撞检测。示例展示了创建基本2D游戏的过程,包括角色移动和碰撞处理。通过本文,WPF开发者可更好地理解并应用游戏开发技术,创造吸引人的桌面游戏。
15 0
|
7天前
|
开发者 iOS开发 C#
Uno Platform 入门超详细指南:从零开始教你打造兼容 Web、Windows、iOS 和 Android 的跨平台应用,轻松掌握 XAML 与 C# 开发技巧,快速上手示例代码助你迈出第一步
【8月更文挑战第31天】Uno Platform 是一个基于 Microsoft .NET 的开源框架,支持使用 C# 和 XAML 构建跨平台应用,适用于 Web(WebAssembly)、Windows、Linux、macOS、iOS 和 Android。它允许开发者共享几乎全部的业务逻辑和 UI 代码,同时保持原生性能。选择 Uno Platform 可以统一开发体验,减少代码重复,降低开发成本。安装时需先配置好 Visual Studio 或 Visual Studio for Mac,并通过 NuGet 或官网下载工具包。
13 0
|
2月前
|
Linux Apache C++
FFmpeg开发笔记(三十五)Windows环境给FFmpeg集成libsrt
该文介绍了如何在Windows环境下为FFmpeg集成SRT协议支持库libsrt。首先,需要安装Perl和Nasm,然后编译OpenSSL。接着,下载libsrt源码并使用CMake配置,生成VS工程并编译生成srt.dll和srt.lib。最后,将编译出的库文件和头文件按照特定目录结构放置,并更新环境变量,重新配置启用libsrt的FFmpeg并进行编译安装。该过程有助于优化直播推流的性能,减少卡顿问题。
70 2
FFmpeg开发笔记(三十五)Windows环境给FFmpeg集成libsrt
|
3月前
|
网络安全 C++ Windows
【Windows驱动开发】(主机)VS2017+(虚拟机)win10系统------双机调试
【Windows驱动开发】(主机)VS2017+(虚拟机)win10系统------双机调试
|
3月前
|
Windows
【Windows驱动开发】注册表的基本操作(创建、打开、修改、读取、枚举)(附源码)
【Windows驱动开发】注册表的基本操作(创建、打开、修改、读取、枚举)(附源码)
|
3月前
|
编解码 Windows
FFmpeg开发笔记(二十九)Windows环境给FFmpeg集成libxvid
XviD是开源MPEG-4视频编码器,与DivX相似但后者非开源。早期MP4常使用XviD或DivX编码,现已被H.264取代。在Windows上集成FFmpeg的XviD编解码库libxvid,需访问<https://labs.xvid.com/source/>下载源码,解压后在MSYS环境中配置、编译和安装。之后重新配置FFmpeg,启用libxvid并编译安装。详细步骤包括configure命令、make和make install。成功后,通过`ffmpeg -version`检查是否启用libxvid。更多音视频开发技术可参考《FFmpeg开发实战:从零基础到短视频上线》。
83 0
FFmpeg开发笔记(二十九)Windows环境给FFmpeg集成libxvid
|
4月前
|
算法 Linux Windows
FFmpeg开发笔记(十七)Windows环境给FFmpeg集成字幕库libass
在Windows环境下为FFmpeg集成字幕渲染库libass涉及多个步骤,包括安装freetype、libxml2、gperf、fontconfig、fribidi、harfbuzz和libass。每个库的安装都需要下载源码、配置、编译和安装,并更新PKG_CONFIG_PATH环境变量。最后,重新配置并编译FFmpeg以启用libass及相关依赖。完成上述步骤后,通过`ffmpeg -version`确认libass已成功集成。
93 1
FFmpeg开发笔记(十七)Windows环境给FFmpeg集成字幕库libass
|
3月前
|
Java Nacos 微服务
Spring Cloud微服务在Windows本地开发时禁用Nacos注册中心注册
Spring Cloud微服务在Windows本地开发时禁用Nacos注册中心注册
|
4月前
|
编解码 5G Linux
FFmpeg开发笔记(二十一)Windows环境给FFmpeg集成AVS3解码器
AVS3是中国首个8K及5G视频编码标准,相比AVS2和HEVC性能提升约30%。解码器libuavs3d支持8K/60P视频实时解码,兼容多种平台。《FFmpeg开发实战》书中介绍了在Windows环境下如何集成libuavs3d到FFmpeg。集成步骤包括下载源码、使用Visual Studio 2022编译、调整配置、安装库文件和头文件,以及重新配置和编译FFmpeg以启用libuavs3d。
76 0
FFmpeg开发笔记(二十一)Windows环境给FFmpeg集成AVS3解码器
下一篇
DDNS