gpt4 book ai didi

delphi - 在 Delphi 7 中使用 WinAPI 从网络摄像头拍照

转载 作者:行者123 更新时间:2023-12-03 15:30:52 39 4
gpt4 key购买 nike

我有一个挑战:创建一个程序,在按下按钮时从网络摄像头获取图像。附加条件:不要使用第三方组件(如 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 ,
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 下使用网络摄像头的好方法,它非常可靠,并且允许您设置任何摄像头属性。它全部开源、易于使用并且基于 native Windows DirectX 库。

它从来没有让我失望过。

http://www.delphibasics.info/home/delphibasicsprojects/directxdelphiwebcamcaptureexample

祝你好运,玩得开心,德尔福岩石。

关于delphi - 在 Delphi 7 中使用 WinAPI 从网络摄像头拍照,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15721213/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com