2016-12-16 126 views
2

我有一个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(); 

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

我发现很多帖子似乎很贴近,但没有完全起作用。 拉伸歪斜的image自动调整大小的大小不会根据容器的大小,并变焦可以工作的优良当imagePictureBox大,但我还没有想出一个办法,以防止变焦从提高image大小适合PictureBox

因为我将它设置为一个picbx.ImageLocation,而不是设置picbx.Image财产,我还没有想出一个办法来调整基础上的尺寸(宽度或高度)PictureBox内的image需要被调整大小的参考。

回答

4

如果你知道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; 
+0

正是我需要的。只需要正确的组合。谢谢! – Hank

+0

有没有办法将缩放设置为适合特定尺寸而不是默认方式?就像我想切换一样,它会缩放到宽度而不是高度以模仿一种缩放? – Hank

+0

我不这么认为。它缩放以适应两个尺寸,仍保持原始图像比例,这是合理的。适合特定维度的含义是什么?适合一个,切另一个? –