我想在不使用调色板的情况下将 32bpp 位图转换为 256 色。有办法做到这一点吗?
我减少颜色的主要目的是减小图像大小,因为该图像必须通过 socket 通过 Internet 传输。
注意:我不想为 256 色位图使用调色板。
提前致谢。 保罗
最佳答案
假设您对红色和绿色使用 3 位,对蓝色使用 2 位,并忽略 alpha。然后你有 8 种红色、8 种绿色和 4 种蓝色。您需要将 256 种颜色的红色、绿色和蓝色 channel 映射到这 8 种或 4 种颜色。天真的方法:
- 对于红色和绿色的 3 位 channel ,将源 channel 值除以 32。
- 对于蓝色,4 位 channel ,除以 64。
显然,您可以按照自己喜欢的方式划分可用的 8 位。您可以选择不同的方式从 8 位 channel 转到 2 或 3 位 channel 。等等。
我不知道不使用调色板的常用 8 位像素位图格式。所以我认为你必须自己动手。不要指望在原始图像和降低颜色深度的图像之间的视觉相似性方面有很好的结果。
关于c++ - 将 32bpp 位图转换为 256 色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21847918/