按比例调整图片框大小以调整表单大小

问题描述 投票:0回答:3

我希望每次,用户调整表单的大小,图片框中的图像也使用相同的值(按比例)调整大小,

我在互联网上搜索了一些代码,并在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

c# winforms resize
3个回答
8
投票

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

添加图片框并进入控件属性

enter image description here

这给你 5 个选择。同一张图片在Winform上的效果如下:

enter image description here

  • 法线仅显示图像并适合(我相信从像素 0,0 开始),没有缩放或移动。
  • StretchImage 将缩放并强制图像适合,即使这意味着倾斜图像
  • 在这种情况下,AutoSize 显示完整图像,在这种情况下,图像比表单大,这就是为什么只有一个巨大的蓝色块。
  • 中心图像使控件保持完整并显示图像的中心区域
  • 缩放可放大或缩小图像,以便其在图片框控件中完整显示。

将其与控件的 anchordock 结合使用,可将控件保持在您想要的位置,并缩放图像。

听起来您可能需要 Zoom。

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

enter image description here

然后我可以调整表单的大小,在本例中最大化,PictureBox 控件会自行处理,无需额外代码:

enter image description here

注意,因为我使用的是非常矩形的图像,所以我设置了灰色背景来显示控件相对于图像的位置。您可以设置control颜色背景来使其不那么明显,或者使用stretchImage而不是缩放来强制图像始终填充控件,尽管这会在非方形图像上产生大量丑陋的伪影。

拉伸伪像的示例:

enter image description here


4
投票

我建议你使用 2 个

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


调整大小之前

Before resizing

调整大小后 After resizing

Dock
groupBox1
属性是
Left
,另一个
groupBox2
的相同属性是
Fill
。此外,图像(位于第二个 groupBox 内)的
Dock
属性设置为
Fill


0
投票

设置pictureBox属性如下: SizeMode 到 StretchImage 锚定到顶部、底部、左侧、右侧

© www.soinside.com 2019 - 2024. All rights reserved.