【问题标题】:where did PixelFormats and WriteableBitmap.Lock go in Silverlight3?Silverlight3 中的 PixelFormats 和 WriteableBitmap.Lock 去了哪里?
【发布时间】:2009-12-01 16:33:32
【问题描述】:

几个月前,我构建了一些在线示例,例如 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 的工作示例?

【问题讨论】:

    标签: silverlight silverlight-3.0 writeablebitmap


    【解决方案1】:

    关于切换到新的 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
    

    【讨论】:

      【解决方案2】:

      如果你不使用LockUnlock 而只使用WritabelBitmap(int, int) 构造函数会发生什么?东西坏了吗?

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

      【讨论】:

      • 谢谢,更改文档澄清了事情。 (唉,我只是得到一个空白屏幕,但这可能是因为 Bgr32/Pbgra32 的差异,或者完全是其他原因。)
      猜你喜欢
      • 1970-01-01
      • 2016-01-29
      • 2016-12-07
      • 1970-01-01
      • 2014-02-02
      • 2011-11-03
      • 2014-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多