3
以下代碼在訪問最後一個像素(x = 255,y = 255)時總是在Fill方法中導致AccessViolationException。但是,如果我使用200x200這樣的大小,它就可以工作。 512 x 512或1024 x 1024或其他冪級別的尺寸也是同樣的問題(似乎可以在4x4,8x8 ...高達32 x 32的範圍內正常工作)。任何想法,爲什麼這是?WriteableBitmap訪問衝突問題
var wb = new WriteableBitmap(256, 256, 96, 96, PixelFormats.Bgr24, null);
wb.Fill(256, 256, 3, Colors.Black);
...
public static void Fill(this WriteableBitmap bmp, int width, int height, int bytesPerPixel, Color color)
{
var rect = new Int32Rect(0, 0, width, height);
var fillColor = color.ToInt();
bmp.Lock();
unsafe
{
int pBackBuffer = (int)bmp.BackBuffer;
int stride = bmp.BackBufferStride;
for (int y = 0; y < height; y++)
for (int x = 0; x < width; x++)
{
int offset = y * stride + x * bytesPerPixel;
int pBackBufferWithOffset = pBackBuffer + offset;
*((int*) pBackBufferWithOffset) = fillColor;
}
}
bmp.AddDirtyRect(rect);
bmp.Unlock();
}
private static int ToInt(this Color color)
{
int c = color.R << 16; // R
c |= color.G << 8; // G
c |= color.B << 0; // B
return c;
}
(1)真正的問題,(2)是不。 –
謝謝你,兩個有效和優點。 (1)確實是我的問題,改變你的建議解決了我的問題。在我的情況下乘以3是可以的,因爲我知道在PixelFormats.Bgr24的情況下BitsPerPixel將是24。謝謝! – slurmomatic