发新话题
打印

wince摄像头编程

wince摄像头编程


在wince下我想通过摄像头抓取一幅图,并将图像数据显示出来。
现在的做法是点击一个按钮,分别执行
DeviceIoControl(m_hled,CAM_IOCTL_GET_LATEST_FRAME,NULL,NULL,image,NULL,NULL,NULL);
DeviceIoControl(m_hled,CAM_IOCTL_SAMSUNG_CAM_PR,NULL,NULL,image,NULL,NULL,NULL);
得到RGB图像数据,然后将image文件保存:
CFile file(_T("image"),CFile::modeCreate|CFile::modeReadWrite);
file.Write(image,640*480);
file.Close();
通过观察image中的数据发现image中只存了部分数据,后面大部分都是0,不知道为什么没有得到全部的数据信息?
想问问大家有没有碰到这个问题?或者大家有没有更好的方法得到一幅图像数据并显示?

TOP

一、DeviceIoControl(m_hled,CAM_IOCTL_GET_LATEST_FRAME,NULL,NULL,image,NULL,NULL,NULL);


      得到的是YCbCr数据,需要自己编写算法转成JPG格式。


二、DeviceIoControl(m_hled,CAM_IOCTL_SAMSUNG_CAM_PR,NULL,NULL,image,NULL,NULL,NULL);
      得到的是一个结构体,里面有RGB数据的地址


      typedef struct PINGPONG_PR
      {
           unsigned int rgb_address;
           unsigned char flag;  
      } PINGPONG_PR;


      得到的RGB数据,还需自己编写算法转为BMP格式。

TOP

liyutai_shi, 你好,我的程序大致如下:


 


BYTE *image=(BYTE*)malloc(640*480);
 memset(image,0,640*480);
 BOOL ret; 


 


 ret=DeviceIoControl(m_hled,CAM_IOCTL_GET_LATEST_FRAME,NULL,NULL,image,NULL,NULL,NULL);
 if(!ret)
  AfxMessageBox(_T("读取最后一帧失败!")); 
 else
 {
  CFile file(_T("image"),CFile::modeCreate|CFile::modeReadWrite);
  file.Write(image,640*480);
  file.Close();
 }
 free(image);



先执行DeviceIoControl(m_hled,CAM_IOCTL_GET_LATEST_FRAME,NULL,NULL,image,NULL,NULL,NULL);
得到YCbCr数据,并将image文件保存,在xp中打开image发现其中的数据只有38028个,后面的全是0,
因为image分配的大小是640*480,所以对image加上文件头并保存为bmp打开后发现只有一部分画面。
请问CAM_IOCTL_GET_LATEST_FRAME使摄像头一次采集的数据就是这么多?还是其他的原因导致得到的数据不全(不足一帧)?如果能使image中的数据个数为640*480,后面的处理就好办了

TOP

如果你打算保存为位图,应使用CAM_IOCTL_SAMSUNG_CAM_PR去获取RGB数据.一帧的大小为640*480*2BYTE.


我们公司已有示例程序,可发邮件索取。

TOP

摄像头

你好。。麻烦给我发一份好么??我最近也在做这个。。谢谢先。。


我的邮箱:    fengling963@126.com

TOP

我在存储时,怎么也读不到数据,可不可以发一份给我,参考下,谢了。wangen2006@yahoo.com.cn

TOP

我也搞不定,好难。

TOP

发新话题