如果我們需要旋轉(zhuǎn)某個(gè)圖片,由于我們重繪它(比如順時(shí)針旋轉(zhuǎn)30°)可能沒有合適的函數(shù)來重繪它,那怎么辦呢?
答案就是:不必重新繪制,單獨(dú)將這個(gè)圖片旋轉(zhuǎn)即可!EasyX提供了圖片旋轉(zhuǎn)的函數(shù),如下:
void rotateimage( IMAGE *dstimg, IMAGE *srcimg, double radian, COLORREF bkcolor = BLACK, bool autosize = false, bool highquality = true);
第一個(gè)參數(shù)是指定目標(biāo) IMAGE 對(duì)象指針,用來保存旋轉(zhuǎn)后的圖像。
第二個(gè)參數(shù)用于指定原 IMAGE 對(duì)象指針。
第三個(gè)參數(shù)就是旋轉(zhuǎn)的弧度。注意是弧度!不是角度!
第四個(gè)參數(shù)指定旋轉(zhuǎn)后產(chǎn)生的空白區(qū)域的顏色。默認(rèn)為黑色。
第五個(gè)參數(shù)指定目標(biāo) IMAGE 對(duì)象是否自動(dòng)調(diào)整尺寸以完全容納旋轉(zhuǎn)后的圖像。默認(rèn)為 false。
第六個(gè)參數(shù)是指定是否采用高質(zhì)量的旋轉(zhuǎn)。在追求性能的場合請(qǐng)使用低質(zhì)量旋轉(zhuǎn)。默認(rèn)為 true。
理論講太多,不如一個(gè)例子來的實(shí)在,我們直接上代碼:
//www.sztianhecheng.cn #include <graphics.h> // 引用圖形庫頭文件 #include <conio.h> #define PI 3.14159265359 int main() { IMAGE pImg; initgraph(640, 480); // 創(chuàng)建繪圖窗口,大小為 640x480 像素 // 定義圖像 IMAGE img1, img2; // 從文件加載圖像 loadimage(&img1, ("C:\\logo.png")); // 旋轉(zhuǎn)圖像 30 度 (PI / 6) rotateimage(&img2, &img1, 30); // 顯示旋轉(zhuǎn)后的圖像 putimage(0, 0, &img2); getch(); // 按任意鍵繼續(xù) closegraph(); // 關(guān)閉繪圖窗口 return 0; }
首先,定義兩個(gè)圖像對(duì)象(可以先簡單理解為就是變量),用loadimage加載原始圖片到img1(筆者提前把logo放到C盤下了),然后調(diào)用rotateimage函數(shù)旋轉(zhuǎn),注意由于單位是弧度,所以我們提前定義PI除以3就是60°。保存到img2里。最后用putimage輸出即可,位置位于(0,0)左上角。運(yùn)行效果如下:
怎么樣,大家看到效果,可以自行更改效果。
當(dāng)然這里是用的外部圖片加載,也可以獲取其他image旋轉(zhuǎn),大家可以自由發(fā)揮!
C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點(diǎn)擊了解:
一點(diǎn)編程也不會(huì)寫的:零基礎(chǔ)C語言學(xué)練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進(jìn)階課程
從零到寫出一個(gè)爬蟲的Python編程課程
只會(huì)語法寫不出代碼?手把手帶你寫100個(gè)編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競賽課入門課程
手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程