Allgemeiner Fehler in GDI+

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von Xy8000.

    Allgemeiner Fehler in GDI+

    Hallo Leute,

    ich habe ein Problem, an dem ich schon seid einer halben Stunde sitze und momentan einfach nicht weiter komme.
    Bei mir tritt immer wieder der Fehler "Allgemeiner Fehler in GDI+" auf. Ich habe auch son gegoogelt und im Forum geguckt hat aber alles nicht wirklich geholfen.
    Ich bin noch ein Anfänger also seid gnädig mit meinen Fehlern. ;)

    Mein Programm:
    Ich bin dabei ein Programm zu schreiben, das wilder komprimieren und ändern kann (ähnlich wie paint).
    Nun will ich ein Bild in einer Bmp speichern. Der Typ des Bildes ist dabei immer unterschiedlich.
    Die Existenz des Ziel-Pfades wird dabei vorher überprüft. Falls die Datei schon vorhanden ist wird sie vorher gelöscht.

    Mein Code:

    VB.NET-Quellcode

    1. 'speichere das bild in einem weiterem TMP verzeichniss
    2. Dim lImage As Image = pImage
    3. Data.fileExists(False, True, Application.StartupPath & "\Temp\Img\BmpVerpixeln", False)
    4. Dim fs As New System.IO.FileStream(Application.StartupPath & "\Temp\Img\BmpVerpixeln", IO.FileMode.Create)
    5. lImage.Save(fs, System.Drawing.Imaging.ImageFormat.Bmp) 'hier stoppt das Programm
    6. fs.Close()


    Zu den Variablen / Methoden:
    pImage ist ein vom Benutzer geladenes bild. (kann schon mal etwas größer sein)
    Data.FileExists() prüft ob die Datei und der Pfad verfügbar sind, wenn die Datei schon vorhanden wird sie gelöscht.

    Schon mal danke im Voraus für die Antworten. Ich hoffe ihr könnt mir und Leuten die das selbe Problem haben weiter helfen :thumbsup:
    "Das Internet ist nur ein Hype" - Bill Gates
    nein funktioniert leider nicht alles wie vorher.

    [line]​[/line]

    Ich habe eine Lösung gefunden. Anscheinend gab es einen Fehler, als das Bild konvertiert wurde.

    Funktionierender Code:

    VB.NET-Quellcode

    1. 'speichere das bild in einem weiterem TMP verzeichniss
    2. Dim lImage As Image = New Bitmap(pImage)
    3. Data.fileExists(False, True, Application.StartupPath & "\Temp\Img\BmpVerpixeln", False)
    4. Dim fs As New System.IO.FileStream(Application.StartupPath & "\Temp\Img\BmpVerpixeln", IO.FileMode.CreateNew)
    5. lImage.Save(fs, System.Drawing.Imaging.ImageFormat.Bmp)
    6. fs.Close()


    Thema kann geschlossen werden.
    "Das Internet ist nur ein Hype" - Bill Gates

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Xy8000“ ()

    Xy8000 schrieb:

    pImage ist ein vom Benutzer geladenes bild.
    Speichere es so:

    VB.NET-Quellcode

    1. pImage.Save("c:\temp\test.png", Imaging.ImageFormat.Png)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Xy8000 schrieb:

    Bmp Format

    :rolleyes:
    Lies Dir mal den Snippet von mir gaaaaaaanz genau durch und dann fang an zu überlegen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Okay ich weiß jetzt nicht wie das du das meinst du speicherst das bild als png ab.
    Ich will das aber als Bitmap haben damit ich es nachher wieder als Bitmap laden kann um den befehl bitmap.getPixel(x,y) direkt ohne Konvertierung nutzen zu können.

    Oder übersehe ich da etwas ? ?(
    "Das Internet ist nur ein Hype" - Bill Gates

    Xy8000 schrieb:

    Ach so war das gedacht
    Nur zum Teil.
    Ein als PNG abgespeichertes Bild kannst Du genau so in eine Bitmap-Instanz packen wie eine BMP-Datei.
    PNG wird nebenbei verlustfrei komprimiert.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Xy8000
    Mich würde eher interessieren, wo in Application.StartupPath & "\Temp\Img\BmpVerpixeln" der Dateiname vorkommt.
    Davon abgesehen: Verwende die von RodFromGermany gezeigte Save-Methode mit dem Pfad. Da kannst Du auch ImageFormat.Bmp verwenden... oder Jpeg oder Gif oder Tiff oder...
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils

    Niko Ortner schrieb:

    Tiff
    lieber nicht, das geht vor die Hose. Da sind die WPF-Klassen vorzuziehen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Niko Ortner schrieb:

    @Xy8000
    Mich würde eher interessieren, wo in Application.StartupPath & "\Temp\Img\BmpVerpixeln" der Dateiname vorkommt.


    Der Dateiname ist BMPVerpixeln. ich habe das .bmp absichtlich weggelassen, um zu verhindern dass Nutzer diese Datei als Bild identifizieren kann. Ich weiß das das nicht die perfekte Lösung aber darum geht es in diesem Thema ja nicht ;)
    "Das Internet ist nur ein Hype" - Bill Gates