FreeBASIC マニュアルのトップに戻る

FreeBASIC ExtLibzlib

目次→その他→ライブラリ・ヘッダー索引zlib←オリジナル・サイト
目次→FreeBASIC のハッキング→FreeBASIC でのハッキングのための情報外部ライブラリ索引zlib←オリジナル・サイト

zlib 左にメニュー・フレームが表示されていない場合は、ここをクリックして下さい

←リンク元に戻る プログラム開発関連に戻る

ロスのないデータ圧縮ライブラリで、特許による制約を受けない Deflate アルゴリズムを使っています。

ウエブ・サイト: http://www.zlib.net
利用できる環境: Win32, Linux, DOS
include するヘッダー: zlib.bi
ヘッダのバージョン: 1.2.8
例: examples/compression/

例:
zlib ベースの PNG を、保存して呼出すコード: https://www.freebasic.net/forum/viewtopic.php?t=3936

メモリ内で圧縮する例:
'' Zlib 圧縮/解凍の例, by yetifoot

#include once "zlib.bi"

Dim As Integer errlev

'' このテスト用データのサイズ(バイト)
Dim As Integer src_len = 100000

Print "ZLib test - Version " & *zlibVersion()
Print
Print "Test data size      : " & src_len & " bytes."

'' 圧縮データ用の目的地バッファーのサイズは、
'' compressBound 関数で計算します。
Dim As Integer dest_len = compressBound(src_len)

'' 必要なメモリを割り当てます。
Dim As UByte Ptr src = Allocate(src_len)
Dim As UByte Ptr dest = Allocate(dest_len)

'' src バッファーを、乱数で、圧縮できるだけのデータで満たします。
For i As Integer = 0 To src_len - 1
    src[i] = Rnd * 4
Next

'' 入力データの crc32 チェックサムを格納します。
'' これを使って、uncompression の働きを確認できます。
Dim As UInteger crc = crc32(0, src, src_len)

'' 圧縮を実行します。dest_len は、そのアドレスとして渡されます。
'' 関数は、圧縮データのサイズを戻り値として含んでいるからです。
errlev = compress(dest, @dest_len, src, src_len)
If errlev <> 0 Then
    '' 関数が、0 以外の値を返した場合は、エラーが発生しています。
    Print "**** Error during compress - code " & errlev & " ****"
End If
Print "Compressed to       : " & dest_len & " bytes."

'' 注意: 通常のプログラムの使い方では、
'' 解凍サイズを伝えられるように src_len を保存します。
'' しかし、この例では、src_len のままで残しています。
'' 圧縮したデータ・サイズの dest_len も同じです。

'' 解凍する前に、src バッファーを一掃します。
'' こうすると、解凍が働いたかチェックすることができます。
For i As Integer = 0 To src_len - 1
    src[i] = 0
Next

'' 解凍を実行します。ここでは、src にデータを解凍します。
'' src_len は、そのアドレスとして渡されます。
'' 関数は、解凍したデータのサイズを含むからです。
errlev = uncompress(src, @src_len, dest, dest_len)
If errlev <> 0 Then
    '' 関数が、0 以外の値を返した場合は、エラーが発生しています。
    Print "**** Error during uncompress - code " & errlev & " ****"
End If
Print "Uncompressed to     : " & src_len & " bytes."

'' 解凍されたデータのチェックサムが、オリジナル・データと一致することを確認してください。
If crc <> crc32(0, src, src_len) Then
    Print "crc32 checksum      : 失敗"
Else
    Print "crc32 checksum      : 成功"
End If

'' テストで使われたバッファーを解放します。
Deallocate(src)
Deallocate(dest)

Print
Print "任意のキーを押すと終了します . . . "
Sleep

ライブラリ・ヘッダー索引に戻る
←リンク元に戻る プログラム開発関連に戻る

ページ歴史:2014-11-05 10:15:48
日本語翻訳:WATANABE Makoto、原文著作者:SirMud

ホームページのトップに戻る

表示-非営利-継承