我在服务器端定义一个变量: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,请问怎么办?
解决方案 »
- WideCharToMultiByte的问题
- Windows编程简单问题
- 如果要捕获某应用程序的所有输入消息,是要安装键盘和鼠标两个钩子吗?
- 关于CCombobox
- 怎么在一个listbox的每条输出数据前加上时间显示
- 大放分,最真心祝愿FreeSeagull (孤海闲鸥) 手术顺利成功!!!!!!!!!!!!!来者有分!
- 请教工作者线程问题
- 请问该函数返回的句柄中包含结构BITMAPFIELHEADER吗?
- 为什么数据库打开是只读的呢?
- MFC的CButton及CEdit的text内容被莫名清空
- 求助:如何响应delete键删除组合框下拉之后处于焦点的条目
- 请教:插入的时候中文的就出错,英文和数字没问题,不知道怎么回事啊
typedef struc tagBITMAPFILEHEADER{
WORD bfType;
WORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
WORD bfOffBits;
}BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER, *PBITMAPFILEHEADER;
该结构的长度是固定的,为14个字节,各个域的说明如下:
 bfType:指定文件类型,必须是0x4d42,即字符串“BM”。
 bfSize:指定文件大小,包括这14个字节。
 bfReserved1,bfReserved2:保留字,为0。
 bfOffBits:从文件头到实际的位图数据的偏移字节数,即图1中前三个部分的长度之和。
2、 第二部分为位图信息头BITMAPINFOHEADER,它也是一个结构,其定义如下:
typedef struc tagBITMAPINFOHEADER{
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
}BITMAPINFOHEADER, FAR *LPBITMAPINFOHEADER, *PBITMAPINFOHEADER;
该结构的长度也是固定的,为40个字节,各个域的说明如下:
 biSize:指定这个结构的长度,为40个字节。
 biWidth:指定图像的宽度,单位是象素。
 biHeight:指定图像的高度,单位是象素。
 biPlanes:必须是1。
 biBitCount:指定表示颜色时用到的位数,常用的值为1(黑白二色图)、4(16色图)、8(256色图)、24(真彩色图)。
 biCompression:指定位图是否压缩,有效值为BI_RGB,BI_RLE8,BI_RLE4,BI_BITFIELDS。Windows位图可采用RLE4和RLE8的压缩格式,BI_RGB表示不压缩。
 biSizeImage:指定实际的位图数据占用的字节数,可用以下的公式计算出来:
biSizeImage = biWidth’× biHeight
要注意的是:上述公式中的biWidth’必须是4的整数倍(不是biWidth,而是大于或等于biWidth的离4最近的整数倍)。如果biCompression为BI_RGB,则该项可能为0。
 biXPelsPerMeter:指定目标设备的水平分辨率。
 biYPelsPerMeter:指定目标设备的垂直分辨率。
 biClrUsed:指定本图像实际用到的颜色数,如果该值为0,则用到的颜色数为2的biBitCount次幂。
 biClrImportant:指定本图像中重要的颜色数,如果该值为0,则认为所有的颜色数都是重要的。
3、 第三部分为调色板。有些位图需要调色板,有些位图,如真彩色图,不需要调色板,
它们的BITMAPINFOHEADER后面直接是位图数据。
调色板实际上是一个数组,共有biClrUsed个元素(如果该值为0,则有2的biBitCount次幂个元素)。数组中每个元素的类型是一个RGBQUAD结构,占4个字节,其定义如下:
typedef struct tagRGBQUAD{
BYTE rgbBlue;
BYTE rgbGreen;
BYTE rgbRed;
BYTE rgbReserved;
}RGBQUAD;
其中:
 rgbBlue:该颜色的蓝色分量。
 rgbGreen:该颜色的绿色分量。
 rgbRed:该颜色的红色分量。
 rgbReserved:保留值。
4、 第四部分就是实际的图像数据。对于用到调色板的位图,图像数据就是该象素颜色
在调色板中的索引值,对于真彩色图,图像数据就是实际的R、G、B值。
 对于2色图,用1位就可以表示该象素的颜色,所以1个字节可以表示8个象素。
 对于16色图,用4位可以表示一个象素的颜色,所以1个字节可以表示2个象素。
 对于256色图,1个字节刚好可以表示1个象素。
 对于真彩色图,3个字节才能表示1个象素