欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Qt中圖片旋轉(zhuǎn)縮放操作的實(shí)現(xiàn)

 更新時(shí)間:2024年01月04日 10:18:28   作者:糯諾諾米團(tuán)  
本文主要介紹了Qt中圖片旋轉(zhuǎn)縮放操作的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

在我們開發(fā)過程中,難免會(huì)遇到加載圖片的問題,在上一個(gè)開發(fā)項(xiàng)目里我就遇到了圖片縮放的問題,所以,我決定將這一部分好好研究,記錄下來,希望對大家有幫助喲~

在講解之前,我們先看一看具體的展示效果,有沒有你需要的功能?如果有,那就繼續(xù)跟著我的思路走吧~

功能實(shí)現(xiàn)

具體的功能分成了兩類:旋轉(zhuǎn)、縮放

1:圖片加載

說到了圖片旋轉(zhuǎn),第一個(gè)需要講述的功能是:打開文件并加載圖片資源。效果圖右側(cè)是采用QLabel控件進(jìn)行圖片加載。

打開文件并選擇指定圖片路徑這個(gè)功能就不用再過多說明了,前兩章節(jié)文章都有進(jìn)行說明,只是采用了QFileDialog::getOpenFileName靜態(tài)函數(shù)。

在圖片加載功能中,唯一需要說明的是QLabel加載圖片資源,代碼如下:

m_qsPicturePath = qsFilePath;
QImage img(qsFilePath);
ui.labPng->setPixmap(QPixmap::fromImage(img));

代碼說明:

qsFilePath:讀取出來的選擇路徑,并將該字符串賦值給m_qsPicturePath進(jìn)行記錄。

為什么要將該路徑進(jìn)行賦值呢?

對于后續(xù)不同的功能,每改變一次都需要將QImage重新設(shè)置到QLabel控件中,當(dāng)前,也可以采取QImage作為成員變量,這里就隨意了。

接下來就重點(diǎn)講解旋轉(zhuǎn)以及縮放這兩個(gè)功能了。在Qt中實(shí)現(xiàn)二維轉(zhuǎn)換功能有兩種方式,分別是:QMatrix、QTransform兩個(gè)類。

在書本上介紹的時(shí)候一般都是以QMatrix類為主,實(shí)際上該類已經(jīng)過時(shí)了,提供它是為了保持舊源代碼的工作,并且強(qiáng)烈建議不要在新代碼中使用它。

This class is obsolete.It is provided to keep old source code working. We strongly advise against using it in new code

在相同實(shí)現(xiàn)功能的方式下,一般會(huì)采用QTransform類進(jìn)行實(shí)現(xiàn)的。在Qt中QTransform是推薦的轉(zhuǎn)換類。

QTransform與QMatrix的區(qū)別

它是一個(gè)真正的3x3矩陣,允許透視變化。 QTransform的toAffine()方法允許將QTransform轉(zhuǎn)換為QMatrix,如果在矩陣上指定了透視圖轉(zhuǎn)換,那么轉(zhuǎn)換將導(dǎo)致數(shù)據(jù)丟失。

2:旋轉(zhuǎn)

首先我們先講述下旋轉(zhuǎn)功能是如何實(shí)現(xiàn)的。

在這個(gè)demo中,分別進(jìn)行了4個(gè)角度的旋轉(zhuǎn),0°、90°、180°、270°

無論是哪個(gè)角度進(jìn)行轉(zhuǎn)換,都采用QTranform::rotate函數(shù)實(shí)現(xiàn)的。

代碼展示:

QTransform transform;
transform.rotate(0);
QImage img(m_qsPicturePath);
img = img.transformed(transform);
ui.labPng->setPixmap(QPixmap::fromImage(img));

代碼解析:

QTransform::rotate()圍繞指定軸逆時(shí)針旋轉(zhuǎn)給定角度的坐標(biāo)軸,并返回對矩陣的引用。

當(dāng)前的旋轉(zhuǎn)角度是°,大家在使用的時(shí)候可以根據(jù)自己的角度自行設(shè)置,只需要修改rotate的參數(shù)就可以了,參數(shù)角度是用度數(shù)表示的。

有一點(diǎn)需要注意的是:如果將QTransform用于小部件坐標(biāo)中定義的點(diǎn),旋轉(zhuǎn)方向?qū)⑹琼槙r(shí)針的,因?yàn)閅軸指向下方。

既然提到了QMatrix類,那么使用該類是如何實(shí)現(xiàn)的呢?

QMatrix matrix;
matrix.rotate(90);
QImage img(m_qsPicturePath);
img = img.transformed(matrix);
ui.labPng->setPixmap(QPixmap::fromImage(img));

3:縮放

代碼展示:

QTransform transform;
transform.scale(2, 2);
QImage img(m_qsPicturePath);
img = img.transformed(transform);
ui.labPng->setPixmap(QPixmap::fromImage(img));

代碼解析:

