Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.09.17;
Скачать: CL | DM;

Вниз

Подскажите - как в Delphi работать с WEB-камерой?   Найти похожие ветки 

 
UnKnownPeople   (2006-07-31 00:36) [0]

Подскажите - как в Delphi работать с WEB-камерой?
(захват, фотографирование...)


 
Чапаев ©   (2006-07-31 12:01) [1]

Использую компонент TVidGrab. Весьма просто и удобно.


 
Джо ©   (2006-07-31 15:47) [2]

Я к своей старенькой камере "достучался" через интерфейс Video for Windows (уже морально устаревший). Есть на руках очень кривенький, но, кажется, рабочий модуль, склепанный на скорую руку. Если нужен, могу запостить, а там уже доводи напильником :)


 
UnKnownPeople   (2006-08-03 01:40) [3]


> Чапаев ©   (31.07.06 12:01) [1]
> Использую компонент TVidGrab. Весьма просто и удобно.

Компонент пока что не нашёл...


> Джо ©   (31.07.06 15:47) [2]
> Я к своей старенькой камере "достучался" через интерфейс
> Video for Windows (уже морально устаревший). Есть на руках
> очень кривенький, но, кажется, рабочий модуль, склепанный
> на скорую руку. Если нужен, могу запостить, а там уже доводи
> напильником :)

Ок - скидывай, а дальше постараюсь сам разобраться


 
Джо ©   (2006-08-03 03:03) [4]

Вот эта ужасная куча недоделанного когда-то кода, разбирайся, если хочешь.
Самому на него стыдно смотреть, но раз написал такое, то не отвертишься :-)

--- VFW.pas

unit VFW;

{ ***************************************

 @source VFW.h (very) partial translation to Pascal unit by Kaminski S.A.
 @modified Jun 01 2004

****************************************}

interface
uses Windows, Messages,ActiveX;

const
 AVICAP = "avicap32.dll";
 AVIFIL = "avifil32.dll";

// Defines start of the message range
WM_CAP_START                  =  WM_USER;
// start of unicode messages
WM_CAP_UNICODE_START          = WM_USER+100;
WM_CAP_GET_CAPSTREAMPTR       =(WM_CAP_START+  1);

WM_CAP_SET_CALLBACK_ERRORW    =(WM_CAP_UNICODE_START+  2);
WM_CAP_SET_CALLBACK_STATUSW   =(WM_CAP_UNICODE_START+  3);
WM_CAP_SET_CALLBACK_ERRORA    =(WM_CAP_START+  2);
WM_CAP_SET_CALLBACK_STATUSA   =(WM_CAP_START+  3);

WM_CAP_SET_CALLBACK_ERROR     =  WM_CAP_SET_CALLBACK_ERRORW;
WM_CAP_SET_CALLBACK_STATUS    =  WM_CAP_SET_CALLBACK_STATUSW;

WM_CAP_SET_CALLBACK_YIELD     =  (WM_CAP_START+  4);
WM_CAP_SET_CALLBACK_FRAME       =(WM_CAP_START+  5);
WM_CAP_SET_CALLBACK_VIDEOSTREAM =(WM_CAP_START+  6);
WM_CAP_SET_CALLBACK_WAVESTREAM  =(WM_CAP_START+  7);
WM_CAP_GET_USER_DATA  = (WM_CAP_START+  8);
WM_CAP_SET_USER_DATA  = (WM_CAP_START+  9);

WM_CAP_DRIVER_CONNECT  =         (WM_CAP_START+  10);
WM_CAP_DRIVER_DISCONNECT=        (WM_CAP_START+  11);

WM_CAP_DRIVER_GET_NAMEA  =      (WM_CAP_START+  12);
WM_CAP_DRIVER_GET_VERSIONA=     (WM_CAP_START+  13);
WM_CAP_DRIVER_GET_NAMEW    =    (WM_CAP_UNICODE_START+  12);
WM_CAP_DRIVER_GET_VERSIONW  =   (WM_CAP_UNICODE_START+  13);
WM_CAP_DRIVER_GET_NAME      =    WM_CAP_DRIVER_GET_NAMEW;
WM_CAP_DRIVER_GET_VERSION    =   WM_CAP_DRIVER_GET_VERSIONW;

