freeimage.h

FreeImage_ZLibGZip

DLL_API DWORD DLL_CALLCONV FreeImage_ZLibGZip(BYTE *target, DWORD target_size, BYTE
*source, DWORD source_size);

Comprime un buffer de entrada source en un buffer de salida target, usando la librería ZLib. A la entrada, target_size es el tamaño total del buffer de destino, que debe ser al menos un 0.1% más grande que source_size más 24 bytes. Si tiene éxito, el buffer target contendrá una configuración compatible con GZIP.

BYTE *data = NULL;
DWORD original_size = 0;
// ...
data = (BYTE*)malloc(original_size * sizeof(BYTE));
// ...
// initial size is original plus overhead & gzip-header
DWORD compressed_size =
 (DWORD)((double) original_size + (0.1 * (double) original_size) + 24);
BYTE *compressed_data = (BYTE*)malloc(compressed_size * sizeof(BYTE));
compressed_size =
 FreeImage_ZLibGZip(compressed_data, compressed_size, data, original_size);
// now compressed_data contains 'compressed_size' bytes of GZIP compressed data
// write data to a stream
// ...
free(compressed_data);

Esta función se usa normalmente en conjunción con funciones de entrada/salida de memoria, si se usa para comprimir algo para enviarlo comprimido en formato gzip a través de internet (donde un esquema tipo zip no es aceptado). Esquemas a medida o más complejos puede ser obtenidos usando el constructor CRC32 en conjunción con la función de compresión existente zip (ver la función FreeImage_ZLibCRC32).