如果 PictureBox 小于 Picture,则使 Image 适应 PictureBox

Fit Image to PictureBox if PictureBox is smaller than Picture

我有一个 PictureBox 可以有多个不同的尺寸(取决于屏幕分辨率、window 状态等)。我想要的是当 image 的任一维度(宽度或高度)低于 PictureBox 的相应维度时,使我的 image 适合 PictureBox

示例: 如果 image 的宽度大于 PictureBox 的宽度,但是image 的高度小于 PictureBox 的高度,它将调整 image 的宽度直到它等于 PictureBox 的宽度,保持原始纵横比,并且将 image 垂直居中。

如果 PictureBox 大于两个 image 尺寸,则图像只是居中。那部分我用 PictureBoxSizeMode.AutoSize 和一些代码根据 imagePictureBox 的大小使 image 居中。

picbx.ImageLocation = "Image path here";
picbx.SizeMode = PictureBoxSizeMode.AutoSize;
picbx.Anchor = AnchorStyles.None;
picbx.Location = new Point((picbx.Parent.ClientSize.Width / 2) - (picImage.Width / 2),
                           (picbx.Parent.ClientSize.Height / 2) - (picImage.Height / 2));
picbx.Refresh();

我现在不需要考虑的一件事是调整大小。 window 不允许调整大小,除初始加载外无需考虑任何其他情况。

我发现许多帖子似乎很接近,但没有一个完全有效。 Stretch 倾斜 imageAutoSize 不根据容器大小调整大小,Zoomimage 大于 PictureBox 时可能工作正常,但我还没有发现一种方法来防止缩放增加 image 大小以适应 PictureBox

因为我将它设置为 picbx.ImageLocation 而不是设置 picbx.Image 属性,所以我还没有找到调整 image 大小的方法PictureBox 内部根据尺寸(宽度或高度)需要作为调整大小的参考。

如果您知道 PictureBoxImage 尺寸,当图像的宽度或高度大于图片框,CenterImage 否则:

var imageSize = picbx.Image.Size;
var fitSize = picbx.ClientSize;
picbx.SizeMode = imageSize.Width > fitSize.Width || imageSize.Height > fitSize.Height ?
    PictureBoxSizeMode.Zoom : PictureBoxSizeMode.CenterImage;