按比例调整图片框大小调整大小

时间:2014-06-01 16:34:59

标签: c# winforms resize

我希望每次,用户调整Form的大小,pictureBox中的Image,也使用相同的值(按比例)调整大小,

我在互联网上搜索了一些代码,并在 StackOverFlow 中找到了这个答案 https://stackoverflow.com/a/6501997/3264464

static public Bitmap ScaleImage(Image image, int maxWidth, int maxHeight)
{
    var ratioX = (double)maxWidth / image.Width;
    var ratioY = (double)maxHeight / image.Height;
    var ratio = Math.Min(ratioX, ratioY);
    var newWidth = (int)(image.Width * ratio);
    var newHeight = (int)(image.Height * ratio);
    var newImage = new Bitmap(newWidth, newHeight);
    Graphics.FromImage(newImage).DrawImage(image, 0, 0, newWidth, newHeight);
    Bitmap bmp = new Bitmap(newImage);
    return bmp;
}

我为我的代码添加了函数,我不确定MaxHeight,MaxWidth的事情,我的意思是为什么我需要通过参数发送它

并在我写的Form1_Resize事件处理程序中:

private void Form1_Resize(object sender, EventArgs e)
{
    Bitmap NewImg = ScaleImage(pictureBox1.Image, 1000, 1000);
    pictureBox1.Image = NewImg;
}

但它不会工作..当我调整表格时没有任何事情发生

更新:尝试使用相同的结果

看下面的图片,黑点是PictureBox的左边,它一定不能移动,你的建议是好的,但是我想要的,图片的左边停留在开头的同一点

调整大小之前:

Before

调整大小后

enter image description here

2 个答案:

答案 0 :(得分:5)

在Winforms中,您可以使用Picturebox属性执行此操作,无需代码:

添加图片框并转到控件属性

enter image description here

这为您提供了5种选择。其效果在Winform下面具有相同的图像:

enter image description here

  • 正常只显示图像并且适合(我相信像素0,0)没有缩放或移动。
  • StretchImage将缩放并强制适合图像,即使它意味着倾斜图像
  • 在这种情况下,AutoSize显示完整的图像,在这种情况下,图像比形状更大,这就是为什么只有一个巨大的蓝色块。
  • 中心图像保持控件不变并显示图像的中心区域
  • 缩放放大或缩小图像,使其完整显示在图片框控件中。

将此项与控件的 anchor dock 结合使用,可将控件保持在所需位置,并缩放图像。

听起来你可能想要Zoom。

放大操作,将锚点设置为所有边(并添加一个组框以模拟控制框:

enter image description here

然后我可以调整表单大小,在这种情况下最大化,PictureBox控件自己处理其他代码:

enter image description here

注意,因为我使用的是非常矩形的图像,所以我设置了一个灰色背景来显示控件与图像的对应位置。您可以设置 control 颜色背景以使其不那么明显,或者使用stretchImage而不是zoom来强制图像始终填充控件,尽管这会在非方形图像上产生大量难看的瑕疵。

拉伸工件的示例:

enter image description here

答案 1 :(得分:3)

我建议您使用2个GroupBox es控件,在左侧添加按钮,在右侧添加图像,并使用它们的Dock属性。以下是适合您需求的示例:


在调整大小之前

Before resizing

调整大小后 After resizing

Dock的{​​{1}}属性为groupBox1,其他Left的相同属性为groupBox2。此外,图像的Fill属性(位于第二个groupBox内)设置为Dock