Buchempfehlung
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
"Der" Petzold, das über 1000 Seiten starke Standardwerk zum Win32-API - besonders nützlich u. a. bei der GUI-Programmierung in FreeBASIC! [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Code-Beispiel

Code-Beispiele » Sonstiges

LZW En/Decoder für Speicherbereiche

Lizenz:Erster Autor:Letzte Bearbeitung:
GPLMitgliedcsde_rats 25.05.2008

So einfach kann man einen Speicherbereich (de)komprimieren:

#Ifndef FALSE
    #Define FALSE 0
#EndIf
#Ifndef TRUE
    #Define TRUE 1
#EndIf

#Inclib "fbgfx"

' Declaration of LZW en- and decoder of the fbgfx lib
Declare Function fb_hEncode  Lib "fbgfx" Alias "fb_hEncode" ( _
    Byval lpIn As Any Ptr, _
    Byval size As Integer, _
   Byval lpOut As Any Ptr, _
   Byval newsize As Integer Ptr _
   ) As  Integer

Declare Function fb_hDecode Lib "fbgfx" Alias "fb_hDecode" ( _
    Byval lpIn As Any Ptr, _
    Byval size As Integer, _
    Byval lpOut As Any Ptr, _
    Byval newsize As Integer Ptr _
    ) As  Integer

Function LZW_Encode (SrcMem As UByte Ptr, SrcLen As UInteger, ByRef DesMem As UByte Ptr, ByRef DesLen As UInteger, ByRef DesCRC As Integer) As Integer Export
    Dim As UInteger ret, crc

    DesLen = SrcLen * 1.25
    DesMem = Allocate(DesLen)

    For n As Integer = 0 To SrcLen - 1
        DesCRC += DesMem[n]
    Next

    ret = fb_hEncode(SrcMem, SrcLen, DesMem, @DesLen)
    If ret Then DeAllocate(DesMem): Return FALSE

    Return TRUE
End Function

Function LZW_Decode (SrcMem As UByte Ptr, SrcLen As UInteger, OrigCRC As UInteger, ByRef DesMem As UByte Ptr, ByRef DesLen As UInteger) As Integer Export
    Dim As UInteger ret, NewCRC

    For n As Integer = 0 To SrcLen - 1
        NewCRC += SrcMem[n]
    Next

    If NewCRC <> OrigCRC Then
        Return 0
    EndIf

    DesMem = Allocate(DesLen + 1)

    ret = fb_hDecode (SrcMem, SrcLen, DesMem, @DesLen)
    If ret Then DeAllocate(DesMem): Return FALSE

    Return TRUE
End Function

Zusätzliche Informationen und Funktionen
  • Das Code-Beispiel wurde am 25.05.2008 von Mitgliedcsde_rats angelegt.
  • Die aktuellste Version wurde am 25.05.2008 von Mitgliedcsde_rats gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen