qt | QPixmap 缩放不正确
Qt | QPixmap scaling incorrectly
我有一个 QPixmap,我将其设置为根据 window 调整大小时的比例调整大小。首次加载图像时,该比例很好且清晰,但是当我调整图像大小时,它会扭曲所有图像。
它设法从这个开始:
对此:
相关代码:
void MainWindow::resizeEvent(QResizeEvent *)
{
QPixmap pix = ui->labelImage->pixmap()->scaled(ui->labelImage->size(),
Qt::KeepAspectRatio);
ui->labelImage->setPixmap(pix);
}
您正在从小部件读取当前像素图,缩放它,然后将缩放后的像素图写入小部件。考虑一下如果小部件变得非常小然后调整到更大的东西会发生什么——由于使用了缩放转换,您会得到很多伪像。
我认为更好的方法是将原始全尺寸图像存储在 MainWindow class 的一个成员中,比如说...
QPixmap m_original_pixmap;
然后在您的 resizeEvent 成员中使用它的缩放版本...
void MainWindow::resizeEvent(QResizeEvent *)
{
QPixmap pix = m_original_pixmap.scaled(ui->labelImage->size(), Qt::KeepAspectRatio);
ui->labelImage->setPixmap(pix);
}
不确定这是否会清除所有内容,但应该以某种方式删除一些工件。
附带说明一下,如果您关心图像质量,您可以考虑将 Qt::SmoothTransformation 指定为缩放操作中的像素图转换模式。
我有一个 QPixmap,我将其设置为根据 window 调整大小时的比例调整大小。首次加载图像时,该比例很好且清晰,但是当我调整图像大小时,它会扭曲所有图像。
它设法从这个开始:
相关代码:
void MainWindow::resizeEvent(QResizeEvent *)
{
QPixmap pix = ui->labelImage->pixmap()->scaled(ui->labelImage->size(),
Qt::KeepAspectRatio);
ui->labelImage->setPixmap(pix);
}
您正在从小部件读取当前像素图,缩放它,然后将缩放后的像素图写入小部件。考虑一下如果小部件变得非常小然后调整到更大的东西会发生什么——由于使用了缩放转换,您会得到很多伪像。
我认为更好的方法是将原始全尺寸图像存储在 MainWindow class 的一个成员中,比如说...
QPixmap m_original_pixmap;
然后在您的 resizeEvent 成员中使用它的缩放版本...
void MainWindow::resizeEvent(QResizeEvent *)
{
QPixmap pix = m_original_pixmap.scaled(ui->labelImage->size(), Qt::KeepAspectRatio);
ui->labelImage->setPixmap(pix);
}
不确定这是否会清除所有内容,但应该以某种方式删除一些工件。
附带说明一下,如果您关心图像质量,您可以考虑将 Qt::SmoothTransformation 指定为缩放操作中的像素图转换模式。