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