如何将图像绘制到面板中?

How do I draw an Image into a panel?

提问人:VueLegend 提问时间:10/9/2023 最后编辑:VueLegend 更新时间:10/9/2023 访问量:43

问:

几个小时以来,我一直在尝试解决这个问题,但每当我尝试将图像绘制到面板中时,它根本没有出现。我的面板确实有一个绘制事件,图像在方法中“绘制”。我尝试绘制的面板确实有一个背景图像。我不确定这是否干扰了任何事情。除此之外,面板还嵌套在嵌套在窗体中的用户控件中。我的一个问题是,如果我这样做

private void Panel_Paint(object sender, PaintEventArgs e)
{ 
    img = Properties.Resources.Image;
    e.Graphics.DrawImage(img, new Point(0,0));
}

它究竟是在哪里绘制的?到表格?还是到小组?

起初,我尝试了图片框,我了解到使图像透明可以使它获得背景颜色的颜色。令人困惑的是,我在面板内绘制了相同的图片框,但它却抓住了表单的颜色。我还没有测试过改变面板的背面颜色,它可能只是抓住了相同的颜色。

C# 图像 面板 绘制 PaintEvent

评论

1赞 jmcilhinney 10/9/2023
不要那样访问。每次执行此操作时,都会从程序集中提取新数据并创建一个新对象。这意味着您的代码将创建多个对象,并且永远不会释放其中任何一个对象。访问一次,且仅访问一次。将结果分配给字段,然后在事件处理程序中使用该字段,以便继续绘制相同的对象。Properties.ResourcesImageProperties.Resources.ImageImage
0赞 jmcilhinney 10/9/2023
“我试图画进去的面板确实有一个背景图像。我不确定这是否干扰了什么”。你为什么要告诉我们这个?你为什么还没有自己检查过呢?删除背景图像,看看是否能解决问题。这就是解决问题的101。唐;不要要求我们做一些你可以很容易地为自己做的事情。在发布问题之前,请尽你所能。
0赞 jmcilhinney 10/9/2023
说到问题解决 101,您应该已经做的另一件事是创建一个新的测试项目并隔离问题功能。创建一个只包含 和 事件处理程序的新项目。您甚至可以删除资源部分,以确保这不是问题。如果该测试项目按预期绘制,那么您就知道事情实际上完全按照您的预期工作,并且您以某种方式破坏了实际项目中的某些内容。您可以开始寻找差异和/或在实际项目中重新实现功能。PanelPaintImage
0赞 jmcilhinney 10/9/2023
您是否确认该代码正在执行?这不是事件处理程序第一次未连接到事件。可以在该方法上放置一个断点,并在运行项目时检查它是否命中。如果不是,那显然是问题所在。尝试修复甚至没有执行的代码是没有意义的。同样,在发布问题之前,您需要调试这样的代码,并在发布问题时指定您已经这样做了。
0赞 VueLegend 10/9/2023
@jmcilhinney我的图像是在图片盒后面绘制的,因此我无法看到。我假设当我运行 drawimage 方法时,它会在上面绘制,但我想它没有。现在我想知道我是否可以在图片框的顶部画图像。

答:

0赞 Serg 10/9/2023 #1

如果有 ,则图像将从左上角开始精确地绘制在面板中。无需其他配置(确切的事件订阅)。图像将以 100% 的比例绘制,因此如果图像大于面板,则您只能看到图像的一部分。System.Windows.Forms.PanelPaint

因此,请检查以下内容:

  • img包含适当大小的图像
  • 图像中没有透明部分(以避免只看到图像的一部分而该部分是透明的)。
  • 确保面板本身可见(添加边框?

评论

0赞 VueLegend 10/9/2023
谢谢 Serg,我意识到图像是在我用作背景的图片框后面绘制的。