2017-02-19 21 views
1

大きなプロジェクトの一環として、私はQPixmapで基本的な図形を描こうとしていますが、生成された画像は常にぼやけて見えます。円は純粋な赤い円ではなく、エッジがぼやけており、期待どおり色が真ではありません。これは私がイメージが必要なもので後で問題になります。関連するコードスニペットは、私はアンチエイリアスオプションとレンダリングのヒントと一緒に遊んだが、私は運がなかった。どんな助けでも大歓迎です!Qt Qpixmapはぼやけた画像を生成する

QPixmap pixmap(QSize(300,300)); 
QPainter painter(&pixmap); 

painter.setRenderHint(QPainter::Antialiasing); 
painter.setRenderHint(QPainter::SmoothPixmapTransform); 

painter.fillRect(QRectF(0, 0, 300, 300),Qt::white); 

painter.setPen(Qt::red); 
painter.drawEllipse(QPoint(150,150), 75, 75); 

painter.setPen(Qt::green); 
QLineF line(30, 30, 30, 270); 
painter.drawLine(line); 

pixmap.save("test1.jpg", "jpg", 100); 

私は問題を表示する画像を含めるように求めてきた、ここに近い緑の線が真緑色にされていないと、赤い円が赤真とぼやけたエッジとされていない示した画像のアップです。あなたは赤い色で持って

+0

あなたはアンチエイリアスを持っている場合、私はピックスマップ内のエッジが近い検査で少しぼやけて見えることを期待する有効。あなたの投稿を編集して、問題を説明する画像を含めることはできますか? –

+0

完了!だから、私はアンチエイリアスの行を取り出す必要がありますか?この行が追加される前でも、私はまだ問題を抱えていました。 – user193369

+0

アンチエイリアシングのない「QPainter」ヒントがない場合でも、ぼかしが表示されている場合は、何か他のことが起こっていると思われます。投稿されたが、 'painter.setRenderHint(QPainter :: Antialiasing);行が削除されたコードは、私が期待していたものとまったく同じです。すなわち、ぼかしなし –

答えて

2

問題は、JPG形式に保存するとき、デフォルトではQtはクロマカラーサブサンプリング(2×2ブロック)を使用していることです。 この問題を回避する唯一の方法は、別の形式を使用することです。同じ画像をPNG形式で保存すると、純粋な赤丸(255,0,0)が返されます。

ぼかし円についてQPainter::Antialiasingレンダリングヒントのために発生します。あなたの場合、レンダリングを使用していないは、鮮明な画像を示しています。下には純粋な赤色(PNG形式)と鮮明なエッジ(RenderHintsではなく)でイメージが表示されます。最も曖昧なアプローチはQPainter::Antialiasingを使用するので、シャープネスをイメージすることを目指している場合は避けてください。あなたのニーズに応じて、QPainter::HighQualityAntialiasingRenderHintを試すことができますが、他には何もありません。

+1

画像をリンクではなくポストの一部として含める必要があります。誰にとってもいいよ。 – ray

+0

返事をありがとう。私はアンチエイリアス処理を取り除き、フォーマットをPNGに変更してぼかしを改善しましたが、それはまだ少しぼやけていて、添付された画像ほど明瞭ではありません。おそらくこの画像を生成するために使用したコードを表示して、それを私と比較することができますか?周りを遊んだ後、何らかの理由でペンの幅を10に設定すると、ぼかしを完全に取り除いてしまうようです。 – user193369

+0

それを無視して、それは完全に仕事をする!私はいつものように間違いを犯した。助けてくれてありがとうございました。 – user193369

関連する問題