WM_CAP_DRIVER_GET_CAPS        =  (WM_CAP_START+  14);

WM_CAP_FILE_SET_CAPTURE_FILEA  =(WM_CAP_START+  20)  ;
WM_CAP_FILE_GET_CAPTURE_FILEA  =(WM_CAP_START+  21)   ;
WM_CAP_FILE_SAVEASA           = (WM_CAP_START+  23)    ;
WM_CAP_FILE_SAVEDIBA          = (WM_CAP_START+  25)     ;
WM_CAP_FILE_SET_CAPTURE_FILEW = (WM_CAP_UNICODE_START+  20);
WM_CAP_FILE_GET_CAPTURE_FILEW = (WM_CAP_UNICODE_START+  21);
WM_CAP_FILE_SAVEASW           = (WM_CAP_UNICODE_START+  23) ;
WM_CAP_FILE_SAVEDIBW          = (WM_CAP_UNICODE_START+  25);
WM_CAP_FILE_SET_CAPTURE_FILE   = WM_CAP_FILE_SET_CAPTURE_FILEW;
WM_CAP_FILE_GET_CAPTURE_FILE   = WM_CAP_FILE_GET_CAPTURE_FILEW ;
WM_CAP_FILE_SAVEAS             = WM_CAP_FILE_SAVEASW;
WM_CAP_FILE_SAVEDIB            = WM_CAP_FILE_SAVEDIBW;

// out of order to save on ifdefs
WM_CAP_FILE_ALLOCATE        =    (WM_CAP_START+  22);
WM_CAP_FILE_SET_INFOCHUNK   =    (WM_CAP_START+  24);

WM_CAP_EDIT_COPY            =    (WM_CAP_START+  30);

WM_CAP_SET_AUDIOFORMAT       =   (WM_CAP_START+  35);
WM_CAP_GET_AUDIOFORMAT       =   (WM_CAP_START+  36);

WM_CAP_DLG_VIDEOFORMAT        =  (WM_CAP_START+  41);
WM_CAP_DLG_VIDEOSOURCE        =  (WM_CAP_START+  42);
WM_CAP_DLG_VIDEODISPLAY       =  (WM_CAP_START+  43);
WM_CAP_GET_VIDEOFORMAT        =  (WM_CAP_START+  44);
WM_CAP_SET_VIDEOFORMAT        =  (WM_CAP_START+  45);
WM_CAP_DLG_VIDEOCOMPRESSION   =  (WM_CAP_START+  46);

WM_CAP_SET_PREVIEW            =  (WM_CAP_START+  50);
WM_CAP_SET_OVERLAY            =  (WM_CAP_START+  51);
WM_CAP_SET_PREVIEWRATE        =  (WM_CAP_START+  52);
WM_CAP_SET_SCALE              =  (WM_CAP_START+  53);
WM_CAP_GET_STATUS             =  (WM_CAP_START+  54);
WM_CAP_SET_SCROLL             =  (WM_CAP_START+  55);

WM_CAP_GRAB_FRAME             =  (WM_CAP_START+  60);
WM_CAP_GRAB_FRAME_NOSTOP      =  (WM_CAP_START+  61);

WM_CAP_SEQUENCE              =   (WM_CAP_START+  62);
WM_CAP_SEQUENCE_NOFILE       =   (WM_CAP_START+  63);
WM_CAP_SET_SEQUENCE_SETUP    =   (WM_CAP_START+  64);
WM_CAP_GET_SEQUENCE_SETUP    =   (WM_CAP_START+  65);

WM_CAP_SET_MCI_DEVICEA       =  (WM_CAP_START+  66);
WM_CAP_GET_MCI_DEVICEA       =  (WM_CAP_START+  67);
WM_CAP_SET_MCI_DEVICEW       =  (WM_CAP_UNICODE_START+  66);
WM_CAP_GET_MCI_DEVICEW       =  (WM_CAP_UNICODE_START+  67);
WM_CAP_SET_MCI_DEVICE       =    WM_CAP_SET_MCI_DEVICEW;
WM_CAP_GET_MCI_DEVICE       =    WM_CAP_GET_MCI_DEVICEW;

