写下,关于13年多媒体设计师下午题的一道BMP位图计算,很多人不知道这题,于是该年难倒了多少英雄好汉;
来让我一一来解下:
好大的图!
1.求该位图文件调色板部分占多少个字节;
首先:
了解下调色板是什么? 我们常见的photoshop里经常调色来用;
这张R、G、B的表,就是我们常说的调色板(Palette);调色板是指一块区域,一个大的结构数组,数组中每个元素由 RGBQ 构成,R存放红色值,类推,Q是保留位,一般不用。而调色板的图像数据是颜色的索引
简:调色板其实就是一个索引表。16色位图有16行,256色位图有256行
其次:
了解下位图里的结构BitMapInfoHeader
biWidth: 位图的宽度,单位为像素点
biHeight:位图的高度,单位为像素点
biBitCount: 像素的位素(1,4,8,24),则表项为(2, 16,256, 24没有颜色表项)
biCompression: 压缩方式(0表示不压缩)
那么我什么 来求下调色板占多少个字节:
这里的biBitCount 为8 ,那就是表项256; 那结果就出来了: 256*4(调色板的每个表项占4个字节) = 1024 = 1K;
2. 求该位图文件中实际图像数据部分占多少个字节
要了解题目的提示: 这里说该文件格式还规定图像的每一个扫描行所占的字节数必须是4的整数倍,不足的部份以0填充 ,而我们这里biWidth是250,不是4的整数倍,那就补到4的整数倍 最近的是252;
这里可以理解为求这个图像的一个块或是面积
biWidth * biHight * biCount = 252 * 100 * 8/8 = 25200Byte
3. 求整个位图文件的大小是多少字节?
这题只需要把整个位图文件相关的数据求和
调色板 + 实际图像数据部分 + 位图文件头BiteMapFileHeader 14Byte + 位图信息头BitMapInfoHeader 40Byte = 1024 + 25200 + 14 + 40 = 26278 Byte;
总结:
这题需要了解的是 a, 每一个扫描行所占的字节数必须是4的整数倍 b, 表项的理解, c, BitMapInfoHeader 中biWidth, biHeigh,biBitCount, biCompression的理解;