首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > WinCE >

ov9650 VS2005应用程序设计,该怎么解决

2012-04-08 
ov9650 VS2005应用程序设计TQ2440板子,ov9650摄像头,用VS2005下的VC++编写应用程序,如何把OV9650 拍到的图

ov9650 VS2005应用程序设计
TQ2440板子,ov9650摄像头,用VS2005下的VC++编写应用程序,如何把OV9650 拍到的图像保存为BMP格式的文件?需要用到那些函数?如何得到数据缓冲区的地址?下面是部分驱动程序代码:
1、CIS_IoControl()中的一部分:
// for MPEG4
case CAM_IOCTL_GET_LATEST_FRAME:
RETAILMSG(MSG_EN_1,(TEXT("CAMERA:CAM_IOCTL_GET_LATEST_FRAME\r\n")));
if (frame_count < 2) {
RETAILMSG(1,(TEXT("CAMERA:CAM_IOCTL_GET_LATEST_FRAME - frame not available!!!\r\n")));
return FALSE;}
Tick_GET_FRAME_PREV = Tick_GET_FRAME_CUR;
Tick_GET_FRAME_CUR = GetTickCount();
Copy_Cam_Image(pBufOut, QCIF_XSIZE, QCIF_YSIZE, PORT_A);
break;

case CAM_IOCTL_SAMSUNG_CAM:// ID=0x520
RETAILMSG(MSG_EN_1,(_T("CAM_IOCTL_SAMSUNG_CAM\r\n")));
Samsung_camcoder(pBufOut);
break;

。。。。

2、Copy_Cam_Image(pBufOut, QCIF_XSIZE, QCIF_YSIZE, PORT_A)函数 一部分
  { 。。。
  pImage = pBufOut;
if (image_size == 1) // QCIF
Y_size = QCIF_XSIZE*QCIF_YSIZE;
else if (image_size == 2) // CIF
Y_size = CIF_XSIZE*CIF_YSIZE;

C_size = Y_size/4;
P_size = Y_size + C_size*2;
  。。。
  buffer_y += VIRTUAL_ADDR_OFFSET;
buffer_cb += VIRTUAL_ADDR_OFFSET;
buffer_cr += VIRTUAL_ADDR_OFFSET;
  。。。
  RETAILMSG(MSG_EN_1,(_T("pBufOut 0 offset = 0x%x\r\n"), pImage));
memcpy(pImage, &yuvinfo, sizeof(YUVINFO));
pImage += sizeof(YUVINFO);

RETAILMSG(MSG_EN_1,(_T("pBufOut Y = 0x%x\r\n"), pImage));
memcpy(pImage, buffer_y, Y_size);
pImage += (Y_size);

RETAILMSG(MSG_EN_1,(_T("pBufOut cb = 0x%x\r\n"), pImage));
memcpy(pImage, buffer_cb, C_size);
pImage += C_size;
RETAILMSG(MSG_EN_1,(_T("pBufOut cr = 0x%x\r\n"), pImage));
memcpy(pImage, buffer_cr, C_size);
  。。。
}

请问从驱动程序缓冲区的数据是不是可以通过 deviceIOcontrol 调用CAM_IOCTL_GET_LATEST_FRAME来读取并进一步保存为bmp格式图片?


[解决办法]
我也不知道。不过建议可以看看开发板上带的camera测试代码。里面应该有抓图的功能在里面。
[解决办法]
你这个读出来的是yuv格式的,需要转成rgb,或者看驱动支不支持抓取rgb格式的数据。Samsung_camcoder内容是什么?
[解决办法]
驱动输出的图片数据,要么是YUV数组,要么是RGB数组,弄清它们和BMP格式文件的转换即可。
[解决办法]
就你上面的代码就有保存了

CFile file(_T("image.bmp"),CFile::modeCreate|CFile::modeReadWrite
应该在我的设备下。
[解决办法]
可以的。是你头文件问题。嘿嘿。
[解决办法]

探讨
应该包含那个头文件?这是.cpp文件里的:
#include "stdafx.h"
#include "OV9650.h"
#include "OV9650Dlg.h"
#include "winioctl.h"
#include <stdlib.h>
请明示,呵呵

[解决办法]
楼主还是换回 wince5.0 吧。6.0 要我也没有保存过,5.0 就可以。

热点排行