RGB和RGBQUAD的区别
来源:互联网 发布:华为云计算调研报告 编辑:程序博客网 时间:2024/06/06 16:38
RGB和RGBQUAD的区别
昨天的晚上,为一个问题困扰了很长时间,几乎整个晚上都在弄一个小bug,感觉没有问题,但就是效果不理想,几次三番,查来查去...........
我想实现的功能是:生成一张图,图上有字,这张图是以一张指定的位图为背景的,我使用:
COLORREF GetPixel(
HDC hdc, // handle to DC
int nXPos, // x-coordinate of pixel
int nYPos // y-coordinate of pixel
);
这个方法,读取了位图的颜色信息,然后使用:
int SetDIBits(
HDC hdc, // handle to DC
HBITMAP hbmp, // handle to bitmap
UINT uStartScan, // starting scan line
UINT cScanLines, // number of scan lines
CONST VOID *lpvBits, // array of bitmap bits
CONST BITMAPINFO *lpbmi, // bitmap data
UINT fuColorUse // type of color indexes to use
);
方法,把颜色的信息写到位图里面去,结果生成的图片,显示出来,颜色总是不太对劲,一开始我猜想可能是24位的颜色和32位的颜色不太一样,但后来,我左移试了,后移也试了,得到的颜色总是和理想的不太一样,我调试,发现GetPixel这函数的返回值是一个DWORD,DWORD是32位的,按道理,应该颜色正确才对.但显示出来的却又不是.接着我又尝试:让加载的背景位图,直接 BitBlt(dc, 18, 18, WIDTH+18, HEIGHT+18, dcMem, 0, 0, SRCCOPY); 却是能正确显示出来.明显是颜色信息有误.
几经思考,最后,发现了一个小细节:
typedef struct tagRGBQUAD {
BYTE rgbBlue;
BYTE rgbGreen;
BYTE rgbRed;
BYTE rgbReserved;
} RGBQUAD;
COLORREF RGB(
BYTE byRed, // red component of color
BYTE byGreen, // green component of color
BYTE byBlue // blue component of color
);
从GetPixel函数里的返回值是: RGB,它的颜色顺序是: R,G,B.(红绿蓝),而:RGBQUAD的颜色顺序是:
B,G,R,Reserved(蓝绿红). 得将RGB里的颜色变成BGR后,再给RGBQUAD赋值,结果,一弄,达到了预期的效果...........
昨天的晚上,为一个问题困扰了很长时间,几乎整个晚上都在弄一个小bug,感觉没有问题,但就是效果不理想,几次三番,查来查去...........
我想实现的功能是:生成一张图,图上有字,这张图是以一张指定的位图为背景的,我使用:
COLORREF GetPixel(
HDC hdc, // handle to DC
int nXPos, // x-coordinate of pixel
int nYPos // y-coordinate of pixel
);
这个方法,读取了位图的颜色信息,然后使用:
int SetDIBits(
HDC hdc, // handle to DC
HBITMAP hbmp, // handle to bitmap
UINT uStartScan, // starting scan line
UINT cScanLines, // number of scan lines
CONST VOID *lpvBits, // array of bitmap bits
CONST BITMAPINFO *lpbmi, // bitmap data
UINT fuColorUse // type of color indexes to use
);
方法,把颜色的信息写到位图里面去,结果生成的图片,显示出来,颜色总是不太对劲,一开始我猜想可能是24位的颜色和32位的颜色不太一样,但后来,我左移试了,后移也试了,得到的颜色总是和理想的不太一样,我调试,发现GetPixel这函数的返回值是一个DWORD,DWORD是32位的,按道理,应该颜色正确才对.但显示出来的却又不是.接着我又尝试:让加载的背景位图,直接 BitBlt(dc, 18, 18, WIDTH+18, HEIGHT+18, dcMem, 0, 0, SRCCOPY); 却是能正确显示出来.明显是颜色信息有误.
几经思考,最后,发现了一个小细节:
typedef struct tagRGBQUAD {
BYTE rgbBlue;
BYTE rgbGreen;
BYTE rgbRed;
BYTE rgbReserved;
} RGBQUAD;
COLORREF RGB(
BYTE byRed, // red component of color
BYTE byGreen, // green component of color
BYTE byBlue // blue component of color
);
从GetPixel函数里的返回值是: RGB,它的颜色顺序是: R,G,B.(红绿蓝),而:RGBQUAD的颜色顺序是:
B,G,R,Reserved(蓝绿红). 得将RGB里的颜色变成BGR后,再给RGBQUAD赋值,结果,一弄,达到了预期的效果...........
也许这也告诉了我:写程序要注意查阅文档,及细心地看明白吧!
BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。 由于BMP文件格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式。
1 0
- RGB和RGBQUAD的区别
- RGB和RGBQUAD的区别
- RGB和RGBQUAD的区别
- COLORREF 和RGBQUAD的区别
- rgb和raw rgb的区别
- SRGB和RGB的区别
- RGB 和 CYMK 的区别
- RGB和YUV的区别和转换
- RGB和YUV 区别
- 创建位图BITMAPINFO(有RGBQUAD的)
- MCU LCD 屏 和 RGB LCD 屏的区别
- Adobe RGB和sRGB色彩空间的主要区别
- RGB和YUV的转换与区别(视频编码)
- LCD RGB接口和MCU接口区别
- LCD屏 RGB和MCU接口区别
- sRGB 和 Adobe RGB 有什么区别?
- RGB和HSV区别与互相转换
- RGBA与RGB和区别与转换
- UVa 10161 Ant on a Chessboard
- 关于在UIViewController页面用代码添加UINavigationBar的方法
- 视频系统支持国内外100多个视频网站解析去广告播放
- Wifi有戏:宿舍变身小影院
- 软键盘设置
- RGB和RGBQUAD的区别
- Oracle学习2
- ServletActionContext VS ActionContext
- Swift入门教程
- addLog(Log log) 打日志的方法
- 关于主工程和library project
- iOS 字典中遍历出的key 如何进行排序
- java正则
- StringUtils