Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.03.2012, 09:57   #11
Aleksandr_59
Пользователь
 
Регистрация: 14.10.2011
Сообщений: 77
По умолчанию

Частично решил задачу через сообщение вебке

SendMessage(hWndC, WM_CAP_SET_CALLBACK_FRAME, 0, Integer(@FrameCallback));

но операция

StretchDIBits(DC, 0, 0, 640, 480, 0, 0, status.uiImageWidth, status.uiImageHeight, lpVHdr.lpData, bt, 0, SRCCOPY);

в функции обратного вызова не работает. Насколько я понял, проблема в формате данных, передаваемых функции через параметр lpVHdr.lpData. Объём данных изображения в структуре соответствует 16 битам на пиксел, хотя сообщение

SendMessage(hWndC, WM_CAP_GET_STATUS, SizeOf(status), Integer(@status));

переданное веб-камере возвращает 24 бита на пиксель. И окно настроек свойств в системе даёт нормальную картинку.
Заморачиваться особенно не буду, преобразую как нибуди неполноценно цветную картинку в серый цвет и обработаю. Не художественная фотография.
Aleksandr_59 вне форума Ответить с цитированием
Старый 23.03.2012, 10:05   #12
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
неполноценно цветную картинку
24-бита это как раз и есть вполне полноцвет.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 23.03.2012, 10:06   #13
Aleksandr_59
Пользователь
 
Регистрация: 14.10.2011
Сообщений: 77
По умолчанию

И ещё. Настройка разрешения веб-камеры через сообщение

SendMessage(hWndC, WM_CAP_GET_VIDEOFORMAT, SizeOf(Bt), LongInt(@Bt));
Bt.bmiHeader.biWidth := 640; // ваши ...поддерживаемые камерой
Bt.bmiHeader.biHeight := 480;
Bt.bmiHeader.biSize := SizeOf(Bt.bmiHeader);
Bt.bmiHeader.biPlanes := 1;
Bt.bmiHeader.biBitCount := 24;
SendMessage(hWndC, WM_CAP_SET_VIDEOFORMAT, SizeOf(Bt), LongInt(@Bt));

не даёт эффекта ни в большую, ни в меньшую сторону. И в настройках в системе нет параметра "разрешение". Надо полагать камера не поддерживает другие разрешения, хотя по логике в меньшую сторону должна. Камера "Panda", полного названия нет, взял что было, при установке она сама что-то нашла в инете и установила.
Aleksandr_59 вне форума Ответить с цитированием
Старый 23.03.2012, 10:10   #14
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
хотя по логике в меньшую сторону должна.
не, не должна.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 23.03.2012, 10:11   #15
Aleksandr_59
Пользователь
 
Регистрация: 14.10.2011
Сообщений: 77
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
24-бита это как раз и есть вполне полноцвет.
Согласен, но размер массива данных, переданный через параметр lpVHdr в функции обратного вызова показывает разрешение только в 16 бит. При попытке считывать по 24 бита даёт ошибку при выходе за пределы размера. Я побитно считываю данные и передаю в Bitmap. Ничего другого не придумал.
Aleksandr_59 вне форума Ответить с цитированием
Старый 23.03.2012, 12:01   #16
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,742
По умолчанию

Цитата:
Надо полагать камера не поддерживает другие разрешения
не камера, а VFW-драйвер/
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 23.03.2012, 17:44   #17
Aleksandr_59
Пользователь
 
Регистрация: 14.10.2011
Сообщений: 77
По умолчанию

В общем всё получилось и даже заработало, но опять с некоторыми ограничениями.
Изначально создавал форму во весь экран. Информацио с веб-камеры отправлял на другую скрытую форму через сообщение

SendMessage(hWndC, WM_CAP_GRAB_FRAME, 0, 0);

А на в Image1.Picture.Bitmap первой формы сливал данные через указатель в структуре PVIDEOHDR, передаваемый драйвером веб-камеры в функцию обратного вызова

function FrameCallback(hWnd: HWND; lpVHdr: PVIDEOHDR): DWORD; stdcall;

Теперь, если свернуть главное окно (изображение с камеры передаётся через Handle скрытой формы на её Canvas) пропадает изображение и уже не восстанавливается. В принципе некритично, форма будет работать на весь экран, но хотелось бы знать, почему так происходит и как побороться. Кто подскажет?
Aleksandr_59 вне форума Ответить с цитированием
Старый 23.03.2012, 17:56   #18
Aleksandr_59
Пользователь
 
Регистрация: 14.10.2011
Сообщений: 77
По умолчанию

И ещё.
Что за набор данных, передаваемый через указатель в структуре TVIDEOHDR. Картинка, которую я беру с этого указателя имеет размер 2 байта на пиксел (640*420*2). Долго ломал голову, потом махнул рукой и первыми байтами заполнил все три цвета на Bitmape рисунка на форме. Получилась вполне сносная чёрно-белая картинка. Для определения штрих-кода достаточно, но сомнения гложат. Что, если я изменю разрешение и всё пойдёт наперекосяк.
Пробовал навскидку проанализировать биты в этих двух байтах и сравнить с RGB. Сложилось ощущение, что это два противоположных (негативных) цвета, а может и яркостная составляющая. Кто знает?
Aleksandr_59 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изображение из веб-камеры в файл. OmgA Помощь студентам 2 21.03.2012 17:10
Выбор веб камеры kazzz Компьютерное железо 0 26.12.2011 00:16
Выбор веб-камеры Hudishka Компьютерное железо 7 13.01.2011 10:25
Трансляция веб-камеры LevonNikox JavaScript, Ajax 2 29.10.2010 12:58