c# - 将 PictureBox 中的图像调整到尽可能大,同时保持纵横比?

标签 c# .net winforms picturebox

我试图让 PictureBox 控件中的图像根据窗口的大小自动调整其大小,但保持纵横比。到目前为止,只需将 SizeMode 设置为 StretchImage 即可使图像拉伸(stretch)以适合整个 PictureBox 控件。这忽略了宽高比,这不是我想要的。

是否可以保持宽高比,但仍将图像拉伸(stretch)到最大,它可以随着表单大小的变化而动态移动?是否有可能做到这一点并且它仍然居中?我想我可以在每次调整窗口大小时在内存中重新创建图像,但这似乎是个坏主意。

最佳答案

我相信这是PictureBoxSizeMode.Zoom的效果.文档说:

The size of the image is increased or decreased maintaining the size ratio.

你在 PictureBox.SizeMode 上设置这个属性(property)。该功能文档的“备注”部分还说:

Using the Zoom value causes the image to be stretched or shrunk to fit the PictureBox; however, the aspect ratio in the original is maintained.

当然,您可以在设计器的属性窗口或代码中(例如,在表单的构造函数中)设置 PictureBox.SizeMode 属性:

myPictureBox.SizeMode = PictureBoxSizeMode.Zoom;

如果这不能完全满足您的要求,您始终可以自己实现调整大小的逻辑。您担心的是,每次调整控件大小时都在内存中重新创建图像“似乎是个坏主意”,但我不确定为什么对您来说是这样。唯一的问题是您是否不小心销毁了未使用的图形对象,例如旧的 Bitmap。这些对象不仅包含需要释放的非托管资源,而且如果让它们泄漏,您将开始对内存施加极大的压力。

或者,为了避免创建临时位图,您可以执行 PictureBox 控件可能在内部执行的操作并使用 Graphics.DrawImage处理拉伸(stretch)的方法。如果你传递给它一个矩形,它会自动缩放图像以适应矩形内部。

关于c# - 将 PictureBox 中的图像调整到尽可能大,同时保持纵横比?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15534955/

相关文章:

.net - 还有空间可以放置更好的 Visual Studio QuickWatch 窗口。有没有办法自己制作?

mysql - 如何在 ListView 列中显示多列?

c# - 在(隔离的)Azure 函数中运行用户编写的 C# 代码是否安全?

c# - 为什么我会收到此 .NET 错误 - "TypeError: expected List[DataPoint], got List[DataPoint]"

java - 从 Java 访问 DLL 中的 C# 方法

c# - 如何使用 ReflectionPermission 拒绝反射

c# - 标签中的路径显示

c# - 处理订阅事件的类

c# - Windows.UI.Xaml.dll 中的应用程序内部异常

c# - 在XAML的窗口内显示页面