如何避免 Bgr24 格式的“WriteableBitmap 缓冲区大小不足”异常?

How to avoid `WriteableBitmap buffer size is not sufficient` exception for Bgr24 format?

我想创建一个 WriteableBitmap,然后将其设置为 Image.Source。我只对完全不透明的 RGB 感兴趣,所以我选择了 Bgr24 格式。

现在,当我尝试将一些像素写入位图时,使用 WritePixels() 我得到 缓冲区大小不足 异常。

 wb = new WriteableBitmap(255, 255, 96d, 96d, PixelFormats.Bgr24, null);

            for (int x = 0; x < wb.PixelWidth; x++)
            {
                for (int y = 0; y < wb.PixelHeight; y++)
                {
                    byte blue = GetBlue();
                    byte green = GetGreen();
                    byte red = GetRed();
                    byte[] pixelColor = { blue, green, red };

                    // position where the pixel will be drawn
                    Int32Rect rect = new Int32Rect(x, y, 1, 1);
                    int stride = wb.PixelWidth * wb.Format.BitsPerPixel / 8;

                    // Write the pixel.
                    wb.WritePixels(rect, pixelColor, stride, x);
                }
            }

这是我的问题,pixelColor 大小(3 字节)是否足以进行该操作?

编辑

仅当我将 WriteableBitmap 初始化为 1 的 widthheight 时才有效。

 wb = new WriteableBitmap(255, 255, 96d, 96d, PixelFormats.Bgr24, null); 

rect尺寸有问题吗?

您错误地使用 x 作为输入缓冲区偏移量,它应该为零:

wb.WritePixels(rect, pixelColor, stride, 0);

您也可以直接使用 xy 作为目标值,并使用适当的源矩形和步幅,例如

wb.WritePixels(new Int32Rect(0, 0, 1, 1), pixelColor, 3, x, y);