如果 PictureBox 比 Picture 小,则使 Image 适合 PictureBox

Han*_*ank 2 c# image picturebox winforms

我有一个PictureBox可以有多种不同尺寸的(取决于屏幕分辨率、窗口状态等)。我image想要的是PictureBox当任一image尺寸(宽度或高度)低于PictureBox.

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

如果PictureBox大于两个image维度,则图像简单地居中。我有做过这部分PictureBoxSizeMode.AutoSize和一些代码到中心image基础上的大小imagePictureBox

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();
Run Code Online (Sandbox Code Playgroud)

我不需要考虑的一件事是在当下调整大小。该窗口不允许调整大小,并且不需要考虑除初始加载之外的任何其他情况。

我发现许多帖子似乎很接近,但没有完全有效的帖子。拉伸偏斜的image自动调整大小不会根据容器的大小调整和缩放可以正常工作的时候image是比较大的PictureBox,但我还没有想出一个办法,以防止变焦从增加image的大小以适应PictureBox

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

Iva*_*oev 6

如果您知道PictureBoxImage尺寸,您可以简单地设置适当的SizeMode-Zoom当图像的宽度或高度大于图片框时,CenterImage否则:

var imageSize = picbx.Image.Size;
var fitSize = picbx.ClientSize;
picbx.SizeMode = imageSize.Width > fitSize.Width || imageSize.Height > fitSize.Height ?
    PictureBoxSizeMode.Zoom : PictureBoxSizeMode.CenterImage;
Run Code Online (Sandbox Code Playgroud)