【问题标题】:Graphics.Clear a given image? C# WinformsGraphics.Clear 给定图像? C# Winforms
【发布时间】:2016-07-16 16:18:21
【问题描述】:

我编写了这段代码来在我的 Winforms 应用程序中的图片框上绘制图像,我想知道是否有一种方法可以清除单个图像而不是清除所有内容。

public void DrawImage(Image img, Point pos)
    {
        if (GraphicsRenderer!=null)
        {
            GraphicsRenderer.DrawImage(img, pos);
        }
    }
DrawImage(Image.FromFile("image.png"), new Point(0, 0));

// then this to draw a rectangle
public void DrawRectangle(Rectangle rect, Pen pen)
    {
        if (GraphicsRenderer == null)
            GraphicsRenderer = Renderer.CreateGraphics();

        GraphicsRenderer.DrawRectangle(pen, rect);
    }
DrawRectangle(new Rectangle(new Point(0, 0), new Size(40, 40)), Pens.Red);

// now how do i clear only the image?

感谢任何帮助或见解!

【问题讨论】:

  • 如果Renderer 是PictureBox 是一个不要操作它上面的图形。 PictureBox 旨在显示您加载的静态图像。如果您想在表单上绘图,只需创建一个空面板并在OnPaint 事件中进行绘图并使用e.Graphics 对象而不是使用CreateGraphics。

标签: c# winforms graphics draw


【解决方案1】:

你不能。您必须重新绘制整个图片,而不使用 image.png。您的图形调用最终绘制到底层图形缓冲区(想想:原始像素数据)。当您在该底层图形缓冲区上绘图时,您会覆盖以前存在的内容,并且没有撤消操作之类的东西。

【讨论】:

  • 这可能需要一个新的讨论线程,尽管我认为过分热心的版主会将其关闭为题外话。您可能会想要研究支持分层/添加到某种场景的图形库。最坏的情况是自己编写,拥有 IRenderable 并从抽屉中实现它,清除缓冲区并遍历列表以进行渲染。你在做什么?对于您的示例,这显然是矫枉过正。
  • @wartly 谢谢你的朋友!
猜你喜欢
  • 2011-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多