BOOL fipImage::loadFromMemory(fipMemoryIO& memIO, int flag) { FREE_IMAGE_FORMAT fif = FIF_UNKNOWN; // check the file signature and get its format fif = memIO.getFileType(); if((fif != FIF_UNKNOWN) && FreeImage_FIFSupportsReading(fif)) { // Free the previous dib if(_dib) { FreeImage_Unload(_dib); } // Load the file _dib = memIO.load(fif, flag); _bHasChanged = TRUE; if(_dib == NULL) return FALSE; return TRUE; } return FALSE; }
BOOL fipMultiPage::open(fipMemoryIO& memIO, int flags) { // try to guess the file format from the filename FREE_IMAGE_FORMAT fif = memIO.getFileType(); // check for supported file types if((fif == FIF_UNKNOWN) || (fif != FIF_TIFF) && (fif != FIF_ICO) && (fif != FIF_GIF)) return FALSE; // open the stream _mpage = FreeImage_LoadMultiBitmapFromMemory(fif, memIO, flags); return (NULL != _mpage ) ? TRUE : FALSE; }
BOOL fipImage::saveToMemory(FREE_IMAGE_FORMAT fif, fipMemoryIO& memIO, int flag) const { BOOL bSuccess = FALSE; if(fif != FIF_UNKNOWN ) { // Check that the dib can be saved in this format BOOL bCanSave; FREE_IMAGE_TYPE image_type = FreeImage_GetImageType(_dib); if(image_type == FIT_BITMAP) { // standard bitmap type WORD bpp = FreeImage_GetBPP(_dib); bCanSave = (FreeImage_FIFSupportsWriting(fif) && FreeImage_FIFSupportsExportBPP(fif, bpp)); } else { // special bitmap type bCanSave = FreeImage_FIFSupportsExportType(fif, image_type); } if(bCanSave) { bSuccess = memIO.save(fif, _dib, flag); return bSuccess; } } return bSuccess; }