Согласно документации шаг для создания растрового изображения из байтового массива должен быть:
Шаг - это ширина одного ряда пикселей (строки сканирования),округляется до четырехбайтовой границы.Если шаг положительный, растровое изображение идет сверху вниз.Если шаг отрицательный, изображение растёт снизу вверх.
У меня есть byteArray для изображения размером 640 x 512 пикселей.Массив байтов создается из буфера массива, поступающего с живой камеры.Я создаю образ в первый раз.Формат изображения - PixelFormat.Format24bppRgb, поэтому по одному байту на красный, зеленый и синий получается три байта на пиксель.Это делает одну строку изображения 640 * 3 байта = 1920 байтов.Проверяя, делится ли это на четыре, я получаю 1,920 / 4 = 480.
Когда я использую шаг 640 * 3 = 1,920, я получаю плохой результат (искаженное изображение).Что я делаю не так?
Я проверил, что мой byteArray имеет правильное количество элементов и выглядит правильно.Мой код выглядит так:
int stride = 1920;
using (Bitmap image = new Bitmap(640, 512, stride, PixelFormat.Format24bppRgb, new IntPtr(ptr)))
{
return (Bitmap)image.Clone();
}
РЕДАКТИРОВАТЬ Звучит так, будто шаг в 1920 году верен, и вы все подтверждаете, что я понимаю, как работает шаг.На данный момент я предполагаю, что мое расположение пикселей (ARGB VS RGB или что-то в этом роде) неверно.
Вот так должно выглядеть изображение (используя бесплатную программу просмотра GenIcam:
Как выглядит "искаженное" изображение: