Re: Bildanzeige von sehr grossen Bildern
- From: Gerold Mittelstädt <1358[remove-this]@gmx-topmail.de>
- Date: Thu, 13 Jul 2006 18:48:24 +0200
Frank Müller schrieb:
Hallo,
bei der Anzeige von Bildern mit einer Größe von 32 MB in einer
Wie viele tausend Pixel sind die denn groß? Und welches Format?
PictureBox erhalte ich eine Win32Exception. Anschließend erscheint
folgende Meldung:
BufferedGraphicsContext kann nicht entfernt werden, da momentan ein
Puffervorgang läuft.
Zu viele Daten im Speicher, die dann auch noch skaliert werden sollen.. Früher oder später gibt da jedes System auf.
Mein Aufruf der Bilddatei:
' Großes Bild laden
Dim myImage As Image = Image.FromFile(path)
' PictureBox-Zeichnungsbereich an Größe des Bildes anpassen
DokumentPictureBox.ClientSize = New Size(CInt(myImage.Width *
picScalFactor), CInt(myImage.Height * picScalFactor))
' Bild der PictureBox zuweisen
DokumentPictureBox.Image = myImage
DokumentPictureBox.Visible = True
Warum erhalten ich eine Win32-Exception, bzw. gibt es effektivere
Methoden große Bilder zu laden?
Wie gesagt.. Mit einem 32MB-Bild dürften die Meisten Systeme überfordert sein.
Mal ganz davon abgesehn, das das Bild wahrscheinlich in Originalgröße sowieso nicht komplett auf den Bildschrim passt (picScalFactor)
Du könntest das Bild z.B. vorab auf die Größe der PictureBox verkleinern und somit die Datengröße reduzieren. Quasi ein "Thumbnail" ;) erstellen, dass dann nurnoch ein Bruchteil der ursprünglichen Datengröße groß ist.
Die neue Größe kann man z.B. damit berechnen:
width: neue Breite
height: neue Höhe
max: width und height sind Maximalwerte und dürfen nicht überschritten werden
Public Shared Function GetNewSize(ByVal graphic As System.Drawing.Image, _
ByVal width As Integer, _
ByVal height As Integer, _
ByVal max As Boolean) As Size
Dim NewWidth, NewHeight As Integer
If graphic.Width > graphic.Height Then
NewWidth = width
NewHeight = width * graphic.Height \ graphic.Width
If max Then
If NewHeight > height Then
NewHeight = height
NewWidth = height * graphic.Width \ graphic.Height
End If
End If
Else
NewHeight = height
NewWidth = height * graphic.Width \ graphic.Height
If max Then
If NewWidth > width Then
NewWidth = width
NewHeight = width * graphic.Height \ graphic.Width
End If
End If
End If
Return New Size(NewWidth, NewHeight)
End Function
Damit ist die Denkarbeit erledigt. Als Breite und Höhe übergibst du den Anzeigebereich der PictureBox, erstellst aus dem riesigen Bild ein neues mit den neuen Maßen und weist dieses dann der PictureBox als Quelle zu.
Gerold
.
- Follow-Ups:
- Re: Bildanzeige von sehr grossen Bildern
- From: Frank Müller
- Re: Bildanzeige von sehr grossen Bildern
- References:
- Bildanzeige von sehr grossen Bildern
- From: Frank Müller
- Bildanzeige von sehr grossen Bildern
- Prev by Date: Re: 26:55:12 Zeitformat !!!!! -> 1 Tag 02:55:12
- Next by Date: Problem bei Textdateienformat / StreamWriter
- Previous by thread: Bildanzeige von sehr grossen Bildern
- Next by thread: Re: Bildanzeige von sehr grossen Bildern
- Index(es):
Relevant Pages
|