WM_CAP_STOP              =       (WM_CAP_START+  68);
WM_CAP_ABORT              =      (WM_CAP_START+  69);

WM_CAP_SINGLE_FRAME_OPEN   =     (WM_CAP_START+  70);
WM_CAP_SINGLE_FRAME_CLOSE  =     (WM_CAP_START+  71);
WM_CAP_SINGLE_FRAME        =     (WM_CAP_START+  72);

WM_CAP_PAL_OPENA           =    (WM_CAP_START+  80);
WM_CAP_PAL_SAVEA           =    (WM_CAP_START+  81);
WM_CAP_PAL_OPENW           =    (WM_CAP_UNICODE_START+  80);
WM_CAP_PAL_SAVEW           =    (WM_CAP_UNICODE_START+  81);
WM_CAP_PAL_OPEN        =         WM_CAP_PAL_OPENW;
WM_CAP_PAL_SAVE        =         WM_CAP_PAL_SAVEW;

WM_CAP_PAL_PASTE        =        (WM_CAP_START+  82);
WM_CAP_PAL_AUTOCREATE    =       (WM_CAP_START+  83);
WM_CAP_PAL_MANUALCREATE   =      (WM_CAP_START+  84);

// Following added post VFW 1.1
WM_CAP_SET_CALLBACK_CAPCONTROL = (WM_CAP_START+  85);

// Defines end of the message range
WM_CAP_UNICODE_END      =        WM_CAP_PAL_SAVEW;
WM_CAP_END              =        WM_CAP_UNICODE_END;

type
 IAVIFile = Interface (IUnknown)

 end;

// Capture functions in AviCap32.dll
// using non-UNICODE functions!
function capCreateCaptureWindowA (WindowName: PChar; dwStyle: DWORD;
 X,Y,Width,Height: Integer; hwndParent: HWND; ID: Integer): HWND; stdcall; external AVICAP;
function capGetDriverDescriptionA (wDriverIndex: UINT; Name: PChar; cbName: Integer;
 Ver: PChar; cbVer: Integer): BOOL; stdcall; external AVICAP;

// AVI file functions in AVIFIL32.dll
procedure AVIFileInit(); stdcall; external AVIFIL;
procedure AVIFileExit(); stdcall; external AVIFIL;

procedure AVIFileOpen(var AVIFile: IAVIFile; szFile: PChar; Mode: UINT;
 idHandler: Pointer{TCLSID});stdcall; external AVIFIL;

implementation

end.


 
Джо ©   (2006-08-03 03:05) [5]

--- avicap.pas (модуль с главным классом)

unit AVICAP;
{
 @source TAVICap class for handling AVI capture in Delphi (Wraper for AVICap32 functions)
 @version 1.0
 @author Kaminski S.A.
 @modified Jun 01 2004
}

interface
uses Windows,Messages,VFW,SysUtils,Graphics;

const
 NO_DRIVER = -1;
