FIBITMAP* Surface_Load(char* full_name) { // load FREE_IMAGE_FORMAT fif = FreeImage_GetFIFFromFilename(full_name); FIBITMAP* map = FreeImage_Load(fif,full_name); if (0==map) return NULL; // check if already 32bpp if (32==FreeImage_GetBPP(map)) return map; // convert FIBITMAP* map32 = FreeImage_ConvertTo32Bits(map); if (0==map32) map32 = map; else FreeImage_Free(map); return map32; }
u32* Surface_Load(char* name, u32& w, u32& h) { if (strchr(name,'.')) *(strchr(name,'.')) = 0; // detect format string256 full; if (!Surface_Detect(full,name)) return NULL; FIBITMAP* map32 = Surface_Load(full); h = FreeImage_GetHeight (map32); w = FreeImage_GetWidth (map32); u32 memSize = w*h*4; u32* memPTR = (u32*)(xr_malloc(memSize)); u32* memDATA = (u32*)(FreeImage_GetScanLine(map32,0)); CopyMemory (memPTR,memDATA,memSize); FreeImage_Free (map32); return memPTR; }
int __cdecl main(int argc, char *argv[]) { FreeImageIO io; io.read_proc = _ReadProc; io.write_proc = _WriteProc; io.seek_proc = _SeekProc; io.tell_proc = _TellProc; FILE *file = fopen("d:\\images\\money-256.bmp", "rb"); if (file != NULL) { FIBITMAP *dib = FreeImage_LoadBMPFromHandle(&io, (fi_handle)file); FreeImage_Free(dib); fclose(file); } return 0; }