繁体   English   中英

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

[英]How to transform rgb (three bytes) to one byte for bitmap format?

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

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

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

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

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

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

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

1-byte red color/64

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

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

然后,您需要使用生成的调色板对图像进行抖动处理

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

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM