NO IMAGE

Qt可顯示基本的影象型別,利用QImage、QPxmap類可以實現影象的顯示,並且利用類中的方法可以實現影象的基本操作(縮放、旋轉)。

1. Qt可顯示的影象型別

參考Qt的幫助文件,可支援的型別,即可以直接讀取並顯示的格式有BMP、GIF、JPG、JPEG、PNG、TIFF、PBM、PGM、PPM、XBM、XPM。

2. Qt用如何顯示影象

通常用QLabel顯示影象,QLabel類有setPixmap()函式,可以用來顯示影象。也可以直接用QPainter畫出影象。

如果影象過大,直接用QLabel顯示,將會出現有部分影象顯示不出來,這時可以用Scroll Area部件。方法:將QLabel部件放到Scroll Area部件裡面,將兩個採用柵格佈局,當影象超出了QLabel部件大小時,就會產生滑動杆,這樣影象就可以都看到了。

3. 顯示的方法

步驟:先開啟一個影象;將影象檔案載入進QImage物件中;再用QPixmap物件獲得影象;最後用QLabel選擇一個QPixmap影象物件顯示。

程式碼如下:

複製程式碼
    QString filename;
filename=QFileDialog::getOpenFileName(this,
tr("選擇影象"),
"",
tr("Images (*.png *.bmp *.jpg *.tif *.GIF )"));
if(filename.isEmpty())
{
return;
}
else
{
QImage* img=new QImage;
if(! ( img->load(filename) ) ) //載入影象
{
QMessageBox::information(this,
tr("開啟影象失敗"),
tr("開啟影象失敗!"));
delete img;
return;
}
ui->label->setPixmap(QPixmap::fromImage(*img));
}
複製程式碼

注:也可以直接用QPixmap類的物件採用Load函式載入影象。這裡說下QImage和QPixmap類的用處:QImage為影象的畫素級訪問做了優化,QPixmap使用底層平臺的繪製系統進行繪製,無法提供畫素級別的操作,而QImage則是使用獨立於硬體的繪製系統。

4. 影象縮放

影象縮放採用scaled函式。函式原型

QImage QImage::scaled ( const QSize & size,Qt::AspectRatioMode aspectRatioMode =
Qt::IgnoreAspectRatio, Qt::TransformationModetransformMode = Qt::FastTransformation
) const

使用方法如下,還是利用上面的img:

QImage* imgScaled = new QImage;
*imgScaled=img->scaled(width,
height,
Qt::KeepAspectRatio);
ui->label->setPixmap(QPixmap::fromImage(*imgScaled));

scaled函式中width和height表示縮放後影象的寬和高,即將原影象縮放到(width,height)大小。

5. 影象旋轉

影象旋轉可以利用QImage類的transformed函式,向transformed函式傳入QMatrix物件,QMatrix物件指定了旋轉的角度。

程式碼如下:

QImage* imgRatate = new QImage;
QMatrix matrix;
matrix.rotate(270);
*imgRotate = img->transformed(matrix);
ui->label->setPixmap(QPixmap::fromImage(*imgRotate));

注意:rotate函式中引數是旋轉的角度,旋轉是按順時針方向旋轉的,上面順時針旋轉270度,即逆時針旋轉90度。

6. 影象連續縮放
有了影象縮放的基礎,就可以實現影象的連續縮放,可以放置一個橫向滑竿(中文解釋不標準,就是Horizontal Slider部件 ),滑動滑輪的位置以實現影象連續縮放。

Horizontal Slider部件指向的值為整型value,即縮放後的影象為

img->scaled(orignalWidth*value/100,
                         orignalHeight*value/100,
                         Qt::KeepAspectRatio);

orignalWidth和orignalHeight為原始影象的寬和高。

注意:在對原始影象進行縮放多少倍數時,在相應的槽函式內只需要呼叫Horizontal Slider部件物件的setValue函式即可,因為Horizontal Slider部件滑竿指向的值一旦變化就會觸發對應的槽函式來對影象進行縮放。