繁体   English   中英

QImage显示清晰的像素

[英]QImage display sharp pixels

我有一个要使用QImage绘制的布尔值矩阵。 我已经从带有0和255值的uchar向量分别导入了图像,分别为false和true。 我希望黑白方块代表不同的值,但是相反,我在像素之间出现了模糊,如此处的图片所示。 您能否让我知道如何消除模糊并显示更大的像素?

代码如下:

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

每次窗口大小更改时或在图像更改时,我都没有使用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));
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM