【问题标题】:QImage display sharp pixelsQImage 显示锐利的像素
【发布时间】:2014-10-19 07:45:52
【问题描述】:

我有一个带有布尔值的矩阵,我试图用 QImage 绘制它。我已经从一个 uchar 向量中导入了图像,分别有 0 和 255 个值来表示 false 和 true。我想用黑色和白色方块来表示不同的值,但是我在像素之间得到了模糊,如the picture here 所示。请告诉我如何消除模糊并显示更大的像素?

代码如下:

for(int i=0; i<world.size(); ++i) {
    if(world[i] == true) 
        world_uchar[i] = 255;
    else 
        world_uchar[i] = 0;
}

QImage img(world_uchar, cols, rows, QImage::Format_Indexed8);

QLabel myLabel;
myLabel.setPixmap(QPixmap::fromImage(img));
myLabel.setScaledContents(true);
myLabel.show();

【问题讨论】:

    标签: c++ qt qimage


    【解决方案1】:

    每次窗口大小改变或图像改变时,我都会绘制一个调整大小的图像,而不是使用setScaledContents。请参阅下面的示例(在该示例中我使用了QMainWindow):

    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    ...
    private:
        QPixmap pixmap;
    };
    
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    
        ui->label->setAlignment(Qt::AlignCenter);
        //SetMinminumSize to ensure that the QLabel
        //can be resized
        ui->label->setMinimumSize(10, 10);
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    void MainWindow::on_pushButton_clicked()
    {
        QBitArray world(256, false);
        uchar *world_uchar = new uchar[world.size()];
        int cols, rows;
        cols = rows = (int)qSqrt(world.size());
    
        for (int i = 0; i < world.size(); i += 2)
            world.setBit(i, (qrand() % ((1 + 1) - 0) + 0));
    
        for (int i = 0; i < world.size(); i++)
        {
            if (world[i])
                world_uchar[i] = 255;
            else
                world_uchar[i] = 0;
        }
    
        QImage img(world_uchar, cols, rows, QImage::Format_Indexed8);
    
        pixmap = QPixmap::fromImage(img);
        OnResize();
    }
    
    void MainWindow::resizeEvent(QResizeEvent *)
    {
        OnResize();
    }
    
    void MainWindow::OnResize()
    {
        if (!pixmap.isNull())
            ui->label->setPixmap(pixmap.scaled(ui->label->size(), Qt::KeepAspectRatio, Qt::FastTransformation));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-28
      • 2023-03-17
      • 2011-04-17
      • 2014-08-08
      • 1970-01-01
      • 2019-08-09
      • 1970-01-01
      • 2021-10-07
      相关资源
      最近更新 更多