怎么将保存以RGB565保存的像素数组创建位图共GDI调用的
已知这段像素数组是按RGB565格式保存的,请问要怎么才能用这个数组创建一个位图
试过CreateDIBSection代码如下
像素数组保存在pDibBits数组里
BITMAPINFO g_bmi;
ZeroMemory(&g_bmi,sizeof(g_bmi));
g_bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
g_bmi.bmiHeader.biWidth = width;
g_bmi.bmiHeader.biHeight = height;
g_bmi.bmiHeader.biPlanes = 1;
g_bmi.bmiHeader.biBitCount = 16;
g_bmi.bmiHeader.biCompression = BI_BITFIELDS;
HBITMAP hBmp = CreateDIBSection(hdc,&g_bmi,DIB_RGB_COLORS,(void**)&pDibBits,NULL,0);
[解决办法]
RGB565虽然GDI函数读文件的函数没有那个支持的,但是显示上有两种办法:
如果要显示不同格式的16位(当然包括RGB565)的图像数据,其实也很简单,有两中方法,第一,是修改CreateDIBSection函数的一个参数类型pBitmapInfo ,把这个默认参数BITMAPINFO修改为BITMAPV4HEADER,这个结构是比较新的BMP信息头,我们稍微修改他的一些成员结构,即修改为如下形式:
Private Type BITMAPV4HEADER
Size As Long
Width As Long
Height As Long
Planes As Integer
BitCount As Integer
Compression As Long
SizeImage As Long
XPelsPerMeter As Long
YPelsPerMeter As Long
ClrUsed As Long
ClrImportant As Long
RedMask As Long
GreenMask As Long
BlueMask As Long
AlphaMask As Long
End Type
和BITMAPINFO结构相比,他只是多了几个蒙版成员,如果我们实现知道了我们要创建的16位图像的格式,则填充入对应的mask数据,然后在创—IBSection,显示的时候直接调用Bitblt函数就可以。
第二种方法依旧是在创—IBSection时,使用修改后的结构体参数,但不填充mask内容,在显示的时候在修改mask,然后调用SetDIBitsToDevice 函数来显示他,当然也要修改SetDIBitsToDevice 的对应的那个参数声明,这种方法实用于先创建一个空白的16位图像,然后由其他高彩色图像向这个空白图像填充数据的情况。