簡體   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