Еще одна проблема с ходом - PullRequest
0 голосов
/ 12 июля 2019

Согласно документации шаг для создания растрового изображения из байтового массива должен быть:

Шаг - это ширина одного ряда пикселей (строки сканирования),округляется до четырехбайтовой границы.Если шаг положительный, растровое изображение идет сверху вниз.Если шаг отрицательный, изображение растёт снизу вверх.

У меня есть 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: enter image description here

Как выглядит "искаженное" изображение: enter image description here

1 Ответ

0 голосов
/ 12 июля 2019

Решено!

Ключом было понимание того, как работает шаг.Так как у меня был правильный шаг, я начал искать в другом месте.В результате я передал массив с неправильным значением для создания растрового изображения.Значения должны иметь значения для температуры:

23.5, 25.2, 29.8 ...

Фактически передаваемые значения были в диапазоне тысяч ... 7501, 7568, 7592 ...

Мусор в,мусор ...

Бредовые мысли: мне нужно научиться настраивать модульные тесты при выполнении подобных вещей.Проверка юнитов проста, когда вы тестируете что-то вроде метода для вычисления окружности круга.Я думаю, мне нужно найти способ настроить файл необработанных данных, который имитирует необработанные данные с камеры, и провести его через все преобразования, чтобы получить изображение.

Спасибо за вашу помощь.

...