Windows Phone 资源图片使用(2)
2012-05-29 10:36
281 查看
1.4 限制图片大小
受限于手机有限存储(WP7上一个应用程序可使用的内存不能超过90M,否则程序会自动退出并且不报任何异常信息)和屏幕分辨率,另一个优化性能的方法是限制图片大小在2000*2000以内,这也是WP7环境下图片的大小上限。更大的图片应在低分辨率下取样后再显示,如果图片大于2000*2000其显示会明显减慢。
如果必须使用2000*2000以上的图片,那么应该每次只显示图片的一部分。你可以通过先将图片载入到一个T:System.Windows.Media.Imaging.WriteableBitmap中,然后使用LoadJpeg(WriteableBitmap, Stream)扩展方法来载入图片。以下代码示范了载入大图片的推荐方法。
XAML代码
<Grid x:Name="ContentGrid" Grid.Row="1">
<Image Height="3000" HorizontalAlignment="Left" Margin="6,6,0,0" Name="largeimage" Stretch="Fill" VerticalAlignment="Top" Width="3000" />
<Button Content="加载图片" Height="70" HorizontalAlignment="Left" Margin="159,501,0,0" Name="btnLoad" VerticalAlignment="Top" Width="152" Click="btnLoad_Click" />
</Grid>
复制代码
C#代码
/// <summary>
/// 加载图片
/// </summary>
private void btnLoad_Click(object sender, RoutedEventArgs e)
{
StreamResourceInfo sri = null;
Uri uri = new Uri("Devdiv_LoadingLargeImages;component/img/sky.JPG", UriKind.Relative);
sri = Application.GetResourceStream(uri);
WriteableBitmap wb = new WriteableBitmap((int)this.largeimage.Width, (int)this.largeimage.Height);
Extensions.LoadJpeg(wb, sri.Stream);
this.largeimage.Source = wb;
}
复制代码
1.5 BuildAction选择“Content”还是“Resource”
有时候在你的程序中会附带一些图片、音乐、视频文件等等,这些文件的BuildAction可以设置为“Content”然后作为独立大的文件来访问,也可以设置为“Resource”把它们作为资源文件读取。那么哪种方式好呢?
微软给出的建议是使用”Content”要比“Resource”性能上好一些。因为Windows Phone 7是为文件和网络流做了优化处理,但是Memory流却没有。设置成Content类型,这些文件将会作为独立的文件存在XAP包中,如果设置为Resource,它们会被编译到dll中,如果把这些文件设置为Resource方式的话,它们实际上在回放的时候还需要读取出来放到文件中,反而降低了性能。所以,如果你的程序中有大量的媒体文件的话,要想性能好,还是把它们的BuildAction设置为“Content”比较好一些。大文件建议吧BuildAction设置为“Resource”,借助LoadJpeg(WriteableBitmap,
Stream)扩展方法来载入大图片,前面已经说到。
2012-3-2 10:23:10 上传
下载附件
(72.29 KB)
BuildAction选项设置
1.6 删除对象节约内存
WP7上一个应用程序可使用的内存不能超过90M,否则程序会自动退出并且不报任何异常信息。
同时,WP7上使用image会占用大量内存,不论是在UI上添加Image控件还是为Panorama控件设置图像背景。 因此,为了节约内存,可以在需要的时候手动释放不再需要的Image控件,如果你觉得垃圾收集不好用的话。
下面三种方法都能释放内存,但是第一种方法并没有完全释放,还保存了几十K的信息,估计是用于恢复图像显示的。
1.Image_Logo.Visibility = System.Windows.Visibility.Collapsed;
2.LayoutRoot.Children.Remove(Image_Logo);
3.Image_Logo.Source = null;
复制代码
注意:如果Image是在XAML文件里定义的,则用上述方法是不起作用的。
受限于手机有限存储(WP7上一个应用程序可使用的内存不能超过90M,否则程序会自动退出并且不报任何异常信息)和屏幕分辨率,另一个优化性能的方法是限制图片大小在2000*2000以内,这也是WP7环境下图片的大小上限。更大的图片应在低分辨率下取样后再显示,如果图片大于2000*2000其显示会明显减慢。
如果必须使用2000*2000以上的图片,那么应该每次只显示图片的一部分。你可以通过先将图片载入到一个T:System.Windows.Media.Imaging.WriteableBitmap中,然后使用LoadJpeg(WriteableBitmap, Stream)扩展方法来载入图片。以下代码示范了载入大图片的推荐方法。
XAML代码
<Grid x:Name="ContentGrid" Grid.Row="1">
<Image Height="3000" HorizontalAlignment="Left" Margin="6,6,0,0" Name="largeimage" Stretch="Fill" VerticalAlignment="Top" Width="3000" />
<Button Content="加载图片" Height="70" HorizontalAlignment="Left" Margin="159,501,0,0" Name="btnLoad" VerticalAlignment="Top" Width="152" Click="btnLoad_Click" />
</Grid>
复制代码
C#代码
/// <summary>
/// 加载图片
/// </summary>
private void btnLoad_Click(object sender, RoutedEventArgs e)
{
StreamResourceInfo sri = null;
Uri uri = new Uri("Devdiv_LoadingLargeImages;component/img/sky.JPG", UriKind.Relative);
sri = Application.GetResourceStream(uri);
WriteableBitmap wb = new WriteableBitmap((int)this.largeimage.Width, (int)this.largeimage.Height);
Extensions.LoadJpeg(wb, sri.Stream);
this.largeimage.Source = wb;
}
复制代码
1.5 BuildAction选择“Content”还是“Resource”
有时候在你的程序中会附带一些图片、音乐、视频文件等等,这些文件的BuildAction可以设置为“Content”然后作为独立大的文件来访问,也可以设置为“Resource”把它们作为资源文件读取。那么哪种方式好呢?
微软给出的建议是使用”Content”要比“Resource”性能上好一些。因为Windows Phone 7是为文件和网络流做了优化处理,但是Memory流却没有。设置成Content类型,这些文件将会作为独立的文件存在XAP包中,如果设置为Resource,它们会被编译到dll中,如果把这些文件设置为Resource方式的话,它们实际上在回放的时候还需要读取出来放到文件中,反而降低了性能。所以,如果你的程序中有大量的媒体文件的话,要想性能好,还是把它们的BuildAction设置为“Content”比较好一些。大文件建议吧BuildAction设置为“Resource”,借助LoadJpeg(WriteableBitmap,
Stream)扩展方法来载入大图片,前面已经说到。
2012-3-2 10:23:10 上传
下载附件
(72.29 KB)
BuildAction选项设置
1.6 删除对象节约内存
WP7上一个应用程序可使用的内存不能超过90M,否则程序会自动退出并且不报任何异常信息。
同时,WP7上使用image会占用大量内存,不论是在UI上添加Image控件还是为Panorama控件设置图像背景。 因此,为了节约内存,可以在需要的时候手动释放不再需要的Image控件,如果你觉得垃圾收集不好用的话。
下面三种方法都能释放内存,但是第一种方法并没有完全释放,还保存了几十K的信息,估计是用于恢复图像显示的。
1.Image_Logo.Visibility = System.Windows.Visibility.Collapsed;
2.LayoutRoot.Children.Remove(Image_Logo);
3.Image_Logo.Source = null;
复制代码
注意:如果Image是在XAML文件里定义的,则用上述方法是不起作用的。
相关文章推荐
- Windows Phone 资源图片使用 (1)
- ios framework 使用图片资源
- 使用KRPano资源分析工具还原全景图片
- Android 使用Vector XML文件创建矢量图片资源
- [2011.12.03] Windows Phone 系统界面资源使用与中文字体显示优化
- cocos2dx 3.0 使用TexturePacker对图片资源加密
- IOS的UITextField,UIButton,UIWebView的一些属性介绍和IOS图片资源的使用技巧
- Windows Phone 7 定义和使用字典资源(ResourceDictionary)
- Qt中(图片)资源的使用方式
- 使用asset catalog管理图片资源
- mediawiki扩展:使用本地资源批量上传图片
- Android的图片,字符串,demin,color,以及Array,boolean,Integer资源的使用-android学习之旅(五十四)
- 一、创建Assetbundle 在unity3d开发的游戏中,无论模型,音频,还是图片等,我们都做成Prefab,然后打包成Assetbundle,方便我们后面的使用,来达到资源的更新。
- windows Mobile 开发中使用嵌入的图片等资源
- Android 如何使用网络图片资源
- Windows Phone 8.1 App 图片资源需求列表
- 使用SQLite存取图片资源
- android 自定义图片资源的使用(1)
- QT图片资源的加载与使用
- Windows Phone 7 定义和使用字典资源(ResourceDictionary)