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); }