我有一个挑战:创建一个程序,当按下按钮时从网络摄像头拍摄图像.附加条件:不要使用第三方组件(如DSPack),只使用WinAPI.我写了以下代码.
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,Panel1.Width,Panel1.Height,Panel1.Handle,0); if hWndC <> 0 then SendMessage(hWndC,WM_CAP_DRIVER_CONNECT,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); hWndC := 0; end; end; end.
表单上有两个按钮和一个面板.该程序编译成功,并在第一次启动时运行良好;但是,在第二次和随后的发布中,会出现一个窗口,提供选择设备,但即使在选择它之后也无法正常工作.我想在第一次启动后,程序没有将相机的驱动程序恢复到原始状态.
是这样吗?如果是,我该如何纠正?如果没有,为什么该程序不适用于第二次和其他发布?谢谢你的建议.
解决方法
首先,我不能真正帮助你使用当前的代码,然后我认为没有人会这样做是另一种选择.
我知道你不想使用3e方组件,但我认为使用AVICAP32.DLL不是更好的选择.
此页面提供了在Windows下使用网络摄像头的绝佳方式,它非常可靠,并允许您设置任何凸轮属性.它的所有开源,易于使用,并基于本机Windows DirectX库.
它从未让我失望过.
http://www.delphibasics.info/home/delphibasicsprojects/directxdelphiwebcamcaptureexample
祝好运并玩得开心点,德尔福岩石.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。