| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Как сделать, чтобы у картинки был формат RGB565? |
| Автор: =Женек= 1.5.2015, 07:27 | ||
| Господа, кидаю на форму Image. Далее из массива заполняю канву
Источник данных в массиве - сигнал с камеры. Получаю неадекватную по цветам картинку. Долгие эксперименты показали, что если настроить камеру на выдачу сигнала RGB555, а не 565, то цвета правильные. То есть буфер декодируется как RGB555. Как перенастроить? |
| Автор: SVN74 2.5.2015, 21:31 |
| Если Вам просто надо смотреть на себя в камеру используйте просто "capPreview" с указанием места (панели) в GDI, кстати там же можно и получить всю картинку как RGB. А если Вам нужно выполнить более сложную задачу (захват кадра -> упаковка -> передача -> распаковка -> отображение), то нужно задействовать функцию "ICCompress" для которой у всех камер идет стандартный захват (YUV поток) для дальнейшей упаковки, Вы конечно можете перевернуть его в RGB формат, но тут начнутся проблемы совместимости вашей программы с другими камерами, - далеко не все камеры поддерживают захват в RGB. Далее упакованный поток вы сможете с легкостью распаковать в RGB с помощью функции "ICDecompress"... |
| Автор: =Женек= 3.5.2015, 08:10 |
| ниче не понял.. За альтернативный путь спасибо, но вы можете мне объяснить именно то, о чем я спросил? |
| Автор: Pavia 3.5.2015, 09:42 |
| =Женек=, Считайте, что это физическое ограничения, данной интегральной схемы камеры. И поменять вы их не сможете кроме как перепаять транзисторы в чипе. Берите поток по умолчанию. А после декодируйте в нужный вам формат. Во-вторых так вопрос не задают. Что за камера? Какой библиотекой для захвата пользуетесь? И самое главное для чего вам нужно перекодировать в такой экзотичный формат? Вообще не понятно что вы хотите получить! |
| Автор: =Женек= 3.5.2015, 11:41 | ||||
| Да вы не поняли. Камера и чип тут ни при чем. Они генерируют формат, какой скажешь. Я еще до того как камера приехала экспериментировал - заполнял массив ВРУЧНУЮ в соответствии с форматом RGB565. Просто нарисовал 3 региона - красный, синий, зеленый и отправил буфер по USB. На входе (в софте) проверил - действительно поступившие данные в формате RGB565. Вот только цвета были какие-то темные. Я не придал этому значения. И лишь когда полноцветная картинка пошла с искажениями цвета, стал копать. И накопал, что если камеру настроить на RGB555, или цветовые столбцы забить в массив вручную в формате 555, то картинка отображается как надо. Если же массив данных формата RGB565 (а его целостность на входе, то есть в софте компа подтверждена) залить указанным в первом посте кодом на канву, то получаем картинку искаженного цвета. Иными словами, если я настраиваю камеру в режим 555 и получаю на канве картинку с правильными цветами, то вывод очевиден - канва работает в режиме 555, несмотря на то что я указал 16-ти а не 15-ти битный режим.
Камера OV7670 Захват аппаратный - DCMI интерфейс контроллера STM32F407 Передача - USB CDC Прием - свой собственный софт, который принимает буфер и заливает им канву. Еще раз говорю - именно на заливке канвы проблемы. Принимаю буфер в котором пара байт означающих цвет, выглядит 11111 000000 00000 или 00000 111111 00000 или 000000 000000 11111 то есть чистокровные цвета. Затем заливаю канву и анализирую какого цвета в нем пиксели - получаю что и в красном и в синем и в зеленом основного цвета не на 100 процентов, а есть примеси других составляющих. Добавлено @ 11:48
Объясню на пальцах. Допустим, у меня буфер, состоящий из пикселей только зеленого цвета. То есть 00000 111111 00000 Иным словами первый байт 0х07, второй 0xE0 - и так весь буфер. Хочу указанным в первом посте кодом залить этот буфер на канву и получить картинку, сохранив и открыв которую скажем в фотошопе мы получим спектр 0,255,0, а не 0,198,56 как у меня. |