PixelFormats和WriteableBitmap.Lock在Silverlight3中的位置是什么?

时间:2009-12-01 16:33:33

标签: silverlight silverlight-3.0 writeablebitmap

几个月前,我构建了一些像this one from Jeff Prosise这样的在线示例,它们使用Silverlight中的WriteableBitmap类。

今天使用最新的Silverlight3安装程序(3.0.40624.0)重新访问它们,API似乎已经发生了变化。

我想出了一些变化。例如,WriteableBitmap数组访问器已经消失,但我在新的Pixels属性中找到它,所以不是写:

 bmp[x]

我可以写

bmp.Pixels[x]

这些调用是否有类似的简单替换,或者使用模式本身是否已更改?

bmp = new WriteableBitmap(width, height, PixelFormats.Bgr32);
bmp.Lock();
bmp.Unlock();

有人能指出我使用更新的API的工作示例吗?

2 个答案:

答案 0 :(得分:2)

关于切换到新WriteableBitmap的另一个重要细节在this answer中给出...因为像素格式现在总是pbgra32,你必须为每个像素设置一个alpha值,否则你只需得到一个全白图片。换句话说,以前生成像素值的代码如下:

byte[] components = new byte[4];
components[0] = (byte)(blue % 256);       // blue
components[1] = (byte)(grn % 256);        // green
components[2] = (byte)(red % 256);        // red
components[3] = 0;                        // unused

应改为:

byte[] components = new byte[4];
components[0] = (byte)(blue % 256);       // blue
components[1] = (byte)(grn % 256);        // green
components[2] = (byte)(red % 256);        // red
components[3] = 255;                      // alpha

答案 1 :(得分:1)

如果您不使用LockUnlock并使用WritabelBitmap(int, int)构造函数,会发生什么?事情破了吗?

似乎在SL3 Beta和发布之间这个API发生了变化。 See Breaking Changes Document Errata (Silverlight 3)