type

 TCapDriverCaps = packed record
   DeviceIndex: UINT;
   HasOverlay,
   HasDlgVideoSource,
   HasDlgVideoFormat,
   HasDlgVideoDisplay,
   CaptureInitialized,
   DriverSuppliesPalettes: BOOL;
   // fields below are dummies actually...
   VideoIn,
   VideoOut,
   VideoExtIn,
   VideoExtOut: THANDLE;
 end;

 TCapStatus = packed record
   ImageWidth,
   ImageHeight: Integer;
   LiveWindow,
   OverlayWindow,
   Scale: BOOL;
   Scroll: TPoint;
   UsingDefaultPalette,
   AudioHardware,
   CapFileExists: BOOL;
   CurrentVideoFrame,
   CurrentVideoFramesDropped,
   CurrentWaveSamples,
   CurrentTimeElapsedMS: DWORD;
   PalCurrent: HPALETTE;
   CapturingNow: BOOL;
   Return: DWORD;
   NumVideoAllocated,
   NumAudioAllocated: UINT;
 end;

 EAVICapException = class (Exception);

 TAVICap = class
 private
   FCapHWND: HWND;
   FDriver: Integer;
   FPreviewRate: Integer;
   procedure SetDriver(const Value: Integer);
   procedure SelectDriver (AIndex: Integer);
   procedure Disconnect;
   function GetDriverName: string;
   procedure SetPreviewRate(const Value: Integer);
   procedure SetPreview(const Value: Boolean);
   procedure RaiseExceptionIfNoWindowSet;
   procedure RaiseExceptionIfNoDriverSelected;
   function GetDriverCaps: TCapDriverCaps;
   function GetCapStatus: TCapStatus;
   procedure SetCaptureFile(const Value: string);
   function GetCaptureFile: string;
   function GetVideoFormat: TBitmapInfo;
   procedure SetVideoFormat(const Value: TBitmapInfo);
   procedure SetOverlay(const Value: Boolean);
   function GetPreview: Boolean;
   function GetOverlay: Boolean;
 public
   function AVIMessage (Msg: Cardinal; WParam: WParam; LParam: LParam): Integer;

   constructor Create;
   destructor Destroy; override;

   property Handle: HWND read FCapHWND;

   procedure CreateCaptureWindow (X,Y,Width,Height: Integer; Parent: HWND);
   property Driver: Integer read FDriver write SetDriver;
   property DriverName: string read GetDriverName;

   property PreviewRate: Integer read FPreviewRate write SetPreviewRate;

   property Preview: Boolean read GetPreview write SetPreview;
   property Overlay: Boolean read GetOverlay write SetOverlay;

   property DriverCaps: TCapDriverCaps read GetDriverCaps;
   property CapStatus: TCapStatus read GetCapStatus;
   property VideoFormat: TBitmapInfo read GetVideoFormat write SetVideoFormat;

   function DLG_VideoSource: Boolean;
   function  DLG_VideoDisplay: Boolean;
   function DLG_VideoFormat: Boolean;
   function DLG_VideoCompression: Boolean;

   {Frame copy/save}
   procedure SaveFrame (AFileName: string);
   procedure CopyFrame;

   {Video capturing}
   property CaptureFile: string read GetCaptureFile write SetCaptureFile;
   function AllocateSpace (ASize: Cardinal): Boolean;
   // if parameter ommitted or False, then
   // capture will be performed without file creation
   function StartCapture (SaveToFile: Boolean = True): Boolean;
   procedure StopCapture;

   function CaptureSingleFrameOpen: Boolean;
   function CaptureSingleFrame: Boolean;
   function CaptureSingleFrameClose: Boolean;

   function SaveAs (AFileName: string): Boolean;

   {Handy routines}
   procedure AdjustWindowSize;
   // assign a picture of current frame to bitmap
   procedure GetPicture (Bmp: TBitmap);
   function StorePictureToTempFile: string;

 end;



 
Джо ©   (2006-08-03 03:05) [6]

продолжение


implementation

{Callback functions}

function _CallBackStatus (Wnd: HWND; ID: Integer; Description: PChar): LResult; stdcall;
begin
 //
end;

{ TAVICap }
procedure TAVICap.AdjustWindowSize;
var
 _CapStatus: TCapStatus;
begin
 _CapStatus := CapStatus;
 {Установим размер окна по размеру кадра}
 SetWindowPos(FCapHWND, 0, 0, 0, _CapStatus.ImageWidth,_CapStatus.ImageHeight,
   SWP_NOZORDER + SWP_NOACTIVATE)
end;

function TAVICap.AllocateSpace (ASize: Cardinal): Boolean;
begin
 Result := (AVIMessage(WM_CAP_FILE_ALLOCATE,0,ASize)<>0)
end;

function TAVICap.AVIMessage(Msg: Cardinal; WParam: WParam;
 LParam: LParam): Integer;
