Frage

Ich versuche, ein Bild mit einem paar anderen Bildern zu überlagern. Ich benutze diesen Code zu tun, dass:

Dim gbkn As Bitmap = New Bitmap(7001, 7001, Imaging.PixelFormat.Format32bppArgb)
Dim g As Graphics = Graphics.FromImage(CType(gbkn, Image))
g.DrawImage(Image.FromFile("C:\background.png"), New Point(0, 0))
g.DrawImage(Image.FromFile("C:\firstlayer.png"), New Point(0, 0))
g.DrawImage(Image.FromFile("C:\secondlayer.png"), New Point(0, 0))

Das funktioniert mit den ersten beiden Bildern. Danach ein OutOfMemoryException ausgelöst. Ich weiß, die Größe der Bilder groß ist. Aber ist es nicht irgendwie möglich, die Auflagen zu tun und Chache sie irgendwo?

Auch wenn ich das Ergebnis der ersten Auflage auf der Festplatte, freier Speicher speichern, und eine andere Schicht füge ich die Ausnahme noch erhalten.

Wie soll ich mich wenden, dieses Problem?

Josp

War es hilfreich?

Lösung

Sie wissen nicht, ob dies wirklich das Problem ist, aber Sie sind Entsorgung nicht von den Bildern, die Sie auf dem Bitmap zeichnen. Ist dies helfen?

Dim gbkn As Bitmap = New Bitmap(7001, 7001, Imaging.PixelFormat.Format32bppArgb)
Dim g As Graphics = Graphics.FromImage(CType(gbkn, Image))
Dim img As Image = Image.FromFile("C:\background.png")
g.DrawImage(img, New Point(0, 0))
img.Dipose()
img As Image = Image.FromFile("C:\firstlayer.png")
g.DrawImage(img, New Point(0, 0))
img.Dispose()
img As Image = Image.FromFile("C:\secondlayer.png")
g.DrawImage(Image.FromFile("C:\secondlayer.png"), New Point(0, 0))
img.Dispose()

Ich bezweifle ernsthaft, es hat nichts mit den Bildern zu tun, wie ich mit Bildern 2-3 mal, dass Größe, ohne dieses Problem gearbeitet habe. Auch OutOfMemoryError Ausnahme scheint einer der äußerst nützlich Fehler zu sein, dass GDI führt, dass häufig hat nichts mit dem Gedächtnis zu tun.

Andere Tipps

Sie benötigen die erste leere Bitmap? Ohne sie ordnen Sie nur 3 * 200 MB statt 4 * 200 MB, vielleicht wird diese Arbeit:

Dim g As Graphics = Graphics.FromImage("C:\background.png")
g.DrawImage(Image.FromFile("C:\firstlayer.png"), New Point(0, 0))
// and so on

Es ist seltsam, dass in mehreren Schritten überlagern nicht funktioniert, ich glaube, du bist zu befreien nicht Gedächtnis richtig in diesem Fall. Vielleicht wird es besser sein, den Code schreiben Sie für diesen Ansatz verwenden.

Ich gehe davon aus, dass Sie die Originalbilder tun müssen woanders oder wollen speziell diese mit C # / GDI + tun, da es sehr einfach wäre, die PNG-Dateien mit einigen Bildbearbeitungsprogrammen zu fusionieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top