[VB.NET] ExternalExeption: Allgemeiner Fehler in GDI+ nicht nachvollziehbar

Masterclavat

Erfahrenes Mitglied
Abend, :)

ich habe hier ein Problem, das ich nicht verstehe. :(
Und zwar handelt es sich um eine Funktion, die ein Bild im Drawing.Bitmap-Format in eine bestimmte Anzahl von gleichgroßen Teilbildern (15x15 Pixel) teilen soll.

Das mache ich mit dieser Funktion:

Code:
' _Picture (Drawing.Bitmap) ist das Bild, um das es geht. (150x150 Pixel groß)


Public Overloads Function CutPicture(ByVal Pieces As Integer, ByVal HorizontalPieces As Integer, ByVal VerticalPieces As Integer) As Bitmap()
    If _Picture Is Nothing Or (HorizontalPieces = 0 And VerticalPieces = 0) Then Return Nothing

    Dim Piece(Pieces - 1) As Bitmap
    For i = 1 To HorizontalPieces
        For j = 1 To VerticalPieces
            Piece(i + j - 2) = _Picture.Clone(New Rectangle(15 * (j - 1), 15 * (i - 1), 15, 15), _Picture.PixelFormat)  
        Next
    Next

    Return Piece
End Function

Und so rufe ich sie auf:
Code:
Dim i As Integer
For Each item In CutPicture(20, 10, 10)
    i += 1
    write(i, item)
Next

Hier wird die Exception dann letztendlich geworfen:
Code:
Sub write(ByVal num As Integer, ByVal btm As Bitmap)
    'Hier: ExternalExeption: Allgemeiner Fehler in GDI+
    btm.Save(String.Format("X:\Pics\Pic{0}.bmp", num))
End Sub

Ich habe keine Ahnung, was da zu machen ist, oder was mein Fehler ist, da die Beschreibung der Exception und die Onlinehilfe der MSDN nicht wirklich aussagekräftig sind. :D

Ich hoffe ihr könnt mir helfen. :)

Grüße Masterclavat
 
tritt der Fehler beim Speichern oder beim clonen auf?
(ok seh grad im Save :D )

Ich persönlich traue der Clone Methode nicht und ist glaube auch nicht gerade performant ich würde die Bilder selbst direkt reinzeichen über DrawImage des Graphics Objekts

ungefähr so:
Code:
BItmap bmp=new Bitmap(width, height)
using(Graphics g=Graphics.FromImage(bmp))
{
    g.DrawBitmap(bild, Ziel_Koordinaten, Quell_Koordinaten, Format.Pixel); //musste mal schaun was genau für Parameter gehn
    g.Flush(); //zum zeichen auffordern
}
Laut meinen Erfahrungen (is bissel her) ist diese Methode schneller.

Das ist erstmal der erste Anhaltspunkt den ich seh.
Probiers einfach ma aus.
 
Dankeschön Spyke, dein Post hat mich auf eine sehr gute Spur geführt. Ich denke, ich weiß jetzt wie's. :)

Ich werde das morgen zuendebringen. :)

Gute Nacht. :)
 
Zurück