我认为这通常是一个图形操作问题,但我想在Qt(c ++)中实现这一点。如果我有一个图像 - 让我们在透明背景上说一个圆圈 - 浅灰色,Qt中是否有任何内置功能可以将色调/饱和度转换为颜色?
我想我可以逐像素地进行,并以数学方式修改rgb - 将x添加到r,g和b,以获得所需的颜色,但必须有一种比修改每个像素更好的方法。
Qt Docs中的任何内容都没有进入图像处理,只是改变了alpha和颜色。我应该查看一个开源库(最终结果可能是一个独立销售的软件)?如果是的话,有什么建议吗?或者是否有一个隐藏在Qt文档中的秘密函数可以在不需要外部库/疯狂算法的情况下完成?
答案 0 :(得分:6)
可能的行动方案:
QImage
QImage::convertToFormat(QImage::Format_Indexed8)
获取索引
带有颜色表的图像QRgb
QImage::color ( int i ) const
QColor
( QRgb color )
和其他QColor方法操作颜色void QImage::setColor ( int index, QRgb colorValue )
答案 1 :(得分:2)
不幸的是,你有一些选择,其中没有一个是内置的Qt解决方案。
My application进行了大量的图像过滤,我真的很震惊于将过滤器移植到OpenCL后的性能提升。
在1936×2592处,亮度修改滤波器在本机C ++代码中以175ms运行,迭代QImage中的每个像素。
移植到OpenCL后,降至15ms。当然,必须将数据从QImage中拉出并重新插入,但与OpenCL性能提升相比,这一开销无关紧要。
祝你的编码冒险好运!
答案 2 :(得分:0)
在这种情况下,听起来您可能可以使用QGraphicsColorizeEffect。
此方法将设置,而不是改变色调。尽管似乎QGraphicsEffect
仅适用于QWidget
和QGraphicsItem
,这很不方便。
在这种情况下,另一种选择是使用QPainter
的{{3}}。
答案 3 :(得分:0)
只需使用 QImage::pixelColor
和 QImage::setPixelColor
(自 Qt
5.6 起可用)。