freeimage.h
FreeImage_AcquireMemory
DLL_API BOOL DLL_CALLCONV FreeImage_AcquireMemory(FIMEMORY *stream, BYTE **data, DWORD *size_in_bytes);
Proporciona un buffer de acceso directo a un canal de memoria. A la entrada, stream es el canal de memoria de destino, el valor retornado es un puntero al buffer de memoria. El valor retornado en size_in_bytes es el tamaño del buffer en bytes. la función retorna TRUE si tiene éxito, y FALSE en caso contrario.
Cuando el canal de memoria es manejado internamente por FreeImage, el puntero a los datos retornado por FreeImage_AcquireMemory será inválido tan pronto como se llame a FreeImage_SaveToMemory.
void testAcquireMemIO(const char *lpszPathName) {
FIMEMORY *hmem = NULL;
// load a regular file
FREE_IMAGE_FORMAT fif = FreeImage_GetFileType(lpszPathName);
FIBITMAP *dib = FreeImage_Load(fif, lpszPathName, 0);
// open and allocate a memory stream
hmem = FreeImage_OpenMemory();
// save the image to a memory stream
FreeImage_SaveToMemory(FIF_PNG, dib, hmem, PNG_DEFAULT);
FreeImage_Unload(dib);
// get the buffer from the memory stream
BYTE *mem_buffer = NULL;
DWORD size_in_bytes = 0;
FreeImage_AcquireMemory(hmem, &mem_buffer, &size_in_bytes);
// save the buffer to a file stream
FILE *stream = fopen("buffer.png", "wb");
if(stream) {
fwrite(mem_buffer, sizeof(BYTE), size_in_bytes, stream);
fclose(stream);
}
// close and free the memory stream
FreeImage_CloseMemory(hmem);
}