【问题标题】:Qt: How do I resize an image and maintain its proportions? [duplicate]Qt:如何调整图像大小并保持其比例? [复制]
【发布时间】:2013-11-11 23:21:31
【问题描述】:

这个 Qt example 展示了如何调整对话框中包含的图像的大小,以便在调整对话框大小时,图像会相应地拉伸。

如何以相同的方式调整图像的大小,而不会扭曲/保持其比例相同?

当然,如果对话框的宽高比与图片不同,我会得到一个“灰色”区域。
我找到了Qt::KeepAspectRatio 枚举,但没有找到使用它的函数。

更新:这是我正在尝试的代码:

QImage image(path);
QImage image2 = image.scaled(200, 200, Qt::KeepAspectRatio);
QLabel *plotImg = new QLabel;
plotImg->setScaledContents(true);
plotImg->setPixmap(QPixmap::fromImage(image2));

调整标签大小时,图像不会保持恒定的纵横比。并且在重新缩放后会失去分辨率。

【问题讨论】:

    标签: c++ image qt image-resizing


    【解决方案1】:

    使用QImage::scaled 函数。

    QImage img("someimage.png");
    QImage img2 = img.scaled(100, 100, Qt::KeepAspectRatio);
    

    如果您需要它用于QPixmapa function with the same name exists

    【讨论】:

    • 我更新了我的问题,包括你的建议。
    • 除非设置了scaledContents,否则QLabel 不会调整它显示的像素图的大小。此外,您可能希望将Qt::SmoothTransformation 作为最后一个参数传递给scaled
    • scaledContents 已经在我的代码中,我只是忘记在我的示例中复制它。现在我修好了。结果还是一样。
    • Qt::SmoothTransformation 只是确定图像调整大小的质量/算法。它对宽高比没有影响。
    • 不要使用scaledContents。您可以对窗口的resizeEvent 做出反应,以使用新的缩放像素图重置像素图。
    猜你喜欢
    • 1970-01-01
    • 2020-05-12
    • 1970-01-01
    • 2011-04-27
    • 2019-08-10
    • 2021-02-28
    • 2018-03-01
    • 2012-11-15
    相关资源
    最近更新 更多