CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  PowerBuilder >  API 调用

如何在PB的窗口中实时显示摄像头获取的图像?

楼主ljxsea(春雷)2005-11-08 00:17:38 在 PowerBuilder / API 调用 提问

最近做系统需要在PB的窗口中显示摄像头所采集到的图像(连续的画面),没接触过这方面的东西,不知如何去做,能否提供点思路或具体的实例。 问题点数:50、回复次数:11Top

1 楼leio((郁闷中...))回复于 2005-11-08 00:24:30 得分 20

下面是以前在网上看到的一段代码,没试过。  
   
  用   api     调用   摄像头   源码  
  //定义变量  
  uint   lhand  
   
   
   
  //定义常数  
  long   WM_USER=1024  
  long   WM_CAP_START   =   WM_USER    
  long   WM_CAP_STOP   =   WM_CAP_START   +   68    
  long   WM_CAP_DRIVER_CONNECT   =   WM_CAP_START   +   10    
  long   WM_CAP_DRIVER_DISCONNECT   =   WM_CAP_START   +   11    
  long   WM_CAP_SAVEDIB   =   WM_CAP_START   +   25    
  long   WM_CAP_GRAB_FRAME   =   WM_CAP_START   +   60    
  long   WM_CAP_SEQUENCE   =   WM_CAP_START   +   62    
  long   WM_CAP_FILE_SET_CAPTURE_FILEA   =   WM_CAP_START   +   20    
  long   WM_CAP_SEQUENCE_NOFILE   =WM_CAP_START+     63    
  long   WM_CAP_SET_OVERLAY   =WM_CAP_START+     51    
  long   WM_CAP_SET_PREVIEW   =WM_CAP_START+     50    
  long   WM_CAP_SET_CALLBACK_VIDEOSTREAM   =   WM_CAP_START   +6    
  long   WM_CAP_SET_CALLBACK_ERROR=WM_CAP_START   +2    
  long   WM_CAP_SET_CALLBACK_STATUSA=   WM_CAP_START   +3    
  long   WM_CAP_SET_CALLBACK_FRAME=   WM_CAP_START   +5    
  long   WM_CAP_SET_SCALE=WM_CAP_START+     53    
  long   WM_CAP_SET_PREVIEWRATE=WM_CAP_START+     52    
   
   
   
  //定义api  
  function   ulong   capCreateCaptureWindowA(string   lpszWindowName,ulong   dwStyle,long   x   ,long   y   ,long   nWidth   ,long   nHeight   ,ulong   ParentWin   ,long     nId   )   LIBRARY   'AVICAP32.DLL'    
   
   
   
  //初始化代码  
  string   lpszName  
  ulong   l1  
  l1=handle(w_main)  
   
   
   
  lpszName='摄像头界面...'  
  lhand=capCreateCaptureWindowA(lpszName,262144+12582912+1073741824   +   268435456   ,0,0,200,200,l1,0)  
  if   lhand   <>   0   then        
      send(lhand,   WM_CAP_SET_CALLBACK_VIDEOSTREAM,   0,   0)    
      send(lhand,   WM_CAP_SET_CALLBACK_ERROR,   0,   0)    
      send(lhand,   WM_CAP_SET_CALLBACK_STATUSA,   0,   0)    
      send(lhand,   WM_CAP_DRIVER_CONNECT,   0,   0)    
      send(lhand,   WM_CAP_SET_SCALE,   1,   0)    
      send(lhand,   WM_CAP_SET_PREVIEWRATE,   66,   0)    
      send(lhand,   WM_CAP_SET_OVERLAY,   1,   0)  
      send(lhand,   WM_CAP_SET_PREVIEW,   1,   0)    
  end   if  
   
   
   
  //保存到文件  
  string   s  
  s='c:\save.avi'  
  if   lhand<>0   then  
  Send(lhand,WM_CAP_FILE_SET_CAPTURE_FILEA,0,   s);  
  Send(lhand,WM_CAP_SEQUENCE,   0,   0)     //开始捕捉  
  end   if  
   
   
   
  //停止保存  
      send(lhand,   WM_CAP_STOP,   0,   0)    
   
   
   
  //保存为图片  
  string   s  
  s='c:\save.bmp'  
  if   lhand   <>   0   then    
  Send(lhand,WM_CAP_SAVEDIB,0,s);  
  end   if  
   
   
   
  //没有摄像头的可以去下载一个如下的软件,可以虚拟摄像头(此软件可以放一个电影,代替正常摄像头的摄像内容)  
  Vandate   Virtual   Camera   虚拟摄像头   1.5.1.exe  
   
   
  Top

