2017-02-17 8 views
1

Qt 5.4にQPainterQImageに関する問題があります。なぜ読み込みピクセルの色が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

イメージを値で塗りつぶすには、QImage :: fillを使用することができます。それでは、最終的に得られる価値は何ですか? – peppe

+0

塗りつぶしが正しく機能しています(返される色の値は、塗りつぶされたものと同じです)。しかし、私の場合、私はイメージに描かれて読まれるべき異なる値を持っています。単一の値ではありません。何か案が? – rajeshma

+1

投稿されたコード(コンポジションモード 'QPainter :: CompositionMode_Source')は私にとっては期待通りに機能します。 –

答えて

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); 
} 
+0

実際のコードと結果を共有する.. – rajeshma

+0

私はpainter.end()も試しました。 diffはありません。入力値= "44fa112b"の場合、出力値= "44fb1329" – rajeshma

0

問題が解決しました。 Qt 5.8を試したときに正しく動作する Qt 5.4のバグのようです。 ありがとうございます:)

関連する問題