Qt Pixmap操作

时间:2013-01-24 14:23:57

标签: c++ linux qt

我正在尝试基于QPixmaps创建流程管理器。这些像素图通过20Hz的定时器回调更新,所以看起来它们正在旋转。

以下是我当前窗口的屏幕截图。

Pixmap screenshot http://i47.tinypic.com/y5g4.png

像素图是具有[20] [14]个元素的2D数组。 20是时间片的数量,14是过程状态指示器。我知道,屏幕上只显示了13个。

我目前正在使用画家对象和合成模式将QImages与以下代码一起添加:

QImage textImage(mapIcon.size(), QImage::Format_ARGB32);
QImage resultImage(mapIcon.size(), QImage::Format_ARGB32);

QPainter textPainter(&textImage);

textPainter.setCompositionMode(QPainter::CompositionMode_Source);
textPainter.fillRect(mapIcon.rect(), Qt::black);
textPainter.setCompositionMode(QPainter::CompositionMode_SourceOver);
textPainter.setFont(QFont("Arial", 8, QFont::Bold));
textPainter.setPen(QPen(Qt::white));
textPainter.drawText(QRectF(0, 0, mapIcon.width(), mapIcon.height()),
    Qt::AlignCenter, name);
textPainter.end();

QPainter resultPainter(&resultImage);
resultPainter.setCompositionMode(QPainter::CompositionMode_Source);
resultPainter.drawImage(0, 0, mapIcon);
resultPainter.setCompositionMode(QPainter::CompositionMode_Exclusion);
resultPainter.drawImage(0, 0, textImage);

resultPainter.setRenderHint(QPainter::SmoothPixmapTransform, true);
resultPainter.setRenderHint(QPainter::HighQualityAntialiasing, true);

runnerIcons[x][y] = QPixmap::fromImage(resultImage);

我的问题是这个:我不想在绿色标签上看到倒置的配色方案,我想要那种颜色为黑色。黑色的白色是好的,但洋红色不是我的最爱。

这可能在Qt?或者也许你会对替代解决方案提出一些建议吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

你可以做几件事。您可以查看QPainter::setCompositionMode (mode)方法。也许其他一种组合模式对你有用吗?特别是QPainter::CompositionMode_ExclusionQPainter::RasterOp_SourceXorDestination

您还可以为文字使用免费颜色。洋红色(蓝色+红色)与色轮上的绿色相反。如果你制作文字洋红色,它可能会很好地反对黑色和绿色。 (我不是说它会看起来很棒 - 只是它会很好地显示出来。)或者你可以将文本设为50%灰色,以便亮度和颜色都有对比度?

此外,您只有13个图标,而不是14个。不确定它是否有任何区别。