begin
 if FCapHWND<>0 then
   Result := SendMessage (FCapHWND,Msg,WParam,LParam)
end;

function TAVICap.CaptureSingleFrame: Boolean;
begin
 Result := AVIMessage(WM_CAP_SINGLE_FRAME,0,0)<>0
end;

function TAVICap.CaptureSingleFrameClose: Boolean;
begin
 Result := AVIMessage(WM_CAP_SINGLE_FRAME_CLOSE,0,0)<>0
end;

function TAVICap.CaptureSingleFrameOpen: Boolean;
begin
 Result := AVIMessage(WM_CAP_SINGLE_FRAME_OPEN,0,0)<>0
end;

procedure TAVICap.CopyFrame;
begin
 RaiseExceptionIfNoWindowSet;
 RaiseExceptionIfNoDriverSelected;

 if AVIMessage (WM_CAP_GRAB_FRAME_NOSTOP,0,0) <> 0 then
   // non UNICODE message
   if AVIMessage (WM_CAP_EDIT_COPY,0,0) = 0 then
     Raise EAVICapException.Create("Can not copy frame to clipboard.");
end;

constructor TAVICap.Create;
begin
 FCapHWND := 0;
 FDriver := NO_DRIVER;
 FPreviewRate := 100;
end;

procedure TAVICap.CreateCaptureWindow(X, Y, Width, Height: Integer;
 Parent: HWND);
begin
 FCapHWND := capCreateCaptureWindowA("Capture window",
   WS_CHILD or WS_VISIBLE,
   X,Y,Width,Height,
   Parent,0
   );

 AVIMessage (WM_CAP_SET_CALLBACK_STATUSA,0,LParam(@_CallBackStatus));

end;

destructor TAVICap.Destroy;
begin
 Driver := -1; // this will disconnect driver, also
 inherited;
end;


 
Джо ©   (2006-08-03 03:06) [7]

продолжение


procedure TAVICap.Disconnect;
begin
 if FCapHWND <> 0 then
   AVIMessage (WM_CAP_DRIVER_DISCONNECT,0,0);
end;

function TAVICap.DLG_VideoCompression: Boolean;
begin
 if FCapHWND <> 0 then
   Result :=  (AVIMessage (WM_CAP_DLG_VIDEOCOMPRESSION,0,0) <> 0);
end;

function TAVICap.DLG_VideoDisplay: Boolean;
begin
 if FCapHWND <> 0 then
   Result :=  (AVIMessage (WM_CAP_DLG_VIDEODISPLAY,0,0) <> 0);
end;

function TAVICap.DLG_VideoFormat: Boolean;
begin
 if FCapHWND <> 0 then
   Result := (AVIMessage (WM_CAP_DLG_VIDEOFORMAT,0,0) <> 0);
end;

function TAVICap.DLG_VideoSource: Boolean;
begin
 if FCapHWND <> 0 then
   Result := (AVIMessage (WM_CAP_DLG_VIDEOSOURCE,0,0) <> 0);
end;

function TAVICap.GetCapStatus: TCapStatus;
begin
 RaiseExceptionIfNoWindowSet;
 AVIMessage (WM_CAP_GET_STATUS,SizeOf(TCapStatus),LParam(@Result));
end;

function TAVICap.GetCaptureFile: string;
var
 Buff: array [0..1024] of Char;
begin
 RaiseExceptionIfNoWindowSet;
 // non-Unicode !
 AVIMessage (WM_CAP_FILE_GET_CAPTURE_FILEA,Length(Buff),Integer(@Buff));
 Result := Buff;
end;

function TAVICap.GetDriverCaps: TCapDriverCaps;
begin
 RaiseExceptionIfNoWindowSet;
 RaiseExceptionIfNoDriverSelected;

 AVIMessage (WM_CAP_DRIVER_GET_CAPS,SizeOf(TCapDriverCaps),LParam(@Result));

end;

function TAVICap.GetDriverName: string;
var
 Buff: array [0..255] of Char;
