2

我想使用 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 渲染器的预期行为?

4

1 回答 1

3

QPainter默认情况下使用 Raster 后端。似乎这个后端在内部使用预乘的RGBA 数据进行操作。这会导致低 alpha 的 RGB 通道中的数据丢失。似乎没有简单的方法可以改变这种行为。如果可能,您可以尝试使用OpenGLOpenVG后端。文档的这一部分描述了后端。QImage另一种选择是手动实现渲染。您还可以尝试在 2 个不同的图像上渲染 RGB 和 alpha 通道,然后以某种方式加入它们。另请参阅此问题

于 2014-02-25T19:23:05.747 回答