Hallo zusammen,
ich hätte eine Frage: ich habe ein jpg-Bild im Bestand, dessen Vorschau bei Windows nicht angezeigt wird. Rechtsklick -> Öffnen mit -> Windows-Fotoanzeige bringt nichts, es kommt die Fehlermeldung, dass es das falsche Format hat. Nur mit Picasa 3 geht es zu öffnen. Da habe ich mir gedacht, wenn Picasa das kann, dann muss ich das auch schaffen.
Mit meiner üblichen Pfadsuche (siehe Code) heißt es "ungültiger Parameter".
Der Fehler im Stacktrace sagte etwas von System.Drawing.Bitmap..ctor. Das googelte ich und fand diesen Thread
stackoverflow.com/questions/14…bitmap-ctor-stream-stream
Derjenige hat sich anscheinend alle Bytes binär eingelesen und es dann zum Image umgewandelt. Das wollte bei mir nicht kompilieren. Ich musste erstmal allerhand umbauen, weil der Kompiler nicht mochte. Dann sah es so aus:
Selber Fehler.
Was kann ich tun?
ich hätte eine Frage: ich habe ein jpg-Bild im Bestand, dessen Vorschau bei Windows nicht angezeigt wird. Rechtsklick -> Öffnen mit -> Windows-Fotoanzeige bringt nichts, es kommt die Fehlermeldung, dass es das falsche Format hat. Nur mit Picasa 3 geht es zu öffnen. Da habe ich mir gedacht, wenn Picasa das kann, dann muss ich das auch schaffen.
Mit meiner üblichen Pfadsuche (siehe Code) heißt es "ungültiger Parameter".
VB.NET-Quellcode
- Private Sub ScanDirectory(ByVal Directory1 As IO.DirectoryInfo)
- Dim Liste_mit_Formaten = New List(Of String) From {".jpg", ".png", ".jpeg", ".bmp"}
- For Each Directory In Directory1.EnumerateDirectories
- Try
- For Each File In Directory.EnumerateFiles
- Try
- If Liste_mit_Formaten.Contains(File.Extension.ToLower(New CultureInfo("de-DE"))) Then
- Dim v_P As String = Directory1.ToString + "\" + Directory.ToString + "\" + File.ToString
- Try 'Try/Catch, weil es (selten) vorkommen kann, dass Bilder kaputt sind
- Using BMP1 As New Bitmap(v_P) 'Hier fliegt die Exception
- End Using
- Catch ex As System.ArgumentException
- TextBox_Info.Text = "Datei kaputt / Wird nicht unterstützt " & v_P
- Application.DoEvents()
- Catch ex2 As System.NotSupportedException
- TextBox_Info.Text = "System.NotSupportedException: Fehler mit Pfad!"
- Application.DoEvents()
- End Try
- End If
- Catch Ex As UnauthorizedAccessException
- ScanDirectory(Directory)
- End Try
- Next
- Catch Ex As UnauthorizedAccessException
- TextBox_Info.Text = "Verboten"
- End Try
- Next
- End Sub
Der Fehler im Stacktrace sagte etwas von System.Drawing.Bitmap..ctor. Das googelte ich und fand diesen Thread
stackoverflow.com/questions/14…bitmap-ctor-stream-stream
Derjenige hat sich anscheinend alle Bytes binär eingelesen und es dann zum Image umgewandelt. Das wollte bei mir nicht kompilieren. Ich musste erstmal allerhand umbauen, weil der Kompiler nicht mochte. Dann sah es so aus:
VB.NET-Quellcode
- Private Sub Bild_reparieren(ByVal Pfad_R As String)
- Dim fileData As Byte() = Nothing
- Using binaryReader As System.IO.BinaryReader = New System.IO.BinaryReader(System.IO.File.Open(Pfad_R, System.IO.FileMode.Open)) '(Request.Files(0).InputStream)
- fileData = binaryReader.ReadBytes(CInt(binaryReader.BaseStream.Length)) 'Request.Files(CInt(0)).ContentLength)
- Debug.WriteLine("Reparatur")
- End Using
- Dim imageConverter As ImageConverter = New System.Drawing.ImageConverter()
- Try
- Dim image As System.Drawing.Image = TryCast(imageConverter.ConvertFrom(fileData), System.Drawing.Image) 'hier wieder derselbe Fehler
- Using FBSD2 As New CommonSaveFileDialog()
- FBSD2.Title = "Repariertes Bild wo speichern?"
- Dim item1 As CommonFileDialogFilter = New CommonFileDialogFilter("Bitmap", ".bmp")
- FBSD2.Filters.Add(item1)
- FBSD2.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
- FBSD2.RestoreDirectory = True
- If FBSD2.ShowDialog() = CommonFileDialogResult.Ok Then
- Pfad_speichern = System.IO.Path.GetFullPath(FBSD2.FileName)
- image.Save(Pfad_speichern, System.Drawing.Imaging.ImageFormat.Bmp)
- End If
- End Using
- Catch ex As System.ArgumentException
- Return
- End Try
- End Sub
Selber Fehler.
Was kann ich tun?
An die Neulinge: Nutzt
Option Strict On
und Option Infer Off
. Dadurch kommt ihr mit Datentypumwandlungen nicht durcheinander und der Code verbessert sich um Einiges! Solche Fehler à la Dim Beispiel As Integer = "123" können nicht mehr passieren.