begin
 RaiseExceptionIfNoWindowSet;
 RaiseExceptionIfNoDriverSelected;

 // ! use non unicode variant of message !
 // WM_CAP_DRIVER_GET_NAMEA
 if AVIMessage (WM_CAP_DRIVER_GET_NAMEA,Length(Buff)-1,Integer(@Buff)) > 0 then
   Result := Buff
 else
   Result := "";
end;

function TAVICap.GetOverlay: Boolean;
begin
 Result := CapStatus.OverlayWindow
end;

procedure TAVICap.GetPicture(Bmp: TBitmap);
var
 TmpPath: array [0..512] of Char;
 Fn: string;
begin
 GetTempPath(Length(TmpPath),TmpPath);
 Fn := TmpPath+"$temp_dib$.bmp";
 try
   SaveFrame(Fn);
   Bmp.LoadFromFile (Fn);
 finally
   DeleteFile (Fn)
 end;
end;



 
Джо ©   (2006-08-03 03:07) [8]

Окончание файла avicap.pas


function TAVICap.GetPreview: Boolean;
begin
 Result := CapStatus.LiveWindow
end;

function TAVICap.GetVideoFormat: TBitmapInfo;
begin
 AVIMessage(WM_CAP_GET_VIDEOFORMAT,SizeOf(Result),Integer(@Result));
end;

procedure TAVICap.RaiseExceptionIfNoDriverSelected;
begin
 if FDriver = NO_DRIVER then
   raise EAVICapException.Create("Not connected to driver. Set Driver property first");
end;

procedure TAVICap.RaiseExceptionIfNoWindowSet;
begin
 if FCapHWND = 0 then
   raise EAVICapException.Create("Capture window not set. Call CreateCaptureWindow first.");
end;

function TAVICap.SaveAs(AFileName: string): Boolean;
begin
 // non-UNICODE!
 Result := AVIMessage(WM_CAP_FILE_SAVEASA,0,Integer(PChar(AFileName)))<>0
end;

procedure TAVICap.SaveFrame(AFileName: string);
begin
 RaiseExceptionIfNoWindowSet;
 RaiseExceptionIfNoDriverSelected;

 if AVIMessage (WM_CAP_GRAB_FRAME_NOSTOP,0,0) <> 0 then
 begin
   // non UNICODE message
   if AVIMessage (WM_CAP_FILE_SAVEDIBA,0,Integer(AFileName)) = 0 then
     raise EAVICapException.Create("Can not save DIB file.")
 end
 else
   raise EAVICapException.Create("Can not capture frame.")
end;

procedure TAVICap.SelectDriver(AIndex: Integer);
begin
 RaiseExceptionIfNoWindowSet;

 AVIMessage (WM_CAP_DRIVER_CONNECT,AIndex,0);
 AVIMessage (WM_CAP_SET_PREVIEWRATE,FPreviewRate,0);
end;

procedure TAVICap.SetCaptureFile(const Value: string);
begin
 RaiseExceptionIfNoWindowSet;

 // non-Unicode!
 AVIMessage (WM_CAP_FILE_SET_CAPTURE_FILEA,0,Integer(PChar(Value)));
end;

procedure TAVICap.SetDriver(const Value: Integer);
begin
 // disconnect from previouse driver, if any
 if FDriver <> -1 then
   Disconnect;

 FDriver := Value;

 if FDriver >= 0 then
   SelectDriver(Value)
 else
   Disconnect;
end;

procedure TAVICap.SetOverlay(const Value: Boolean);
begin
 AVIMessage (WM_CAP_SET_OVERLAY,WParam(Value),0);
end;

procedure TAVICap.SetPreview(const Value: Boolean);
begin
 AVIMessage (WM_CAP_SET_PREVIEWRATE,WParam(FPreviewRate),0);
 AVIMessage (WM_CAP_SET_PREVIEW,WParam(Value),0);
end;

procedure TAVICap.SetPreviewRate(const Value: Integer);
begin
 FPreviewRate := Value;
 AVIMessage (WM_CAP_SET_PREVIEWRATE,Value,0);
end;

