прямо сейчас Я пытаюсь сделать программу с помощью Delphi 5, чтобы сделать снимок с веб-камеры. Я использую delphi 5 и DSPack 2.3.1, потому что многие люди предлагают это, и да, это мое первое программирование мультимедиа с delphi.Как захватить и сохранить в файл с веб-камеры с помощью DSPack и Delphi 5
Я смог перечислить и добавить камеру, которая динамически подключается к моему компьютеру. Я также могу показать, что веб-камера «видит», открывая видео и захватывая его. Но теперь я не могу захватить изображение с веб-камеры.
У меня есть TImage, который я назвал «Изображение», чтобы проверить, что изображение захвачено или нет. Когда я использую свой код для открытия видео и его захвата, он отображается в TImage. Но когда я пытаюсь захватить веб-камеру, она просто пустая и ничего не захватывает. Файл, который я сохранил, также пуст.
Может кто-нибудь проверить, какая часть моего кода идет не так? Благодаря прежде ...
вот часть моего кода
var SysDev: TSysDevEnum;
FotoBitmap: TBitmap;
implementation
{$R *.DFM}
procedure Form1.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;
procedure Form1.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
SysDev.Free;
FilterGraph.ClearGraph;
FilterGraph.Active := false;
end;
procedureForm1.OnSelectDevice(sender: TObject);
var
CaptureGraph: ICaptureGraphBuilder2;
SourceFilter, DestFilter: IBaseFilter;
begin
FilterGraph.ClearGraph;
FilterGraph.Active := false;
Filter.BaseFilter.Moniker := SysDev.GetMoniker(TMenuItem(Sender).tag);
Filter.FilterGraph := FilterGraph;
FilterGraph.Active := true;
FilterGraph.QueryInterface(ICaptureGraphBuilder2, CaptureGraph);
Filter.QueryInterface(IBaseFilter, SourceFilter);
VideoWindow.QueryInterface(IBaseFilter, DestFilter);
if Filter.BaseFilter.DataLength > 0 then
CaptureGraph.RenderStream(nil, nil, SourceFilter, nil, DestFilter);
FilterGraph.Play;
CaptureGraph := nil;
SourceFilter := nil;
DestFilter := nil;
end;
procedure Form1.SnapshotClick(Sender: TObject);
var dir : String;
begin
if edt_nama_foto.Text <> '' then begin
dir := ExtractFilePath(Application.ExeName);
FotoBitmap := TBitmap.Create;
try
SampleGrabber.GetBitmap(FotoBitmap);
SampleGrabber.GetBitmap(Image.Picture.Bitmap);
showmessage(dir + 'Image\Foto\' + edt_nama_foto.Text + '.bmp');
FotoBitmap.SaveToFile(dir + 'Image\Foto\' + edt_nama_foto.Text + '.bmp');
finally
FotoBitmap.Free;
end;
end;
end;
procedure Form1.btn_batalClick(Sender: TObject);
begin
modalresult:=mrCancel;
end;
procedure Form1.btn_simpanClick(Sender: TObject);
begin
If CheckbeforeOK then
begin
ModalResult :=mrOK;
end else begin
ModalResult := mrNone;
end;
end;
function Form1.CheckbeforeOK:Boolean;
var flag:boolean;
MasterDataSet:TQuery;
begin
Flag:=True;
if flag and not(checkedit(nil, nil, edt_nama_foto, edt_nama_foto.Text, 'Nama Foto'))
then begin
flag := False;
end else begin
Snapshot.Click;
end;
Result := flag;
end;
procedure Form1.SampleGrabberBuffer(sender: TObject;
SampleTime: Double; pBuffer: Pointer; BufferLen: Integer);
begin
Image.Picture.Bitmap.Canvas.Lock;
try
SampleGrabber.GetBitmap(Image.Picture.Bitmap, pBuffer, BufferLen);
finally
Image.Picture.Bitmap.Canvas.UnLock;
end;
end;
end.