网上一搜,可以看到BMP位图结构的详细说明,这篇文章专门谈一下其中的调色板。

多少位位图并不是指每一个颜色该用多少位表示,对于颜色来说,它始终都是24位(RGB),或者是32位(RGBA),而是指该位图每个像素点用多少位表示,若是n位位图,则该位图每个像素点用n位表示,该位图共有2n种颜色(对应于调色板的颜色索引)。对于小于24位的位图,一个像素点所用的位数不足以表示一个颜色,所以要用调色板,而每一像素所用的位数存放的是对应于调色板的索引,所以有多少位就能表示2n种颜色;

比如:有一个长宽各为200个象素,颜色数为16色的彩色图,每一个象素都用R,G,B三个分量表示,因为每个分量有256个级别,要用8位(bit),即一个字节(byte)来表示,所以每个象素需要用3个字节。整个图象要用200*200*3,约120k字节,可不是一个小数目呀!

如果我们用下面的方法,就能省的多。 因为是一个16色图,也就是说这幅图中最多只有16种颜色,我们可以用一个表:表中的每一行记录一种颜色的R,G,B值。这样当我们表示一个象素的颜色时,只需要指出该颜色是在第几行,即该颜色在表中的索引值。举个例子,如果表的第0行为255,0,0(红色),那么当某个象素为色时,只需要标明0即可。 让我们再来计算一下:16种状态可以用4位(bit)表示,所以一个象素要用半个字节。整个图象要用200*200*0.5,约20k字节,再加上表占用的字节为3*16=48字节。整个占用的字节数约为前面的1/6,省很多吧。

这张RGB的表,即是我们常说的调色板(Palette),另一种叫法是颜色查找表LUT(LookUpTable),似乎更确切一些。

若对于24位或32位位图,它就不需要调色板了,因为24位足可以放对应的颜色值了,每个字节对应于R,G,B分量的值。

计算每行像素所占字节数:

#define BYTE_PER_LINE(width, bitCount) ((((width)*(bitCount)+31)/32)*4)

其中width是每行像素数,bitCount是每个像素所占的位数,为什么要乘以4除以32呢?因为Windows规定图像文件中一个扫描行所占的字节数必须是4的倍数(即以字为单位,1个字4个字节),不足的以0填充,乘以4保证是4的倍数,除以32保证实际字节数不变(即实际除以8,一个字节是8位),加31是为了多余的整数不够32除另外加的。

BMP位图调色板说明的更多相关文章

  1. 将文件内容隐藏在bmp位图中

    首先要实现这个功能,你必须知道bmp位图文件的格式,这里我就不多说了,请看:http://www.cnblogs.com/xiehy/archive/2011/06/07/2074405.html 接 ...

  2. C语言实现将彩色BMP位图转化为二值图

    CTF做了图片的隐写题,还没有形成系统的认识,先来总结一下BMP图的组成,并通过将彩色图转为二值图的例子加深下理解. 只写了位图二进制文件的格式和代码实现,至于诸如RGB色彩和调色板是什么的一些概念就 ...

  3. 浅析BMP位图文件结构(含Demo)

    浅析BMP位图文件结构(含Demo) 作者:一点一滴的Beer http://beer.cnblogs.com/   关于BMP位图格式在网上可以找到比较详细的相关文档,有兴趣的可以搜索标题为“BMP ...

  4. (学习笔记3)BMP位图的读取与显示

    在(学习笔记2)中.我们已经具体说明怎样去创建MFC.在这节中.主要解决BMP位图照片的读取和显示问题. 我们新建一个projectdemo1.创建步骤请看(学习笔记2)中具体说明. 创建成功后,例如 ...

  5. BMP位图图像格式简介

    1. 文件结构 位图文件可看成由4个部分组成:位图文件头(bitmap-fileheader).位图信息头(bitmap-informationheader).彩色表(colortable)和定义位图 ...

  6. vc 加载bmp位图并显示的方法

    方法一.显示位图文件 HBITMAP hBitmap=(HBITMAP)LoadImage(NULL,_T(“xxx.bmp”),Image_Bitmap,0,0,Lr_CreateDibSectio ...

  7. gnu-ucos 增加 bmp 位图显示

    昨天又下了点功夫弄了个在tft屏幕上显示bmp位图的. 我选择的是24位tft真彩測显示方式所以也要选择真彩色位图.网上给出的16位位图数组无法使用.在csdn上下载了2个制作工具,一个是c代码的,一 ...

  8. 如何将打印内容转换为bmp位图文件

    bmp是一种与硬件设备无关的图像文件格式,使用非常广.它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BblP文件所占用的空间很大.BMP文件的图像深度可选lbit.4bit.8 ...

  9. 图像编程学习笔记2——bmp位图平移

    以下文字内容copy于<<数字图像处理编程入门>>,code为自己实现,是win32控制台程序. 2.1 平移 平移(translation)变换大概是几何变换中最简单的一种了 ...

随机推荐

  1. 出行即服务(MAAS)框架

    转自 出行即服务(MAAS)框架 一.概况 在共享交通模式和智能信息技术的基础之上,城市出现了全新的交通理念——“出行即服务(Mobility-as-a-Service,简称MaaS)”.MaaS将各 ...

  2. canvas的简单绘制及设置

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> </head> ...

  3. bellman-ford算法求K短路O(n*m),以及判负环O(n*m)

    #include<iostream> #include<algorithm> #include<cstring> using namespace std; cons ...

  4. Elasticsearch(2):索引详谈

      在上一篇博客中,介绍了ES中的一些核心概念和ES.Kibana安装方法.本节开始,我们从索引开始来学习ES的操作方法.   1 创建索引¶   创建一个索引的方法很简单,在Kibana中运行下行请 ...

  5. netty关键字

    ------------恢复内容开始------------ buffer 本质读写的内存,三个属性:capacity.position和limit capacity:容器大小 position:读写 ...

  6. Python-TypeError: not all arguments converted during string formatting

    Where? 运行Python程序,报错出现在这一行 return "Unknow Object of %s" % value Why? %s 表示把 value变量装换为字符串, ...

  7. HTML中限制input 输入框输入内容

    限制 input 输入框只能输入纯数字1.onkeyup = "value=value.replace(/[^\d]/g,'')" 使用 onkeyup 事件,有 bug ,那就是 ...

  8. [Vue warn]: Error in render: "TypeError: Cannot read property 'matched' of undefined" found in <App> at src/App.vue

    当用Vue模块化开发时,输入  http://localhost:8080  页面没有显示,首先按F12,检查是否有如下错误 话不多说,直接看下面: 解决方法1 如果是上面出的问题,以后就要注意了哦, ...

  9. P3378 堆(模板)

    P3378 [模板]堆 题目描述 给定一个数列,初始为空,请支持下面三种操作: 给定一个整数 x,请将 x 加入到数列中. 输出数列中最小的数. 删除数列中最小的数(如果有多个数最小,只删除 1 个) ...

  10. python数据结构之图深度优先和广度优先实例详解

    本文实例讲述了python数据结构之图深度优先和广度优先用法.分享给大家供大家参考.具体如下: 首先有一个概念:回溯 回溯法(探索与回溯法)是一种选优搜索法,按选优条件向前搜索,以达到目标.但当探索到 ...