2016-07-16 21 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