如果PictureBox小于Picture,则将图像调整到PictureBox

时间:2016-12-16 16:39:36

标签: c# image winforms picturebox

我有PictureBox可以有多种不同的尺寸(取决于屏幕分辨率,窗口状态等)。我希望当image维度(宽度或高度)低于PictureBox的相应维度时,image适合PictureBox

示例: 如果image的宽度大于PictureBox的宽度,但image的高度}小于PictureBox的宽度,它会调整image宽度,直到它等于PictureBox的宽度,保持原始宽高比,并垂直居中image

如果PictureBox大于image尺寸,则图片只是居中。我已使用PictureBoxSizeMode.AutoSize完成了该部分,并根据imageimage的大小将一些代码置于PictureBox的中心位置。

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();

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

我发现很多帖子看起来很接近,但没有任何完全有用的帖子。 拉伸偏移image自动调整大小不会根据容器大小调整大小,缩放可能会在{{1}时正常工作}}大于image但我还没有找到一种方法来阻止缩放增加PictureBox大小以适应image

因为我将其设置为PictureBox而未设置picbx.ImageLocation属性,所以我还没有找到一种方法来调整picbx.Imageimage的大小基于尺寸(宽度或高度),需要作为调整大小的参考。

1 个答案:

答案 0 :(得分:4)

如果您了解PictureBoxImage尺寸,则只需在图片的宽度或高度大于图片框时设置相应的SizeMode - ZoomCenterImage否则:

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