Hey Leute,
Ich will eine Funktion schreiben die Komprimierte LZ77 Bilder aus GBA Spielen extrahieren kann.
Als vorlage habe ich folgendes Tutorial: LZ77-Tut
Als denkhilfe folgendes Bild:
Hier mein Code:
aber irgendwie bekomme ich nen Falschen output(Falsches Bild)
könnt ihr vllt. den Fehler entdecken? Sitze nun schon seit über 3 tagen an dem Problem
Danke schonmal im vorraus
Gruß,
Julian
Ich will eine Funktion schreiben die Komprimierte LZ77 Bilder aus GBA Spielen extrahieren kann.
Als vorlage habe ich folgendes Tutorial: LZ77-Tut
Als denkhilfe folgendes Bild:
Hier mein Code:
VB.NET-Quellcode
- Public Shared Function DecimalToBinary(ByVal DecimalNum As String) As String
- Return DirectCast(Convert.ToString((Convert.ToUInt32(DecimalNum)), 2).PadLeft(8, "0"c), Object)
- End Function
- Public Shared Function BinaryToDecimal(ByVal Binary As String) As String
- Return DirectCast(Convert.ToUInt32(DirectCast(Binary, String), 2), Object)
- End Function
- Function SwapBytes(ByVal input As String) As String
- Dim temp As String = ""
- For i = 0 To input.Length - 1 Step 2
- temp = input(i) & input(i + 1) & temp
- Next
- Return (temp)
- End Function
- Function SwapBytes(ByVal input() As Byte) As String
- Dim temp As String = ""
- For Each B As Byte In input
- temp = insertZero(B) & temp
- Next
- Return (temp)
- End Function
- Function insertZero(ByVal input As String, Optional ByVal MinLength As Integer = 2) As String
- While input.Length < MinLength
- input = "0" & input
- End While
- Return input
- End Function
- Public Function unLZ(ByVal BinReader As IO.BinaryReader, ByVal Offset As Integer) As List(Of Byte)
- BinReader.BaseStream.Position = Offset
- If Not BinReader.ReadByte = &H10 Then Return Nothing
- Dim LZ_Länge As String = Val("&H" & SwapBytes(BinReader.ReadBytes(3)))
- Dim DekodierByte As String = DecimalToBinary(BinReader.ReadByte)
- Dim Puffer As New List(Of Byte)
- While Puffer.Count < LZ_Länge
- Dim X = 0
- While X < 7
- If DekodierByte(X) = "0" Then
- Puffer.Add(BinReader.ReadByte)
- ElseIf DekodierByte(X) = "1" Then
- On Error Resume Next
- Dim Byte1 As String = insertZero(Hex(BinReader.ReadByte)) & insertZero(Hex(BinReader.ReadByte))
- Dim Rückgriff_Länge As String = ("&H" & Byte1(1) & Byte1(2) & Byte1(3)) + 1
- Dim Übernahme_Länge As String = Val(Byte1(0)) + 3
- Puffer.AddRange(Puffer.GetRange(Puffer.Count - Rückgriff_Länge, Übernahme_Länge))
- End If
- X += 1
- End While
- End While
- MsgBox(Puffer.Count)
- Return Puffer
- End Function
aber irgendwie bekomme ich nen Falschen output(Falsches Bild)
könnt ihr vllt. den Fehler entdecken? Sitze nun schon seit über 3 tagen an dem Problem
Danke schonmal im vorraus
Gruß,
Julian