C#:调整picturebox的大小以适合图像

C#:调整picturebox的大小以适合图像,c#,image,winforms,C#,Image,Winforms,在我的应用程序(winforms)中,我想加载不同的图像。这些图像有不同的大小和纵横比(比如我有一个400x400和一个1920x1200)。现在我有了一个picturebox来放置这些图像,picturebox的SizeMode属性设置为Zoom 现在我在picturebox中有了一个图像,它的大小被调整以适应picuterbox的边界。但是,如果picturebox的纵横比与图像的纵横比不同,我将留下一些不需要的空白。 将SizeMode设置为“拉伸”不是一个选项 ?:所以我想知道,是否有办

在我的应用程序(winforms)中,我想加载不同的图像。这些图像有不同的大小和纵横比(比如我有一个400x400和一个1920x1200)。现在我有了一个picturebox来放置这些图像,picturebox的SizeMode属性设置为Zoom

现在我在picturebox中有了一个图像,它的大小被调整以适应picuterbox的边界。但是,如果picturebox的纵横比与图像的纵横比不同,我将留下一些不需要的空白。 将SizeMode设置为“拉伸”不是一个选项

?:所以我想知道,是否有办法获得自动调整大小的图像的大小,以便我可以相应地更改picturebox的大小

Image myImg = new Image.FromFile(..//landscape.jpg)
int getWidth = myImg.Width;
int getHeight = myImg.Height;
// This does not work, as it gets the original size of the image (eg: in case of a 1920x1200, it gets 1920 and 1200 respectively)
这就是现在发生的事情:

这就是我想要的:


因为应用程序应该能够处理任何图像,所以我需要动态设置这些值,所以不能预设任何值。

假设框为400x400。当图片进入框中时,它会调整大小以适应框边界,但保持其纵横比。因此,我们需要做的是计算框内图像的新大小,并调整框的大小以匹配

Image myImg = new Image.FromFile(..//landscape.jpg)
int getWidth = myImg.Width;
int getHeight = myImg.Height;
double ratio = 0;
if(getWidth>getHeight)
{
    ratio = getWidth/400;
    getWidth=400;
    getHeight=(int)(getHeight/ratio);
}
else
{
    ratio = getHeight/400;
    getHeight=400;
    getWidth=(int)(getWidth/ratio);
}
pictureBox.Width=getWidth;
pictureBox.Height=getHeight;

(不知道确切的类,因此可能会抛出一两个错误,但这一概念是正确的)

您是否可以将sizemode设置为auto?例如,如果我将其设置为auto,则会显示其原始大小,对于高分辨率图像,这意味着您将获得难以置信的大图像显示。关于stretchimage:我告诉过你这不是一个选项,因为我需要保持纵横比。看看问题我不想调整我的图像大小。这是另一个问题。我想保持图像的原始分辨率,但显示得更小。这是必要的,因为我有一个缩放功能,如果我调整图像的大小,放大将产生像素化和模糊的结果。我自己也一直在考虑这个问题,唯一的问题是,如果我计算纵横比,它将是不准确的,因为可能出现小数点断裂。但我可能会坚持这个解决方案,但我有更准确的方法:)如果你对值进行四舍五入,最大的不准确度将是1px。根据图片框的大小,1px通常是可以接受的。好的,你明白了。我要试一试。谢谢。:)