我是使用摄像头获取一帧图像。
已经通过DeviceIOControl从摄像头上获得了当前拍摄的一帧图像(存储在一个unsigned char*类型的缓冲区中而不是图像文件,因此我觉得传输应不需要那些文件头文件信息之类的,不知对否),并且在从YUV转换为RGB后本地显示正常。接下来我试图使用CSocket,通过有连接的套接字将这帧图像传输到用网线连接的一台笔记本上。
即,发送端建立套接字并监听,接收端进行Connect。
现在,字符串的传输我经过调试已经完全正常。可是当我进行图像数据的发送,接收和显示时出了问题,笔记本端既不现实任何图像,跟踪调试程序也不能观察到我需要看到的变量值,比如一些起计数器作用的整型变量都不显示。而且有时运行程序时还会死机。
因此,请教大家,对于缓冲区中的图像数据,应该如何进行传输和接收?在接收后又应如何进行图像的显示。注:使用的是C++ mfc应用程序。
请大家不吝解答,如方便请给出相应的代码,在这儿先谢过了
我编写的发送端的发送和本地显示的代码如下:
         PBYTE data = pBmpData;//获得的图像数据在这个缓冲区中,大小为230400字节,本地显示正常
unsigned char* send = (unsigned char*)malloc(2304);//我试图每次发送2304字节,不知这样能实现否
PBYTE shit = send;
long int num=0;
int i=0;
CString inf;
while(num<230400)
{
memmove(shit,data,2304);
data+=2304;
num+=2304;                           //发送,不知是否能够实现,问题应该就出在这块
m_socketSend.Send(send,2304,0);      //但我没想出还可以怎样实现,请教大家
}

inf.Format(L"%ld Bytes sent!",num);
AfxMessageBox(inf); //显示出来
CBitmap bitmap;

bitmap.CreateBitmap(320,240,1,24,pBmpData);//创建位图 CWnd* pWnd=GetDlgItem(IDC_REMOTEVIDEO);//这个控件为picture control
pWnd->UpdateWindow();

CDC* pDC=pWnd->GetDC();//获得当前控件的设备上下文
CDC bitmapDC;

bitmapDC.CreateCompatibleDC(pDC);//创建与设备适配的设备上下文
CBitmap* pOldBitmap = bitmapDC.SelectObject(&bitmap);//加载位图
pDC->BitBlt(0,0,320,240,&bitmapDC,0,0,SRCCOPY);//拷贝到当前的设备上下文中
bitmapDC.SelectObject(pOldBitmap);
bitmapDC.DeleteDC();
bitmap.DeleteObject();//使用后释放资源