我有一个包含一些数据的字节(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());
答案 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通道等于的时候。您可以将此事实用于替代方案(如果您知道自己在做什么,则会更快)。