Qt中QImage類(lèi)封裝了對(duì)于一般圖像像素級(jí)的操作,圖像顯示則使用QPixmap。
我們一直強(qiáng)調(diào)成都網(wǎng)站建設(shè)、成都網(wǎng)站制作對(duì)于企業(yè)的重要性,如果您也覺(jué)得重要,那么就需要我們慎重對(duì)待,選擇一個(gè)安全靠譜的網(wǎng)站建設(shè)公司,企業(yè)網(wǎng)站我們建議是要么不做,要么就做好,讓網(wǎng)站能真正成為企業(yè)發(fā)展過(guò)程中的有力推手。專(zhuān)業(yè)網(wǎng)站設(shè)計(jì)公司不一定是大公司,成都創(chuàng)新互聯(lián)作為專(zhuān)業(yè)的網(wǎng)絡(luò)公司選擇我們就是放心。
本文說(shuō)說(shuō)對(duì)一般圖像(常見(jiàn)格式,圖像不大)的處理,比如將彩×××像處理為灰度圖像。首先要獲得源圖像數(shù)據(jù),對(duì)源圖像數(shù)據(jù)進(jìn)行處理,將結(jié)果保存并顯示。
QImage *img;//原圖像QImage *grayImg;//處理后灰度圖像
1.獲得原圖像數(shù)據(jù)
采用此方法即可,
unsigned char *data=img->bits(); //獲取圖像像素字節(jié)數(shù)據(jù)的首地址 |
這里要注意,采用bits()方法的到的數(shù)據(jù)data中像素的組織形式應(yīng)為ARGB,但實(shí)際調(diào)試中發(fā)現(xiàn),每個(gè)像素中從字節(jié)從低到高依次是BGRA,方向剛好反過(guò)來(lái)。在處理彩×××像時(shí)尤其注意。下面會(huì)解釋這樣排列順序的原因。
2.灰度處理
1 int width=img->width();//圖像寬 2 int height=img->height();//圖像高 3 4 int bytePerLine=(width*24+31)/8;//圖像每行字節(jié)對(duì)齊 5 6 graydata=new unsigned char[bytePerLine*height];//存儲(chǔ)處理后的數(shù)據(jù) 7 8 unsigned char r,g,b; 9 for (int i=0;i<height;i++)10 {11 for (int j=0;j<width;j++)12 {13 r = *(data+2);14 g = *(data+1);15 b = *data;16 17 graydata[i*bytePerLine+j*3] =(r*30+g*59+b*11)/100;18 graydata[i*bytePerLine+j*3+1]=(r*30+g*59+b*11)/100;19 graydata[i*bytePerLine+j*3+2]=(r*30+g*59+b*11)/100;20 21 data+=4;22 }23 }
上述代碼中要注意字節(jié)對(duì)齊,否則可能處理完后的圖像會(huì)變形扭曲。此外要注意r/g/b三值的獲得,下面解釋其具體原因。
首先,data指針是存放在棧中的,在windows中棧是向低地址擴(kuò)展的數(shù)據(jù)結(jié)構(gòu)(與此對(duì)應(yīng),堆是向高地址擴(kuò)展的數(shù)據(jù)結(jié)構(gòu))。在小端存儲(chǔ)模式下,低地址存放低有效字節(jié),棧中數(shù)據(jù)的結(jié)構(gòu)如下圖所示:
3.顯示圖像
1 grayImg=new QImage(graydata,width,height,bytePerLine,QImage::Format_RGB888);2 ui.label->setPixmap(QPixmap::fromImage(*grayImg));
文章標(biāo)題:qt5對(duì)圖片解析
分享URL:http://jinyejixie.com/article16/psgddg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、網(wǎng)站設(shè)計(jì)公司、定制開(kāi)發(fā)、商城網(wǎng)站、企業(yè)建站、標(biāo)簽優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)