procedure TAVICap.SetVideoFormat(const Value: TBitmapInfo);
begin
 AVIMessage(WM_CAP_SET_VIDEOFORMAT,SizeOf(Value),Integer(@Value));
end;

function TAVICap.StartCapture(SaveToFile: Boolean): Boolean;
var
 Msg: Cardinal;
begin
 RaiseExceptionIfNoWindowSet;
 RaiseExceptionIfNoDriverSelected;

 if SaveToFile then
   Msg := WM_CAP_SEQUENCE
 else
   Msg := WM_CAP_SEQUENCE_NOFILE;

 Result := AVIMessage(Msg,0,0)<>0
end;

procedure TAVICap.StopCapture;
begin
 RaiseExceptionIfNoWindowSet;
 RaiseExceptionIfNoDriverSelected;

 AVIMessage(WM_CAP_STOP,0,0);
end;

function TAVICap.StorePictureToTempFile: string;
var
 TmpPath: array [0..512] of Char;
 Fn: string;
begin
 GetTempPath(Length(TmpPath),TmpPath);
 Fn := TmpPath+"$temp_dib$.bmp";
   SaveFrame(Fn);
 Result := Fn
end;

end.


 
Джо ©   (2006-08-03 03:07) [9]

-- VFWUtils.pas



unit VFWUtils;

interface
uses SysUtils, Classes;

// Заполняет список именами установленных драйверов
// и возвращает их количество
function ListDrivers (Strings: TStrings): Integer;

implementation
uses VFW;

function ListDrivers (Strings: TStrings): Integer;
var
 I: Integer;
 AName,
 ADescription: array [0..80] of Char;
begin
 Strings.Clear;
 Result := 0;
 for I := 0 to 9 do
 begin
   if capGetDriverDescriptionA(I,AName,80,ADescription,80) then
   begin
     Strings.Add(AName);
     Inc(Result)
   end;
 end;
   
end;

end.



 
Джо ©   (2006-08-03 03:10) [10]

Сорри за большой объем постов, но вот еще пример.


 TForm22 = class(TForm)
   PreviewPanel: TPanel;
 private
   WCam: TAVICap;
   ...
 end;

procedure TForm22.FormCreate(Sender: TObject);
begin
 WCam := TAVICap.Create;
 WCam.CreateCaptureWindow(
   0,0,PreviewPanel.Width,PreviewPanel.Height,PreviewPanel.Handle);
 WCam.Driver := 0;
 //WCam.Preview := True
end;
 
procedure TForm22.FormDestroy(Sender: TObject);
begin
 FtpEmptyImage;
 WCam.Free;
end;


Методы снятия изображения смотри сам в объявлении класса, у меня уже от него голова разболелась :)


 
UnKnownPeople   (2006-08-03 11:08) [11]

И на этом спасибо - буду разбираться!


 
atruhin ©   (2006-08-03 11:25) [12]

Я использовал DSPACK вроде без проблем работает, есть примеры.


 
Чапаев ©   (2006-08-03 11:55) [13]


> Компонент пока что не нашёл...

Мдя? А почему я нашёл и скачал за 15 минут пользования nigma.ru? (даже без всяких навороченных гуглей...)


 
Reindeer Moss Eater ©   (2006-08-03 12:25) [14]

По моему все тоже самое можно легко сделать самому без пакетов на DirectShow.

А еще есть фриварная библиотека http://www.mitov.com/index.html
В коммерческой версии ставятся исходники.
Но инсталяция сделана на Inno, так что ..... :)



Страницы: 1 вся ветка

Текущий архив: 2006.09.17;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.093 c
2-1156333098
rr
2006-08-23 15:38
2006.09.17
Как построчно прочитать файл


15-1156914011
begin...end
2006-08-30 09:00
2006.09.17
30 августа. С Днём рождения!


15-1156231179
Шмелъ
2006-08-22 11:19
2006.09.17
Сайт


2-1156510613
Der Nechk@ssoff
2006-08-25 16:56
2006.09.17
Определить тип файла


15-1156345395
ronyn
2006-08-23 19:03
2006.09.17
Флёнов М.