1

我创建了一个QImage格式QImage::Format_Mono。当我尝试QGraphicsView通过 a将图像显示到 a 时QGraphicsScene,视图保持不变。使用通过函数生成的QImagea 加载到场景中。我还尝试使用保存功能将其保存为 PNG/JPG/BMP,但无济于事。基本代码结构如下:QPixmapQPixmap::fromImage()QPixmap

QGraphicsView *view = new QGraphicsView();
QGraphicsScene *scene = new QGraphicsScene();
view.setScene(scene);
QImage img(size,QImage::Format_Mono);
QVector<QRgb> v;
v.append(Qt::color0); // I have tried using black and white 
v.append(Qt::color1); // instead of color0 and 1 as well.
img.setColorTable(v);
// Do some stuff to populate the image using img.setPixel(c,r,bw)
// where bw is an index either 0 or 1 and c and r are within bounds
QPixmap p = QPixmap::fromImage(img);
p.save("mono.png");
scene->addPixmap(p);
// Code to display the view

如果我改为制作图像QImage::Format_RGB888并用黑色或白色填充像素,则 PNG/视图会正确显示。

如何更新我的代码以显示QImagein a QGraphicsView

4

1 回答 1

3

错误是Qt::GlobalColors (例如Qt::whiteor Qt::color0)的类型是QColor,而不是QRgb预期的那样。(QRgb是 unsigned int 的 typedef)

您可以使用方法将a转换为QColora ,也可以使用全局方法直接创建a 。以下是一个完整的工作示例来说明,它显示(并保存为 PNG)非常精确的图像,无论是还是.QRgbQColor::rgb()QRgbqRgb(r,g,b)monotruefalse

#include <QApplication>
#include <QGraphicsScene>
#include <QGraphicsView>

int main(int argc, char **argv)
{
    QApplication app(argc, argv);

    QGraphicsView *view = new QGraphicsView();
    QGraphicsScene *scene = new QGraphicsScene();
    view->setScene(scene);

    int W = 100;
    int H = 100;
    QImage img;
    uint color0 = qRgb(255,0,0);
    uint color1 = Qt::green.rgb();
    bool mono = true;
    if(mono)
    {
        img = QImage(QSize(W,H),QImage::Format_Mono);
        QVector<QRgb> v; v << color0 << color1;
        img.setColorTable(v);
        for(int i=0; i<W; i++)
        for(int j=0; j<H; j++)
        {
            uint index;
            if(j-(j/10)*10 > 5)
                index = 0;
            else
                index = 1;
            img.setPixel(i,j,index);
        }
    }
    else
    {
        img = QImage(QSize(W,H),QImage::Format_RGB888);
        for(int i=0; i<W; i++)
        for(int j=0; j<H; j++)
        {
            uint color;
            if(j-(j/10)*10 > 5)
                color = color0;
            else
                color = color1;
            img.setPixel(i,j,color);
        }
    }

    QPixmap p = QPixmap::fromImage(img);
    p.save("mono.png");
    scene->addPixmap(p);
    view->show();

    return app.exec();
}
于 2013-06-19T02:55:22.410 回答