2 楼ljxsea(春雷)回复于 2005-11-13 19:39:23 得分 0

这个代码我试了下,完全可以的(我用的是普通摄像头)。。多谢了!  
   
  另外我还有个疑问:如果用数据采集卡来控制二路摄像头,原理是否是一样的呢?  
   
  厂家会提供dll吗?Top

3 楼ctgu420(星期五打开水)回复于 2005-12-06 14:25:51 得分 5

那我想问问楼上的,怎么才可以截屏呢?类似于qq里面拍照的功能一样?有没有思路?Top

4 楼ctgu420(星期五打开水)回复于 2005-12-06 14:34:09 得分 0

以前听人说过directshow可以实现这样的功能,不知道哪个大哥有这样的经验。分享一下  
   
  Top

5 楼21cnwzh(21cnwzh)回复于 2005-12-11 21:48:58 得分 5

可不可以直接保存影像文件,并按时间调取出来图像呢,有没有人作过?Top

6 楼nimittz(尼米兹---------努力升星GOGOGO)回复于 2005-12-12 09:55:23 得分 5

可以的,用api  
  先getdc,然后...自己看看gdi的例子吧  
  相关函数getdc,createcompatiblebitmap,bitbltTop

7 楼nimittz(尼米兹---------努力升星GOGOGO)回复于 2005-12-12 09:56:26 得分 5

注意是截屏,但是不能截取影像Top

8 楼fossil2000(黑手书生)回复于 2006-02-08 20:15:48 得分 5

我问一下,函数定义这句代码写在什么地方?我怎么COPY到PB到放在那儿都是报告错误?请指点下。function   ulong   capCreateCaptureWindowA(string   lpszWindowName,ulong   dwStyle,long   x   ,long   y   ,long   nWidth   ,long   nHeight   ,ulong   ParentWin   ,long     nId   )   LIBRARY   'AVICAP32.DLL'    
  Top

9 楼wtsinghai(纵行无忌)回复于 2006-03-16 13:06:24 得分 5

要放local   external   functions   或   Global   external   functions中  
  Top

10 楼baitao79()回复于 2006-05-02 10:42:10 得分 0

string   s  
  s='c:\save.avi'  
  if   lhand<>0   then  
  Send(lhand,WM_CAP_FILE_SET_CAPTURE_FILEA,0,   s);  
  Send(lhand,WM_CAP_SEQUENCE,   0,   0)     //开始捕捉  
  end   if  
   
   
   
  //停止保存  
      send(lhand,   WM_CAP_STOP,   0,   0)    
   
   
   
  //保存为图片  
  string   s  
  s='c:\save.bmp'  
  if   lhand   <>   0   then    
  Send(lhand,WM_CAP_SAVEDIB,0,s);  
  end   if  
  拍照&摄像功能为什么没用,但也不报错?在线等待,谢谢高手指点!急!Top

11 楼ctgu420(星期五打开水)回复于 2006-06-02 11:15:49 得分 0

继续想问一下,我调试了以上的代码是没有问题的。但是比如我希望在图象上面画一个框,截取框内的图象,这有没有啥好方法啊?Top

相关问题

  • 如何获取摄像头的图像
  • 如何获取usb接口摄像头采集的图像数据
  • 搞过摄像头的大虾请问:获取摄像头WebCam拍摄图像中的一帧该用什么函数?
  • (求问各位大虾)我用摄像头获取的图像数据有问题?????求!!!!!
  • 如果得到摄像头图像?
  • 关于利用数字摄像头捕捉图像
  • linux下如何做摄像头的图像捕捉!
  • 求用DirectShow通过摄像头采集图像程序!
  • 请教:如何在VC/VB中捕获摄像头图像?
  • 我要如何编程才能从摄像头取到图像??

关键词

  • 图像
  • pb
  • 代码
  • start
  • lhand
  • cap
  • wm
  • 摄像头
  • start+
  • 保存

得分解答快速导航

  • 帖主:ljxsea
  • leio
  • ctgu420
  • 21cnwzh
  • nimittz
  • nimittz
  • fossil2000
  • wtsinghai

相关链接

  • PowerBuilder类图书
  • PowerBuilder类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo