Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Формат изображения видеокамеры


Автор: PAG 16.5.2011, 07:45
Есть промышленная видеокамера с пакетом поддержки (SDK).
Но все описание пакета и комплектные к нему примеры заканчиваются получением указателя на буфер с пикселями из видеокамеры.
Где найти описание формата буфера изображения?
Ясно, что он зависит от конфигурации параметров камеры. Но они известны.
Как слить этот буфер в стандартный битмап или файл стандартного формата?

Пробовал CreateBitmapIndirect с подстановкой структуры BITMAP всяческого содержания.
Получаю только пустоту.
Кому-нибудь приходилось решать подобную задачку?

Автор: GremlinProg 16.5.2011, 09:13
Цитата(PAG @  16.5.2011,  09:45 Найти цитируемый пост)
Ясно, что он зависит от конфигурации параметров камеры. Но они известны.

известны, значит их здесь можно перечислить?

иначе такой ответ тоже верный: http://www.google.com/search?q=%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82+%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F

но для DIB-ов, например, по-моему самый удобный способ - через SetDIBitsToDevice

Автор: PAG 16.5.2011, 11:00
Известны - в том смысле, что я знаю что это, например монохром 8 бит. Но я не знаю как они упакованы в буфере.
Во всяком случае, я попытался описать буфер в структуре BITMAP и создать битмап через CreateBitmapIndirect, подставив ему указатель на биты изображения, из возвращаемого функцией API камеры.
Почему-то битмап получается пустой.
Возможно я не создал ему палитру (вроде битмап в каких-то случаях ее использует).
Но как ее сосздать для скажем нецветного изображения пока не разобрался.
Я рассмотрел, что файлы формата BMP хранят серые изображения с палитрой.
А если скажем в графическом редакторе создать изображение типа Grayscale, то его сохранить в BMP уже не получится.
Получается, что структура битмапа для Grayscale не пригодна?
Вот тут я и запутался.
Каким путем действовать?

Автор: mekhanikus 16.5.2011, 12:17
Если известны конфигурации камеры и размер буфера,
можно, для начала, попытаться тупо вручную побайтно скопировить буфер в какой-нибудь битмап.
Например, грейскал 8 бит - 800х600, значит - 1 байт - 1 пиксел.
Создаем битмап 800х600, копируем 800 байт в первую сторку, следующие 800 во вторую и т.д.

Автор: GremlinProg 16.5.2011, 13:55
Цитата(PAG @  16.5.2011,  13:00 Найти цитируемый пост)
Каким путем действовать?

ну, если точно известно, что это именно DIB,
то можно подобрать, каким методом упакованы данные, для этого есть поле biCompression и 2-3 варианта его значений
+ нужно обязательно знать разрешение камеры (ширину и высоту), чтобы подставить их в BITMAPINFOHEADER

палитра цветов указывается после заголовка BITMAPINFOHEADER
ее длина зависит от разрядности DIB'а и/или значения biClrUsed (для 8бит - это не более 256 цветов и не менее 1)
в конечном счете, ее можно "забросать мусором",
на содержимое кадра палитра не влияет, она влияет только на его окрас

вобщем, я бы посоветовал еще раз перечитать документацию ( либо выложить ее здесь ),
и четко определить, в каком начальном формате выдается "буфер с пикселями",
остальное уже дело техники

Автор: PAG 16.5.2011, 15:54
Цитата(GremlinProg @ 16.5.2011,  13:55)
Цитата(PAG @  16.5.2011,  13:00 Найти цитируемый пост)
Каким путем действовать?

ну, если точно известно, что это именно DIB,
то можно подобрать, каким методом упакованы данные, для этого есть поле biCompression и 2-3 варианта его значений
+ нужно обязательно знать разрешение камеры (ширину и высоту), чтобы подставить их в BITMAPINFOHEADER

Да нет, точно не DIB.
Первый байт буфера является первым пикселом изображения.
В файл битмапа записывать планировал.
Но обжегся, как писал, что формат BMP палитровый.
А у меня картинка без палитры.
Как с ней поступить пока не понял.
Думаю BMP формат не проходит, поскольку каждый пиксел - 0..255 без палитры.
Вроде этот формат такого не поддерживает.
Может быть ошибаюсь.


Автор: ASMatic 16.5.2011, 18:26
PAG, bmp = самый простой формат, т.е. приближенный по максимум к массиву пикселов, то что ему хедер нужен = да, но тотже хедер нужен и в остальных форматах.
погуглите же - второй линк по кейворду "спецификация bmp"
http://viledogsoftware.3dn.ru/publ/4-1-0-3
создали хедеры и т.п. - указали где пиксели, вот вам и картинка

Автор: PAG 17.5.2011, 12:00
Спасибо, так и сделал.
Видимо какие-то поля в описаниях были не совсем корректны.
Долго сравнивал с описаниями в правильных файлах.
Сейчас все заработало.

Тема закрыта

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)