Исходя из сообщения , я решил эту проблему, изменив способ доступа к BackBuffer.
Код, который не работает с большими изображениями:
writeable.Lock();
IntPtr buff = writeable.BackBuffer;
unsafe
{
byte* pbuff = (byte*)buff.ToPointer();
pbuff[Index * 3 + 0] = (byte)(B);
pbuff[Index * 3 + 1] = (byte)(G);
pbuff[Index * 3 + 2] = (byte)(R);
}
writeable.AddDirtyRect(new Int32Rect(0, 0, writeable.PixelWidth, writeable.PixelHeight));
writeable.Unlock();
Рабочий код:
writeable.Lock();
unsafe
{
long pBackBuffer = (long)writeable.BackBuffer;
int stride = writeable.BackBufferStride;
int offset = (int)(RelativeY * stride + RelativeX * 3);
long pBackBufferWithOffset = pBackBuffer + offset;
*((byte*)pBackBufferWithOffset + 0) = (byte)(B);
*((byte*)pBackBufferWithOffset + 1) = (byte)(G);
*((byte*)pBackBufferWithOffset + 2) = (byte)(R);
}
writeable.AddDirtyRect(new Int32Rect(0, 0, writeable.PixelWidth, writeable.PixelHeight));
writeable.Unlock();
с возможностью записи. Пиксель Ширина ИЛИ ( int ) writeable.Width - не имеет значения.
Важно использовать это - long , а не это - int .