C#表单,调整表单大小后,图像无法超出原始表单大小

Posted

技术标签:

【中文标题】C#表单,调整表单大小后,图像无法超出原始表单大小【英文标题】:C# Form, After resizing Form, Image could not draw out of original form size 【发布时间】:2012-07-17 10:16:54 【问题描述】:

总结: 它只是不会在初始表单大小之外绘制。我可以缩小,但不能放大,它会被裁剪掉。

如果摘要不够清晰,请说明: 因此,如果我的表格最初大小为 1000,800。缩放后我绘制的图像永远不会大于 1000,800。

如果我将表格缩放到 2000,1600,它将被裁剪掉。图像将被裁剪到下方和右侧的一半,因此只绘制左上部分。

我确信我的缩放工作正常,因为只要我在创建时将表单设置为 2000,1600,它就可以工作。

。 . 按要求编写代码,但我不确定它是否重要。 .

mapDrawer.DrawImage( map1,
    new RectangleF(0, 0, ImageSizeX * scale, ImageSizeY * scale),
    new RectangleF(0, 0, ImageSizeX, ImageSizeY),
    GraphicsUnit.Pixel);

其中 scale 是 form.size/map_size。 我采用了较小的 x 或 y 比例。

【问题讨论】:

请出示您的代码... “摘要”应该读作上面的“谜语”吗? 好吗?你是否缩放你的 mapDrawer,不管那是什么? @J. Steen:我最好的猜测是Graphics @Tharwen 是的,但是 Graphics 对象属于某物。可能是表单,也可能是表单上不随表单缩放的控件。 【参考方案1】:

您的 mapDrawer 对象是问题所在,尽管从不适当的 sn-p 中无法看出。毫无疑问,这是您早期创建的 Graphics 对象,可能是在表单的 Load 事件中。它有一个基于当时表单大小的剪辑区域。如果您随后通过调整大小使表单变大,您会发现这个复制的 Graphics 对象无法绘制超出其原始边界。不能。

从不复制 Graphics 对象,始终在 Paint 事件处理程序中进行绘制并使用传递的 e.Graphics 对象。这也确保了双缓冲正常工作,您可能想要打开它。如果发生需要重绘图像的事情,请使用 Invalidate() 方法。

【讨论】:

是你对我上面的回答发表评论的吗?如果是这样,我已经做了一些更正。如果不是你,我还是做了一些更正,但我也给了你一个不必要的评论通知。 是的,就是我。我决定最好发布一个答案来解释为什么会出错。 我会看看这个,看看这是否是问题所在。谢谢!【参考方案2】:

我最好的猜测是在重绘表单时需要重绘图像:

private void Form1_Paint(object sender, PaintEventArgs e)

    Graphics g = e.Graphics;

    g.DrawImage(map1,
        new RectangleF(0, 0, ImageSizeX * scale, ImageSizeY * scale),
        new RectangleF(0, 0, ImageSizeX, ImageSizeY),
        GraphicsUnit.Pixel);

要在调整表单大小(或任何其他强制它重绘)时调用此方法,您应该在表单的构造函数中添加 Paint 事件句柄:

Paint += new EventHandler(Form1_Paint);

【讨论】:

以上是关于C#表单,调整表单大小后,图像无法超出原始表单大小的主要内容,如果未能解决你的问题,请参考以下文章

更改方向后iOS8无法重新调整模态表单的大小

根据表单大小设置 splitContainer 属性大小 C# WinForms

在 PictureBox Form C# 中调整大小时丢失图像质量

如何使用javascript在表单中调整多个图像大小、预览和上传

jQuery 上传会以一定的分辨率调整图像大小

如何让这个表单和按钮在响应式设计中正确调整大小?