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