我正在尝试使 PictureBox 控件中的图像根据窗口的大小自动调整其大小,但保持纵横比。到目前为止,只需设置SizeMode
为即可StretchImage
使图像拉伸以适合整个 PictureBox 控件。这忽略了纵横比,这不是我想要的。
是否可以保持纵横比,但仍然可以将图像拉伸到随着表单大小的变化而动态变化的最大?是否有可能做到这一点并让它仍然居中?我想每次调整窗口大小时我都可以在内存中重新创建图像,但这似乎是个坏主意。
我正在尝试使 PictureBox 控件中的图像根据窗口的大小自动调整其大小,但保持纵横比。到目前为止,只需设置SizeMode
为即可StretchImage
使图像拉伸以适合整个 PictureBox 控件。这忽略了纵横比,这不是我想要的。
是否可以保持纵横比,但仍然可以将图像拉伸到随着表单大小的变化而动态变化的最大?是否有可能做到这一点并让它仍然居中?我想每次调整窗口大小时我都可以在内存中重新创建图像,但这似乎是个坏主意。
我相信这就是效果PictureBoxSizeMode.Zoom
。文档说:
图像的大小在保持大小比例的情况下增加或减少。
PictureBox.SizeMode
你在属性上设置这个。该函数文档的“备注”部分还说:
使用 Zoom 值会导致图像被拉伸或缩小以适合 PictureBox;但是,原始的纵横比保持不变。
当然,您可以PictureBox.SizeMode
在设计器的属性窗口或代码中(例如,在表单的构造函数中)设置属性:
myPictureBox.SizeMode = PictureBoxSizeMode.Zoom;
如果这不完全符合您的要求,您始终可以自己实现调整大小的逻辑。您担心的是,每次调整控件大小时在内存中重新创建图像“似乎是个坏主意”,但我不确定为什么对您来说是这样。唯一的问题是,如果您不小心销毁未使用的图形对象,例如旧的Bitmap
. 这些对象不仅包含需要释放的非托管资源,而且如果您让它们泄漏,您将开始对内存施加极大的压力。
或者,为避免创建临时位图,您可以执行 PictureBox 控件可能在内部执行的操作,并使用该Graphics.DrawImage
方法来处理拉伸。如果你传递一个矩形,它会自动缩放图像以适应矩形的内部。
将“尺寸模式”更改为Zoom
. 顾名思义,“StretchImage”将拉伸它以适合图像文件。简单的消除过程会给你同样的结果。
根据PictureBoxSizeMode
文档,您可以指定PictureBoxSizeMode.Zoom
让图像保持其纵横比。它将尽可能放大,而图像的任何部分都不会溢出图片框。
您可以使用Dock
属性(设置DockStyle.Fill
)来让图片框调整到其容器的大小。
您可以将其添加到 Web 浏览器控件。使用 Ctrl 和鼠标按钮,您可以随意放大。