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