我在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??
答案 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的一个错误。 感谢所有人:)