Exif auslesen und Fehlermeldung: System.ArgumentException: "Die Eigenschaft kann nicht gefunden werden."

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von BitBrösel.

    Exif auslesen und Fehlermeldung: System.ArgumentException: "Die Eigenschaft kann nicht gefunden werden."

    Tach auch,

    ich möchte mit VB.NET die Exifdaten von Fotos auslesen. Zum Teil geht das reibungslos. Doch bei manchen Eigenschaften bekomme ich die Fehlermeldung: System.ArgumentException: "Die Eigenschaft kann nicht gefunden werden.

    Was läuft denn hier schief?

    Hier der gekürzte Code

    VB.NET-Quellcode

    1. Sub ExifReadMetadata(StrPfad As String)
    2. ' ##### Info Exif Tags: https://exiv2.org/tags.html / https://exiftool.org/TagNames/EXIF.html
    3. Dim Img As Image = Image.FromFile(StrPfad)
    4. Dim Propitem As PropertyItem
    5. ' ----- Aufnahme Datum / 306 / Ascii / Exif.Image.DateTime
    6. Propitem = Img.GetPropertyItem(306) ' 36867
    7. LblAufnahmedatum.Text = Encoding.ASCII.GetString(Propitem.Value, 0, Propitem.Len - 1)
    8. ' ----- Hersteller / 271 / Ascii / Exif.Image.Make
    9. Propitem = Img.GetPropertyItem(271)
    10. LblHersteller.Text = "Hersteller: " & Encoding.ASCII.GetString(Propitem.Value, 0, Propitem.Len - 1)
    11. ' ----- Modell / 272 / Ascii / Exif.Image.Model
    12. Propitem = Img.GetPropertyItem(272)
    13. LblModell.Text = "Modell " & Encoding.ASCII.GetString(Propitem.Value, 0, Propitem.Len - 1)
    14. ' ----- Uhrheber / 33432 / Ascii / Exif.Image.Copyright
    15. Propitem = Img.GetPropertyItem(33432)
    16. Dim strCopyright As String = Encoding.UTF8.GetString(Propitem.Value, 0, Propitem.Len - 1)
    17. LblCopyright.Text = "Copyright: " & strCopyright
    18. ' [ das was funktioniert hier gelöscht ]
    19. ' ab hier folgende Fehlermeldung "System.ArgumentException: "Die Eigenschaft kann nicht gefunden werden.""
    20. ' sobald ich das Propitem aktiviere
    21. '' ----- Auflösung X / 256 / Long / Exif.Image.ImageWidth
    22. 'Propitem = Img.GetPropertyItem(256)
    23. 'LblAufloesungX.Text = "Auflösung X: " & (BitConverter.ToInt32(propitem.Value, 0))
    24. '' ----- Auflösung Y / 257 / Long / Exif.Image.ImageLength
    25. ' Propitem = Img.GetPropertyItem(257)
    26. 'LblAufloesungY.Text = "Auflösung Y: " & (BitConverter.ToInt32(propitem.Value, 0))
    27. ' ----- Bits / 258 / Short / Exif.Image.BitsPerSample
    28. 'Propitem = Img.GetPropertyItem(258)
    29. 'LblBits.Text = "Bits: " & (BitConverter.ToInt16(propitem.Value, 0))
    30. ' ----- Bildsensor / 37399 / Short / Exif.Image.SensingMethod
    31. 'Propitem = Img.GetPropertyItem(37399)
    32. 'LblBildsensor.Text = "Bildsensor: " & (BitConverter.ToInt16(Propitem.Value, 0))
    33. ' ----- GBS / 34853 / Long / Exif.Image.GPSTag
    34. 'Propitem = Img.GetPropertyItem(34853)
    35. 'LblGPS.Text = "GPS: " & LngGPS
    36. End Sub
    Mit freundlichen Dinges

    Lupus
    P.S: bei allen meine Fragen beziehen sich auf das arbeiten mit Visual Studio 2019 auf Win 10/64 bit und MySQL
    @Lupusverlach Dann wird wohl eine Eigenschaft dieses Namens im Bild nicht vorhanden sein.
    Möglicherweise sagt der Codex, dass es keine leeren Properties gibt.
    Teste also die Existenz in einem Try-Catch-Block, und im Catch-Block gibst Du einen Leerstring zurück.
    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!
    @Lupusverlach Es gibt verschiedene Arten von Bildern. Allein, wenn wir nur Jpg betrachten, gibt es verschiedene.
    Man kann nicht anhand von Jpg und Jpeg ausmachen, ob Exif-Metadaten enthalten sind, sondern es kommt drauf an, welches Gerät dieses Foto gespeichert hat.
    Bilder meines Smartphones enthalten das Aufnahmedatum, Marke, Modell, Bildausrichtung, Auflösung, und den Kompressionsstandard. Außerdem nach FFD9 (=Endmarker) beigefügte Bytes. Siehe Anhang. Und obwohl das Bild ein .jpg ist, enthält es Metadaten.

    Ein Foto aus einer Digitalkamera enthält nicht so viele Metdaten.

    Ein Bild, was du aus dem Netz ziehst, zum Beispiel von Instagram, enthält keine Metadaten mehr. Hier wurde sogar der Kompressionsstandard geändert. Deswegen ist das viel schlechtere Qualität. Wenn ich mein Smartphone-Bild (baseline DCT) zu Instagram hochlade und mit dem PC wieder runterlade, ist es progressive DCT.

    Prüf bei jedem Bild selbst und verlass dich nicht auf die Dateiendung (jpg oder jpeg):

    VB.NET-Quellcode

    1. Dim data As Byte() = System.IO.File.ReadAllBytes(file_path)


    VB.NET-Quellcode

    1. Private Sub Ueberpruefe_ob_Bild_ein_Jpeg_ist(_1 As Byte, _2 As Byte, _3 As Byte, _4 As Byte)
    2. 'Check for correct JPEG format (FF D8 and JFIF tag FF E0)
    3. ' FF D8 FF E0
    4. TextBox1.Text = If(_1 = 255 AndAlso _2 = 216 AndAlso _3 = 255 AndAlso _4 = 224, "ja", "nein")
    5. End Sub


    VB.NET-Quellcode

    1. Dim Ergebnis As Integer = Ueberpruefe_ob_Bild_den_JFIF_oder_Exif_Tag_hat(data(6), data(7), data(8), data(9), data(10))


    VB.NET-Quellcode

    1. Private Function Ueberpruefe_ob_Bild_den_JFIF_oder_Exif_Tag_hat(_1 As Byte, _2 As Byte, _3 As Byte, _4 As Byte, _5 As Byte) As Integer
    2. If Convert.ToChar(_1) = "J"c AndAlso Convert.ToChar(_2) = "F"c AndAlso Convert.ToChar(_3) = "I"c AndAlso Convert.ToChar(_4) = "F"c AndAlso _5 = &H0 Then
    3. TextBox2.Text = "JFIF"
    4. Return 1
    5. ElseIf Convert.ToChar(_1) = "E"c AndAlso Convert.ToChar(_2) = "x"c AndAlso Convert.ToChar(_3) = "i"c AndAlso Convert.ToChar(_4) = "f"c AndAlso _5 = &H0 Then
    6. TextBox2.Text = "Exif"
    7. Return 2
    8. Else
    9. TextBox2.Text = "andere"
    10. Return 3
    11. End If
    12. End Function


    Nur, wenn Ergebis == 2 ist, kannst du mit PropertyItem arbeiten, ansonsten musst du selbst die Marker durchlaufen. Das machst du mit ner For-Schleife und prüfst mit vielen Ifs.
    Bilder
    • Screenshot 2022-08-27 124520.png

      84,97 kB, 1.358×597, 64 mal angesehen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Bartosz“ ()

    @RodFromGermany Danke für die Antwort.
    Jedoch ist die Eigenschaft mit IrfanView zu lesen. Auch mit meinem ollen VBA in Access kann ich die Eigenschaften lesen (bis auf GPS). Von daher gehe ich davon aus, es muss ein anderer Fehler sein.

    Kann es sein, dass VB.NET schlicht und ergreifend nicht alle Eigenschaften auslesen kann?

    Ich lade mal ein Beispiel hoch. Datenbank dazu ist Access.
    Mit Access und VBA habe ich die Daten auslesen können, nicht mit VB.NET. In meiner Beispielanwendung ist links im Formular das Ergebnis aus Access, rechts das Ergebnis aus VB.NET. Welches nicht alles lesen kann.
    Dateien
    • Fotoalbum.zip

      (4,76 MB, 43 mal heruntergeladen, zuletzt: )
    Mit freundlichen Dinges

    Lupus
    P.S: bei allen meine Fragen beziehen sich auf das arbeiten mit Visual Studio 2019 auf Win 10/64 bit und MySQL
    Hi

    Soweit ich das noch in Erinnerung habe, kann man vorher die Anzahl der vorhandenen Exif/Metatag-Daten und deren PropertyID ermitteln. Dann kann man entsprechend schauen ob eine PropertyID vorhanden ist, bevor man versucht diese auszulesen.

    @Bartosz

    Rein theoretisch muss man nicht selbst schauen ob es ein JPG, JPEG, JFIF, oder oder ist und ob diese Exif/Metatag-Daten enthalten. GDI+ ermittelt automatisch den richtigen Decoder um das Bild zu laden und dann halt die Anzahl der Metatag-Daten ermitteln.
    Mfg -Franky-

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „-Franky-“ ()

    @Lupusverlach Bei welchem Foto passiert was bzw. nicht?
    ====
    Ich habe mal eines Deiner Bilder (links) und mein Bild (rechts) EXIF-mäßig verglichen, bei meinem gibt es keinen Urheber (wegen Foto-Kamera), "mein" GPS-Exif wird von Deinem Programm ebenfalls nicht erkannt.
    Ansonsten hat mein Bild viel mehr EXIF-Informationen an Bord, wie Du an der Länge der Scrollbar siehst.
    Allerdings gibt es zum, GPS-EXIF weitere Informationen, da solltest Du Dich mal durchfräsen: exiftool.org/TagNames/GPS.html

    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!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „RodFromGermany“ ()

    @Lupusverlach Wenn Du das PropertyItem in eine eigene Wrapper-Klasse baust, lebst Du wesentlich ruhiger:
    Die PropertyItem-Klasse

    VB.NET-Quellcode

    1. Imports System.Text
    2. Public Class MyPropertyItem
    3. Private MyImage As Image
    4. Public Sub New(Img As Image)
    5. MyImage = Img
    6. End Sub
    7. Public Function GetString(propid As Integer) As String
    8. Try
    9. Dim Propitem = MyImage.GetPropertyItem(propid)
    10. Return Encoding.ASCII.GetString(Propitem.Value, 0, Propitem.Len - 1)
    11. Catch ex As Exception
    12. Return "Eigenschaft nicht da"
    13. End Try
    14. End Function
    15. Public Function GetInteger(propid As Integer) As Integer
    16. Try
    17. Dim Propitem = MyImage.GetPropertyItem(propid)
    18. Return BitConverter.ToInt16(Propitem.Value, 0)
    19. Catch ex As Exception
    20. Return -1
    21. End Try
    22. End Function
    23. Public Function GetIntValue(propid As Integer) As String
    24. Try
    25. Dim Propitem = MyImage.GetPropertyItem(propid)
    26. Return BitConverter.ToInt16(Propitem.Value, 0).ToString()
    27. Catch ex As Exception
    28. Return "Eigenschaft nicht da"
    29. End Try
    30. End Function
    31. Public Function GetDoubleValue(propid As Integer) As String
    32. Try
    33. Dim Propitem = MyImage.GetPropertyItem(propid)
    34. Return (BitConverter.ToInt32(Propitem.Value, 0) / BitConverter.ToInt32(Propitem.Value, 4)).ToString()
    35. Catch ex As Exception
    36. Return "Eigenschaft nicht da"
    37. End Try
    38. End Function
    39. Public Function GetDoubleValueInvers(propid As Integer) As String
    40. Try
    41. Dim Propitem = MyImage.GetPropertyItem(propid)
    42. Return (1.0 / (BitConverter.ToInt32(Propitem.Value, 0) / BitConverter.ToInt32(Propitem.Value, 4))).ToString()
    43. Catch ex As Exception
    44. Return "Eigenschaft nicht da"
    45. End Try
    46. End Function
    47. End Class
    die Main Form

    VB.NET-Quellcode

    1. Imports System.IO
    2. Public Class Hauptform
    3. Sub ExifReadMetadata(StrPfad As String)
    4. ' Labels sind mit einem Tag versehen und werden alle gelöscht,
    5. ' damit kein Wert von der falschen Datei, bzw Datensatz angezeigt wird
    6. For Each Item In Controls.OfType(Of Label)
    7. If Item.Tag Is "TagsExif" Then
    8. Item.Text = ""
    9. End If
    10. Next
    11. ' ##### Info Exif Tags: https://exiv2.org/tags.html / https://exiftool.org/TagNames/EXIF.html
    12. ' Noch nicht gelöst
    13. ' Größe Auflösung x Auflösung y Bits Auflösung Einheit
    14. ' Blitz Bildsensor GPS UTF8 für Copyright
    15. Dim Img As Image = Image.FromFile(StrPfad)
    16. Dim Propitem As New MyPropertyItem(Img)
    17. ' ----- Aufnahme Datum / 306 / Ascii / Exif.Image.DateTime
    18. LblAufnahmedatum.Text = Propitem.GetString(306)
    19. ' ----- Hersteller / 271 / Ascii / Exif.Image.Make
    20. LblHersteller.Text = "Hersteller: " & Propitem.GetString(271)
    21. ' ----- Modell / 272 / Ascii / Exif.Image.Model
    22. LblModell.Text = "Modell " & Propitem.GetString(272)
    23. ' ----- Uhrheber / 33432 / Ascii / Exif.Image.Copyright
    24. LblCopyright.Text = "Copyright: " & Propitem.GetString(33432)
    25. ' ----- Größe
    26. LblSize.Text = "Größe: " & Convert.ToInt32(My.Computer.FileSystem.GetFileInfo(ImagePath()).Length / 1024)
    27. ' ----- Hoch / 40962 / Long / Exif.Photo.PixelXDimension
    28. Dim intHoch As Integer = Propitem.GetInteger(40962)
    29. LblBreit.Text = "Hoch: " & intHoch
    30. ' ----- Breit / 40963 / Long / Exif.Photo.PixelYDimension
    31. Dim intBreit As Integer = Propitem.GetInteger(40963)
    32. LblHoch.Text = "Breit: " & intBreit
    33. LblVerhaeltniss.Text = "Verhältniss: " & intBreit / intHoch
    34. Select Case True
    35. Case intBreit < intHoch
    36. LblFormat.Text = "Format: Breit"
    37. Case intBreit > intHoch
    38. LblFormat.Text = "Format: Hoch"
    39. Case Else
    40. LblFormat.Text = "Format: Quadrat"
    41. End Select
    42. ' ----- Brennweite / 37386 / Rational / Exif.Image.FocalLength
    43. LblBrennweite.Text = "Brennweite: " & Propitem.GetDoubleValue(37386)
    44. '################################################# Fehlermeldung, System.ArgumentException: "Die Eigenschaft kann nicht gefunden werden."
    45. '' ----- Auflösung X / 256 / Long / Exif.Image.ImageWidth
    46. 'Propitem = Img.GetPropertyItem(256) ' System.ArgumentException: "Die Eigenschaft kann nicht gefunden werden."
    47. 'LblAufloesungX.Text = "Auflösung X: " & (BitConverter.ToInt32(propitem.Value, 0))
    48. '################################################# Fehlermeldung, eigenschaft kann nicht gefunden werden
    49. '' ----- Auflösung Y / 257 / Long / Exif.Image.ImageLength
    50. ' Propitem = Img.GetPropertyItem(257) ' System.ArgumentException: "Die Eigenschaft kann nicht gefunden werden."
    51. 'LblAufloesungY.Text = "Auflösung Y: " & (BitConverter.ToInt32(propitem.Value, 0))
    52. '################################################# Fehlermeldung, eigenschaft kann nicht gefunden werden
    53. ' ----- Bits / 258 / Short / Exif.Image.BitsPerSample
    54. 'Propitem = Img.GetPropertyItem(258)
    55. 'LblBits.Text = "Bits: " & Encoding.ASCII.GetString(propitem.Value, 0, propitem.Len - 1)
    56. 'LblBits.Text = "Bits: " & (BitConverter.ToInt16(propitem.Value, 0))
    57. ''Dim intBits As Short
    58. ''Try
    59. '' intBits = (BitConverter.ToInt16(propitem.Value, 0))
    60. ''Catch
    61. '' intBits = 0
    62. ''End Try
    63. ''Select Case intBits
    64. '' Case 8 : LblBits.Text = "Bits: " & "Graustufen"
    65. '' Case 24 : LblBits.Text = "Bits: " & "RGB"
    66. '' Case 32 : LblBits.Text = "Bits: " & "CMYK"
    67. '' Case Else : LblBits.Text = "Bits: " & "unbekannt"
    68. ''End Select
    69. 'LblAufloesungEinheit.Text = "Auflösung Einheit: "
    70. 'LblBitsBezeichnung.Text = "Bits Bezeichnung: "
    71. ' ----- Blende / 37378 / Rational / Exif.Image.ApertureValue
    72. LblBlende.Text = "Blende: " & Propitem.GetDoubleValue(33437)
    73. ' ----- Belichtungszeit / 37377 / Rational / Exif.Image.ShutterSpeedValue
    74. LblBelichtung.Text = "Belichtungszeit: 1 / " & Propitem.GetDoubleValueInvers(33434)
    75. ' ----- Blitz / 37385 / Short / Exif.Image.Flash
    76. LblBlitz.Text = "Blitz: " & Propitem.GetIntValue(37385)
    77. ' ----- AF Modus / 37383 / Short / Exif.Image.MeteringMode
    78. LblAFModus.Text = "AF Modus: " & Propitem.GetIntValue(37383)
    79. ' ----- ISO / 34855 / Short / Exif.Image.ISOSpeedRatings
    80. LblISO.Text = "ISO: " & Propitem.GetIntValue(34855)
    81. ' ----- Weißabgleich / 41987 / Short / Exif.Photo.WhiteBalance
    82. LblWeissabgleich.Text = "Weissabgleich: " & GetWeissabgleich(Propitem.GetInteger(41987))
    83. '################################################# Fehlermeldung, eigenschaft kann nicht gefunden werden
    84. ' ----- Bildsensor / 37399 / Short / Exif.Image.SensingMethod
    85. 'Propitem = Img.GetPropertyItem(37399)
    86. 'LblBildsensor.Text = "Bildsensor: " & (BitConverter.ToInt16(Propitem.Value, 0))
    87. '################################################# Fehlermeldung, eigenschaft kann nicht gefunden werden
    88. ' ----- GBS / 34853 / Long / Exif.Image.GPSTag
    89. LblGPS.Text = "GPS: " & Propitem.GetIntValue(34853)
    90. End Sub
    91. Sub ShowBild()
    92. ImgBox.Image = Image.FromFile(ImagePath)
    93. lblCountKunden.Text = BSFotoalbum.Position() + 1 & " von " & BSFotoalbum.Count()
    94. ExifReadMetadata(ImagePath())
    95. End Sub
    96. Public Function ImagePath() As String
    97. Dim StrBild As String = TxbPfad.Text & TxbDateiname.Text
    98. Dim StrPfad As String = Path.GetDirectoryName(Application.ExecutablePath)
    99. StrPfad = StrPfad.Replace("Fotoalbum\bin\Debug", "")
    100. StrBild = StrPfad & StrBild
    101. Return StrBild.Replace("<replace>", "")
    102. End Function
    103. Private Sub Hautform_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    104. Me.FotoalbumTableAdapter.Fill(Me.FotoDatenDataSet.Fotoalbum)
    105. ShowBild()
    106. BSFotoalbum.Sort = "Aufnahme"
    107. End Sub
    108. Private Sub ButtonNavi_Click(sender As Object, e As EventArgs) Handles BtnPrevious.Click, BtnNext.Click, BtnLast.Click, BtnFirst.Click
    109. ' Navigation für die Fotos
    110. Select Case True
    111. Case sender Is BtnPrevious : BSFotoalbum.MovePrevious()
    112. Case sender Is BtnNext : BSFotoalbum.MoveNext()
    113. Case sender Is BtnLast : BSFotoalbum.MoveLast()
    114. Case sender Is BtnFirst : BSFotoalbum.MoveFirst()
    115. End Select
    116. ShowBild()
    117. End Sub
    118. Private Sub BtnFileOpen_Click(sender As Object, e As EventArgs) Handles BtnFileOpen.Click
    119. ' Wenn der IrfanView nicht da ist, kann man hier gleich den richtigen Pfad reinschfreiben
    120. Using PaintProcess As New Process
    121. PaintProcess.StartInfo.FileName = "C:\Program Files\IrfanView\i_view64.exe"
    122. PaintProcess.StartInfo.Arguments = ImagePath()
    123. PaintProcess.Start()
    124. End Using
    125. End Sub
    126. End Class


    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!
    @RodFromGermany
    soderle, da bin ich wieder.
    Erst noch einmal vielen Dank für die Mühe die du Dir gemacht hast.
    Jedoch gibt er keine Daten aus, bzw. sagt "Eigenschaft nicht gefunden" wo meine Version Ergebnisse liefert.
    Das wären die Felder: Blitz, AF Modus, Belichtung, Urheber (Copyright), Bits. Beim Urheber kennt er euch kein "ö,ä,ü,ß"
    Habe es einmal angehängt als Zip-Datei und den Button "Alte Version" im Hauptform. da kommt man dann zu eben der vorherigen Version um es vergleichen zu können.

    Thema GPS hebe ich mir für Später auf, ist nicht ganz so wichtig und scheint etwas umfangreicher als ich gedacht habe :(
    Dateien
    • Fotoalbum.zip

      (2,59 MB, 31 mal heruntergeladen, zuletzt: )
    Mit freundlichen Dinges

    Lupus
    P.S: bei allen meine Fragen beziehen sich auf das arbeiten mit Visual Studio 2019 auf Win 10/64 bit und MySQL
    Hey,

    also erstmal gleich Vorweg, ich meine das nicht bösartig, aber dein Code ist unter aller Sau, setzen 6! Hätte mein Lehrer damals gesagt. Die ganzen Try/Catches machen nur noch mehr Löcher in dein instabiles Gerüst, bis es wie jetzt anfängt zusammenzubrechen.

    1. Option Strict Off, anstatt so zu coden frag lieber wie mans richtig macht, wenn was mal nicht passt.
    2. Der Hardcore Einsatz von Try Catch, so machst du dir das Leben schwer, in diesem Fall ist ein Try/Catch schuld, das du den fehler nicht finden kannst.
    3. Das hier:(nein, nicht die Fehlerursache)

    VB.NET-Quellcode

    1. Try ' ----- Belichtung / 34850 / Short / Exif.Image.ExposureProgram
    2. LblBelichtung.Text = "Belichtung: " & fncBelichtung(Propitem.GetDoubleValue(34850))
    3. Catch
    4. LblBelichtung.Text = "Belichtung: (" & Propitem.GetDoubleValue(34850) & ")"
    5. End Try


    Der einzige Unterschied in den Zeilen ist, das die Funktionen im Try gecallt werden, da ist aber nichts was fehlschlagen könnte. Wie bist du auf diesen Murks gekommen? Frag lieber nach wieso, weshalb, warum anstatt sowas zu verzapfen.

    So nun zeige ich dir warum das mit dem Blitz nicht ging. Ich habe mir den PropertyItem.Type Wert angeschaut, war 3, also ein Array von 16Bit unsignierten Ganzzahlen(also uint16, kannst aber auch int16 nehmen, also UShort oder Short) Du hast versucht mit der Funktion GetDoubleValue den Wert zu hohlen, da kann nur in die Hose gehen, denn in dieser Funktion wird versucht mit dem Bitconverter ein Int32 zu machen, geht nicht, weil zu wenig Bytes, daher schlägt es fehl, und der String im Catch kommt zurück.

    Um das mit dem Blitz zu beheben, füge das deiner MyPropertyItem.vb hinzu

    VB.NET-Quellcode

    1. Public Function GetShortValue(propid As Integer) As String
    2. Try
    3. Dim Propitem = MyImage.GetPropertyItem(propid)
    4. Return BitConverter.ToInt16(Propitem.Value, 0).ToString()
    5. Catch ex As Exception
    6. Return "Fehler"
    7. End Try
    8. End Function


    Und dann einfach nur das hier, kein Try Catch! Bei den Funktionen wo GetPropertyItem gecallt wird, geht es ja nicht anders.

    VB.NET-Quellcode

    1. LblBlitz.Text = "Blitz: " & fncBlitzmodus(Propitem.GetShortValue(37385))


    Bei den anderen Sachen wird es garantiert die selbe Ursache haben(das der BitConverter das nicht konvertieren kann). Also mal HaltePunkte setzen und Werte anschauen, ganz speziell PropertyItem.Type. Da hast du eine Zahl, mit dieser schaust du hier:
    learn.microsoft.com/de-de/dotn…imaging-propertyitem-type
    Was für ein Typ das ist, und benutzt die entsprechende BitConverter Funktion dafür, bzw. das was nötig ist..

    Sollest du das nicht schaffen bei den anderen zu beheben, was kein Drama ist, bin ich bereit zu helfen, aber nur wenn du dann eine Mappe welche OptionStrictOn ist hochlädst. Brauchst du Hilfe um das alles OptionStrictOn zu machen, frag einfach nach. Dann erkläre ich oder andere dir das.

    PS.

    Wenn du die Mappe auf OptionStrictOn schaltest und die kompiliert, mach ich dir noch eine besser Klasse um die PropertyItems zu hohlen, da sind dann solche Sachen wie jetzt ausgeschlossen.

    Dieser Beitrag wurde bereits 8 mal editiert, zuletzt von „BitBrösel“ ()