Hallo,
ich bin recht neu in Visual Basic, habe allerdings schon fortgeschrittene Programmierkenntnisse in anderen Porgrammiersprachen.
Für die Sony PSP habe ich eine Anwendung geschrieben, die Dateien öffnen kann, und aus ihnen PNG Bilder extrahiert.
Das will ich nuna uch für den PC verwirklichen. Ich habe auch schon angefangen, die Dateieingabe funktioniert schon optimal. Um in einer Datei nach den PNG-headern suchen zu können, muss ich erstmal die gewählte Datei einlesen.
Ich mache das hier mit
Dim reader As StreamReader = New StreamReader(filepath.Text)
Dim inhalt = reader.ReadToEnd()
reader.Close() ...ich muss sagen, dass das irgendwie in VB 2008 eine sehr umständliche Variante ist, Dateien einzulesen, naja Microsoft halt.
Eine Datei, die PNG Code enthält, sieht z.B. so aus:
http://www.bumuckl.com/downloads/hilfe_vb1.png
Mein Progrämmchen dursucht die Datei nun auf 2 Schlüsselwörter, sind die vorhanden, erscheint ein Button, um die PNG aus der Datei zu extrahieren. Wenn die Datei geöffnet ist, sollte nach einem Klick auf Scan PNG normalerweise die Datei nicht nur durchsucht werden, sondern auch in der Textbox angezeigt werden:
http://www.bumuckl.com/downloads/hilfe_vb2.png
Bei einem Klick auf Extract PNG sollte dann die PNG extrahiert werden. Das wird sie dann auch, allerdings zeimlich übel zugerichtet:
http://www.bumuckl.com/downloads/hilfe_vb3.png
Das durchsuchen einer Datei nach [NUL], [SOH] oder sonstigen ASCII-Zeichen funktioniert nicht, nur "normale" können gesucht werden. Das verwirrt mich schonmal. Notepad++ zeigt mir die Datei wunderbar mit allen ASCII-Zeichen an, wenn ich auf Scan PNG klicke, erscheint dabei im Textfeldchen meines Progrämmchen gar nichts, sobald ein "ausergwöhnliches" Zeichen in der Datei vorkommt.
Und das extrahieren funktioniert nur soweit, dass die aussergewöhlichen Zeichen in viele andere Zeichen umgewandelt werden, wodurch die PNG natürlich nicht brauchbar ist.
Im Bereich Datentypen habe ich sowieso nicht so den absoluten Durchblick, trotzdem fände ich es super, wenn mir jemand helfen könnte, und mir erklären könnten, warum VB da so rumzickt.
Danke, Bumuckl
Ach ja, hier ist mein Code:
Imports System.IO
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Button1.Click
openfile.ShowDialog()
End Sub
Private Sub openfile_FileOk(ByVal sender As System.Object, ByVal e As _
System.ComponentModel.CancelEventArgs) Handles openfile.FileOk
filepath.Text = openfile.FileName()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Button2.Click
Dim reader As StreamReader = New StreamReader(filepath.Text)
Dim inhalt = reader.ReadToEnd()
reader.Close()
fl.Text = inhalt
If InStr(inhalt, "PNG") And InStr(inhalt, "IEND") Then
Button3.Enabled = True
Else
Button3.Enabled = False
End If
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Button3.Click
Dim reader As StreamReader = New StreamReader(filepath.Text)
Dim inhalt = reader.ReadToEnd()
reader.Close()
Dim writer As StreamWriter = New StreamWriter("C:/1.png")
writer.Write(Mid(inhalt, InStr(inhalt, "PNG") - 1, InStr(inhalt, _
"IEND") + 5))
writer.Close()
End Sub
End Class
Beitrag wurde zuletzt am 19.05.08 um 12:02:51 editiert. |