Я работаю с кодом обработки изображений в C #. Поскольку производительность критична, я делаю это в небезопасном коде с указателями.
Вот мой код перед моим вопросом:
Rectangle Image_Rectangle = new Rectangle(0, 0, MyImage.Width, MyImage.Height);
BitmapData Image_Data = MyImage.LockBits(Image_Rectangle, ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
// ... x and y nested for-loops to work with each pixel
Byte* PixelRow = (Byte*)Image_Data.Scan0 + (y * Image_Data.Stride);
Когда у меня есть вышеуказанный байт-указатель, я могу установить его значения следующим образом:
PixelRow[(x * 3) + 2] = 255;
PixelRow[(x * 3) + 1] = 255;
PixelRow[(x * 3)] = 255;
Однако я бы предпочел обращаться к ним как к массиву:
Byte[] RGB = { PixelRow[(x * PIXEL_SIZE) + 2], PixelRow[(x * PIXEL_SIZE) + 1], PixelRow[(x * PIXEL_SIZE) + 0] };
RGB[0] = 255;
RGB[1] = 255;
RGB[2] = 255;
Проблема в том, что когда я пытаюсь присвоить значение, я чувствую, что больше не работаю с указателем. Как только я разблокирую биты, результирующее растровое изображение не изменяется (при использовании метода массива).
Я довольно новичок в указателях, кто-нибудь может объяснить, что происходит и как правильно поддерживать указатели с помощью массива?