18,356
社区成员
发帖
与我相关
我的任务
分享
void CquickViewClientView::OnDraw(CDC* pDC)
{
//socket服务器端连接的代码
char bmpInfo[100]; //接收图像头部信息的结构体
BMP_Info bInfo;
int flag1 =recv(sockConn,bmpInfo,sizeof(bmpInfo), 0);
memcpy(&bInfo,bmpInfo,sizeof(bInfo));
//接收图像数据
unsigned char *pBmpBuf; //读入图像数据的指针
//char imgBuffer[435600]; //接收图像数据缓存
int dataSize=bInfo.lineByte*bInfo.bmpHeight;
pBmpBuf=new unsigned char[dataSize]; //接收图像数据缓存
int flag=0;
//flag =recv(sockConn,imgBuffer,sizeof(imgBuffer),0);
flag =recv(sockConn,(char*)pBmpBuf,dataSize,0);
if(flag>0) //判断有图像数据
{
……
//写位图信息头进内存
fwrite(&head, sizeof(BITMAPINFOHEADER),1, fp);
//如果灰度图像,有颜色表,写入文件
if(bInfo.biBitCount==8)
fwrite(pColorTable, sizeof(RGBQUAD),256, fp);
//写位图数据进文件
fwrite(pBmpBuf,bInfo.bmpHeight*lineByte,1,fp);
//fwrite(imgBuffer, bInfo.bmpHeight*lineByte,1,fp);
//关闭文件
fclose(fp);
//此处本地文件夹可以成功保存传输过来的bmp图片
StretchDIBits(pDC->GetSafeHdc(),0,0,bInfo.bmpWidth,bInfo.bmpHeight,0,0,bInfo.bmpWidth,bInfo.bmpHeight,pBmpBuf,(BITMAPINFO*)&head,DIB_RGB_COLORS,SRCCOPY);
//显示出来有问题?
//清除缓冲区
delete []pBmpBuf;
if(bInfo.biBitCount==8)
{
delete []bInfo.pColorTable;
}
}
}