CSharp Image Von Base64String laden Problem

  • Sonstige

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    CSharp Image Von Base64String laden Problem

    Hallo,
    Ich lade und speichere ein Bild in String und serializiere es als file.
    So das Speichern klappt aber das Laden nicht. Es kommt dieser Fehler: Die Bytes [EA] im Index 29 können nicht von der angegebenen Codepage in Unicode übersetzt werden.

    Mein Code

    Quellcode

    1. using System;
    2. using System.Drawing;
    3. using System.Drawing.Imaging;
    4. using System.IO;
    5. using System.Runtime.Serialization.Formatters.Binary;
    6. namespace PaintNetTestFileTyp
    7. {
    8. public class BinaryImage
    9. {
    10. public static Image Load(Stream filename)
    11. {
    12. var bf = new BinaryFormatter();
    13. return ImageFromBase64String(bf.Deserialize(filename).ToString());
    14. }
    15. public static void Save(Image img, Stream filename)
    16. {
    17. var bf = new BinaryFormatter();
    18. bf.Serialize(filename, ImageToBase64String(img, ImageFormat.Png));
    19. }
    20. public static string ImageToBase64String(Image image, ImageFormat format)
    21. {
    22. MemoryStream memory = new MemoryStream();
    23. image.Save(memory, format);
    24. string base64 = Convert.ToBase64String(memory.ToArray());
    25. memory.Close();
    26. return base64;
    27. }
    28. public static Image ImageFromBase64String(string base64)
    29. {
    30. MemoryStream memory = new MemoryStream(Convert.FromBase64String(base64));
    31. Image result = Image.FromStream(memory);
    32. memory.Close();
    33. return result;
    34. }
    35. }
    36. }



    Was ist der Grund des Problems und wie kann ich es beheben?

    vielen Dank
    Wie speicherst den du das Bild ? Man kann es doch einfach mit der Pfad Angabe speichern. Ich denke das dort der Fehler liegt, den das laden


    Visual Basic-Quellcode

    1. public static Image ImageFromBase64String(string base64)
    2. {
    3. MemoryStream memory = new MemoryStream(Convert.FromBase64String(base64));
    4. Image result = Image.FromStream(memory);
    5. memory.Close();
    6. return result;
    7. }



    ist richtig.
    Meine Projekte Genesis Game Engine | GFX | smartli.me - Der smarte URL shortener

    du hast flush() vergessen

    Quellcode

    1. public static string ImageToBase64String(Image image, ImageFormat format)
    2. {
    3. MemoryStream memory = new MemoryStream();
    4. image.Save(memory, format);
    5. memory.flush();
    6. string base64 = Convert.ToBase64String(memory.ToArray());
    7. memory.Close();
    8. return base64;
    9. }
    Meine Projekte Genesis Game Engine | GFX | smartli.me - Der smarte URL shortener

    filmee24 schrieb:

    Ich lade und speichere ein Bild in String und serializiere es als file.
    Einige dich auf eine Vorgehensweise.
    Entweder serialisieren, oder als Base64String-TextDatei behandeln.

    Wobei mir das alles fraglich ist, denn Image hat doch eigen Load/Save - Methoden?
    Oder war das Bitmap, was solch hatte?

    filmee24 schrieb:

    da auch andere objecte in dieser datei gespeichert werden
    Was ist Dein Plan?
    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!