摄像头取图用API 有对应的函数么? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://hi.baidu.com/hnxyy/blog/item/0a457ecb1ab6a91fbf09e6e4.html参考此处 http://d.download.csdn.net/down/1704884/haochin直接下载下来用就可以了。还带矩形截取的。 api控制摄像头的代码//////////////// 写个木马主要是精简干练一些 ////////////////找了N就 呵呵终于找到 api控制摄像头的代码 哈哈并非原创 好东西共享一下const WM_CAP_START = WM_USER;const WM_CAP_STOP = WM_CAP_START + 68;const WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10;const WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11;const WM_CAP_SAVEDIB = WM_CAP_START + 25;const WM_CAP_GRAB_FRAME = WM_CAP_START + 60;const WM_CAP_SEQUENCE = WM_CAP_START + 62;const WM_CAP_FILE_SET_CAPTURE_FILEA = WM_CAP_START + 20;const WM_CAP_SEQUENCE_NOFILE =WM_CAP_START + 63; const WM_CAP_SET_OVERLAY =WM_CAP_START + 51; const WM_CAP_SET_PREVIEW =WM_CAP_START + 50; const WM_CAP_SET_CALLBACK_VIDEOSTREAM = WM_CAP_START + 6;const WM_CAP_SET_CALLBACK_ERROR=WM_CAP_START + 2;const WM_CAP_SET_CALLBACK_STATUSA= WM_CAP_START + 3;const WM_CAP_SET_CALLBACK_FRAME= WM_CAP_START +5;const WM_CAP_SET_SCALE=WM_CAP_START + 53; const WM_CAP_SET_PREVIEWRATE=WM_CAP_START + 52; function capCreateCaptureWindowA(lpszWindowName : PCHAR; dwStyle : longint; x : integer; y : integer;nWidth : integer;nHeight : integer;ParentWin : HWND; nId : integer): HWND;STDCALL EXTERNAL 'AVICAP32.DLL';上面的代码就是我们主要用到的一个函数和常量的定义。好了,打开你的Delphi,新建一个工程,将上面的定义加上吧。新建一个窗口,放个Panel上去,添加一个按钮,Caption设置为"开始"这里需要定义一个全局变量,var hWndC : THandle;开始按钮代码如下:begin hWndC := capCreateCaptureWindowA('My Own Capture Window',WS_CHILD or WS_VISIBLE ,Panel1.Left,Panel1.Top,Panel1.Width,Panel1.Height,Form1.Handle,0); hWndC := capCreateCaptureWindowA('My Own Capture Window',WS_CHILD or WS_VISIBLE ,Panel1.Left,Panel1.Top,Panel1.Width,Panel1.Height,Form1.Handle,0); if hWndC <> 0 then begin SendMessage(hWndC, WM_CAP_SET_CALLBACK_VIDEOSTREAM, 0, 0); SendMessage(hWndC, WM_CAP_SET_CALLBACK_ERROR, 0, 0); SendMessage(hWndC, WM_CAP_SET_CALLBACK_STATUSA, 0, 0); SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 0); SendMessage(hWndC, WM_CAP_SET_SCALE, 1, 0); SendMessage(hWndC, WM_CAP_SET_PREVIEWRATE, 66, 0); SendMessage(hWndC, WM_CAP_SET_OVERLAY, 1, 0); SendMessage(hWndC, WM_CAP_SET_PREVIEW, 1, 0);end;按F9运行一下,怎么样,是不是可以看到摄像头的视屏了?那怎么停下来?再加个按钮caption设置成"停止"代码如下:if hWndC <> 0 then begin SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0); hWndC := 0;end;视屏截到了,怎么把它给保存下来呢?下面按两种方式保存,一个是BMP静态图,一个是AVI动画。再放三个按钮到窗体上去,caption分别设置成"保存BMP"、"开始录像"、"停止录像"三个按钮的代码分别如下://保存BMP if hWndC <> 0 then begin SendMessage(hWndC,WM_CAP_SAVEDIB,0,longint(pchar('c:\test.bmp'))); end;//开始录像 if hWndC <> 0 then begin SendMessage(hWndC,WM_CAP_FILE_SET_CAPTURE_FILEA,0, Longint(pchar('c:\test.avi'))); SendMessage(hWndC, WM_CAP_SEQUENCE, 0, 0); end;//停止录像 if hWndC <> 0 then begin SendMessage(hWndC, WM_CAP_STOP, 0, 0); end;再运行看看吧。。可以保存几张图看看,也可以录成AVI以后慢慢欣赏。程序运行效果:screen.width-430)this.width=screen.width-430" align=center border=0>完整的程序代码如下:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;type TForm1 = class(TForm) Panel1: TPanel; Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private hWndC : THandle; public { Public declarations } end;var Form1: TForm1;const WM_CAP_START = WM_USER;const WM_CAP_STOP = WM_CAP_START + 68;const WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10;const WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11;const WM_CAP_SAVEDIB = WM_CAP_START + 25;const WM_CAP_GRAB_FRAME = WM_CAP_START + 60;const WM_CAP_SEQUENCE = WM_CAP_START + 62;const WM_CAP_FILE_SET_CAPTURE_FILEA = WM_CAP_START + 20;const WM_CAP_SEQUENCE_NOFILE =WM_CAP_START + 63; const WM_CAP_SET_OVERLAY =WM_CAP_START + 51; const WM_CAP_SET_PREVIEW =WM_CAP_START + 50; const WM_CAP_SET_CALLBACK_VIDEOSTREAM = WM_CAP_START + 6;const WM_CAP_SET_CALLBACK_ERROR=WM_CAP_START + 2;const WM_CAP_SET_CALLBACK_STATUSA= WM_CAP_START + 3;const WM_CAP_SET_CALLBACK_FRAME= WM_CAP_START +5;const WM_CAP_SET_SCALE=WM_CAP_START + 53; const WM_CAP_SET_PREVIEWRATE=WM_CAP_START + 52; function capCreateCaptureWindowA(lpszWindowName : PCHAR; dwStyle : longint;x : integer;y : integer;nWidth : integer; nHeight : integer;ParentWin : HWND;nId : integer): HWND;STDCALL EXTERNAL 'AVICAP32.DLL';implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);begin hWndC := capCreateCaptureWindowA('My Own Capture Window',WS_CHILD or WS_VISIBLE ,Panel1.Left,Panel1.Top,Panel1.Width,Panel1.Height,Form1.Handle,0); hWndC := capCreateCaptureWindowA('My Own Capture Window',WS_CHILD or WS_VISIBLE ,Panel1.Left,Panel1.Top,Panel1.Width,Panel1.Height,Form1.Handle,0); if hWndC <> 0 then begin SendMessage(hWndC, WM_CAP_SET_CALLBACK_VIDEOSTREAM, 0, 0); SendMessage(hWndC, WM_CAP_SET_CALLBACK_ERROR, 0, 0); SendMessage(hWndC, WM_CAP_SET_CALLBACK_STATUSA, 0, 0); SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 0); SendMessage(hWndC, WM_CAP_SET_SCALE, 1, 0); SendMessage(hWndC, WM_CAP_SET_PREVIEWRATE, 66, 0); SendMessage(hWndC, WM_CAP_SET_OVERLAY, 1, 0); SendMessage(hWndC, WM_CAP_SET_PREVIEW, 1, 0); end;end;procedure TForm1.Button2Click(Sender: TObject);begin if hWndC <> 0 then begin SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0); hWndC := 0; end;end;procedure TForm1.Button3Click(Sender: TObject);begin if hWndC <> 0 then begin SendMessage(hWndC,WM_CAP_SAVEDIB,0,longint(pchar('c:\test.bmp'))); end;end;procedure TForm1.Button4Click(Sender: TObject);begin if hWndC <> 0 then begin SendMessage(hWndC,WM_CAP_FILE_SET_CAPTURE_FILEA,0, Longint(pchar('c:\test.avi'))); SendMessage(hWndC, WM_CAP_SEQUENCE, 0, 0); end;end;procedure TForm1.Button5Click(Sender: TObject);begin if hWndC <> 0 then begin SendMessage(hWndC, WM_CAP_STOP, 0, 0); end;end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);begin if hWndC <> 0 then begin SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0); end;end;end.注:经调试,录象部分好象不好使 这个是要用avicap32.dll的吧?我的机器怎么没有?问题在于,就是没有。我摄像头还是可以用。是不是还有其他更直接的。 随意7个整数,如何判断数字是连续的,并显示出连续的形式 求在delphi中解“水仙花数”谢谢,给高分~! 杭州的朋友请进 动态生成控件 (100送给你)c/s结构程序,oracle客户端可不可以不装? 哪里能下载到Sybase的ADO驱动? delphi 创建快捷方式的问题 如何得到系统动态分配的一个tcp端口? shelllistview拖放问题 这是 内嵌函数? Delphi 定界符? adoquery 备注字段不知取什么数据类型,已满足记事本的内容能完整存储
参考此处
直接下载下来用就可以了。
还带矩形截取的。
////////////////找了N就 呵呵终于找到 api控制摄像头的代码 哈哈并非原创 好东西共享一下
const WM_CAP_START = WM_USER;
const WM_CAP_STOP = WM_CAP_START + 68;
const WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10;
const WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11;
const WM_CAP_SAVEDIB = WM_CAP_START + 25;
const WM_CAP_GRAB_FRAME = WM_CAP_START + 60;
const WM_CAP_SEQUENCE = WM_CAP_START + 62;
const WM_CAP_FILE_SET_CAPTURE_FILEA = WM_CAP_START + 20;
const WM_CAP_SEQUENCE_NOFILE =WM_CAP_START + 63;
const WM_CAP_SET_OVERLAY =WM_CAP_START + 51;
const WM_CAP_SET_PREVIEW =WM_CAP_START + 50;
const WM_CAP_SET_CALLBACK_VIDEOSTREAM = WM_CAP_START + 6;
const WM_CAP_SET_CALLBACK_ERROR=WM_CAP_START + 2;
const WM_CAP_SET_CALLBACK_STATUSA= WM_CAP_START + 3;
const WM_CAP_SET_CALLBACK_FRAME= WM_CAP_START +5;
const WM_CAP_SET_SCALE=WM_CAP_START + 53;
const WM_CAP_SET_PREVIEWRATE=WM_CAP_START + 52;
function capCreateCaptureWindowA(lpszWindowName : PCHAR; dwStyle : longint; x : integer;
y : integer;nWidth : integer;nHeight : integer;ParentWin : HWND;
nId : integer): HWND;STDCALL EXTERNAL 'AVICAP32.DLL';
上面的代码就是我们主要用到的一个函数和常量的定义。
好了,打开你的Delphi,新建一个工程,将上面的定义加上吧。
新建一个窗口,放个Panel上去,添加一个按钮,Caption设置为"开始"
这里需要定义一个全局变量,var hWndC : THandle;
开始按钮代码如下:
begin
hWndC := capCreateCaptureWindowA('My Own Capture Window',WS_CHILD or WS_VISIBLE ,Panel1.Left,Panel1.Top,Panel1.Width,Panel1.Height,Form1.Handle,0);
hWndC := capCreateCaptureWindowA('My Own Capture Window',WS_CHILD or WS_VISIBLE ,Panel1.Left,Panel1.Top,Panel1.Width,Panel1.Height,Form1.Handle,0);
if hWndC <> 0 then
begin
SendMessage(hWndC, WM_CAP_SET_CALLBACK_VIDEOSTREAM, 0, 0);
SendMessage(hWndC, WM_CAP_SET_CALLBACK_ERROR, 0, 0);
SendMessage(hWndC, WM_CAP_SET_CALLBACK_STATUSA, 0, 0);
SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 0);
SendMessage(hWndC, WM_CAP_SET_SCALE, 1, 0);
SendMessage(hWndC, WM_CAP_SET_PREVIEWRATE, 66, 0);
SendMessage(hWndC, WM_CAP_SET_OVERLAY, 1, 0);
SendMessage(hWndC, WM_CAP_SET_PREVIEW, 1, 0);
end;
按F9运行一下,怎么样,是不是可以看到摄像头的视屏了?
那怎么停下来?再加个按钮caption设置成"停止"
代码如下:
if hWndC <> 0 then begin
SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0);
hWndC := 0;
end;
视屏截到了,怎么把它给保存下来呢?
下面按两种方式保存,一个是BMP静态图,一个是AVI动画。
再放三个按钮到窗体上去,caption分别设置成"保存BMP"、"开始录像"、"停止录像"
三个按钮的代码分别如下:
//保存BMP
if hWndC <> 0 then begin
SendMessage(hWndC,WM_CAP_SAVEDIB,0,longint(pchar('c:\test.bmp')));
end;
//开始录像
if hWndC <> 0 then
begin
SendMessage(hWndC,WM_CAP_FILE_SET_CAPTURE_FILEA,0, Longint(pchar('c:\test.avi')));
SendMessage(hWndC, WM_CAP_SEQUENCE, 0, 0);
end;
//停止录像
if hWndC <> 0 then begin
SendMessage(hWndC, WM_CAP_STOP, 0, 0);
end;
再运行看看吧。。可以保存几张图看看,也可以录成AVI以后慢慢欣赏。
程序运行效果:
screen.width-430)this.width=screen.width-430" align=center border=0>
完整的程序代码如下:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
hWndC : THandle;
public
{ Public declarations }
end;
var
Form1: TForm1;const WM_CAP_START = WM_USER;
const WM_CAP_STOP = WM_CAP_START + 68;
const WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10;
const WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11;
const WM_CAP_SAVEDIB = WM_CAP_START + 25;
const WM_CAP_GRAB_FRAME = WM_CAP_START + 60;
const WM_CAP_SEQUENCE = WM_CAP_START + 62;
const WM_CAP_FILE_SET_CAPTURE_FILEA = WM_CAP_START + 20;
const WM_CAP_SEQUENCE_NOFILE =WM_CAP_START + 63;
const WM_CAP_SET_OVERLAY =WM_CAP_START + 51;
const WM_CAP_SET_PREVIEW =WM_CAP_START + 50;
const WM_CAP_SET_CALLBACK_VIDEOSTREAM = WM_CAP_START + 6;
const WM_CAP_SET_CALLBACK_ERROR=WM_CAP_START + 2;
const WM_CAP_SET_CALLBACK_STATUSA= WM_CAP_START + 3;
const WM_CAP_SET_CALLBACK_FRAME= WM_CAP_START +5;
const WM_CAP_SET_SCALE=WM_CAP_START + 53;
const WM_CAP_SET_PREVIEWRATE=WM_CAP_START + 52;
function capCreateCaptureWindowA(lpszWindowName : PCHAR;
dwStyle : longint;x : integer;y : integer;nWidth : integer;
nHeight : integer;ParentWin : HWND;nId : integer): HWND;
STDCALL EXTERNAL 'AVICAP32.DLL';implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
hWndC := capCreateCaptureWindowA('My Own Capture Window',WS_CHILD or WS_VISIBLE ,Panel1.Left,Panel1.Top,Panel1.Width,Panel1.Height,Form1.Handle,0);
hWndC := capCreateCaptureWindowA('My Own Capture Window',WS_CHILD or WS_VISIBLE ,Panel1.Left,Panel1.Top,Panel1.Width,Panel1.Height,Form1.Handle,0);
if hWndC <> 0 then
begin
SendMessage(hWndC, WM_CAP_SET_CALLBACK_VIDEOSTREAM, 0, 0);
SendMessage(hWndC, WM_CAP_SET_CALLBACK_ERROR, 0, 0);
SendMessage(hWndC, WM_CAP_SET_CALLBACK_STATUSA, 0, 0);
SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 0);
SendMessage(hWndC, WM_CAP_SET_SCALE, 1, 0);
SendMessage(hWndC, WM_CAP_SET_PREVIEWRATE, 66, 0);
SendMessage(hWndC, WM_CAP_SET_OVERLAY, 1, 0);
SendMessage(hWndC, WM_CAP_SET_PREVIEW, 1, 0);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if hWndC <> 0 then begin
SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0);
hWndC := 0;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
if hWndC <> 0 then begin
SendMessage(hWndC,WM_CAP_SAVEDIB,0,longint(pchar('c:\test.bmp')));
end;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
if hWndC <> 0 then
begin
SendMessage(hWndC,WM_CAP_FILE_SET_CAPTURE_FILEA,0, Longint(pchar('c:\test.avi')));
SendMessage(hWndC, WM_CAP_SEQUENCE, 0, 0);
end;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
if hWndC <> 0 then begin
SendMessage(hWndC, WM_CAP_STOP, 0, 0);
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if hWndC <> 0 then begin
SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0);
end;
end;
end.注:经调试,录象部分好象不好使
问题在于,就是没有。我摄像头还是可以用。是不是还有其他更直接的。