Манипулирование пикселями 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);
}

Я предлагаю вам прочитать статью

Другие вопросы по тегам