索引图像

来源:互联网 发布:2016淘宝网店发展趋势 编辑:程序博客网 时间:2024/05/02 02:16
索引图像是一种把像素值直接作为RGB调色板下标的图像。索引图像可把像素值“直接映射”为调色板数值。
调色板通常与索引图像存储在一起,装载图像时,调色板将和图像一同自动装载。
索引模式和灰度模式比较类似,它的每个象素点也可以有256种颜色容量,但它可以负载彩色。灰度模式的图像最多只能有256种颜色。当图像转换成索引模式时,系统会自动根据图像上的颜色归纳出能代表大多数的256种颜色,就象一张颜色表,然后用这256种来代替整个图像上所有的颜色信息。
索引的图像只支持一个图层,并且只有一个索引彩色通道。
索引模式的图像就像是一块块由彩色的小瓷砖所拼成的,由于它最多只能有256种彩色,所以它所形成的文件相对其它彩色要小得多。索引模式的另一个好处是它所形成的每一个颜色都有其独立的索引标识。当这种图像在网上发布时,只要根据其索引标识将图像重新识别,它的颜色就完全还原了。

调色板的取值决定图像的每个像素的颜色。索引图像的图像数据区保存的数据实际上是调色板中的索引值。像反色可以直接通过调整其调色板的数据进行。
BMP、文件格式、调色板、GetBitmapBits函数使用散记
作者:gadflycq 20130707
   
         BMP文件格式有多种,根据色彩丰富程度一般有二值(1位)、16色(4位)、256色(8位)、真彩色(24位)等。以4位为例,如果是在VC的MFC中自己在资源设计窗口画的GDI位图,一般是4位BMP图,即每个象素占半个字节,每个象素的半个字节值实际上是调色板中的索引值,通过索引值查找调色板中对应序号的颜色值。
         BMP文件格式头文件,调色板的起始位置在36h,长度N×4,N为颜色数,如果4位图,颜色数N=16。每个索引占4字节,依次为B、G、R、保留。
         比如某BMP文件为4位图,从第00H到第35H为头文件信息,从36H到75H为调色板信息,则第76H开始是象素值。若第76H字节=0F,则表示图象第0行第0列(左下角)象素颜色索引值为0,第0行第1列象素颜色索引值为F,然后根据索引值查找调色板中对应的颜色信息。
         索引值为0,表示调色板的第1个索引,即从36H到39H,假如36H到39H的值分别为255、0、0、0,表示第0行第0列的象素为蓝色。
         索引值为F,表示调色板中第16个索引,即从调色板开始往后偏移(16-1)×4=60个字节(3CH),即36H+3CH=72H开始。假如72H到75H的值为0、0、255、0,表示第0行第1列象素颜色为红色。
         以上是以4位BMP文件格式为例在硬盘上存储的数值情况。如果是通过以下程序读取图象数据到内存,就不是这样了。
                    CBitmap bitmap;
                    bitmap.LoadBitmap(IDB_BITMAP1); //IDB_BITMAP1为4位BMP图象格式
                    int s=33*33*4;   //假设图象尺寸为33×33
                    BYTE *gimg=new BYTE[s];
                     bitmap.GetBitmapBits(s,gimg);
         此处GetBitmapBits函数在读取象素值到缓冲区的时候,自动完成了象素索引值和调色板颜色值的替换,即gimg开始的内存中存储的直接就是每象素4字节的颜色值,即: 
                   gimg[0]:第0行第0列象素的B分量,
                   gimg[1]:第0行第0列象素的G分量,
                   gimg[2]:第0行第0列象素的R分量,
                   gimg[3]:保留,
                   gimg[3]:第0行第1列象素的B分量 
                                …………
                                …………


原创粉丝点击