Windows 编程知识要点总结1 - Windows位图知识

 

BMP图像分为两类,DDB和DIB,DDB(device-dependent   bitmap)即为设备相关位图,DIB(device-independent   bitmap)即为设备无关位图。


DIB(设备无关位图)
    文件头+调色版(如果有的话)+数据
特征:   它自带调色版,是独立的,与设备无关

DDB中不包括颜色信息,显示时是系统的调色板为基础进行各位的颜色映射的,Windows只能保证系统调色板的前20种颜色稳定不变,所以DDB只

能保证正确显示色彩少于20色的位图,这便是局限性。

DIB(设备无关位图)可以在不同的机器或系统中显示位图所固有的颜色。

BMP(DIB)文件由文件头、位图信息头、颜色信息和图像数据四部分组成。

1. BMP文件头结构:
    5个word域,内容如下:
bfType,指定文件类型,必须是0x4d42,即字符串“BM”;
fiSize,指定文件大小,包括文件头;
保留,
保留,
bfoffBits,从文件头到实际的位图数据的偏移字节数,即文件前三个部分的长度之和;
 
该结构长14个字节;

2 位图信息头
本结构长40个字节;

DWORD biSize,指定这个结构的长度,为40个字节;
LONG biWidth,图像宽度,像素;
LONG biHeight,图像高度,像素;
WORD biPlanes,必须为1;
WORD biBitCount,指定表示颜色用到的位数,常用值:1-黑白二色图,4-16色图,8-256色图,24-真彩色图;
DWORD biCompression,是否压缩,有效值:BI_RGB(不压缩),BI_RLE8,BI_RLE4,BI_BITFIELDS,
DWORD biSizeImage,位图数据占用的字节数,biSizeImage=biWidth * biHeight
                   上述公式中biWidth必须是4整数倍(大于或等于biWidth的离4最近的整数倍)。如果biCompression为BI_RGB,则该项可

能为0。
LONG biXPelsPerMeter,指定目标设备的水平分辨率;
LONG biYPelsPerMeter,指定目标设备的垂直分辨率;
DWORD biClrUsed,指定本图像实际用到的颜色数,如果该值为0,则用到的颜色数为2的biBitCount次幂;
DWORD biClrImportant,指定本图像中重要的颜色数,如果该值为0,则认为所有的颜色数都是重要的。

3 调色板(RGBQUAD)
    有些位图需要调色板,而真彩色图不需要,它的BITMAPINFOHEADER后面直接是位图数据。调色板是一个数组,共有biClrUsed个元素(如果

该值为0,则有2的biBitCount次幂个元素)。每个元素是一个RGBQUAD结构。
RGBQUAD:
    BYTE rgbBlue
    BYTE rgbGreen
    BYTE rgbRed
    BYTE rgbReserved
各颜色分量和保留值。

4 图像数据
    对于用到调色板的位图,图像数据就是该像素颜色在调色板中的索引值,对于真彩色图,就是实际的R、G、B值。
    对于2色图,用1位就可以表示该像素的颜色,所以1个字节可以表示8个像素;
    对于16色图,用4位可以表示一个像素的颜色,所以1个字节可以表示2个像素;
    256色图,1个字节可以表示1个像素;
    真彩色图,3个字节表示1个像素;
    BMP图像数据的存储顺序是由下往上、由左向右(即图像上下颠倒存储),而图像的宽度(以字节为单位)必须是4的倍数,不到4的倍数必

须补足,并且图像的数据及其调色板数据存储格式为BGRBGR......而不是习惯的RGBRGB... 。

网上有CDIB类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值