windows phone WriteableBitmap类的使用

什么时候使用WriteableBitmap,什么时候不要用

直到几年前,无论什么时候需要修改位图的像素,人们往往都会选择类似于WriteableBitmap的基于CPU运行的方案。但是,如今GPU越来越好了,人们渐渐开始使用shader effect。请记住,使用WriteableBitmap编写的代码运行在CPU上,假如你需要针对每个像素分别进行操作,就不得不按照顺序遍历所有像素。大多数Windows Phone目前只有一个单核的CPU,所以同一时刻只有一个像素可以被处理。与此相对的,GPU可以同时操作很多很多像素。此外,很多场合下使用HLSL相比起使用WriteableBitmap,算法都可以得到简化,因为你只需要考虑一个特定的像素,而不需要考虑当前在第几个像素,从像素列表中获得当前像素的颜色,通过位移运算转换成ARGB格式,等等。

所以,假如Windows Phone支持HLSL,我们强烈推荐大家使用HLSL而不是WriteableBitmap。很遗憾,目前Windows Phone并不支持HLSL......因此,我们推荐大家在Windows Phone上使用WriteableBitmap来实现一些运算不是很复杂,不需要太多CPU资源的操作,并且只要有可能,就将代码逻辑放在后台线程上运行。此外,如果你需要同时支持Windows Phone和Windows 8 Metro,你需要针对位图操作部分写两套代码。在Windows Phone中使用用WriteableBitmap,在Windows 8中,你可以通过DirectX使用所有shader effect的功能,从而不借助CPU,而是通过GPU完成所需操作。出于篇幅考虑,本文不会介绍Windows 8。

除此之外,即使在支持shader effect的平台上,偶尔WriteableBitmap还是有用的。有些功能很难使用shader effect来完成。例如,如果一个针对像素的操作依赖于另外一个像素操作后的结果,从而必须一个个像素按顺序进行操作,就不太适合使用shader effect了。Shader effect适用于对所有像素使用相似的操作(注意并不是相同),你可以传入一些参数,例如使用shader effect可以方便地制作一个旋涡效果,你可以使用同样的逻辑配合不同的参数让GPU同时处理所有像素。但是用某一颜色(或者渐变刷)填充某一区域,就不是那么简单了。

在以下场合下请考虑使用WriteableBitmap:

  • 平台不支持shader effect,例如Windows Phone。
  • 平台支持shader effect,但是你必须支持很老很老的显卡,例如六七年前购买的电脑。
  • 你的算法要求一个个按顺序处理像素。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值