[英]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图像,其中每个成分是一个字节。
首先,您需要确定每种颜色要分配多少位。
每种颜色3位将溢出一个字节(9位)
每种颜色2位会下溢;
在三字节RGB位图中,您有一个字节代表每种颜色的强度。 其中0为最小强度,255为最大强度。 当您将其转换为1字节的位图(假设您将选择每种颜色2bits)时,转换应为:
1-byte red color/64
也就是说,在每种颜色的265种阴影中,您只会得到4种阴影。
首先,您必须产生最适合您的源图像的256色调色板。
然后,您需要使用生成的调色板对图像进行抖动处理 。
这两个问题都有许多众所周知的解决方案。 但是,不可能完全自动地产生高质量的结果:对于不同的源图像,不同的方法效果最佳。 例如,这是用于调整流程参数的Photoshop UI:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.