PropertyItem zum Auslesen von Exif-Daten

  • VB.NET

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

    PropertyItem zum Auslesen von Exif-Daten

    Guten Tag an alle,
    danke für die Aufnahme ins Forum. Mein Name ist Rainer, ich wohne in Essen und grüße alle Mitgieder in diesem Forum. Meine Hobbys sind, neben Programmierung Fotografie, Viedofilmen und Motorrad fahren.

    Ich habe eine Verständnisfrage zu VB 2010 Express und wäre dankbar wenn mir jemand helfen könnte.

    Innerhalb eines Projektes für die Fotonachbearbeitung, möchte ich gerne die Exif Dateien aus jpg-Bildern lesen.
    Die Vorgehensweise ist mir, dank Suchfunktion auch klar, lediglich stolpere ich immer wieder über
    die Deklaration des PropertyItem.

    Hier der abgespeckte Code bis zu dem Punkt, an dem der Syntax nicht mehr akzeptiert wird:

    Herzlichen Dank für einen Tip.


    Gruß
    Rainer
    Bilder
    • Unbenannt.GIF

      29,31 kB, 458×476, 880 mal angesehen
    @diametral Willkommen im Forum. :thumbup:
    Unter dem letzten Buchstaben "m" von "PropertyItem" ist ein kleiner roter Balken. Klick da mal drauf, da bekommst Du die Hinweise des Systems:

    Die ersten Beiden sind zutreffend.
    Also ändere die 1. Zeile Deines abgebildeten Cosdes in

    VB.NET-Quellcode

    1. Imports System.Drawing.Imaging
    und feddich.
    Und:
    Poste den Code nicht als Bild sondern als Code, da lässt sich solch Fehler schneller reproduzieren.
    Markiere den Code und drück auf den VB.net-Button in der Button-Leiste oberhalb des Post-Edit-Fensters. ;)
    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!
    Hallo, Exif-Daten hatte ich auch vor kurzem ausgelesen, hatte das aber anders gemacht (vielleicht hilft Dir das ja):

    VB.NET-Quellcode

    1. 'varbild ist der Dateiname in einer Listbox
    2. 'Im Ordner 'Sammlung' befinden sich die Bilder
    3. 'die Labels geben die Inhalte an
    4. varbild = ListBox1.SelectedItem.ToString()
    5. Dim img As BitmapSource = BitmapFrame.Create(New Uri(My.Application.Info.DirectoryPath & "\Sammlung\" & varbild))
    6. Dim meta As BitmapMetadata = img.Metadata
    7. ' Label1.Text = meta.CameraModel
    8. Label4.Text = "Modell: " & meta.GetQuery("/app1/ifd/exif:{uint=272}")
    9. Label5.Text = "Hersteller: " & meta.GetQuery("/app1/ifd/exif:{uint=271}")
    10. Label6.Text = "Größe: " & meta.GetQuery("/app1/ifd/exif/subifd:{uint=40962}") & " / " & meta.GetQuery("/app1/ifd/exif/subifd:{uint=40963}") & " Pixel"
    11. Label7.Text = "Datum: " & meta.GetQuery("/app1/ifd/exif:{uint=306}")

    nervig sind Angaben zu Blende, Belichtungszeit und Brennweite, weil dann ein Bitconverter zwischengeschaltet werden muss
    Habs heute probiert und es hat einwandfrei geklappt. Noch einmal herzlichen Dank an RodFrom Germany und Oliver3121. Nach dem "Imports" konnte ich die dim Porpertyitems durchführen und danach die für mich notwendigen Exif-Daten, Kameratyp, Aufnahmedatum, Blende Belichtungszeit, ISO und Brennweite auslesen.

    @Oliver mit der Bitconverter klappten dann auch die numerischen Exif-Daten.

    Falls es jemand sehen möchte, hier der Teil des Codes in dem ich die Daten auslese:

    propitem = img.GetPropertyItem(272)
    kamera = Encoding.ASCII.GetString(propitem.Value, 0, propitem.Len - 1)
    propitem = img.GetPropertyItem(36867)
    adatum = Encoding.ASCII.GetString(propitem.Value, 0, propitem.Len - 1)
    propitem = img.GetPropertyItem(33437)
    blende = (BitConverter.ToInt32(propitem.Value, 0) / BitConverter.ToInt32(propitem.Value, 4))
    propitem = img.GetPropertyItem(33434)
    zeit = (BitConverter.ToInt32(propitem.Value, 0) / BitConverter.ToInt32(propitem.Value, 4))
    propitem = img.GetPropertyItem(34855)
    iso = (BitConverter.ToInt16(propitem.Value, 0))
    propitem = img.GetPropertyItem(37386)
    brennw = (BitConverter.ToInt32(propitem.Value, 0) / BitConverter.ToInt32(propitem.Value, 4))

    P.S. Sorry, irgendwie habe ich Probleme den Quellcode richtig anzuzeigen.