Запатентованная библиотека для сжатия данных без потерь с использованием
алгоритма Deflate.
Вебсайт: http://www.zlib.net
Поддерживаемые платформы: Win32, Linux, DOS
Заголовки: zlib.bi
Версия заголовков: 1.2.6
Примеры: в examples/compression/
Пример
Пример загрузки\сохранения
PNG ,
базирующийся на
ZLIB: http://www.freebasic.net/forum/viewtopic.php?t=3936
Пример сжатия в памяти:
'' Zlib Пример сжатия/распаковки, от 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 входных данных, после распаковки,
'' мы сможем ее проверить.
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, перед распаковкой,
для того чтобы убедиться,
'' что распаковка работает.
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 : FAILED"
Else
Print "crc32 checksum : PASSED"
End If
'' Освобождаем буферы, используемые в тесте.
Deallocate(src)
Deallocate(dest)
Print
Print "Press any key to end . . . "
Sleep