WriteableBitmap.WritePixels - >缓冲区大小不足

时间:2016-01-08 17:38:40

标签: c# bitmap

我正在研究一个mandelbrot分形渲染器并设法使基本版本正常工作。作为下一步,我尝试以块的形式写入位图,以便用户获得更快的反馈。这样做,我在WriteableBitmap上调用WritePixels方法时遇到错误(“缓冲区大小不够”)。

var bytesPerPixel = _bitmap.Format.BitsPerPixel/8;
var stride = _bitmap.PixelWidth*bytesPerPixel;
var imageBytes = new byte[stride*_bitmap.PixelHeight];
var chunks = _bitmap.PixelHeight;
var chunkSize = _bitmap.PixelWidth;
for (var chunk = 0; chunk < chunks; chunk++)
{
    var chunkPixelIndex = chunk*chunkSize;
    for (var pixel = chunkPixelIndex; pixel < chunkPixelIndex+chunkSize; pixel++)
    {
        ColorPixel(pixel, bytesPerPixel, imageBytes);
    }
    var imageRect = new Int32Rect(0, 0, _bitmap.PixelWidth, _bitmap.PixelHeight);
    _bitmap.WritePixels(imageRect, imageBytes, stride, chunkPixelIndex*bytesPerPixel);
}

这是用于比较的代码的最后一个已知工作版本:

var bytesPerPixel = _bitmap.Format.BitsPerPixel/8;
var stride = _bitmap.PixelWidth*bytesPerPixel;
var imageBytes = new byte[stride*_bitmap.PixelHeight];
var numberOfPixels = _bitmap.PixelWidth*_bitmap.PixelHeight;
for (var pixel = 0; pixel < numberOfPixels; pixel++)
{
    ColorPixel(pixel, bytesPerPixel, imageBytes);
}
var imageRect = new Int32Rect(0, 0, _bitmap.PixelWidth, _bitmap.PixelHeight);
_bitmap.WritePixels(imageRect, imageBytes, stride, 0);

编辑:使用调试器我已经确定代码第一次抛出的时候是调用WritePixels时偏移量为4320(1080 * 4)。 imageBytes的大小为3110400,所以我真的不知道它的大小是不够的。我只是公然误解了这个api?

0 个答案:

没有答案