static bool ReduceOneMapFile( LPCTSTR lpszInFile, LPCTSTR lpszOutFile, PICTSAMPLEPARAM &fp, int level) { BOOL bRet; CMemBlock memInput( Size4MB ); CMemBlock memOutput( Size2MB ); CRuntimeClass *pInRT; CRuntimeClass *pOutRT = NULL; CPicture *pInPict; CPicture *pOutPict; CFile fileInput; CFile fileOutput; CPictSample filter; if( fileInput.Open( lpszInFile, CFile::modeRead | CFile::typeBinary ) ) { pInRT = ::GetWritablePictureType( &fileInput ); if( NULL == pOutRT ) pOutRT = pInRT; if( NULL != pInRT && NULL != ( pInPict = (CPicture*) pInRT->CreateObject() ) ) { if( fileOutput.Open( lpszOutFile, CFile::modeReadWrite | CFile::modeCreate | CFile::typeBinary ) ) { VERIFY( NULL != ( pOutPict = (CPicture*) pOutRT->CreateObject() ) ); if( pInPict->Attach( &fileInput ) && pInPict->ReadHeader() ) { if( pOutPict->Attach( &fileOutput ) ) { switch( pInPict->GetBitsPerSample() ) { case 1 : fp.sampleParam = 0; break; // case 8 : fp.sampleParam = level > 2 ? 3 : 0; break; // #HK050104 // case 8 : fp.sampleParam = level <= 2 ? 3 : 0; break; // #HK050120 case 8 : fp.sampleParam = 3; break; // #HK050120 } filter.SetFilterData( &fp.p ); bRet = filter.Filter( pInPict, pOutPict ); pOutPict->Detach(); } pInPict->Detach(); } fileOutput.Close(); delete pOutPict; } delete pInPict; } fileInput.Close(); } return TRUE == bRet ? 1 : 0; }
int MapInfo( const int argc, const char *argv[], istream& s_in, ostream& s_out, ostream& s_err ) { int c; bool bRaw = false; LPCTSTR optarg; int optind = 1; while( EOF != ( c = getopt( argc, argv, "rg?", optind, optarg ) ) ) { switch( c ) { case 'r' : bRaw = true; break; case 'g' : setlocale( LC_ALL, _T("German") ); break; case '?' : Usage( s_err ); return TRUE; } } if( argc < optind ) { Usage( s_err ); return FALSE; } CMemBlock memPict( Size4MB ); CRuntimeClass *pRT; CPicture *pPict; CFile fileInput; for( ; optind < argc; optind++ ) { if( fileInput.Open( argv[optind], CFile::modeRead | CFile::typeBinary ) ) { pRT = ::GetPictureType( &fileInput ); if( NULL != pRT && NULL != ( pPict = (CPicture*) pRT->CreateObject() ) ) { VERIFY( pPict->Attach( &fileInput ) && pPict->ReadHeader() ); pPict->DumpTags( s_out, bRaw ); pPict->Detach(); delete pPict; } else { s_err << _T("cannot determine FileType: ") << argv[optind] << endl; } fileInput.Close(); } else { s_err << _T("cannot open File: ") << argv[optind] << endl; } } return TRUE; }