ein Picture-Forcing, sein Image zu bewahren, wenn das Bild zur Verwendung von Code in vb.net gezogen wurde

StackOverflow https://stackoverflow.com/questions/1529211

  •  20-09-2019
  •  | 
  •  

Frage

My Picture manchmal alle Zeichnungen löscht, wenn sie das Bild gemacht erstellen, oder manchmal auf halbem Weg durch. Der Aufruf GC.Collect () vor der Zeichnung beginnt es ziehen läßt, bevor es gelöscht, aber wie kann ich es von Clearing ganz aufhören?

Dies ist in vb.net

Danke!

War es hilfreich?

Lösung

Eine einfache Möglichkeit, gezeichnete Bilder in .Net zu beharren ist die Zeichnung auf eine separate Bitmap-Objekt zu tun, und dann die PictureBox der Image-Eigenschaft gleich der Bitmap, wie folgt aus:

Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
using (Graphics g = Graphics.FromImage(bmp))
{
    // draw whatever
}
pictureBox1.Image = bmp;

Es ist die C #, aber es sollte das Prinzip OK darstellen.

Eine andere Art und Weise gezeichnete Bilder zu beharren ist die Zeichnung, in der Paint-Ereignis des PictureBox zu tun, aber dies bedeutet, dass Ihre Zeichencode jedes Mal die Steuer Bedarf ausgeführt wird selbst neu zu zeichnen (was der Fall ist, wenn eine andere Form über oben drauf gezogen wird usw. .). Das obige Verfahren (Einstellen der Bild Eigenschaft Kontrolle) ist einfacher zu tun.

Andere Tipps

Im obigen Fall, wenn „bmp“ oder „g“ Objekt geht aus Umfang und Müll gesammelt, die picturebox Bild ändert. Ich denke, das Bild wird immer kopiert Referenz. Ich habe versucht, bmp.clone das Bild auf die picturebox zu kopieren, aber immer noch, wenn bmp Müll gesammelt ist, verschwindet das picturebox Bild. In meinem Fall habe ich eine Reihe solcher Bilder (zur Laufzeit bestimmt) wird zugewiesen erstellt Picturelaufzeit.

Dim bm As New Bitmap("C:\picture.bmp")
Dim thumb As New Bitmap(42, 30)
Dim g As Graphics = Graphics.FromImage(thumb)

g.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
g.DrawImage(bm, New Rectangle(0, 0, 42, 30), New Rectangle(0, 0, bm.Width, _bm.Height), GraphicsUnit.Pixel)
pbxHead.Image = thumb.Clone()

g.Dispose()
bm.Dispose()
thumb.Dispose()
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top