如何显示图像的图像尺寸缩放以适合PictureBox

时间:2014-05-14 15:58:59

标签: c# winforms picturebox

我想知道是否有可能获得已重新调整大小以适合PictureBox的图像的显示图像尺寸。

PictureBox的SizeMode属性设置为Zoom。因此保留了原始图像的纵横比。我需要获取显示的图像大小,但这不是通过API公开的。

我已经阅读了一些包含反思的答案,但我宁愿不这样做。

3 个答案:

答案 0 :(得分:1)

最简单的方法就是自己获取宽高比,毕竟这是简单的数学。

首先确定图像是垂直还是水平,然后简单地抓住图片框的高度或宽度(分别)并确定原始图像的宽高比(分别)给定该值。

OriginalImg.Height / OriginalImage.Width x PictureBox.Width = PictureBox.Height

答案 1 :(得分:1)

此功能可以完成您想要的操作:

private Size GetDisplayedImageSize(PictureBox pictureBox)
{
    Size containerSize = pictureBox.ClientSize;
    float containerAspectRatio = (float)containerSize.Height / (float)containerSize.Width;
    Size originalImageSize = pictureBox.Image.Size;
    float imageAspectRatio = (float)originalImageSize.Height / (float)originalImageSize.Width;

    Size result = new Size();
    if (containerAspectRatio > imageAspectRatio)
    {
        result.Width = containerSize.Width;
        result.Height = (int)(imageAspectRatio * (float)containerSize.Width);
    }
    else
    {
        result.Height = containerSize.Height;
        result.Width = (int)((1.0f / imageAspectRatio) * (float)containerSize.Height);
    }
    return result;
}

答案 2 :(得分:0)

你必须不可避免地使用PictureBox吗?我找到了thread,他们提供了一些解决问题的方法。虽然看起来很脏......

1)将PictureBox设置为Normal或Center Image,然后自己重​​新调整Image大小(使用Form Resize事件),这里处理所有数学有点复杂,但非常可行...(参见裁剪/缩放线程注意:这是VB6代码,但数学是相同的)

2)只需使用数学并计算位置......再次数学有点复杂但也可行..(参见上面的数学相同的线程)..

我想这是一个WinForms应用程序。或者你也可以使用WPF控件吗?

在WPF中,您可以通过ActualWidth和ActualHeight获取尺寸。