2010-11-29 8 views
0

Der Versuch, eine C# WinForms Graphics Objekt in eine Bitmap zu speichern, aber ich bin eine Argument mit diesem Code außerhalb des Paint-Ereignis bekommen:Grafiken außerhalb von Farbe in Bitmap speichern?

public Bitmap Bitmap 
{ 
    get 
    { 
     return new Bitmap(100, 100, this.Graphics); 
    } 
} 

Wo this.Graphics nur in der Paint-Event-Handler gesetzt, I Ich vermute, das Objekt wird außerhalb des Ereignisses ungültig, was ärgerlich ist, da ich vermeiden möchte, dass Code zum Speichern der Bilder dort gespeichert wird. Kann mir jemand in die richtige Richtung zeigen?

Edit: Ich muß meine Malerei Codes erneut Faktor, wie ich in der Lage sein muß, die Kontrolle in eine Bitmap zu ‚zeichnen‘.

+0

Würden Sie bitte die vollständige Fehlermeldung posten? Bis dann: Haben Sie UserControl.CreateGraphics() ausprobiert? – basti

+0

System.ArgumentException: Parameter ist nicht gültig. bei System.Drawing.Bitmap..ctor (Int32 Breite, Int32 Höhe, Grafik g) bei FlowSharp.FlowChartControl.get_Bitmap() in C: \ Benutzer \ Dan \ Dokumente \ My Dropbox \ Programmierung \ FlowSharp \ FlowChartControl. cs: line 35 bei FlowSharp.fFlowSharp.bMPToolStripMenuItem_Click (Objekt Absender, EventArgs e) in C: \ Benutzer \ Dan \ Dokumente \ My Dropbox \ Programmierung \ FlowSharp \ FlowSharpForm.cs: Zeile 441 – Dan

Antwort

1

Ja, dies wird bombardieren, nachdem die Grafik angeordnet Objekt ist. Es gibt wenig Grund, diesen Konstruktor zu verwenden, er setzt nur die Bitmap-Auflösung. Wenn das für Sie wirklich wichtig ist, verwenden Sie einfach die Bitmap.SetResolution() -Methode direkt.

0

Wenn Sie wirklich die Grafiken verwenden möchten, können Sie this.CreateGraphics verwenden.

public Bitmap Bitmap 
{ 
    get 
    { 
     using (var graphics = this.CreateGraphics()) 
     { 
      return new Bitmap(100, 100, graphics); 
     } 
    } 
} 

aber

return new Bitmap(100, 100); 

würde wahrscheinlich ausreichen.

Edit:
Wenn Sie eine Bitmap Sie eine Grafik aus dieser Bitmap-Objekt erstellen, ändern möchten:

Bitmap bitmap = new Bitmap(100, 100); 
using (var graphics = Graphics.FromImage(bitmap)) 
{ 
    // modify bitmap 
}