2

Qt 5.2 を使用してアルファを含む画像を作成したいのですが、色の値が量子化されていることがわかりました。次に例を示します。

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 データで内部的に動作しているようです。これにより、低アルファの RGB チャネルでデータが失われます。この動作を変更する簡単な方法はないようです。可能であればOpenGL、またはバックエンドを使用してみてください。バックエンドについては、ドキュメントのこのセクションでOpenVG説明されています。もう 1 つのオプションは、レンダリングを手動で実装することです。また、2 つの異なる画像で RGB とアルファ チャネルをレンダリングして、その後何らかの方法でそれらを結合することもできます。この質問も参照してください。QImage

于 2014-02-25T19:23:05.747 に答える