Bestimmen des Dateityps von Bildern als MemoryStream

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

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von -Franky-.

    Bestimmen des Dateityps von Bildern als MemoryStream

    Hallo miteinander :)

    ich habe eine BildZwischenspeicherListe As List(Of MemoryStream), in der Bilder aus einer Onlinedatenbank gespeichert sind.

    Nun möchte ich die vereinzelt auch auf Platte schreiben und für den Dateinamen brauche ich logischerweise eine Dateiendung, also den Bilddateityp.

    Habs mal hiermit versucht:

    VB.NET-Quellcode

    1. Dim AktuellesCoverArt As Image = Image.FromStream(BildZwischenspeicherListe(BildIndex))
    2. If AktuellesCoverArt.RawFormat Is System.Drawing.Imaging.ImageFormat.Jpeg Then
    3. File.WriteAllBytes("C:\Users\al...\Desktop\Ablage\bildertest.jpg", BildZwischenspeicherListe(BildIndex).ToArray)
    4. ElseIf AktuellesCoverArt.RawFormat Is System.Drawing.Imaging.ImageFormat.Gif Then
    5. File.WriteAllBytes("C:\...\alpha\Desktop\Ablage\bildertest.gif", BildZwischenspeicherListe(BildIndex).ToArray)
    6. ElseIf AktuellesCoverArt.RawFormat Is System.Drawing.Imaging.ImageFormat.Bmp Then
    7. File.WriteAllBytes("C:\...\alpha\Desktop\Ablage\bildertest.bmp", BildZwischenspeicherListe(BildIndex).ToArray)
    8. ElseIf AktuellesCoverArt.RawFormat Is System.Drawing.Imaging.ImageFormat.Emf Then
    9. File.WriteAllBytes("C:\...\alpha\Desktop\Ablage\bildertest.emf", BildZwischenspeicherListe(BildIndex).ToArray)
    10. ElseIf AktuellesCoverArt.RawFormat Is System.Drawing.Imaging.ImageFormat.Exif Then
    11. File.WriteAllBytes("C:\...\alpha\Desktop\Ablage\bildertest.exif", BildZwischenspeicherListe(BildIndex).ToArray)
    12. ElseIf AktuellesCoverArt.RawFormat Is System.Drawing.Imaging.ImageFormat.Icon Then
    13. File.WriteAllBytes("C:\...\alpha\Desktop\Ablage\bildertest.ico", BildZwischenspeicherListe(BildIndex).ToArray)
    14. ElseIf AktuellesCoverArt.RawFormat Is System.Drawing.Imaging.ImageFormat.Png Then
    15. File.WriteAllBytes("C:\...\alpha\Desktop\Ablage\bildertest.png", BildZwischenspeicherListe(BildIndex).ToArray)
    16. ElseIf AktuellesCoverArt.RawFormat Is System.Drawing.Imaging.ImageFormat.Tiff Then
    17. File.WriteAllBytes("C:\...\alpha\Desktop\Ablage\bildertest.tif", BildZwischenspeicherListe(BildIndex).ToArray)
    18. ElseIf AktuellesCoverArt.RawFormat Is System.Drawing.Imaging.ImageFormat.Wmf Then
    19. File.WriteAllBytes("C:\...\alpha\Desktop\Ablage\bildertest.wmf", BildZwischenspeicherListe(BildIndex).ToArray)
    20. Else
    21. Debug.WriteLine("falsches Format")
    22. End If


    Nur dass er mir dann immer "falsches Format" ausspuckt, was ja eigntlich schier net sein kann... IntelliSense hat mir das aber sogar so vorgeschlagen...

    Weiss jemand was ich falsch mach?
    Statt alles durchzutesten und Dich dann zu wundern, warum da der Else-Zweig angesprochen wird, setz einen Haltepunkt und schau, was in AktuellesCoverArt.RawFormat konkret drinsteckt.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed

    Ah okay, ist vom Typ GUID. Kannte ich bis jetzt noch nicht, aber ich glaub das ist jetzt kein so gängiges Dateiformat für Bilder...

    Kann ich das einfach in ne Datei speichern oder sollte ich das vorher in ein JPG oder Ähnliches konvertieren?

    Es muss danach halt wieder lesbar sein...

    Edit: Mir fällt grad ein, ich brauch das auf jeden Fall in einem der gängigen Formate.... wie kann man das konvertieren? Hab jetzt auf den ersten Blick nix auf Google gefunden, nur für VB6...

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

    @-Franky-

    Ah sowas dachte ich mir schon....

    Ich könnte wahrscheinlich zwar das Ganze in eine Datei schreiben und auch wieder in einen Memorystream einlesen, aber ich hab auch Funktionen die brauchen halt nen Datei als jpg, gif oder so...

    Wie kann man denn das konvertieren?

    Erst als Bitmap verwandeln und dann?
    Wenn Du das hinbekommst, kannst Du m.E. mit (Dein)Bitmap.Save(…) weitermachen und das Dateiformat angeben
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed

    Jou, ich sehe gerade Image.FromStream liefert mir schon ein Bitmap...

    Und mit

    AktuellesCoverArt.Save("C:\Users\alpha\Desktop\Ablage\bildertest.jpg", System.Drawing.Imaging.ImageFormat.Jpeg)

    oder

    AktuellesCoverArt.Save("C:\Users\alpha\Desktop\Ablage\bildertest.png", System.Drawing.Imaging.ImageFormat.Png)

    usw. in jedes beliebige Format umwandelbar...
    @kafffee

    Ich glaub Du hast sowas gesucht.

    VB.NET-Quellcode

    1. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    2. Using img As Image = Image.FromFile("D:\Image.png")
    3. ' Standard, falls Select Case oder If/ElseIf fehlschlägt
    4. Dim FileExt As String = ".jpg"
    5. Dim FileFormat As Imaging.ImageFormat = Imaging.ImageFormat.Jpeg
    6. Select Case img.RawFormat.Guid
    7. Case Imaging.ImageFormat.Bmp.Guid
    8. FileExt = ".bmp"
    9. FileFormat = Imaging.ImageFormat.Bmp
    10. Case Imaging.ImageFormat.Emf.Guid
    11. FileExt = ".emf"
    12. FileFormat = Imaging.ImageFormat.Emf
    13. Case Imaging.ImageFormat.Exif.Guid
    14. 'usw
    15. End Select
    16. ' oder
    17. If img.RawFormat.Guid.Equals(Imaging.ImageFormat.Bmp.Guid) Then
    18. FileExt = ".bmp"
    19. FileFormat = Imaging.ImageFormat.Bmp
    20. ElseIf img.RawFormat.Guid.Equals(Imaging.ImageFormat.Emf.Guid) Then
    21. FileExt = ".emf"
    22. FileFormat = Imaging.ImageFormat.Emf
    23. ElseIf img.RawFormat.Guid.Equals(Imaging.ImageFormat.Exif.Guid) Then
    24. 'usw
    25. End If
    26. img.Save("D:\NewImage" & FileExt, FileFormat)
    27. End Using
    28. End Sub
    Mfg -Franky-