首页 > 编程知识 正文

什么是索引图像和RGB图像,索引图像存储

时间:2023-05-03 17:58:25 阅读:110367 作者:793

索引图像是将像素值直接作为RGB调色板的下标的图像。 索引图像将像素值“直接映射”到调色板值。 调色板通常与索引图像一起存储,当您加载图像时,调色板会自动与图像一起加载。 索引模式和灰度模式比较相似,每个像素可以有256种颜色的容量,也可以加载颜色。 灰度模式的图像最多只有256种颜色。 当图像转换为索引模式时,系统会根据图像中的颜色自动汇总表示大多数颜色的256种颜色,即类似颜色表的颜色,并用这256种颜色替换整个图像中的所有颜色信息。 的图像只支持一个图层,并且只有一个索引颜色通道。 索引模式下的图像就像一个彩色的小瓷砖块。 因为最多256种颜色,所以生成的文件比其他颜色小很多。 索引模式的另一个优点是形成的每种颜色都有独立的索引标记。 如果这些图像在互联网上发布,只要根据其索引标记重新识别图像,颜色就会完全恢复。

调色板中的值决定了图像中每个像素的颜色。 索引图像的图像数据区域中保存的数据实际上是调色板中的索引值。 可以通过调整调色板中的数据直接进行颜色反转。BMP、文件格式、调色板、GetBitmapBits函数使用散记

作者: gadflycq 20130707

BMP文件格式有很多种,根据颜色的丰富程度,有二值(1位)、16色(256色)、8位(8位)、全色(24位)等。 以4位为例,对于在VC的MFC中自己在资源设计窗口中绘制的GDI位图,通常是4位BMP映射。 也就是说,每个像素占用一半字节,而每个像素的一半字节值实际上是调色板中的索引值,以便根据索引值查找调色板中相应编号的颜色值。

BMP文件格式的头文件,其中调色板的开头位置为36h,长度为N4,n为颜色数,4位图时颜色数N=16。 每个索引占4个字节,顺序是b、g、r、预约。

例如,如果某个BMP文件是4位图,从第00H开始第35H是头文件信息,从第36H开始第75H是调色板信息,则从第76H开始就是像素值。 在第76H字节=0F的情况下,图像0行第0列(左下角)的像素颜色索引值表示0、0行第1列的像素颜色索引值表示f,根据索引值寻找调色板内对应的颜色信息。

索引值为0表示调色板中的第一个索引为36H到39H,36H到39H的值分别为255、0、0、0,0表示第0行第0列中的像素为蓝色。

索引值为f,表示调色板中的第十六个索引。 也就是说,从托盘的开头到后面,以(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; //将图像尺寸设为3333

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成分。。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。