【发布时间】:2014-10-09 15:08:33
【问题描述】:
我正在尝试找出一种算法,将图像(8 位或 32 位)转换为 3 或 4 种自定义颜色(非灰度)的有限调色板。
这可能吗?
我正在尝试使用 C++(但我可以从其他语言中获得它)
Qt 似乎已经有了一个调色板——虽然我不明白它的用法,但它似乎强制显示在它自己的标准调色板之一上,我没有看到任何自定义它的方法。
我将不胜感激一些算法示例或建议。
【问题讨论】:
标签: c++ image algorithm palette
我正在尝试找出一种算法,将图像(8 位或 32 位)转换为 3 或 4 种自定义颜色(非灰度)的有限调色板。
这可能吗?
我正在尝试使用 C++(但我可以从其他语言中获得它)
Qt 似乎已经有了一个调色板——虽然我不明白它的用法,但它似乎强制显示在它自己的标准调色板之一上,我没有看到任何自定义它的方法。
我将不胜感激一些算法示例或建议。
【问题讨论】:
标签: c++ image algorithm palette
您可以将图像转换为使用固定数量的颜色,方法是使用convertToFormat 传入一个 QRgb 值数组:
http://qt-project.org/doc/qt-5/qimage.html#convertToFormat-2
在这种情况下没有抖动...它只是选择最接近的颜色来使用。所以它不是强迫你的调色板,但你必须决定使用什么颜色。互联网上有很多“图像调色板”生成器,如果您想挑选 N 个“最佳”颜色用于图像,您可能会查看这些生成器,尽管这将是一种启发式方法。
如果你想要抖动,你可以从 Meego 的这个案例开始:
https://github.com/openwebos/qt/blob/master/src/plugins/graphicssystems/meego/dithering.cpp
经常有类似任务的人会使用 ImageMagick:
【讨论】: