Манипулирование пикселями WritableBitmapEx
Каков быстрый подход к манипулированию пикселями в WritableBitmap (я также использую расширения WritableBitmapEx)? SetPixel - очень медленный метод для таких вещей, как заполнение фона для моего приложения, похожего на Paint, а также для некоторых странных вещей, таких как повреждение памяти (не знаю почему).
1 ответ
Решение
SetPixel очень медленный - это правда. Вы должны использовать метод LockBits, а затем итерировать все пиксели, используя небезопасный код (указатели на пиксели).
образец:
// lock the bitmap.
var data = image.LockBits(
new Rectangle(0, 0, image.Width, image.Height),
ImageLockMode.ReadWrite, image.PixelFormat);
try
{
unsafe
{
// get a pointer to the data.
byte* ptr = (byte*)data.Scan0;
// loop over all the data.
for (int i = 0; i < data.Height; i++)
{
for (int j = 0; j < data.Width; j++)
{
operate with pixels.
}
}
}
}
finally
{
// unlock the bits when done or when
// an exception has been thrown.
image.UnlockBits(data);
}
Я предлагаю вам прочитать статью