QTransform::scale()水平方向按sx和垂直方向按sy縮放坐標(biāo)系統(tǒng),并返回對矩陣的引用。

對于scale的參數(shù),可以簡單的理解:想要實(shí)現(xiàn)放大功能,參數(shù)大于1,想要實(shí)現(xiàn)縮放功能,參數(shù)小于1

當(dāng)前例子代碼對圖片進(jìn)行了兩倍放大,假設(shè)要是縮放,只需要設(shè)置成:transform.scale(0.5, 0.5);

注意:當(dāng)參數(shù)是(1,1)時(shí),說明圖片既沒有放大也沒有縮小。

QMatrix的調(diào)用方式一致,只是類名換了,調(diào)用的參數(shù)名都是一致的,轉(zhuǎn)換角度那里已經(jīng)寫明了使用方式,這里就不再過多說明了。因?yàn)镼Matrix是Qt中遺棄掉的功能,以后大家都使用QTransform類就可以了。

總結(jié)

到這里,旋轉(zhuǎn)縮放的功能就已經(jīng)實(shí)現(xiàn)了。

在這個(gè)小demo中,難度不大,最值得記錄的是使用哪個(gè)類進(jìn)行操作,在Qt中QTranform的是被推薦的,只要好好讀懂類參數(shù),就能實(shí)現(xiàn)簡單的圖形轉(zhuǎn)換操作,如果有想要了解這兩個(gè)類的詳細(xì)說明的,下面我會(huì)把鏈接貼出來,具體的函數(shù)操作大家可以自行學(xué)些

QTransform類詳情

QMatrix類詳情

到此這篇關(guān)于Qt中圖片旋轉(zhuǎn)縮放操作的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Qt 圖片旋轉(zhuǎn)縮放內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • VS2010 C++ 配置優(yōu)化方案

    VS2010 C++ 配置優(yōu)化方案

    使用VS2010的時(shí)候,發(fā)現(xiàn)了不少問題,而本文則是介紹使用中需要的問題,已經(jīng)解決方案。
    2014-10-10
  • C++ vector 遍歷的幾種方法

    C++ vector 遍歷的幾種方法

    本文主要介紹了C++ vector 遍歷的幾種方法,對vector 遍歷有一定的總結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下
    2021-07-07
  • C語言中指針 int *p=0;和int *p;*p=0;和”&“的關(guān)系和區(qū)別詳解

    C語言中指針 int *p=0;和int *p;*p=0;和”&“的關(guān)系和區(qū)別詳解

    這篇文章主要介紹了C語言中指針 int *p=0;和int *p;*p=0;和”&“有什么關(guān)系和區(qū)別,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • 手把手教你如何一眼分辨是C還是C++

    手把手教你如何一眼分辨是C還是C++

    在很大程度上,C++是C的超集,這意味著一個(gè)有效的C程序也是一個(gè)有效的C++程序,下面這篇文章主要給大家介紹了關(guān)于如何一眼分辨是C還是C++的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • CMake中使用vcpkg的實(shí)現(xiàn)

    CMake中使用vcpkg的實(shí)現(xiàn)

    本文主要介紹了CMake中使用vcpkg的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • C語言形參和實(shí)參傳值和傳址詳解刨析

    C語言形參和實(shí)參傳值和傳址詳解刨析

    形參出現(xiàn)在函數(shù)定義中,在整個(gè)函數(shù)體內(nèi)都可以使用, 離開該函數(shù)則不能使用。實(shí)參出現(xiàn)在主調(diào)函數(shù)中,進(jìn)入被調(diào)函數(shù)后,實(shí)參變量也不能使用,形參和實(shí)參的功能是作數(shù)據(jù)傳送。發(fā)生函數(shù)調(diào)用時(shí), 主調(diào)函數(shù)把實(shí)參的值傳送給被調(diào)函數(shù)的形參從而實(shí)現(xiàn)主調(diào)函數(shù)向被調(diào)函數(shù)的數(shù)據(jù)傳送
    2021-11-11
  • C語言學(xué)生管理系統(tǒng)源碼分享

    C語言學(xué)生管理系統(tǒng)源碼分享

    這篇文章主要為大家分享了C語言學(xué)生管理系統(tǒng)的源碼,幫助大家學(xué)習(xí)結(jié)構(gòu)體,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • 詳解C++純虛函數(shù)與抽象類

    詳解C++純虛函數(shù)與抽象類

    這篇文章主要介紹了C++純虛函數(shù)與抽象類的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下
    2020-08-08
  • 深入解析C++和JAVA的字符串

    深入解析C++和JAVA的字符串

    這篇文章主要介紹了C++和JAVA的字符串,JAVA 中String 和StringBuffer的區(qū)別,需要的朋友可以參考下
    2015-07-07
  • C++超集C++/CLI模塊的基本類型

    C++超集C++/CLI模塊的基本類型

    這篇文章介紹了C++超集C++/CLI模塊的基本類型,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07

最新評論