BOOL fipImage::saveU(const wchar_t* lpszPathName, int flag) const { FREE_IMAGE_FORMAT fif = FIF_UNKNOWN; BOOL bSuccess = FALSE; // Try to guess the file format from the file extension fif = FreeImage_GetFIFFromFilenameU(lpszPathName); 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 = FreeImage_SaveU(fif, _dib, lpszPathName, flag); return bSuccess; } } return bSuccess; }
void FI(saveImageFile)(const Bitmap& bitmap, const std::wstring& filename) { std::string utf8Filename = wstringToUTF8(filename); FREE_IMAGE_FORMAT fif = FreeImage_GetFIFFromFilename(utf8Filename.c_str()); FIBITMAP* fib = bitmapToFIB(bitmap, fif); #ifdef GOSU_IS_WIN FreeImage_SaveU(fif, fib, filename.c_str()); #else FreeImage_Save(fif, fib, utf8Filename.c_str()); #endif FreeImage_Unload(fib); checkForFreeImageErrors(); }
bool FreeImage::saveToFile( const UTF8String & fileName, SavingFormat savingFormat, unsigned int quality ) { #ifdef WIN32 WString fileNameW( fileName ); #endif load(); #ifdef WIN32 bool r( FreeImage_SaveU( ( FREE_IMAGE_FORMAT ) savingFormat, this -> freeImage, fileNameW.toCString(), quality ) ); #else bool r( FreeImage_Save( ( FREE_IMAGE_FORMAT ) savingFormat, this -> freeImage, fileName.toCString(), quality ) ); #endif if ( r ) { log( String( "Success writing file : " ) << fileName ); return true; } else { error( String( "error writing file : " ) << fileName ); return false; } }
static INT_PTR serviceSave(WPARAM wParam, LPARAM lParam) { IMGSRVC_INFO *isi = (IMGSRVC_INFO *)wParam; FREE_IMAGE_FORMAT fif; BOOL fUnload = FALSE; FIBITMAP *dib = NULL; if(isi) { if(isi->cbSize != sizeof(IMGSRVC_INFO)) return 0; if(isi->szName || isi->wszName) { if(isi->fif == FIF_UNKNOWN) { if(lParam & IMGL_WCHAR) fif = FreeImage_GetFIFFromFilenameU(isi->wszName); else fif = FreeImage_GetFIFFromFilename(isi->szName); } else fif = isi->fif; if(fif == FIF_UNKNOWN) fif = FIF_BMP; // default, save as bmp if(isi->hbm != 0 && (isi->dwMask & IMGI_HBITMAP) && !(isi->dwMask & IMGI_FBITMAP)) { // create temporary dib, because we got a HBTIMAP passed fUnload = TRUE; FI_CorrectBitmap32Alpha(isi->hbm, FALSE); dib = FreeImage_CreateDIBFromHBITMAP(isi->hbm); } else if(isi->dib != NULL && (isi->dwMask & IMGI_FBITMAP) && !(isi->dwMask & IMGI_HBITMAP)) dib = isi->dib; int ret = 0; if(dib) { int flags = HIWORD(lParam); if(fif == FIF_PNG || fif == FIF_BMP || fif == FIF_JNG) { if(lParam & IMGL_WCHAR) ret = FreeImage_SaveU(fif, dib, isi->wszName, flags); else ret = FreeImage_Save(fif, dib, isi->szName, flags); } else { FIBITMAP *dib_new = FreeImage_ConvertTo24Bits(dib); if(lParam & IMGL_WCHAR) ret = FreeImage_SaveU(fif, dib_new, isi->wszName, flags); else ret = FreeImage_Save(fif, dib_new, isi->szName, flags); FreeImage_Unload(dib_new); } if(fUnload) FreeImage_Unload(dib); return ret; } return 0; } } return 0; }