} BITMAPINFO, *PBITMAPINFO;
最后一部分是实际图像的数据,对于调用调色板的位图,图像的数据就是该像素在调色板中的索引值,对于真彩色的位图,图像的数据就是实际的R、G、B的值。
2.2 OS/2 DIB
OS/2 DIB与Windows DIB数据的存储方式是一样的,只在位图信息结构(信息头和调色板)有所不同。OS/2 DIB中的BITMAPCOREINFO、BITMAPCOREHEADER和RGBTRIPLE分别与Windows DIB的BITMAPINFO、BITMAPINFOHEADER和RGBGUAD相对应。
BITMAPCOREHEADER结构的定义如下:
typedef struct tagBITMAPCOREHEADER
{
DWORD bcSize; 指定这个结构的大小,以字节为单位
WORD bcWidth; 指定改位图的宽度,以像素为单位
WORD bcHeight; 指定改位图的高度,以像素为单位
WORD bcPlanes; 该值必须为1
WORD bcBitCount; 指定每个像素所需的字节数
} BITMAPCOREHEADER, *PBITMAPCOREHEADER;
RGBTRIPLE结构的定义如下:
typedef struct tagRGBTRIPLE
{
BYTE rgbtBlue; //该颜色的蓝色分量
BYTE rgbtGreen; //该颜色的蓝色分量
BYTE rgbtRed; //该颜色的蓝色分量
} RGBTRIPLE;
BITMAPCOREINFO结构的定义如下:
typedef struct _BITMAPCOREINFO
{
BITMAPCOREHEADER bmciHeader;
RGBTRIPLE bmciColors[1];
} BITMAPCOREINFO, *PBITMAPCOREINFO;
Windows DIB和OS/2 DIB的信息头结构大小不同,可以以此来判断DIB为Windows DIB或OS/2 DIB。
2.3 显示DIB位图
显示DIB位图和创建DIB位图的调色板的程序流程图如图2-2所示:
图2-1显示DIB位图程序流程图 图2-2创建调色板程序流程图
3、结论
显示BMP格式的位图首先要清楚其组成和各组成的具体含义,显示位图时首先要打开要显示的位图的文件,读取位图数据,然后为位图创建调色板,并将创建的调色板选入设备上下文,然后显示位图,位图显示完后在程序结束之前要恢复程序原始调色板。
参考文献
[1]周长发.精通VisualC++图像处理编程.电子工业出版社.2006.6
[2]何斌,马天予. VisualC++图像处理. 人民邮电出版社.2002.12
[3]潘爱民,王国印.Visual C++技术内幕.清华大学出版社.2009.4
[4]陈兵旗,孙明.Visual C++使用图形处理.清华大学出版社.3004.3
[5]高伟卫,杨胜强.基于VC基础类库的图像显示.机械管理开发,2005(6),84-87
2/2 首页 上一页 1 2 |