在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); //释放位图句柄资源,减少内存消耗 |