【问题标题】:resizing pictureBox proportionally to Form resizing按比例调整图片框的大小以调整窗体大小
【发布时间】:2014-07-21 19:59:36
【问题描述】:

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

我在互联网上搜索了一些代码,并在 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的左边,不能动,你说的很好,但是我想要,图片左边在开始的时候一直在同一个点上

调整大小之前:

调整大小后

【问题讨论】:

  • Winforms?为什么不使用 Winforms 控件属性?
  • 他的意思是右键单击一个控件并单击属性在那里你可以停靠图片框然后它会随着表单自动调整大小。
  • 我假设这是winform并添加了标签,如果不是请添加相关标签
  • @SyedFarjadZiaZaidi 好的,我停靠了图片框,但它只在我调整表单大小时移动,它不会调整大小!

标签: c# winforms resize


【解决方案1】:

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

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

这为您提供了 5 个选择。下面是同一张图片在Winform上的效果:

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

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

听起来您可能想要 Zoom。

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

然后我可以调整窗体的大小,在这种情况下最大化,并且 PictureBox 控件可以自行处理而无需额外的代码:

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

拉伸工件示例:

【讨论】:

  • 我想我的问题是,@GabourX 你到底想用代码做什么?总是看到完整的图像?您想要编写 Winform 控件无法为您做什么的代码?删除代码(注释掉),看看它是否只使用属性就可以满足您的需求。
  • 我需要什么在下面的更新答案中进行了解释,但是你得到了我想要的吗?
  • @GabourX 例如,我可以通过将 sizeMode 设置为“Zoom”,然后将锚点设置为上、右、左、下。或将 SizeMode 设置为 Stretch 以消除条形/框。
  • @GabourX 我给了你一些它是如何工作的例子。
【解决方案2】:

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


调整大小之前

调整大小后

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

【讨论】:

  • 工作 100% ,但有一个小问题,现在 MouseEvents 不会发生。因为 GroupBox 可能覆盖了图像?
  • 啊!我删除了图片并重新添加了它,并且忘记再添加一次处理程序,我的错:)
猜你喜欢
  • 2019-01-05
  • 2012-08-25
  • 1970-01-01
  • 1970-01-01
  • 2011-09-20
  • 1970-01-01
  • 2012-02-15
  • 1970-01-01
  • 2012-01-05
相关资源
最近更新 更多