2013-05-13 67 views
0

大家好, 我想旋轉Qt中的圖像。在反覆旋轉時,圖像的大小會減小。我怎樣才能阻止這個尺寸的減少?請幫助我。我正在使用此代碼。雖然旋轉的圖像,圖像的大小減少

void MyWidget::rotateLabel() 
{ 
    QPixmap pixmap(*my_label->pixmap()); 
    QMatrix rm; 
    rm.rotate(90); 
    pixmap = pixmap.transformed(rm); 
    my_label->setPixmap(pixmap); 
} 

回答

0

在爲QPixmap的Qt的幫助文件::轉變,它規定: -

變換變換內部調整,以補償 不需要翻譯;即產生的像素映像是包含原始像素映像的所有變換點的最小像素映像 。使用 trueMatrix()函數檢索用於變換像素圖的 的實際矩陣。

我假設圖像的寬度和高度不相等。因此,正如您所觀察到的,每次旋轉都會減小尺寸,以確保保持完整的圖像。

通過添加邊框將原始圖像更改爲具有相同的寬度和高度,或者在旋轉之前或之後縮放圖像,但圖像質量會受到影響。

或者,如果您始終旋轉90度,則可以在外部藝術計劃中旋轉圖像,加載所有4張圖像並設置您想要的圖像,而不是通過Qt旋轉它們。

============== EDITED ======================

在迴應的評論有不同的旋轉,你需要確保你有一個永遠不會旋轉的源圖像,然後對於每次迭代,從源圖像創建一個圖像,以防止圖像大小和圖像質量的降低。

在僞代碼,這將是這樣的: -

Image srcImage(":/myimage"); 

void MyWidget::rotateLabel() 
{ 
    Image img(srcImage); 
    img.rotate(rotation); 
    label->setPixmap(img); 
} 
+0

爲您的幫助需要幫助Merlin,我已經嘗試過在旋轉後調整圖像的大小,但圖像的大小仍然減小。請告訴我其他人或其他能夠幫助我的人。 – Ashish 2013-06-20 06:10:12

+0

你總是在旋轉90度嗎? – TheDarkKnight 2013-06-20 07:36:07

+0

沒有Merlin,它不總是90度,可能是25,35,37,128,230意味着它不是一個固定值。 – Ashish 2013-06-26 05:28:27

0

我不得不在今天早些時候來解決這個問題。首先,確保您的QLabel小部件沒有將scaledContents標誌設置爲True;第二,當旋轉45度時,圖像需要縮放以適應QLabel的邊界;基本上,您需要將其縮放到dimension/sqrt(2)。然後,只有這樣,你能轉換圖像嗎?

我正在使用PyQt,但同樣的原則適用。

label = my_QLabel_instance 
    angle = my_arbitrary_angle 
    image = some_stored_reference_to_original_QImage_instance 
    dimension = dimension/sqrt(2) 

    transform = QtGui.QTransform().rotate(angle) 
    pixmap = QtGui.QPixmap(image) 
    pixmap = pixmap.scaled(dimension, dimension) 
    pixmap = pixmap.transformed(transform, QtCore.Qt.SmoothTransformation) 

    label.setPixmap(pixmap)