Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.09.17;
Скачать: [xml.tar.bz2];

Вниз

Подскажите - как в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.039 c
15-1156633166
demikasy
2006-08-27 02:59
2006.09.17
океан чувств


1-1154723143
mahab
2006-08-05 00:25
2006.09.17
TshelllistView


15-1156923029
Ega23
2006-08-30 11:30
2006.09.17
Как выдрать иконку из IDE?


4-1147936539
serguar
2006-05-18 11:15
2006.09.17
в каком модуле определена константа GWW_HWNDPARENT


1-1154624425
ISK(CMEPTb)
2006-08-03 21:00
2006.09.17
Вставка объектов в текстовый редактор





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский