Форум: "Основная";
Текущий архив: 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