我使用的是windowsCE5.0,evc4.0+sp2,平台是eboxII,建立的是MFC应用程序工程。
我使用摄像头已经取得了一帧图像,经过YUV到RGB的转换,存储在一个unsigned char*的缓冲区中,而且本地显示正常。现在我试图将此缓冲区中的图像数据通过带连接的CSocket进行到传输,到一台电脑上。我看了一些资料说像类似的存储在缓冲区中的位图为DDB即设备相关位图,只能存在于内存,显存或者说当前的会话生存期内,是高度依赖于设备的。所以DDB很不适合图像交换和传输。
而我认为自己编写的发送和接收语句都没有问题,根据调试的提示信息说明数据字节们是成功发送和接收了的。那么现在我在电脑上的接收端接收后无法显示任何图像,是因为所传输的是DDB位图图像数据的原因吗?
那么请教大家,怎样才能将存储在一个缓冲区中的DDB位图图像数据转化为DIB类型的呢?还有在接收之后又如何显示到比如picture control的控件上呢?有没有高手做过类似的啊...我弄了好几天,没什么进展。
请大家不吝赐教,最好能给出一些示例代码。
唉 大家就没有知道的么..
高手们 版主们 现身吧
收下来的数据能否存成文件形式? 然后再看看。
建议:
1. 在发送端也存一个文件
2. 在接收端也存一个文件
3. 对比这两个文件,看看是否存的一样。
又新开一个帖子了。
你首先要保证接收到的信息是正确的。
不知道你怎么通过调试信息来得知收到的信息就是能正确显示的信息?
楼上说的也是一个方法。
然后才是考虑怎么显示的问题。
总之,你要一个个的解决你的问题。
新开个帖子是因为我觉得问题变了啊...接受和发送一点问题都没有 我觉得就是DDB位图不支持直接交换的问题 必须先转换成DIB的...我想的不知对不对 唉
这个问题并不复杂。你应该是不了解图象处理造成的。
摄像头直接拍摄成YUV和RGB都可以直接传输。你已经转成RGB的话,这不叫DDB数据,就是普通的RAWDATA,你只需要知道宽度高度,还有像素位数,就可以重建DIB和BITMAP(CreateBitmap),但是你首先要知道位图的结构。
谢谢各位的关注了
那请问nbcool一下,我下面写的本地显示的代码有什么错误吗...为何就是显示不了啊
CBitmap bitmap;
BOOL result;
result=bitmap.CreateBitmap(320,240,1,24,display);//display是缓冲区 是通过CSocket的Receive得到的
//通过判断Receive的返回值 应该没错 是传输以前的大小
if(result==TRUE)
{
AfxMessageBox(L"Succeeded to create bitmap.");
}
else
{
AfxMessageBox(L"Failed to create bitmap.");
return;
}
CWnd* pWnd=GetDlgItem(IDC_REMOTEVIDEO);
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();
还有就是,请问一下,您所指的位图的结构具体是指哪些内容呢?我真的对图像的知识不是很丰富,第一次编写与处理图像相关的程序。谢谢帮助!
bitmapDC.DeleteDC();
这句话对吗?
还是应该为 DeleteDC(bitmapDC); //????
大家觉得呢?