怎样用DELPHI接收摄像头的图象
怎样用DELPHI接收摄像头的图象 问题点数:0、回复次数:67Top
1 楼whbo(王红波(年轻人,要有所作为))回复于 2004-10-02 01:08:38 得分 0
很有难度的问题,跟楼主学习,关注。。。Top
2 楼gemouzhi(^_^)回复于 2004-10-02 02:46:16 得分 0
网上很多例子
Top
3 楼qiqi9709(qiqi9709)回复于 2004-10-13 23:27:11 得分 0
代码:
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;
Top
4 楼ForEverKissing(永爱文)回复于 2004-10-14 15:14:37 得分 0
如何将保存的.avi图像文件进行压缩?Top
5 楼query008(新新人类)回复于 2004-10-14 23:29:04 得分 0
AVI TO MPEG的有很多代码Top
6 楼Crystal_Boy(加加)回复于 2004-10-18 16:32:38 得分 0
用Dspack控件,那里面有例子Top
7 楼coder_yjm(不进则退,天天向上)回复于 2004-10-20 12:07:48 得分 0
高!我灌下水!学习中!Top
8 楼old_wei(老魏)回复于 2004-10-20 22:37:58 得分 0
那如何改变采集图象的分辨率呢?默认是160*120,要变成320*240该怎样设置?
Top
9 楼Javpp(0)(1)(2)(3)(4)(5)(6)(7)(8)(9)回复于 2004-10-20 23:19:02 得分 0
做个记号咯Top
10 楼zzlingaaa(小舟)回复于 2004-11-23 12:13:16 得分 0
markTop
11 楼progray(千重劫)回复于 2004-11-24 20:40:10 得分 0
markTop
12 楼realhero(虚心学习,天天向上)回复于 2004-11-25 09:19:07 得分 0
markTop
13 楼Hovers(〓扶摇直上〓)回复于 2004-11-25 14:10:55 得分 0
高Top
14 楼cg2004ren(程序人生)回复于 2005-01-15 11:33:58 得分 0
upTop
15 楼terrytzq(边缘)回复于 2005-01-15 12:17:35 得分 0
学习Top
16 楼geoffrey9043(鑫鑫)回复于 2005-01-18 00:46:37 得分 0
qiqi9709(qiqi9709) 就是用DELPHI使用MS的AVICAP32.DLL实现的对摄像头编程,至于别的功能网上的例子也蛮多的,找来看看应该能明白的呵Top
17 楼gfz007(gfz007)回复于 2005-01-18 01:14:32 得分 0
xiexie收藏....Top
18 楼blazeworld(笨鸟先飞)回复于 2005-01-18 09:49:17 得分 0
路过,很精彩,
顶下Top
19 楼ma007(machao)回复于 2005-02-28 20:36:56 得分 0
markTop
20 楼lc0012(hezhongxia)回复于 2005-02-28 21:46:52 得分 0
这里最好的调用方法,我也用。。。。。呵呵Top
21 楼lc0012(hezhongxia)回复于 2005-02-28 21:48:42 得分 0
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
uses math; //这个也是最重要的,不然有个类型的变量不可以定义哦。
{$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;Top
22 楼skynew2004(总想让别人帮我一下。skynew.ys168.com)回复于 2005-02-28 22:34:39 得分 0
要不我发一个例子给你,但你好像不给分?Top
23 楼wuyu1981(方圆)回复于 2005-03-01 11:24:54 得分 0
学习ingTop
24 楼Erice(白雪公猪)回复于 2005-03-01 11:45:33 得分 0
UpTop
25 楼cclzlj(美女不上勾)回复于 2005-03-01 11:57:52 得分 0
顶顶看Top
26 楼caiso(十年磨一剑)回复于 2005-03-04 10:51:00 得分 0
顶一下Top
27 楼thirdapple(.:RNPA:.陨落雕 - 芝兰宝树)回复于 2005-03-05 14:47:41 得分 0
dspackTop
28 楼force2004(牛牛)回复于 2005-03-06 11:48:43 得分 0
收藏!Top
29 楼uptrend()回复于 2005-03-07 09:57:50 得分 0
我觉得是不是找一个摄像头的sdk就可以了呢?关注中Top
30 楼proman()回复于 2005-03-22 15:29:45 得分 0
我正需要这个,试试看。Top
31 楼richwin99(cimzhou)回复于 2005-03-23 16:09:58 得分 0
这里有成熟的控件
www.mvchat.zj.com
可以免费使用Top
32 楼heluqing(鉴之小河〖劳累求充实〗)(vcl .net)回复于 2005-03-23 16:51:09 得分 0
做个记号,往后可能用的到...Top
33 楼xiangyx(至尊宝.结贴我一向很准时)回复于 2005-03-23 17:07:13 得分 0
这么好的帖子顶一下Top
34 楼lyhsprite(独孤求爱)回复于 2005-03-24 14:35:32 得分 0
markTop
35 楼jianping0(ljp)回复于 2005-03-24 15:44:59 得分 0
↑Top
36 楼BurningIces(焰燃冰)回复于 2005-03-24 17:31:52 得分 0
存Top
37 楼waysoft(华子)回复于 2005-03-24 17:38:19 得分 0
学习Top
38 楼studysuneck(才疏学浅)回复于 2005-03-26 11:21:41 得分 0
建议置顶!!!!!Top
39 楼king_xing(红枫叶)回复于 2005-03-27 03:05:25 得分 0
有一点让我疑惑,怎么出的例子连续二次调用hWndC := capCreateCaptureWindowA('My Own Capture Window',WS_CHILD or WS_VISIBLE ,Panel1.Left,Panel1.Top,Panel1.Width,Panel1.Height,Form1.Handle,0),而且参数一样!
请教!!Top
40 楼caiso(十年磨一剑)回复于 2005-03-27 08:33:41 得分 0
帮顶一下Top
41 楼jackyhuo(jacky)回复于 2005-04-09 15:11:57 得分 0
upTop
42 楼force2004(牛牛)回复于 2005-04-11 21:22:11 得分 0
upTop
43 楼quicksand201(流沙)回复于 2005-04-11 22:43:00 得分 0
upTop
44 楼xthmpro_cn([可人])回复于 2005-04-11 23:05:14 得分 0
MARKTop
45 楼Stiven_PFan(爱卿儿)回复于 2005-04-12 08:45:37 得分 0
http://dev.csdn.net/article/54/54244.shtm
这里说得很详细Top
46 楼njwangke(飞翔的大象)回复于 2005-04-12 08:48:42 得分 0
应该有OCX控件的,而且控件会提供相关的属性和方法供设置和调用。Top
47 楼lzwei3842(赐缘)回复于 2005-04-13 21:59:18 得分 0
值得学习Top
48 楼swei56(泥巴)回复于 2005-04-13 22:12:02 得分 0
scTop
49 楼jilu_sun(Godfather)回复于 2005-04-18 08:31:08 得分 0
学习!Top
50 楼longjiang_m(笨笨)回复于 2005-04-20 09:30:28 得分 0
最简单的办法是:你下载一个dspack2.31(免费的)的组件安装上,然后看看里面demo,有完整的例子,如果你要求不高的话,他的例子可以直接使用了,Top
51 楼neo40(企鹅)回复于 2005-04-21 10:56:49 得分 0
http://community.csdn.net/Expert/topic/3881/3881464.xml?temp=2.886599E-02Top
52 楼woundedsoul(MissWolf)回复于 2005-05-03 09:41:54 得分 0
强!做过标记!嘿嘿Top
53 楼xfpjl(妖道)回复于 2005-08-14 10:16:05 得分 0
0
Top
54 楼zousoft(菜菜鸟的战斗诗歌)回复于 2005-08-14 13:10:52 得分 0
这里有几个c++实现的方法,delphi其实也是用delphi语法调用他们。
http://dev.csdn.net/develop/article/44/44105.shtm
http://dev.csdn.net/develop/article/74/74480.shtm
http://dev.csdn.net/develop/article/74/74565.shtmTop
55 楼anonymous1982(kevin)回复于 2005-08-18 12:25:13 得分 0
up,
收藏Top
56 楼amdwinter(我不是好人)回复于 2005-08-18 12:59:10 得分 0
记号Top
57 楼decal(我用DELPHI)回复于 2005-08-18 15:33:08 得分 0
用DSPACK吧,很方便的Top
58 楼apple058(浪迹天涯)回复于 2005-08-19 14:04:30 得分 0
收藏Top
59 楼dqxLang(飞翔)回复于 2005-08-21 22:10:37 得分 0
收藏
Top
60 楼cncharles(旺仔)回复于 2005-08-22 08:19:49 得分 0
markTop
61 楼chenzunshi3()回复于 2005-08-22 11:10:28 得分 0
http://www.somade.com/是个很专业的技术社区,去那里找找吧,或许有你要的答案~Top
62 楼liu_z_x(007)回复于 2005-08-22 11:21:04 得分 0
markTop
63 楼apple058(浪迹天涯)回复于 2005-08-22 13:27:43 得分 0
=====================================================
=====================================================
我很想知道
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;
中 WM_USER,WM_CAP_START,WM_CAP_START....
这些常量你们是怎么知道的?
有这方面的帮助文档吗?
这些是API方面的知识吗?
我如果需要实现别的功能又应该是那些常量呢?
谢谢
=====================================================
=====================================================Top
64 楼syfly739(飞仔)回复于 2005-08-22 15:03:14 得分 0
路过,学习,marking......Top
65 楼hansonboy(hansonboy)回复于 2005-08-30 13:50:56 得分 0
报到Top
66 楼myboor(菜菜菜鸟)回复于 2005-08-30 14:31:06 得分 0
markTop
67 楼DelphiKey3()回复于 2005-09-02 17:41:23 得分 0
网上大把这样的代码,搜一下就OK了,楼主也是怎么还不结帖Top




