c++ - 将 32bpp 位图转换为 256 色

标签 c++ bitmap

我想在不使用调色板的情况下将 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/

相关文章:

java - 如何避免 java.lang.OutOfMemoryError : bitmap size exceeds VM budget in android while using a large bitmap?

python - 将 PIL 图像转换为 wxPython 位图图像

c++ - CullVisitor::apply(Geode&) 检测到 NaN,

c++ - 奇怪的 CUDA 错误输出

c++ - 从不从 std::packaged_task 检索 std::future 的结果是否安全?

c - 找到将零插入位模式的所有方法

c++ - 如果字段中的字符数不同,则输出时分隔符会丢失

c++ - 为什么我在快速排序时遇到段错误?

android - MAT (Eclipse Memory Analyzer) - 如何从内存转储中查看位图

Android比较/搜索多张图片