图像文件的3种存储形式

1.位图数据文件除了无调色板的真彩色存放方式。
2.调色板为像素颜色的位图数据存放索引的方式。
3.还有调色板不是颜色而是像素颜色掩码调色板,位图数据文件为像素颜色的存放形式,例如:r5g6b5格式的文件。

现在简单介绍第三种形式:
r5g6b5格式的掩码调色板文件解析:

如果存放的形式调色板不是没有调色板的,也不是索引调色板,而是掩码调色板,例如r5g6b5格式的位图文件。

掩码调色板内容,目的是给位图数据文件进行"与"和移位运算得到真正的像素分量值的:

典型的调色板规范在文件中的顺序为为:

  00F8 0000 E007 0000 1F00 0000 0000 0000

其中

    00F8 0000为FB00h=1111100000000000(二进制),是蓝红分量的掩码。 
  E007 0000为 07E0h=0000011111100000(二进制),是绿色分量的掩码。 
   1F00 0000为001Fh=0000000000011111(二进制),是蓝色分量的掩码。 
    0000 0000设置为0。

位图数据文件内容也是一个4Byte的整型为一个像素,例如: 02 F1这个数据实际上应为F102,实际读取这个位图数据的时候该对齐还是得对齐读取到具体的数据,这里只是说读取后的解析:

 r = (F102 AND F800) >> 8 = F0h = 240

 g= (F102 AND 07E0)>> 3 = 20h = 32 
  b=(F102 AND 001F) << 3 = 10h =16

这样再将rgb位移:

unsigned int dwPixelColor = r;

dwPixelColor = (dwPixelColor<<8) & g;

dwPixelColor = (dwPixelColor<<8) & b;

就得到了每个像素的值,可以将这些像素值提交给显卡就可以把图像渲染出来,当然一些图像软件会在代码里面进行这样的位图文件解析。

你可能感兴趣的:(图像文件的3种存储形式)