Forums Neueste Beiträge
 

OutOfMemoryException

23/02/2010 - 17:37 von Fred Aurich | Report spam
Hallo,

ich habe einen simplen Grafikviewer erstellt. Be mehrfachen zoomen wird
jetzt leider eine OutOfMemory-Exception erzeugt.

Den Zoom erzeuge ich dadurch, dass ich eine neue Bitmap mit jeweils einer
anderen Größe einer pictureBox zuordne.

Ich dachte, das die "alte" Bitmap dadurch gelöscht wird, scheint nicht so zu
sein.

Wie kann ich die "alte" Bitmap (vorher) löschen?

Vorher hatte ich die Bitmap direkt in ihrer Größe veràndert, aber bei
mehrfachem + und wieder - Zoomen wird sie dann unscharf.

Wie macht man es denn nun richtig???

Fred.

Mein Code fürs +Zommen:

private void pzoom_plus_Click(object sender, EventArgs e)
{
nAkt_Bild_Breite = (int)(nAkt_Bild_Breite * nZoom_Faktor_plus);
nAkt_Bild_Hoehe = (int)(nAkt_Bild_Hoehe * nZoom_Faktor_plus);
pictureBox1.Image = new Bitmap(Bmp_Bild, nAkt_Bild_Breite,
nAkt_Bild_Hoehe);
tBreite.Text = nAkt_Bild_Breite.ToString();
tHoehe.Text = nAkt_Bild_Hoehe.ToString();
}
 

Lesen sie die antworten

#1 Marcel Roma
24/02/2010 - 13:54 | Warnen spam
Hallo Fred,

Am Tue, 23 Feb 2010 08:37:04 -0800 schrieb Fred Aurich:

Wie macht man es denn nun richtig???



Zunàchst einmal, selbst wenn Du das Zeichnen direkt übernimmst und
Graphics.InterpolationMode auf
Drawing2D.InterpolationMode.HighQualityBicubic setzt, sind dem Zoomen
Grenzen gesetzt, was die Qualitàt der Anzeige angeht. Alle
Interpolations-Modi verwenden Aproximierungen und erzeugen im Bild
Artefakte, sobald die im Bild gespeicherte Information für die Darstellung
der Skalierung nicht mehr ausreicht.

Was ich machen würde: Ich würde darauf achten, dass das Größenverhàltnis
des Originalbildes beim Skalieren erhalten bleibt (d.h. Breite bzw. Höhe
mit dem Skalierungsfaktor multipliziert werden). Dann würde ich
PictureBox.Paint dazu verwenden, um "manuell" in die PictureBox mit
Graphics.DrawImage zu zeichnen (verwende die Überladung, die ein
Ziel-Rectangle als Parameter nimmt).


S.a.: Zuschneiden und Skalieren von Bildern in GDI+
http://msdn.microsoft.com/de-de/library/e06tc8a5(VS.80).aspx


Gruss
Marcel

Ähnliche fragen