【问题标题】:C#: Resize picturebox to fit imageC#:调整图片框大小以适合图像
【发布时间】:2014-10-15 08:01:58
【问题描述】:

在我的应用程序(winforms)中,我想加载不同的图像。这些图像有不同的尺寸和不同的纵横比(假设我有一个 400x400 和一个 1920x1200。)现在我有一个图片框来放置这些图片,并且图片框的 SizeMode 属性设置为缩放 .

现在我在图片框中有一张图片,它的大小已调整为适合图片框的边界。但是,如果图片框的纵横比与图像不同,我将留下一些不需要的空白空间。 将 SizeMode 设置为拉伸不是一种选择。

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

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)

这就是现在发生的事情:

这是我想要的:

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

【问题讨论】:

  • 你不能把 sizemode 设置为 auto 吗?
  • 如果我将其设置为自动,则显示其原始尺寸,这在大分辨率图像的情况下意味着您可以获得非常大的图像显示。关于stretchimage:我告诉过你这不是一个选项,因为我需要保持纵横比。
  • 看看this问题
  • 我不想调整我的图片大小。那是一个不同的问题。我想保持图像的原始分辨率,但将其显示得更小。这是必不可少的,因为我有缩放功能,如果我调整图像大小,放大会产生像素化和模糊的结果。

标签: c# image winforms


【解决方案1】:

假设框为 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;

(不知道确切的类,所以可能会抛出一两个错误,但概念是合理的)

【讨论】:

  • 我自己一直在考虑这个问题,唯一的问题是,如果我计算纵横比,它会不准确,因为可能会出现小数点断裂。但我可能会坚持这个解决方案,但我宁愿有更准确的东西:)
  • 如果对值进行四舍五入,最大的不准确度将是 1px。根据图片框的大小,1px 通常是可以接受的。
  • 好吧,你找到我了。我会试一试。谢谢你。 :)
猜你喜欢
  • 1970-01-01
  • 2012-05-05
  • 1970-01-01
  • 2021-07-20
  • 1970-01-01
  • 2012-05-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多