| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > Формат изображения видеокамеры |
| Автор: PAG 16.5.2011, 07:45 |
| Есть промышленная видеокамера с пакетом поддержки (SDK). Но все описание пакета и комплектные к нему примеры заканчиваются получением указателя на буфер с пикселями из видеокамеры. Где найти описание формата буфера изображения? Ясно, что он зависит от конфигурации параметров камеры. Но они известны. Как слить этот буфер в стандартный битмап или файл стандартного формата? Пробовал CreateBitmapIndirect с подстановкой структуры BITMAP всяческого содержания. Получаю только пустоту. Кому-нибудь приходилось решать подобную задачку? |
| Автор: 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 |
ну, если точно известно, что это именно DIB, то можно подобрать, каким методом упакованы данные, для этого есть поле biCompression и 2-3 варианта его значений + нужно обязательно знать разрешение камеры (ширину и высоту), чтобы подставить их в BITMAPINFOHEADER палитра цветов указывается после заголовка BITMAPINFOHEADER ее длина зависит от разрядности DIB'а и/или значения biClrUsed (для 8бит - это не более 256 цветов и не менее 1) в конечном счете, ее можно "забросать мусором", на содержимое кадра палитра не влияет, она влияет только на его окрас вобщем, я бы посоветовал еще раз перечитать документацию ( либо выложить ее здесь ), и четко определить, в каком начальном формате выдается "буфер с пикселями", остальное уже дело техники |
| Автор: PAG 16.5.2011, 15:54 | ||
Да нет, точно не 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 |
| Спасибо, так и сделал. Видимо какие-то поля в описаниях были не совсем корректны. Долго сравнивал с описаниями в правильных файлах. Сейчас все заработало. Тема закрыта |