打印

OV7670+FPGA读取一帧图像数据

[复制链接]
1773|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fj017|  楼主 | 2014-6-12 14:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在Cypress提供的上位机Bulkloop块传输例子中采集一帧640*480的图像数据,然后生成BMP图像,但是始终不能采集完全一帧数据(307200字节),xfer<307200,不知道为什么会小于307200,是因为时间延迟还是需要添加其他命令方式控制下位机,已经困扰了好多天。在采集代码的函数中首先用控制端点发送请求,然后用块传输接收数据,采集函数代码如下:

LONG xfer = 640*480; //每次读取数据的大小
bool success;
//传输命令
CtlEndpt->Target    = TGT_DEVICE;
CtlEndpt->ReqType   = REQ_VENDOR;
CtlEndpt->Direction = DIR_TO_DEVICE;
CtlEndpt->ReqCode   = 0xa1;
CtlEndpt->Value     = 0;
CtlEndpt->Index     = 0;

PUCHAR buf1=new UCHAR[1];   
ZeroMemory(buf1, 1);   
LONG buflen =  1;   
buf1[0]=0xa1;   
CtlEndpt->XferData(buf1,buflen);

BulkInEpt->TimeOut = 200;
success = BulkInEpt->XferData(rgb565Buf, xfer);
CString str;
str.Format("%d",xfer);  //xfer<307200,不知道为什么会小于307200,
MessageBox(str);
if(false == success)
{
delete [] buf1;
return;
}
delete [] buf1;
//bayer数据格式转换为RGB888格式
BayerToRGB24(rgb565Buf,rgb24Buf,bmpWidth,bmpHeight);
ReverseImage(rgb24Buf); //反转图像数据
//将图像数据存盘
char writePath[]="Bayer8ToRGB24.bmp";

//保存为bmp图像

SaveBmp(writePath, rgb24Buf, bmpWidth, bmpHeight, 24, pColorTable);
//在界面上进行图像的显示
HBITMAP hbitmap;
hbitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),"..\\CyUSBDevice\\Bayer8ToRGB24.bmp",
IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION);
m_staticBmp.SetBitmap(hbitmap);
DeleteObject(hbitmap);  //释放位图句柄资源,减少内存消耗
沙发
fj017|  楼主 | 2014-6-12 18:13 | 只看该作者
本帖最后由 fj017 于 2014-6-16 13:30 编辑

已实现功能,该贴已结

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

粉丝