生活随笔
收集整理的這篇文章主要介紹了
qimage加载jpg失败_QImage基本api
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
QImage這個類之前用過,無外乎是加載一個圖片文件顯示出來,并沒有做過多的研究,目前工作中用到了灰度圖以及圖片的像素操作,重新學習了下,記錄記錄。
一些基本操作方法
const uchar *QImage::bits() const
int QImage::byteCount() const
int QImage::bytesPerLine() const 還可以這樣計算(width:圖像寬度,img.depth是圖圖像深度):int bytePerLine = (width * img.depth() + 31) / 32 * 4;
QImage::Format_RGB32
QImage::Format_RGB888
- 存入圖像,此時需要設定一張顏色表QVector,如下
QImage::Format_Indexed8 灰度顏色表:QVector vtrColor;for(int k = 0;k < 256;++k){` vtrColor.push_back( qRgb(k,k,k) );}
相關概念
灰度圖
普通彩色圖片中每個像素中有R、G、B三個分量,而每個分量有256種(0~255)值可以選擇,這樣一個像素點就可以有1600多萬(255255255)的顏色變化范圍。
而灰度圖就是R、G、B三分分量的值相同的一種特殊彩色圖像。即R=G=B.
位深
位深是指存儲每個像素所用的位數.
如上面介紹的QImage方法,img.depth(),該方法可以返回當前圖像的位深.
處理算法
unsigned char *grayData; QImage img; img.load (m_strPath+"/2.jpg"); QPixmap pixmap(QPixmap::fromImage (img)); ui->label->setPixmap (pixmap); unsigned char *data = img.bits (); int w = img.width (); int h = img.height (); int bytePerLine = (w * 24 + 31) / 8; //存儲處理后的數據 grayData = new unsigned char [bytePerLine * h]; unsigned char r,g,b; for ( int i = 0; i < h; i++ ) { for ( int j = 0; j < w; j++ ) { r = *(data + 2); g = *(data + 1); b = *data; grayData[i * bytePerLine + j * 3] = (r * 30 + g*59 +b*11)/100; grayData[i*bytePerLine+j*3+1]=(r*30+g*59+b*11)/100; grayData[i*bytePerLine+j*3+2]=(r*30+g*59+b*11)/100; data+=4; //ui->textEdit->append (QString("%1 %2 %3").arg (r).arg (g).arg (b)); } } QImage grayImage(grayData,w,h,bytePerLine,QImage::Format_RGB888); QPixmap pixmap2(QPixmap::fromImage (grayImage)); ui->label_2->setPixmap (pixmap2);
最終效果
總結
以上是生活随笔為你收集整理的qimage加载jpg失败_QImage基本api的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。