C++ 如何将rgb(三个字节)转换为位图格式的一个字节?

C++ 如何将rgb(三个字节)转换为位图格式的一个字节?,c++,graphics,bitmap,C++,Graphics,Bitmap,我有每个像素的数据,红色一个字节,绿色一个字节,蓝色一个字节。我需要把它打包成8位位图,所以像素只有一个字节。如何将rgb(三个字节)转换为位图格式的一个字节? (我使用C++,不能使用任何外部库)我想你误解了如何形成位图结构。您不需要(以某种方式)将3个字节打包成一个字节。这毕竟是不可能的,除非你扔掉信息(比如使用) 显示详细的BMP格式:它是一个标题,后跟数据。现在,根据您在标题中设置的内容,可以形成包含RBG数据组件的BMP图像,其中每个组件为一个字节。首先,您需要确定要为每种颜色分配多少

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

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


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

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

  • 每种颜色3位将溢出一个字节(9位)

  • 每种颜色2比特将下溢

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

    1-byte red color/64
    
    i、 e在每种颜色265个色度的光谱中,你只能得到4个色度

    首先你必须

    那你就需要

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