我有一个挑战:创建一个程序,当按下按钮时从网络摄像头拍摄图像.附加条件:不要使用第三方组件(如DSPack),只使用WinAPI.我写了以下代码. unit Unit1;interfaceuses Windows, Messages, SysUtils, Clas
unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls,ShellAPI; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Panel1: TPanel; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; 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_SAVEDIB = WM_CAP_START + 25; WM_CAP_GRAB_FRAME = WM_CAP_START + 60; WM_CAP_SEQUENCE = WM_CAP_START + 62; WM_CAP_FILE_SET_CAPTURE_FILEA = WM_CAP_START + 20; function capCreateCaptureWindowA(lpszWindowName : PCHAR; dwStyle : longint; x : integer; y : integer; nWidth : integer; nHeight : integer; ParentWin : HWND; nId : integer): HWND; stdcall external 'AVICAP32.DLL'; var Form1: TForm1; implementation {$R *.dfm} var hWndC : THandle; procedure TForm1.Button1Click(Sender: TObject); begin hWndC := capCreateCaptureWindowA('My Own Capture Window', WS_CHILD or WS_VISIBLE , 0, 0, Panel1.Width, Panel1.Height, Panel1.Handle, 0); if hWndC <> 0 then SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 0); end; procedure TForm1.FormCreate(Sender: TObject); begin hWndC := 0; end; procedure TForm1.Button2Click(Sender: TObject); begin if hWndC <> 0 then begin SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0); hWndC := 0; end; end; end.
表单上有两个按钮和一个面板.该程序编译成功,并在第一次启动时运行良好;但是,在第二次和随后的发布中,会出现一个窗口,提供选择设备,但即使在选择它之后也无法正常工作.我想在第一次启动后,程序没有将相机的驱动程序恢复到原始状态.
是这样吗?如果是,我该如何纠正?如果没有,为什么该程序不适用于第二次和其他发布?谢谢你的建议.
首先,我不能真正帮助你使用当前的代码,然后我认为没有人会这样做是另一种选择.我知道你不想使用3e方组件,但我认为使用AVICAP32.DLL不是更好的选择.
此页面提供了在Windows下使用网络摄像头的绝佳方式,它非常可靠,并允许您设置任何凸轮属性.它的所有开源,易于使用,并基于本机Windows DirectX库.
它从未让我失望过.
http://www.delphibasics.info/home/delphibasicsprojects/directxdelphiwebcamcaptureexample
祝好运并玩得开心点,德尔福岩石.