如何通过读取Qt中字节数组中的数据在QPainter上绘制8位灰度图像?

时间:2012-03-01 11:40:56

标签: qt qt4

我有一个包含一些数据的字节(unsigned char)数组。我已将此缓冲区传递给QImage,然后传递给QPainter。但是如何获得灰度图像呢?我在paintEvent中尝试了以下代码。请帮忙

 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());

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

尝试使用convert function of QImage。缓冲区内有哪种格式?无论如何灰色是r,g和b通道等于的时候。您可以将此事实用于替代方案(如果您知道自己在做什么,则会更快)。