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

本文关键字:图像 缩放 PictureBox 何显示 显示 | 更新日期: 2023-09-27 18:03:34

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

PictureBox的SizeMode属性设置为Zoom。这样就保留了原始图像的纵横比。我需要得到显示的图像大小,然而,这不是通过API公开可用的。

我读过一些包含反思的答案,但我宁愿不这样做

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

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

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

OriginalImg。高度/OriginalImage。宽度x PictureBox。Width = PictureBox。高度

这个函数做你想做的事情:

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;
}

你是否必须不可避免地使用PictureBox ?我发现了一个线程,他们给了一些选项来解决你的问题。不过看起来有点脏……

1)将PictureBox设置为Normal或居中图像,并自行调整图像大小(使用Form Resize事件),这里处理所有的数学问题有点复杂,但非常可行…(参见裁剪/缩放线程注:这是VB6代码,但数学是相同的)

2)用数学方法计算一下位置……再一次,数学有点复杂,但也是可行的…(参见与上面相同的线程的数学)..

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

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