2012-03-01 70 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