【问题标题】:How to transform rgb (three bytes) to one byte for bitmap format?如何将 rgb(三个字节)转换为位图格式的一个字节?
【发布时间】:2013-11-13 21:06:00
【问题描述】:

我有每个像素的数据红色一个字节,绿色一个字节,蓝色一个字节。我需要把它打包成 8 位位图,所以我只有一个字节的像素。如何将 rgb(三个字节)转换为位图格式的一个字节? (我使用的是 C++,不能使用任何外部库)

【问题讨论】:

    标签: c++ graphics bitmap


    【解决方案1】:

    我想你误解了如何形成位图结构。您不需要(以某种方式)将 3 个字节打包成一个。毕竟这是不可能的,除非你丢弃信息(比如使用special image formats GL_R3_G3_B2)。

    BMP file format wiki page 显示详细的 BMP 格式:它是一个标头,后面是数据。现在根据您在标题中设置的内容,可以形成包含 RBG 数据组件的 BMP 图像,其中每个组件是一个字节。

    【讨论】:

      【解决方案2】:

      首先,您需要确定要为每种颜色分配多少位。

      1. 每种颜色 3 位会溢出一个字节(9 位)

      2. 每种颜色 2 位会下溢;

      在三字节 RGB 位图中,您有一个字节来表示每种颜色的强度。其中 0 是最小值,255 是最大强度。当您将其转换为 1 字节位图(假设您将选择 2bits per color )时,转换应该是:

      1-byte red color/64
      

      也就是说,在每种颜色 265 种色调的光谱中,您只会得到 4 种色调。

      【讨论】:

        【解决方案3】:

        首先你必须produce 256 colors palette that best fits your source image.

        那你需要dither the image using the palette you've generated

        这两个问题都有许多众所周知的解决方案。但是,完全自动生成高质量的结果是不可能的:对于不同的源图像,不同的方法效果最好。例如,这里是调整过程参数的 Photoshop UI:

        【讨论】:

          猜你喜欢
          • 2022-05-04
          • 2012-06-06
          • 1970-01-01
          • 2010-09-21
          • 1970-01-01
          • 2012-07-05
          • 1970-01-01
          • 2013-01-13
          相关资源
          最近更新 更多