我想使用Qt 5.2创建带有alpha的图像,但我发现颜色值正在被量化。这是一个例子:
QColor testColor(248, 64, 16, 2);
QImage image(10, 10, QImage::Format_ARGB32);
QPainter painter(&image);
painter.setCompositionMode(QPainter::CompositionMode_Source);
painter.fillRect(0, 0, 5, 5, testColor);
painter.end();
qDebug("Test color was (%d, %d, %d, %d)",
testColor.red(), testColor.green(), testColor.blue(), testColor.alpha());
QRgb value = image.pixel(1, 1);
qDebug("QPainter painted (%d, %d, %d, %d)",
qRed(value), qGreen(value), qBlue(value), qAlpha(value));
打印出来:
Test color was (248, 64, 16, 2)
QPainter painted (255, 127, 0, 2)
在我的应用程序中,保留原始的红色,绿色和蓝色值非常重要。是否有我错过的Qt选项,或者这只是Qt 2D渲染器的预期行为?
答案 0 :(得分:3)
QPainter
默认使用Raster后端。看来这个后端内部使用预乘的 RGBA数据进行操作。这会导致RGB通道中的数据丢失,从而导致低alpha。似乎没有简单的方法来改变这种行为。如果可能,您可以尝试使用OpenGL
或OpenVG
后端。后端在this section of the docs中描述。另一种选择是手动在QImage
上实现渲染。您还可以尝试在2个不同的图像上渲染RGB和Alpha通道,然后以某种方式将它们连接起来。另见this question。