将PictureBox中的图像调整到最大可能的大小,同时保持纵横比?

我试图使它成为PictureBox控件中的图像将根据窗口的大小自动调整其大小,但保持纵横比。 到目前为止,仅将SizeMode设置为StretchImage会导致图像拉伸以适合整个PictureBox控件。 这忽略了宽高比,这不是我想要的。

是否可以保持纵横比,但仍然可以将图像拉伸到表格尺寸变化时可以动态移动的最大值? 是否可以这样做并让它仍然居中? 我想每次调整窗口大小时我都可以在内存中重新创建图像,但这似乎是一个坏主意。

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

保持尺寸比,增大或减小图像的尺寸。

您在PictureBox.SizeMode属性上设置此项。 该function文档的“备注”部分还说:

使用“缩放”值可以拉伸或缩小图像以适合PictureBox; 但是,保持原件的纵横比。

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

 myPictureBox.SizeMode = PictureBoxSizeMode.Zoom; 

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

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

将“SizeMode”更改为“缩放”。 顾名思义,“StretchImage”将拉伸它以适合图像文件。 简单的消除过程会给你相同的结果。

根据PictureBoxSizeMode文档,您可以指定PictureBoxSizeMode.Zoom以使图像保持其纵横比。 它将变焦尽可能大,图像框中没有任何图像溢出。

您可以使用Dock属性 (设置DockStyle.Fill )来使图片框resize到其容器的大小。

您可以将其添加到Web浏览器控件。 使用Ctrl和鼠标按钮可以根据需要放大。