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).