freeimage.h

FreeImage_ZLibUncompress

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

Descomprime un buffer de entrada source en el 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 tener el tamaño suficiente para contener los datos descomprimidos completos. El tamaño de los datos descomprimidos debe ser guardado previamente por el compresor y transmitido al descompresor mediante algún mecanismo externo a la librería de compresión.

La función retorna el tamaño actual del buffer descomprimido, o devuelve 0 si se ha producido un error.

BYTE *data = NULL;
DWORD original_size = 0, compressed_size = 0;
// ...
// read data from disk
fread(&original_size, sizeof(DWORD), 1, stream);
fread(&compressed_size, sizeof(DWORD), 1, stream);
data = (BYTE*)malloc(original_size * sizeof(BYTE));
compressed_data = (BYTE*)malloc(compressed_size * sizeof(BYTE));
fread(compressed_data, sizeof(BYTE), compressed_size, stream);
// decompress data
DWORD size = 0;
size = FreeImage_ZLibUncompress(data, original_size, compressed_data,
    compressed_size);
assert(size == original_size);
free(compressed_data);