Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Захват видеоизображения [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


Наверх

Титульная страница Поиск, карта сайта Написать письмо