为什么回读像素颜色与QImage上绘制的颜色不同?

时间:2017-02-17 11:20:13

标签: qt qpainter qimage

我在Qt 5.4中的QPainter上遇到QImage问题。

图片有Format_ARGB32。我想使用QPainter绘制函数在图像中的像素上设置给定的RGBA值,然后使用QImage::pixel读回值。

然而,绘制的价值和回读的价值是不同的。我做错了什么?

示例代码:

QImage image(100, 100, QImage::Format_ARGB32);
uint value = 0x44fa112b; //some value..
QPainter painter(&image);
painter.setCompositionMode(QPainter::CompositionMo de_Source);
QColor color(qRed(value), qGreen(value), qBlue(value), qAlpha(value));
QBrush brush(color);
painter.setBrush(brush);
painter.drawRect(0,0,image.width(), image.height());

uint value1 = image.pixel(50,50);
// value1 IS NOT EQUAL TO value. Why??

2 个答案:

答案 0 :(得分:0)

这在Qt 5.7中运行良好。也许早期的Qt版本需要painter.end()调用。

#include <QtGui>
int main(int argc, char ** argv) {
   QGuiApplication app{argc, argv};
   QImage image{100, 100, QImage::Format_ARGB32};
   auto const set = 0x44fa112b;
   QPainter painter(&image);
   painter.setCompositionMode(QPainter::CompositionMode_Source);
   painter.setBrush({{qRed(set), qGreen(set), qBlue(set), qAlpha(set)}});
   painter.drawRect(image.rect());
   if (false) painter.end(); //<< try with true here
   auto readback = image.pixel(50,50);
   qDebug() << hex << set << readback;
   Q_ASSERT(readback == set);
}

答案 1 :(得分:0)

问题解决了!! 我尝试使用Qt 5.8时工作正常 看起来像Qt 5.4的一个错误。 感谢所有人:)