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
应该在我的设备下。
[解决办法]
可以的。是你头文件问题。嘿嘿。
[解决办法]