Qt 顯示16位圖像


  QT從5.12版本開始,增加了QImage::Format_RGBX64、QImage::Format_RGBA64、QImage::Format_RGBA64_Premultiplied等一系列圖像格式,使得顯示16位位深色彩圖像成為可能,讀寫16位tiff圖像終於不用先放縮到8位再顯示了(淚目);從5.13版本開始增加了QImage::Format_Grayscale16這種16位位深灰度圖像格式。

 

構造圖像

  構造16位圖像,原始數據應是ushort類型而不是8位圖像時的uchar類型,單個色彩的范圍為0~65535而不是之前的0~255。添加圖像數據時,原本使用setPixelColor()設置QRgba64類型的色彩,發現程序的運行效率不高,構造圖像的時間比較長。事實上,QT自己的官方文檔都說了setPixelColor()是一個效率很低的函數,不建議使用它來構造圖像。

 1     QImage tempImg = QImage(width, height, QImage::Format_RGBX64);  2  
 3     int bitCount = 0,index= 0 4     ushort nowColor;  5     for (int j = 0; j < height; j++)  6  {  7         for (int i = 0; i < width; i++)  8  {  9             //放縮數據到0~65535,orignalData為float類型
10             nowColor = (ushort)((orignalData[index] - limitMin) * 65535 / (limitMax - limitMin)); 11             index++; 12  
13             //注:setPixelColor()函數是非常耗時的操作
14             uchar* bit = tempImg.scanLine(j) + i * 8; 15             memcpy(bit, &nowColor, 2); 16             memcpy(bit+2, &nowColor, 2); 17             memcpy(bit+4, &nowColor, 2); 18             ushort maxNum = 0xffff; 19             memcpy(bit + 6, &maxNum, 2); 20             //tempImg.setPixelColor(i, j, QColor::fromRgba64(nowColor, nowColor, nowColor));
21  } 22     }

顯示圖像

  運行程序后,發現16位位深圖像和之前的8位位深圖像並沒有太大的區別,一度懷疑自己沒寫正確。后來發現是自己電腦顯示器只能顯示8位位深圖像的緣故。實際上,現在大部分的電腦都還只能顯示8位位深圖像,改不改成16位位深圖像,看自己的硬件配置(以及老板的要求)。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM