Работа с вебкамерой

  • Автор темы GrenDaiZer
  • Дата начала
Статус
Закрыто для дальнейших ответов.
G

GrenDaiZer

:)
Пожалуйста, подскажите кто-нибудь как работать с вебкамерой в Deplhi, какие компоненты нужны. Необходимо иметь возможность получить с вебкамеры как картинки, так и видео. Спасибо заранее за помощь.
 
B

Barmutik

Тема уже обсуждалась в форуме и уже давались ответы .. поищите по форуму
 
I

iogun

Для: Barmutik
подскажи а как вызывать диалог по настройке видео захвата (разрешение, компрессия, глубина...).
В MSDN нашел capDlgVideoFormat но откуда ее вызывать не знаю, в dll -ке ее нет.
 
Z

zubr

capDlgVideoFormat описана в Vfw.h, вот перевод этого хидера на паскаль
 

Вложения

  • vfw.zip
    34,6 КБ · Просмотры: 293
I

iogun

Нашел описание этой функции ч.з.
function AVICapSM(hwnd: HWND; m: UINT; w: WPARAM; l: LPARAM): DWORD;
begin
if IsWindow(hwnd) then
Result := SendMessage(hwnd,m,w,l)
else
Result := 0;
end;
как я понял происходит посылка форме сообщения WM_CAP_DLG_VIDEOFORMAT.
Вызываю эту функцию (capDlfVideoFormat(Form1.Handle)) а диалогового окна по настройке формата нет, функция возвращает false.
 
Z

zubr

а также модуль vfh содержит KOL, подскажите где его взять?
Убери KOL из этого модуля - он там не нужен, да и вообще KOL глючная штука.
Но вот описание функции IsWindow нигде не нашел
В MSDN. Прототип найдешь в Windows.pas

Совет: для захвата видео лучше воспользоваться компонентом DSPACK234 (не знаю, может сейчас более новые версии есть). Там реализован захват через DirectX. Компонент с исходниками и примерами. Гораздо менее гиморно будет, имхо.
 
I

iogun

Для: zubr
мне всего лишь нужно делать фото ч.з. веб камеру, для личных дел студентов. Стоит ли подключать DSPACK? Обработка видео не нужна.
У меня на форме есть компонент Image. КАк сохранять в файл bmp
if SaveDialog1.Execute then
SendMessage(hWndC,
WM_CAP_SAVEDIB,
0,
longint(pchar(SaveDialog1.FileName)));

где WM_CAP_SAVEDIB=WM_CAP_START+25

а как сохранить фото сразу в этот компонент без временного сохранения в файл.
все разобрался
if (hWndC <> 0) and (SendMessage(hWndC, WM_CAP_GRAB_FRAME, 0, 0) = 1) and
(SendMessage(hWndC, WM_CAP_EDIT_COPY, 0, 0) = 1) and (Clipboard.HasFormat(CF_BITMAP)) then
begin
// bmp.
bmp:=TBitmap.Create;
BMP.Assign(Clipboard);
Image1.Picture.Assign(bmp);
end;
SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0);
hWndC := 0;
fmAbit.Repaint;
Image1.Repaint;
 
I

iogun

подскажите как установить разрешение захватываемого изображения, а то по умолчанию 352x288. Т.е. с какими параметрами должно отправляться сообщени WM_CAP_DLG_VIDEOFORMAT
 
Z

zubr

Смотри в MSDN - параметры нулевые.
Насчет разрешения, как я понимаю это связано с драйвером захвата:
The Video Format dialog box is unique for each capture driver. Some capture drivers might not support a Video Format dialog box. Applications can determine if the capture driver supports this message by checking the fHasDlgVideoFormat member of CAPDRIVERCAPS.
Цитата из MSDN.
 
I

iogun

проблема решилась с помощью структуры BITMAPINFO и сообщения WM_CAP_SET_VIDEOFORMAT
 
I

iogun

после того как я захватил нужное изображени, схранил его, hWndC присвоил 0, отправил сообщение WM_CAP_DRIVER_DISCONNECT, на форме остался черный квадрат. Вызывал и repaint формы и панели - не помогает. Подскажите как его убрать? Похоже что функцией hWndC := capCreateCaptureWindowA('WideoCaptureWindow',
WS_CHILD or WS_VISIBLE ,
Image1.Left+ cxGroupBox1.Left,
Image1.top+cxGroupBox1.top,
176,
144,
Handle,
0);
создается подчиненное окно и после отключения устройства оно не закрывается. Как мне ему отправить сообщение чтоб оно закрылось?
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!