2012-03-01 51 views
0

我有一個字節(無符號字符)數組,其中包含一些數據。我已經將這個緩衝區傳遞給QImage,然後傳遞給QPainter。但如何獲得灰度圖像?我已經在paintEvent中嘗試了以下代碼。請幫助如何通過讀取Qt中的字節數組中的數據在QPainter上繪製8位灰度圖片?

QPainter painter(this); 
unsigned char buf[50 * 100] = {100}; 
QImage image(buf, 50, 100, 50, QImage::Format_Indexed8); 
image.setColorCount(256); 
QRect r; 
r.setX(0); 
r.setY(0); 
r.setWidth(50); 
r.setHeight(100); 
painter.drawImage(r,image,image.rect()); 

回答

0

嘗試使用convert function of QImage。緩衝區內的格式是什麼?無論如何灰色是r,g和b頻道相等的時候。你可以使用這個事實來替代(如果你知道你在做什麼,速度會更快)。

2

QImage::Format_Indexed8意味着一個8字節的INDEX到一個顏色表,因此用100填充它意味着「使用顏色表的索引100」。

假設符合要求的對齊,還必須做一個

image.setColor(100, qRgb(100, 100, 100)); // set color index 100 to a "100" gray 

如果你真的只想要一個「100」的灰色來填補你的QImage,你也可以做

QImage image(50, 100, QImage::Format_Indexed8); 
image.setColorCount(1); 
image.setColor(0, qRgb(100, 100, 100)); // set color index 0 to a "100" gray 
image.fill(0); 
+0

的setColor將整個圖像設置爲100.我需要根據buf數組中的字節對圖像的每個像素着色 – indira 2012-03-12 06:13:34

+0

沒有標準的QImage格式需要8位。最小的需要16bits。查看格式的[QImage doc](http://qt-project.org/doc/qt-4.8/qimage.html#Format-enum)。 – Koying 2012-03-12 10:02:22

相關問題