📄 ximaenc.cpp
字号:
//bool CxImage::Load(LPCWSTR filename, DWORD imagetype)//{// /*FILE* hFile; //file handle to read the image// if ((hFile=_wfopen(filename, L"rb"))==NULL) return false;// bool bOK = Decode(hFile,imagetype);// fclose(hFile);*///// /* automatic file type recognition */// bool bOK = false;// if ( imagetype > 0 && imagetype < CMAX_IMAGE_FORMATS ){// FILE* hFile; //file handle to read the image// if ((hFile=_wfopen(filename,L"rb"))==NULL) return false;// bOK = Decode(hFile,imagetype);// fclose(hFile);// if (bOK) return bOK;// }//// char szError[256];// strcpy(szError,info.szLastError); //save the first error//// // if failed, try automatic recognition of the file...// FILE* hFile; //file handle to read the image// if ((hFile=_wfopen(filename,L"rb"))==NULL) return false;// bOK = Decode(hFile,CXIMAGE_FORMAT_UNKNOWN);// fclose(hFile);//// if (!bOK && imagetype > 0) strcpy(info.szLastError,szError); //restore the first error//// return bOK;//}/////////////////////////////////////////////////////////////////////////////////** * Loads an image from the application resources. * \param hRes: the resource handle returned by FindResource(). * \param imagetype: file format, see ENUM_CXIMAGE_FORMATS. * \param hModule: NULL for internal resource, or external application/DLL hinstance returned by LoadLibray. * \return true if everything is ok */bool CxImage::LoadResource(HRSRC hRes, DWORD imagetype, HMODULE hModule){ DWORD rsize=SizeofResource(hModule,hRes); HGLOBAL hMem=::LoadResource(hModule,hRes); if (hMem){ char* lpVoid=(char*)LockResource(hMem); if (lpVoid){ // FILE* fTmp=tmpfile(); doesn't work with network /*char tmpPath[MAX_PATH] = {0}; char tmpFile[MAX_PATH] = {0}; GetTempPath(MAX_PATH,tmpPath); GetTempFileName(tmpPath,"IMG",0,tmpFile); FILE* fTmp=fopen(tmpFile,"w+b"); if (fTmp){ fwrite(lpVoid,rsize,1,fTmp); fseek(fTmp,0,SEEK_SET); bool bOK = Decode(fTmp,imagetype); fclose(fTmp); DeleteFile(tmpFile); return bOK; }*/ CxMemFile fTmp((BYTE*)lpVoid,rsize); return Decode(&fTmp,imagetype); } } else strcpy(info.szLastError,"Unable to load resource!"); return false;}#endif //WIN32/////////////////////////////////////////////////////////////////////////////////** * Constructor from file name, see Load() * \param filename: file name * \param imagetype: file format, see ENUM_CXIMAGE_FORMATS */// // > filename: file name// > imagetype: specify the image format (CXIMAGE_FORMAT_BMP,...)// For UNICODE support: char -> TCHARCxImage::CxImage(const TCHAR * filename, DWORD imagetype)//CxImage::CxImage(const char * filename, DWORD imagetype){ Startup(imagetype); Load(filename,imagetype);}/////////////////////////////////////////////////////////////////////////////////** * Constructor from file handle, see Decode() * \param stream: file handle, with read access. * \param imagetype: file format, see ENUM_CXIMAGE_FORMATS */CxImage::CxImage(FILE * stream, DWORD imagetype){ Startup(imagetype); Decode(stream,imagetype);}/////////////////////////////////////////////////////////////////////////////////** * Constructor from CxFile object, see Decode() * \param stream: file handle (implemented using CxMemFile or CxIOFile), with read access. * \param imagetype: file format, see ENUM_CXIMAGE_FORMATS */CxImage::CxImage(CxFile * stream, DWORD imagetype){ Startup(imagetype); Decode(stream,imagetype);}/////////////////////////////////////////////////////////////////////////////////** * Constructor from memory buffer, see Decode() * \param buffer: memory buffer * \param size: size of buffer * \param imagetype: file format, see ENUM_CXIMAGE_FORMATS */CxImage::CxImage(BYTE * buffer, DWORD size, DWORD imagetype){ Startup(imagetype); CxMemFile stream(buffer,size); Decode(&stream,imagetype);}/////////////////////////////////////////////////////////////////////////////////** * Loads an image from memory buffer * \param buffer: memory buffer * \param size: size of buffer * \param imagetype: file format, see ENUM_CXIMAGE_FORMATS * \return true if everything is ok */bool CxImage::Decode(BYTE * buffer, DWORD size, DWORD imagetype){ CxMemFile file(buffer,size); return Decode(&file,imagetype);}/////////////////////////////////////////////////////////////////////////////////** * Loads an image from file handle. * \param hFile: file handle, with read access. * \param imagetype: file format, see ENUM_CXIMAGE_FORMATS * \return true if everything is ok */bool CxImage::Decode(FILE *hFile, DWORD imagetype){ CxIOFile file(hFile); return Decode(&file,imagetype);}/////////////////////////////////////////////////////////////////////////////////** * Loads an image from CxFile object * \param hFile: file handle (implemented using CxMemFile or CxIOFile), with read access. * \param imagetype: file format, see ENUM_CXIMAGE_FORMATS * \return true if everything is ok * \sa ENUM_CXIMAGE_FORMATS */bool CxImage::Decode(CxFile *hFile, DWORD imagetype){ if (imagetype==CXIMAGE_FORMAT_UNKNOWN){ DWORD pos = hFile->Tell();#if CXIMAGE_SUPPORT_BMP { CxImageBMP newima; newima.CopyInfo(*this); if (newima.Decode(hFile)) { Transfer(newima); return true; } else hFile->Seek(pos,SEEK_SET); }#endif#if CXIMAGE_SUPPORT_JPG { CxImageJPG newima; newima.CopyInfo(*this); if (newima.Decode(hFile)) { Transfer(newima); return true; } else hFile->Seek(pos,SEEK_SET); }#endif#if CXIMAGE_SUPPORT_ICO { CxImageICO newima; newima.CopyInfo(*this); if (newima.Decode(hFile)) { Transfer(newima); return true; } else hFile->Seek(pos,SEEK_SET); }#endif#if CXIMAGE_SUPPORT_GIF { CxImageGIF newima; newima.CopyInfo(*this); if (newima.Decode(hFile)) { Transfer(newima); return true; } else hFile->Seek(pos,SEEK_SET); }#endif#if CXIMAGE_SUPPORT_PNG { CxImagePNG newima; newima.CopyInfo(*this); if (newima.Decode(hFile)) { Transfer(newima); return true; } else hFile->Seek(pos,SEEK_SET); }#endif#if CXIMAGE_SUPPORT_TIF { CxImageTIF newima; newima.CopyInfo(*this); if (newima.Decode(hFile)) { Transfer(newima); return true; } else hFile->Seek(pos,SEEK_SET); }#endif#if CXIMAGE_SUPPORT_MNG { CxImageMNG newima; newima.CopyInfo(*this); if (newima.Decode(hFile)) { Transfer(newima); return true; } else hFile->Seek(pos,SEEK_SET); }#endif#if CXIMAGE_SUPPORT_TGA { CxImageTGA newima; newima.CopyInfo(*this); if (newima.Decode(hFile)) { Transfer(newima); return true; } else hFile->Seek(pos,SEEK_SET); }#endif#if CXIMAGE_SUPPORT_PCX { CxImagePCX newima; newima.CopyInfo(*this); if (newima.Decode(hFile)) { Transfer(newima); return true; } else hFile->Seek(pos,SEEK_SET); }#endif#if CXIMAGE_SUPPORT_WBMP { CxImageWBMP newima; newima.CopyInfo(*this); if (newima.Decode(hFile)) { Transfer(newima); return true; } else hFile->Seek(pos,SEEK_SET); }#endif#if CXIMAGE_SUPPORT_WMF && CXIMAGE_SUPPORT_WINDOWS { CxImageWMF newima; newima.CopyInfo(*this); if (newima.Decode(hFile)) { Transfer(newima); return true; } else hFile->Seek(pos,SEEK_SET); }#endif#if CXIMAGE_SUPPORT_J2K { CxImageJ2K newima; newima.CopyInfo(*this); if (newima.Decode(hFile)) { Transfer(newima); return true; } else hFile->Seek(pos,SEEK_SET); }#endif#if CXIMAGE_SUPPORT_JBG { CxImageJBG newima; newima.CopyInfo(*this); if (newima.Decode(hFile)) { Transfer(newima); return true; } else hFile->Seek(pos,SEEK_SET); }#endif#if CXIMAGE_SUPPORT_JASPER { CxImageJAS newima; newima.CopyInfo(*this); if (newima.Decode(hFile)) { Transfer(newima); return true; } else hFile->Seek(pos,SEEK_SET); }#endif }#if CXIMAGE_SUPPORT_BMP if (imagetype==CXIMAGE_FORMAT_BMP){ CxImageBMP newima; newima.CopyInfo(*this); if (newima.Decode(hFile)){ Transfer(newima); return true; } else { strcpy(info.szLastError,newima.GetLastError()); return false; } }#endif#if CXIMAGE_SUPPORT_JPG if (imagetype==CXIMAGE_FORMAT_JPG){ CxImageJPG newima; newima.CopyInfo(*this); // <ignacio> if (newima.Decode(hFile)){ Transfer(newima); return true; } else { strcpy(info.szLastError,newima.GetLastError()); return false; } }#endif#if CXIMAGE_SUPPORT_ICO if (imagetype==CXIMAGE_FORMAT_ICO){ CxImageICO newima; newima.CopyInfo(*this); if (newima.Decode(hFile)){ Transfer(newima); return true; } else { info.nNumFrames = newima.info.nNumFrames; strcpy(info.szLastError,newima.GetLastError()); return false; } }#endif#if CXIMAGE_SUPPORT_GIF if (imagetype==CXIMAGE_FORMAT_GIF){ CxImageGIF newima; newima.CopyInfo(*this); if (newima.Decode(hFile)){ Transfer(newima); return true; } else { info.nNumFrames = newima.info.nNumFrames; strcpy(info.szLastError,newima.GetLastError()); return false; } }#endif#if CXIMAGE_SUPPORT_PNG if (imagetype==CXIMAGE_FORMAT_PNG){ CxImagePNG newima; newima.CopyInfo(*this); if (newima.Decode(hFile)){ Transfer(newima); return true; } else { strcpy(info.szLastError,newima.GetLastError()); return false; } }#endif#if CXIMAGE_SUPPORT_TIF if (imagetype==CXIMAGE_FORMAT_TIF){ CxImageTIF newima; newima.CopyInfo(*this); if (newima.Decode(hFile)){ Transfer(newima); return true; } else { info.nNumFrames = newima.info.nNumFrames; strcpy(info.szLastError,newima.GetLastError()); return false; } }#endif#if CXIMAGE_SUPPORT_MNG if (imagetype==CXIMAGE_FORMAT_MNG){ CxImageMNG newima; newima.CopyInfo(*this); if (newima.Decode(hFile)){ Transfer(newima); return true; } else { info.nNumFrames = newima.info.nNumFrames; strcpy(info.szLastError,newima.GetLastError()); return false; } }#endif#if CXIMAGE_SUPPORT_TGA if (imagetype==CXIMAGE_FORMAT_TGA){ CxImageTGA newima; newima.CopyInfo(*this); if (newima.Decode(hFile)){ Transfer(newima); return true; } else { strcpy(info.szLastError,newima.GetLastError()); return false; } }#endif#if CXIMAGE_SUPPORT_PCX if (imagetype==CXIMAGE_FORMAT_PCX){ CxImagePCX newima; newima.CopyInfo(*this); if (newima.Decode(hFile)){ Transfer(newima); return true; } else { strcpy(info.szLastError,newima.GetLastError()); return false; } }#endif#if CXIMAGE_SUPPORT_WBMP if (imagetype==CXIMAGE_FORMAT_WBMP){ CxImageWBMP newima; newima.CopyInfo(*this); if (newima.Decode(hFile)){ Transfer(newima); return true; } else { strcpy(info.szLastError,newima.GetLastError()); return false; } }#endif#if CXIMAGE_SUPPORT_WMF && CXIMAGE_SUPPORT_WINDOWS // vho - WMF support if (imagetype == CXIMAGE_FORMAT_WMF){ CxImageWMF newima; newima.CopyInfo(*this); if (newima.Decode(hFile)){ Transfer(newima); return true; } else { strcpy(info.szLastError,newima.GetLastError()); return false; } }#endif#if CXIMAGE_SUPPORT_J2K if (imagetype==CXIMAGE_FORMAT_J2K){ CxImageJ2K newima; newima.CopyInfo(*this); if (newima.Decode(hFile)){ Transfer(newima); return true; } else { strcpy(info.szLastError,newima.GetLastError()); return false; } }#endif#if CXIMAGE_SUPPORT_JBG if (imagetype==CXIMAGE_FORMAT_JBG){ CxImageJBG newima; newima.CopyInfo(*this); if (newima.Decode(hFile)){ Transfer(newima); return true; } else { strcpy(info.szLastError,newima.GetLastError()); return false; } }#endif#if CXIMAGE_SUPPORT_JASPER if ( #if CXIMAGE_SUPPORT_JP2 imagetype==CXIMAGE_FORMAT_JP2 || #endif #if CXIMAGE_SUPPORT_JPC imagetype==CXIMAGE_FORMAT_JPC || #endif #if CXIMAGE_SUPPORT_PGX imagetype==CXIMAGE_FORMAT_PGX || #endif #if CXIMAGE_SUPPORT_PNM imagetype==CXIMAGE_FORMAT_PNM || #endif #if CXIMAGE_SUPPORT_RAS imagetype==CXIMAGE_FORMAT_RAS || #endif false ){ CxImageJAS newima; newima.CopyInfo(*this); if (newima.Decode(hFile,imagetype)){ Transfer(newima); return true; } else { strcpy(info.szLastError,newima.GetLastError()); return false; } }#endif strcpy(info.szLastError,"Decode: Unknown or wrong format"); return false;}/////////////////////////////////////////////////////////////////////////////////** * Loads an image from CxFile object * \param hFile: file handle (implemented using CxMemFile or CxIOFile), with read access. * \param imagetype: file format, see ENUM_CXIMAGE_FORMATS * \return true if everything is ok * \sa ENUM_CXIMAGE_FORMATS */bool CxImage::CheckFormat(BYTE * buffer, DWORD size, basic_image_information *basic_info){ create_basic_image_information(CXIMAGE_FORMAT_UNKNOWN,0,0,basic_info);#if CXIMAGE_SUPPORT_BMP { if (CxImageBMP::CheckFormat(buffer,size,basic_info)) return true; }#endif#if CXIMAGE_SUPPORT_JPG { if (CxImageJPG::CheckFormat(buffer,size,basic_info)) return true; }#endif/*#if CXIMAGE_SUPPORT_ICO { if (CxImageICO::CheckFormat(buffer,size,basic_info)) return true; }#endif*/#if CXIMAGE_SUPPORT_GIF { if (CxImageGIF::CheckFormat(buffer,size,basic_info)) return true; }#endif#if CXIMAGE_SUPPORT_PNG { if (CxImagePNG::CheckFormat(buffer,size,basic_info)) return true; }#endif/*#if CXIMAGE_SUPPORT_TIF { if (CxImageTIF::CheckFormat(buffer,size,basic_info)) return true; }#endif*//*#if CXIMAGE_SUPPORT_MNG { if (CxImageMNG::CheckFormat(buffer,size,basic_info)) return true; }#endif*/#if CXIMAGE_SUPPORT_TGA { if (CxImageTGA::CheckFormat(buffer,size,basic_info)) return true; }#endif/*#if CXIMAGE_SUPPORT_PCX { if (CxImagePCX::CheckFormat(buffer,size,basic_info)) return true; }#endif*//*#if CXIMAGE_SUPPORT_WBMP { if (CxImageWBMP::CheckFormat(buffer,size,basic_info)) return true; }#endif*//*#if CXIMAGE_SUPPORT_WMF && CXIMAGE_SUPPORT_WINDOWS { if (CxImageWMF::CheckFormat(buffer,size,basic_info)) return true; }#endif*//*#if CXIMAGE_SUPPORT_J2K { if (CxImageJ2K::CheckFormat(buffer,size,basic_info)) return true; }#endif*//*#if CXIMAGE_SUPPORT_JBG { if (CxImageJBG::CheckFormat(buffer,size,basic_info)) return true; }#endif*//*#if CXIMAGE_SUPPORT_JASPER { if (CxImageJasper::CheckFormat(buffer,size,basic_info)) return true; }#endif*/ return false;}////////////////////////////////////////////////////////////////////////////////#endif //CXIMAGE_SUPPORT_DECODE////////////////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -