2013-03-20 108 views
11

我试图让PictureBox控件中的图像根据窗口的大小自动调整其大小,但保持高宽比。到目前为止,只要将SizeMode设置为StretchImage就会使图像伸展以适合整个PictureBox控件。这忽略了长宽比,这不是我想要的。将PictureBox中的图像调整到尽可能大,同时保持纵横比?

是否可以保持宽高比,但仍然可以将图像拉伸到可以随着表单大小更改而动态变化的最大值?是否可以这样做它仍然居中?我想我可以在每次窗口大小调整时重新创建内存中的图像,但这似乎是一个糟糕的主意。

回答

16

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

保持大小比例增加或减少图像的大小。

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

使用缩放值会导致图像被拉伸或收缩以适应图片框;但是,原稿的高宽比保持不变。

你可以,当然,设置PictureBox.SizeMode财产无论是在设计师的属性窗口或代码(例如,在窗体的构造函数):

myPictureBox.SizeMode = PictureBoxSizeMode.Zoom; 

如果这没有做什么你想要,你总是可以自己实现调整大小的逻辑。你的担心是每当控件调整大小时在内存中重新创建图像“似乎是一个糟糕的主意”,但我不确定为什么它看起来像这样。唯一的问题是如果你不小心销毁不使用的图形对象,如旧的Bitmap。这些对象不仅包含需要释放的非托管资源,而且如果你让它们泄漏,你将开始对内存施加极大的压力。

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

+0

谢谢,不知何故,我完全错过了“缩放”设置。这正是我想要的,虽然很高兴知道你解释的内部结构,尤其是Graphics.DrawImage - 我可能会在将来使用它... – Jon 2013-03-20 21:52:38

2

将'SizeMode'更改为Zoom。 顾名思义,“StretchImage”会将其拉伸以适合图像文件。简单的淘汰过程会给你同样的结果。

-4

您可以将其添加到Web浏览器控件。使用Ctrl和鼠标按钮可以尽可能多地放大。

相关问题