0

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

4

3 回答 3

0

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

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

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

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

1-byte red color/64

即,在每种颜色 265 种色调的光谱中,您只会得到 4 种色调。

于 2013-11-02T22:32:06.573 回答
0

首先,您必须生成最适合您的源图像的 256 色调色板。

然后您需要使用您生成的调色板来抖动图像

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

在此处输入图像描述

于 2013-11-02T22:32:42.560 回答
0

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

BMP 文件格式 w​​iki 页面显示了详细的BMP 格式:它是一个标题,然后是数据。现在根据您在标题中设置的内容,可以形成包含 RBG 数据组件的 BMP 图像,其中每个组件是一个字节。

于 2013-11-02T22:23:05.177 回答