![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Захват видеоизображения [D6, WinXP]
suharew © (2006-05-05 00:10:00)Добрый день. Нашел в нете нижеследующий кусок кода, который захватывает изображение с устройства и выводт его на форму, Все вроде работает нормально. В данном случае у меня захват идет с ТВ тюнера, А если у меня несколько устройств. Например Тв тюнер,Веб камера, Плата видеомондажа Pinnacle Dc10, как мне переключаться между этими устройствами?? Подскажите пожалуста.
const
WM_CAP_START = WM_USER;
WM_CAP_STOP = WM_CAP_START + 68;
WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10;
WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11;
WM_CAP_GRAB_FRAME = WM_CAP_START + 60;
WM_CAP_EDIT_COPY = WM_CAP_START + 30;
WM_CAP_DLG_VIDEOSOURCE = (WM_CAP_START+ 42);
function capCreateCaptureWindowA(lpszWindowName : PCHAR;
dwStyle : longint;
x : integer;
y : integer;
nWidth : integer;
nHeight : integer;
ParentWin : HWND;
nId : integer): HWND;
STDCALL EXTERNAL 'AVICAP32.DLL';
procedure TForm1.BClick(Sender: TObject);
begin
if B.Caption = 'Start' then
begin
hWndC := capCreateCaptureWindowA('My Own Capture Window',
WS_CHILD or WS_VISIBLE ,
0,
0,
352,
288,
Form1.Handle,
0);
if hWndC <> 0 then
begin
SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 0);
B.Caption := 'Stop';
Timer1.Enabled := True;
end;
end else
begin
B.Caption := 'Start';
Timer1.Enabled := False;
if hWndC <> 0 then
begin
SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0);
hWndC := 0;
end;
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var s : string;
begin
if (hWndC <> 0) then
begin
SendMessage(hWndC, WM_CAP_GRAB_FRAME, 0, 0);
end;
end;
suharew (2006-05-05 19:45:00) [1]Да, DSPACK лучше , уже поставил теперь разбираюсь.
medved_68 (2006-05-05 16:29:00) [2]Попробуй так
procedure TVideoForm.FormCreate(Sender: TObject);
var
i: integer;
Device: TMenuItem;
begin
SysDev:= TSysDevEnum.Create(CLSID_VideoInputDeviceCategory);
if SysDev.CountFilters > 0 then
for i := 0 to SysDev.CountFilters - 1 do
begin
Device := TMenuItem.Create(Devices);
Device.Caption := SysDev.Filters[i].FriendlyName;
Device.Tag := i;
Device.OnClick := OnSelectDevice;
Devices.Add(Device);
end;
end;
Кстати пример из DSPak поставь его у себя и плюнь на VMF