几个月前,我构建了一些像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的工作示例吗?
答案 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)
如果您不使用Lock
和Unlock
并使用WritabelBitmap(int, int)
构造函数,会发生什么?事情破了吗?
似乎在SL3 Beta和发布之间这个API发生了变化。 See Breaking Changes Document Errata (Silverlight 3)