2016-07-16 8 views
0

私はWinformsアプリケーションの画像ボックスに画像を描画するためにこのコードをコーディングしていますが、すべてを消去するのではなく個々の画像を消去する方法があるのだろうかと思いました。Graphics.Clear a given image? 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'の場合は、その上のGraphicsを操作しません。 'PictureBox'は読み込んだ静止画像を表示するように設計されています。フォーム上に描画したい場合は、空のパネルを作成し、' OnPaint'イベントで描画し、 'CreateGraphics '。 –

答えて

1

できません。 image.pngなしで、画像全体を再描画する必要があります。あなたのグラフィックス呼び出しは、最終的には基礎となるグラフィックスバッファに描画されます(生のピクセルデータと考える)。その基になるグラフィックスバッファを描画すると、以前にあったものを上書きします。元に戻す操作はありません。

+0

これをサポートするフレームワーク/ライブラリはありますか? – Bogdan0804

+0

これはおそらく、議論のために新しいスレッドを保証するものですが、過度の司会者はトピックとしてそれを閉じると思います。おそらく、ある種のシーンにレイヤリング/追加をサポートするグラフィックスライブラリを調べたいと思うでしょう。最悪の場合はIRenderableを使用し、引き出しから実装し、バッファをクリアし、リストを繰り返してレンダリングします。何をやっているの?あなたの例では、それは明らかに過度のものになるでしょう。 – Warty

+0

@wartly友だちに感謝! – Bogdan0804