2016-07-16 25 views
0

我有代码在Winforms应用程序的图片框上绘制图像,我想知道是否有清除单个图像而不是清除所有内容的方法。Graphics.Clear给定的图像? C#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? 

任何帮助或洞察力的赞赏!

+0

如果'Renderer'是一个'PictureBox',则不要操纵其上的图形。 'PictureBox'用于显示加载的静态图像。如果要在表单上绘制,只需创建一个空面板,然后在“OnPaint”事件中绘制图形,并使用“e.Graphics”对象而不是使用“CreateGraphics” '。 –

回答

1

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

+0

有支持它的框架/库吗? – Bogdan0804

+0

这可能需要一个新的讨论主题,尽管我认为过度热心的版主会将其作为主题关闭。您可能会想要查看支持分层/添加到某种场景的图形库。最糟糕的情况是编写你自己的,具有IRenderable并从抽屉中实现,清除缓冲区并迭代列表来渲染。你在做什么?对于你的例子来说,这显然会矫枉过正。 – Warty

+0

@wartly谢谢你的朋友! – Bogdan0804