2014-02-18 44 views
2

我們目前正在使用Windows的圖像呈現商業庫。當大小比圖像原始大小顯示黑白圖像,該庫灰度圖像,使得仍大多可以確認:QImage抖動質量

enter image description here

現在我嘗試同樣與一個Qt 4.8的應用。 基本上什麼做的是呼籲:

QImage mImage; 
... 
mImage.load(...); 
... 
painter.drawImage(paintRect, mImage, mImage.rect()); 

哪裏paintRect比mImage.rect小()。這效果很好,但產量少得多滿足:

enter image description here

我試了幾個renderHints(QPainter的:: SmoothPixmapTransform,抗鋸齒,HighQualityAntialiasing),並轉化利用

mImage = mImage.convertToFormat(QImage::Format_RGB32); 

QPainter的圖像: :SmoothPixmapTransform似乎有點改進輸出(它包含在屏幕截圖中)。所有其他的東西似乎沒有改變任何東西。

我錯過了什麼?

怎麼能顯示與減少幅圖像的改進?

+0

你是否保留寬高比?您是否嘗試用'QImage :: scaled'預縮放圖像 – UmNyobe

+0

保持寬高比:我們的應用程序不需要,但在這些情況下,我確實,是的。沒有預縮放,用戶放大和縮小,因此縮放因子總是變化。 –

回答

4

可能的是,在

painter.drawImage(paintRect, mImage, mImage.rect()); 

畫家只是插值採取哪個像素在初始圖像中時,大小不同。這將解釋第二個圖像。

使用

QImage todraw = mImage.scaled(
      paintRect.size(), 
      Qt::IgnoreAspectRatio, 
      Qt::SmoothTransformation); 
... 
painter.drawImage(paintRect, todraw, mImage.rect()); 

您計算圖像todraw只調整事件(以避免結垢每個油漆事件)量表手冊 並使用它,而不是與畫家。

+1

確實是這樣。驚人。我認爲這是一個錯誤。謝謝 –

+1

@REDSOFTADAIR這不是一個錯誤。 QPainter :: drawImage只是不對圖像重縮放進行線性插值。它從未有過這種行爲。您對SmoothPixmapTransform的使用不起作用,因爲您沒有使用pixmaps。您對抗混疊設置的使用不起作用,因爲此問題與抗混疊無關。 –