Qt:我如何调整图像大小并保持其比例?

11

这个Qt示例展示了如何在对话框中调整图片大小,当对话框被调整大小时,图像会相应地拉伸。

我如何以同样的方式调整图像的大小,同时保持其比例而不失真?

当然,如果对话框的宽度/高度比与图像的比例不同,我将得到一个“灰色”区域。
我找到了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));

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

1个回答

23

使用QImage::scaled函数。

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

如果您需要用于QPixmap,则存在具有相同名称的函数


我更新了我的问题,包括您的建议。 - Pietro
2
只有在设置了scaledContents属性后,QLabel才会调整所显示的像素图的大小。此外,您可能希望将Qt::SmoothTransformation作为scaled函数的最后一个参数传递。 - Guilherme Bernal
scaledContents 已经在我的代码中了,我只是忘记在示例中复制它。现在我已经修复了它。结果仍然是一样的。 - Pietro
Qt::SmoothTransformation仅确定图像调整大小的质量/算法。它对宽度/高度比没有影响。 - Pietro
不要使用scaledContents。您可以通过响应窗口的 resizeEvent 事件用一个新的缩放图像重置pixmap。 - Guilherme Bernal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接