关于位图的问题,请大虾讲讲! 代码不是很复杂呀,首先你要明白DIB的struct,;这段代码从resource中读一个DDB到Memory中,为了最终以这个DDB到DIB,它需要做DIB struct的change,所以就有了中间的步骤,那些步骤几乎是MSDN中的标准,最后得到DIB 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 程序从资源里面加载一个Bitmap,并且将系统当前的调色盘用Bitmap的调色盘替换。至于代码为何那样写,你必须先熟悉Bitmap的格式。 to jishiping(JSP 季世平) 能讲讲Bitmap的格式? Bmp文件的头结构,14个字节。Bmp文件才有,资源里的Bitmap没有。typedef struct tagBITMAPFILEHEADER { // bmfh WORD bfType; //必须是 'BM' DWORD bfSize; //Bmp文件的大小 WORD bfReserved1; //保留,必须是0 WORD bfReserved2; //保留,必须是0 DWORD bfOffBits; //图像数据的偏移量} BITMAPFILEHEADER; Bitmap的头信息,40个字节。在Bmp文件和资源里都包含。typedef struct tagBITMAPINFOHEADER{ // bmih DWORD biSize; //这个结构的大小,必须为40 LONG biWidth; //图像的宽度 LONG biHeight; //图像的高度 WORD biPlanes; //平面个数,必须为1 WORD biBitCount;//每个像素需要的位数,可以是1,4,8,16,24,32 DWORD biCompression; //压缩方法,0表示不压缩。通常我们见到的Bitmap都是不压缩的 DWORD biSizeImage; //图像数据部分的大小。如果没有压缩,可以为0 LONG biXPelsPerMeter; //水平方向的分辨率。每米有多少像素点 LONG biYPelsPerMeter; //垂直方向的分辨率。每米有多少像素点 DWORD biClrUsed; //图像的调色盘个数。只有biBitCount<=8才有效。当它为0时,调色盘个数个数是 1<<biBitCount DWORD biClrImportant; //重要的颜色个数,为0时,所有颜色都重要} BITMAPINFOHEADER;接着是调色盘信息,当biBitCount<=8时才有。下面是每个调色盘的结构。调色盘的个数由BITMAPINFOHEADER里的biBitCount和biClrUsed决定。typedef struct tagRGBQUAD { // rgbq BYTE rgbBlue; //调色盘的蓝色分量 BYTE rgbGreen; //调色盘的绿色分量 BYTE rgbRed; //调色盘的红色分量 BYTE rgbReserved; //保留,必须为0} RGBQUAD; 接下来是图像的数据部分,经过压缩的就不说了。对于biBitCount为16和32来说,很少见到,我也不是很熟。一般来说biBitCount的值为1,4,8,24,所能表示的颜色个数分别为2,16,256,全彩。当biBitCount<=8时,数据部分是每个像素点的调色盘号;当biBitCount==24时,每个像素点用3个字节表示,分别为蓝色,绿色,红色。 to : jishiping(JSP 季世平) 大侠,请教下面一句的意思和作用: LPBYTE pBitmapPictureData=(LPBYTE)lpBitmap+lpBitmap->biSize+ (nNumberOfColors*sizeof(RGBQUAD)); (LPBYTE)lpBitmap 指向 BITMAPINFOHEADER 部分,就是开始。lpBitmap->biSize 是结构 BITMAPINFOHEADER 的大小。nNumberOfColors * sizeof(RGBQUAD) 是调色盘的大小。其中nNumberOfColors是调色盘的个数,sizeof(RGBQUAD)使每个调色盘的大小。所以(LPBYTE)lpBitmap + lpBitmap->biSize 指向调色盘部分,而(LPBYTE)lpBitmap+lpBitmap->biSize+(nNumberOfColors*sizeof(RGBQUAD))就指向图像的数据部分了。 WinMain函数运行到了最后的return却不能返回 非常感谢bobob(静思--潜心研究PDF)的帮忙,请领分!!! 读写数据库问题 请问那有DevPartner Studio 7.1下载 工作一年的本科生去深圳华为做开发,收入有多少? 关于时间的两个问题 请把这个转个你认识的每个中国人,为中国投票 初学VC++,请教贴 获取主窗口指针以及。。。。? 使用MYSQL的预处理API如何操作MYSQL里的一个同时有输入参数输出参数结果集的存储过程 高分求作图类,要求不要太复杂(谢绝DRAWCLI)!!! 谁能给我个利用ODBC API调用存储过程的演示代码?
调色盘替换。至于代码为何那样写,你必须先熟悉Bitmap的格式。
能讲讲Bitmap的格式?
typedef struct tagBITMAPFILEHEADER { // bmfh
WORD bfType; //必须是 'BM'
DWORD bfSize; //Bmp文件的大小
WORD bfReserved1; //保留,必须是0
WORD bfReserved2; //保留,必须是0
DWORD bfOffBits; //图像数据的偏移量
} BITMAPFILEHEADER;
Bitmap的头信息,40个字节。在Bmp文件和资源里都包含。
typedef struct tagBITMAPINFOHEADER{ // bmih
DWORD biSize; //这个结构的大小,必须为40
LONG biWidth; //图像的宽度
LONG biHeight; //图像的高度
WORD biPlanes; //平面个数,必须为1
WORD biBitCount;//每个像素需要的位数,可以是1,4,8,16,24,32
DWORD biCompression; //压缩方法,0表示不压缩。通常我们见到的Bitmap都是不压缩的
DWORD biSizeImage; //图像数据部分的大小。如果没有压缩,可以为0
LONG biXPelsPerMeter; //水平方向的分辨率。每米有多少像素点
LONG biYPelsPerMeter; //垂直方向的分辨率。每米有多少像素点
DWORD biClrUsed; //图像的调色盘个数。只有biBitCount<=8才有效。当它为0时,调色盘个数个数是 1<<biBitCount
DWORD biClrImportant; //重要的颜色个数,为0时,所有颜色都重要
} BITMAPINFOHEADER;
接着是调色盘信息,当biBitCount<=8时才有。下面是每个调色盘的结构。调色盘的个数由BITMAPINFOHEADER里的biBitCount和biClrUsed决定。
typedef struct tagRGBQUAD { // rgbq
BYTE rgbBlue; //调色盘的蓝色分量
BYTE rgbGreen; //调色盘的绿色分量
BYTE rgbRed; //调色盘的红色分量
BYTE rgbReserved; //保留,必须为0
} RGBQUAD;
接下来是图像的数据部分,经过压缩的就不说了。对于biBitCount为16和32来说,很少见到,我也不是很熟。一般来说biBitCount的值为1,4,8,24,所能表示的颜色个数分别为2,16,256,全彩。当biBitCount<=8时,数据部分是每个像素点的调色盘号;当biBitCount==24时,每个像素点用3个字节表示,分别为蓝色,绿色,红色。
jishiping(JSP 季世平)
大侠,请教下面一句的意思和作用:
LPBYTE pBitmapPictureData=(LPBYTE)lpBitmap+lpBitmap->biSize+
(nNumberOfColors*sizeof(RGBQUAD));
lpBitmap->biSize 是结构 BITMAPINFOHEADER 的大小。
nNumberOfColors * sizeof(RGBQUAD) 是调色盘的大小。其中
nNumberOfColors是调色盘的个数,sizeof(RGBQUAD)使每个调色盘的大小。所以(LPBYTE)lpBitmap + lpBitmap->biSize 指向调色盘部分,而(LPBYTE)
lpBitmap+lpBitmap->biSize+(nNumberOfColors*sizeof(RGBQUAD))就指向图
像的数据部分了。