如何创建一个16位的565格式的位图图形,就是起始的位图数据的掩码如何去指定?
解决方案 »
- 怎样将BYTE类型数据保存到access数据库中
- MultiByteToWideChar和WideCharToMultiByte用法以及一些函数的参数标志怎么在MSDN上找不到说明?
- 如何像Windows里的那个文件搜索工具一样能搜索文件正文内容呢?
- 求一个socket比较完备的例子
- 如何在一自定义类(无Dialog ID)中实现定时器的使用?
- 帮帮我!!! C程序不能在WIN2000/XP下运行
- 《Visual C++ 技术内幕》(第四版)这书怎样?适合初学者吗?
- 各位大大大大虾,100分求救!!!!!!!!!
- 关于驱动程序的inf文件格式的几个疑问
- 在线等~~~~!!!!!
- QueryInterface的实现原理
- 关于字体,问一个问题,100分奉上。谢谢!
你说的CreateBitmap创建的位图只能使16位555格式的位图,因为16位有555和565格式之分,当压缩格式为BI_BITFIELDS:有555和565,而区别开这两种格式,就是依靠位图数据区的前三个DWORD值,也叫掩码。
一般为:0xF800(兰色掩码),0x07E0(绿色掩码),0x001F(红色掩码),这是565的格式
如果为:0x7C00, 0x03E0, 0x001F, 则是555的格式(这也是bitcount=16,而压缩标志为BI_DIB时的默认格式)
如果,我想创建565格式位图,那么就是在bitmapinfoheader后面,紧跟着填入0x7C00, 0x03E0, 0x001F,如下面
DWORD* ttTT = (DWORD*)(lpBitmapinfohead + 40);
*ttTT++ = (DWORD)(0xF800);
*ttTT++ = (DWORD)(0x07E0);
*ttTT++ = (DWORD)(0x001F00);
WORD* dest = (WORD*)(lpBitmapinfohead + 40 + sizeof(DWORD)*3);
然后,给dest赋值?
也就是说,如果是565格式的位图,那么它的位图数据应该从(lpBitmapinfohead + 40 + sizeof(DWORD)*3 这里开始码?
G:0x000007E0
B:0x0000001F数据开始的位置就是LPBITMAPINFOHEADER + 3 * sizeof(DWORD)
0xF800(红色掩码),0x07E0(绿色掩码),0x001F(兰色掩码)555格式的掩码:
0x7C00, 0x03E0, 0x001F,(565)eg:
DWORD* ttTT = (DWORD*)(lpBitmapinfohead + 40);
*ttTT++ = (DWORD)(0xF800);
*ttTT++ = (DWORD)(0x07E0);
*ttTT++ = (DWORD)(0x001F);
WORD* dest = (WORD*)(lpBitmapinfohead + 40 + sizeof(DWORD)*3);(555)就不需要用掩码了,直接设压缩标志为BI_RGB就行了。