程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 如何將內存圖像數據封裝成QImage

如何將內存圖像數據封裝成QImage

編輯:C++入門知識

如何將內存圖像數據封裝成QImage
        當采用Qt開發相機數據采集軟件時,勢必會遇到采集內存圖像並進行處理(如縮放、旋轉)操作。如果能夠將內存圖像數據封裝成QImage,則可以利用QImage強大的圖像處理功能來進行圖像處理,並能很好的進行顯示。
       下面以灰度相機為例,介紹封裝方法:
       第一步:首先根據相機的SDK內的讀圖像函數,獲取圖像數據imgData、寬度imgWidth和高度imHeight。
       第二步:申請QImage對象,注意類型是Format_RGB32.

       第三步:利用成員函數setPixel()設置QImage像素。由於相機輸出的圖像是灰度圖像,每一位置的R、G、B分量相等且均等於當前位置的像素值。

       具體程序如下:

 

[cpp]
QImage desImage = QImage(imgWidth,imgHeight,QImage::Format_RGB32); //RGB32  
 
//RGB分量值  
int b = 0; 
int g = 0; 
int r = 0;  
 
//設置像素  
for (int i=0;i<imgHeight;i++) 

    for (int j=0;j<imgWidth;j++) 
    { 
        b = (int)*(imgDataNew+i*imgWidth+j); 
        g = b; 
        r = g; 
        desImage.setPixel(j,i,qRgb(r,g,b)); 
    } 

 QImage desImage = QImage(imgWidth,imgHeight,QImage::Format_RGB32); //RGB32

 //RGB分量值
 int b = 0;
 int g = 0;
 int r = 0;

 //設置像素
 for (int i=0;i<imgHeight;i++)
 {
  for (int j=0;j<imgWidth;j++)
  {
   b = (int)*(imgDataNew+i*imgWidth+j);
   g = b;
   r = g;
   desImage.setPixel(j,i,qRgb(r,g,b));
  }
 }


對於灰度圖像數據,如下封裝方式是錯誤的。
QImage desImage = QImage(imgData, imgWidth, imgHeight, QImage::Format_Indexed8)
原因是QImage的構造函數中寫道:
Constructs an image with the given width, height and format, that uses an existing memory buffer, data. The width and height must be specified in pixels, data must be 32-bit aligned, and each scanline of data in the image must also be 32-bit aligned.

 

 

 


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved