我在服务器端定义一个变量:BYTE ImageBuffer[1024*910];
然后通过
m_nCount=bm.GetBitmapBits(1024*910,ImageBuf);//将图像的位信息写入到指定的缓冲中
这样,位图的信息存储在缓冲中。经过中间的消息传送(通过Windows Socket),到达客户端,在客户端已经接收到ImageBuffer[1024*910];
现在我想在客户端显示这个位图,需要怎样操作?
我试着使用CBitmap bm;
bm.SetBitmapBits(m,ImageBuffer);//m即为要设置位的数目
可是返回值为0,有没有人有现成的例子可供享用?
然后通过
m_nCount=bm.GetBitmapBits(1024*910,ImageBuf);//将图像的位信息写入到指定的缓冲中
这样,位图的信息存储在缓冲中。经过中间的消息传送(通过Windows Socket),到达客户端,在客户端已经接收到ImageBuffer[1024*910];
现在我想在客户端显示这个位图,需要怎样操作?
我试着使用CBitmap bm;
bm.SetBitmapBits(m,ImageBuffer);//m即为要设置位的数目
可是返回值为0,有没有人有现成的例子可供享用?
解决方案 »
- win7 禁止或阻止笔记本合上盖进入休眠或睡眠.
- 菜单问题各位帮忙解决一下```~在线等待
- 简单的dcom设置问题,成功后给200分,up有分
- 寻找一种简便的文档读写特定数据方法[高分]
- 调用api函数使用双缓冲方式在窗口中画线时的问题
- 有关文件映射问题,请各位指点!
- 显示数据如何换行???????????
- 那里有《Windows程序设计》那本书下载?
- 请教TCHAR.H 和 WINNT.H 头文件的区别,以及_UNICODE 和 UNICODE 宏的区别
- 怎样使 用ADO Extensions来绑定数据库中的一个大字段,如存放jpeg文件数据的字段
- 问一个问题,我电脑重装了,以前的软件还能用吗
- CEditView取消自动换行
BITMAP bm1;
int x,y,i=0;
GetClientRect(&rect);
mdc = new CDC;
bitmap = new CBitmap;
bgbmp = new CBitmap;
mdc->CreateCompatibleDC(dc); //建立与dc兼容的DC
bgbmp->m_hObject = (HBITMAP)::LoadImage(NULL,"E:/代码集中营/ZSFTest/半透明效果/bground.bmp",IMAGE_BITMAP,rect.right,rect.bottom,LR_LOADFROMFILE); //载入背景图
bitmap->m_hObject = (HBITMAP)::LoadImage(NULL,"E:/代码集中营/ZSFTest/半透明效果/girl.bmp",IMAGE_BITMAP,298,329,LR_LOADFROMFILE); //载入源位图
bitmap->GetObject(sizeof(BITMAP),&bm1); //取得 bitmap 位图的信息
BYTE *px = new BYTE[bm1.bmHeight*bm1.bmWidthBytes]; //声明暂存数组
bitmap->GetBitmapBits(bm1.bmHeight*bm1.bmWidthBytes,px); //取得源位图各像素点的 RGB 值存入 px 数组中
for(y=0;y<bm1.bmHeight;y++)
for(x=0;x<bm1.bmWidth;x++)
{
BYTE red,green,blue;
red=((px[y*bm1.bmWidthBytes+2*x+1]&0xF8)>>3)/2;
green=(((px[y*bm1.bmWidthBytes+2*x+1]&0x07)<<3)+((px[y*bm1.bmWidthBytes+2*x]&0xE0)>>5))/2;
blue=(px[y*bm1.bmWidthBytes+2*x]&0x1F)/2; px[y*bm1.bmWidthBytes+2*x]=(green&0x07<<5)+blue;
px[y*bm1.bmWidthBytes+2*x+1]=(red<<3)+((green&0x38)>>3);
}
bgbmp->GetObject(sizeof(BITMAP),&bm);
BYTE *px1 = new BYTE[bm.bmHeight*bm.bmWidthBytes];
bgbmp->GetBitmapBits(bm.bmHeight*bm.bmWidthBytes,px1);
for(y=100;y<100+bm1.bmHeight;y++)
for(x=150;x<150+bm1.bmWidth;x++)
{ BYTE red,green,blue;
red=((px1[y*bm.bmWidthBytes+2*x+1]&0xF8)>>3)/2;
green=(((px1[y*bm.bmWidthBytes+2*x+1]&0x07)<<3)+((px1[y*bm.bmWidthBytes+2*x]&0xE0)>>5))/2;
blue=(px1[y*bm.bmWidthBytes+2*x]&0x1F)/2; px1[y*bm.bmWidthBytes+2*x]=(green&0x07<<5)+blue+px[i];
px1[y*bm.bmWidthBytes+2*x+1]=(red<<3)+((green&0x38)>>3)+px[i+1]; i=i+2;
}
bgbmp->SetBitmapBits(bm.bmHeight*bm.bmWidthBytes,px1);
mdc->SelectObject(bgbmp);
delete px;
delete px1;