// SegDemo.cpp : Defines the class behaviors for the application. // #include "stdafx.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CSegDemoApp BEGIN_MESSAGE_MAP(CSegDemoApp, CWinApp) //{{AFX_MSG_MAP(CSegDemoApp) ON_COMMAND(ID_APP_ABOUT, OnAppAbout) ON_COMMAND(ID_FILE_OPENBITMAP, OnFileOpenBitmap) ON_COMMAND(ID_EDIT_PASTE, OnEditPaste) ON_UPDATE_COMMAND_UI(ID_EDIT_PASTE, OnUpdateEditPaste) ON_COMMAND(ID_FILE_OPENMRC, OnFileOpenMrc) ON_COMMAND(ID_FILE_SAVEALL, OnFileSaveall) //}}AFX_MSG_MAP // Standard file based document commands ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew) ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CSegDemoApp construction CSegDemoApp::CSegDemoApp() { // TODO: add construction code here, m_bOpenMRC = FALSE; m_MrcOptions.nPictureQFactor = 50; m_MrcOptions.nGrayscale8BitFactor = 50; m_MrcOptions.nMaskCoder = MRC_MASK_COMPRESSION_JBIG; m_MrcOptions.nPictureCoder = MRC_PICTURE_COMPRESSION_JPEG_YUV411; m_MrcOptions.nTextCoder2Bit = MRC_TEXT_COMPRESSION_JBIG_2BIT; m_MrcOptions.nGrayscale8BitCoder = MRC_GRAYSCALE_COMPRESSION_GRAYSCALE_JPEG_8BIT; m_MrcOptions.nGrayscale2BitCoder = MRC_GRAYSCALE_COMPRESSION_JBIG_2BIT; memset(&m_PdfOptions, 0, sizeof(m_PdfOptions)); m_PdfOptions.nPictureCoder = MRC_PDF_PICTURE_COMPRESSION_YUV411 - MRC_PDF_PICTURE_COMPRESSION_JPEG; m_PdfOptions.nPictureQFactor = 5; memset(&m_SegementOptions, 0, sizeof(m_SegementOptions)); m_SegementOptions.uBackgroundThreshold = 15; m_SegementOptions.uSegmentQuality = 50; m_SegementOptions.uColorThreshold = 25; m_SegementOptions.uCleanSize = 7; m_SegementOptions.uCombineThreshold = 100; m_SegementOptions.uFlags = 0; m_SegementOptions.uFlags = SGM_FAVOR_TWOBIT | SGM_WITHOUTBKGRND; memset(&m_ColorsOptions, 0, sizeof(m_CombineOptions)); m_ColorsOptions.crBackground = RGB(255, 255, 255); m_ColorsOptions.crForeground = RGB(0, 0, 0); memset(&m_CombineOptions, 0, sizeof(m_CombineOptions)); m_CombineOptions.uCombineFlags = COMBINE_TRY; m_CombineOptions.uCombineFactor = 30; // Place all significant initialization in InitInstance m_PDFXResolution = 150; m_PDFYResolution = 150; m_bShowFDFOptionsDlg = TRUE; } ///////////////////////////////////////////////////////////////////////////// // The one and only CSegDemoApp object CSegDemoApp theApp; void ExitMFCApp() { // Same as double-clicking on main window close box. ASSERT(AfxGetMainWnd() != NULL); AfxGetMainWnd()->SendMessage(WM_CLOSE); } ///////////////////////////////////////////////////////////////////////////// // CSegDemoApp initialization BOOL CSegDemoApp::InitInstance() { AfxEnableControlContainer(); // Standard initialization // If you are not using these features and wish to reduce the size // of your final executable, you should remove from the following // the specific initialization routines you do not need. #ifdef _AFXDLL Enable3dControls(); // Call this when using MFC in a shared DLL #else Enable3dControlsStatic(); // Call this when linking to MFC statically #endif m_iPage = 1; CoInitialize(NULL); // Change the registry key under which our settings are stored. // TODO: You should modify this string to be something appropriate // such as the name of your company or organization. SetRegistryKey(_T("Local AppWizard-Generated Applications")); LoadStdProfileSettings(); // Load standard INI file options (including MRU) // Register the application's document templates. Document templates // serve as the connection between documents, frame windows and views. CMultiDocTemplate* pDocTemplate; pDocTemplate = new CMultiDocTemplate( IDR_SEGDEMTYPE, RUNTIME_CLASS(CSegDemoDoc), RUNTIME_CLASS(CChildFrame), // custom MDI child frame RUNTIME_CLASS(CSegDemoView)); AddDocTemplate(pDocTemplate); // create main MDI Frame window CMainFrame* pMainFrame = new CMainFrame; if (!pMainFrame->LoadFrame(IDR_MAINFRAME)) return FALSE; m_pMainWnd = pMainFrame; // Parse command line for standard shell commands, DDE, file open CCommandLineInfo cmdInfo; ParseCommandLine(cmdInfo); //Do not create document at startup if ( CCommandLineInfo::FileNew == cmdInfo.m_nShellCommand ) { cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing; } // Dispatch commands specified on the command line if (!ProcessShellCommand(cmdInfo)) return FALSE; HRESULT hr; m_pRasterIO=NULL; hr = CoCreateInstance( CLSID_LEADRasterIO, NULL, CLSCTX_ALL, IID_ILEADRasterIO, (void**)&m_pRasterIO ); if (FAILED(hr)){DisplayLEADError(ERROR_INV_PARAMETER);ExitMFCApp(); return FALSE;} m_pRasterIO->EnableMethodErrors = FALSE; m_pRasterKrnDlg = NULL; hr = CoCreateInstance( CLSID_LEADRasterDlgKrn, NULL, CLSCTX_ALL, IID_ILEADRasterDlgKrn, (void**)&m_pRasterKrnDlg ); if (FAILED(hr)){DisplayLEADError(ERROR_INV_PARAMETER);ExitMFCApp(); return FALSE;} m_pRasterKrnDlg->InitDlg(INIT_WITH_COLOR); m_pRasterKrnDlg->EnableMethodErrors = FALSE; m_pRasterFileDlg=NULL; hr = CoCreateInstance( CLSID_LEADRasterDlgFile, NULL, CLSCTX_ALL, IID_ILEADRasterDlgFile, (void**)&m_pRasterFileDlg ); if (FAILED(hr)){DisplayLEADError(ERROR_INV_PARAMETER);ExitMFCApp(); return FALSE;} m_pRasterFileDlg->EnableMethodErrors = FALSE; m_pRasterClrDlg=NULL; hr = CoCreateInstance( CLSID_LEADRasterDlgClr, NULL, CLSCTX_ALL, IID_ILEADRasterDlgClr, (void**)&m_pRasterClrDlg ); if (FAILED(hr)){DisplayLEADError(ERROR_INV_PARAMETER);ExitMFCApp(); return FALSE;} m_pRasterClrDlg->EnableMethodErrors = FALSE; m_pRasterImgDlg=NULL; hr = CoCreateInstance( CLSID_LEADRasterDlgImg, NULL, CLSCTX_ALL, IID_ILEADRasterDlgImg, (void**)&m_pRasterImgDlg ); if (FAILED(hr)){DisplayLEADError(ERROR_INV_PARAMETER);ExitMFCApp(); return FALSE;} m_pRasterImgDlg->EnableMethodErrors = FALSE; m_pRasterProc=NULL; hr = CoCreateInstance( CLSID_LEADRasterProcess, NULL, CLSCTX_ALL, IID_ILEADRasterProcess, (void**)&m_pRasterProc ); if (FAILED(hr)){DisplayLEADError(ERROR_INV_PARAMETER);ExitMFCApp(); return FALSE;} m_pRasterProc->EnableMethodErrors = FALSE; // The main window has been initialized, so show and update it. pMainFrame->ShowWindow(m_nCmdShow); pMainFrame->UpdateWindow(); return TRUE; } ///////////////////////////////////////////////////////////////////////////// // CAboutDlg dialog used for App About class CAboutDlg : public CDialog { public: CAboutDlg(); // Dialog Data //{{AFX_DATA(CAboutDlg) enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: //{{AFX_MSG(CAboutDlg) //}}AFX_MSG DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { //{{AFX_DATA_INIT(CAboutDlg) //}}AFX_DATA_INIT } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAboutDlg) //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) //{{AFX_MSG_MAP(CAboutDlg) //}}AFX_MSG_MAP END_MESSAGE_MAP() // App command to run the dialog void CSegDemoApp::OnAppAbout() { CAboutDlg aboutDlg; aboutDlg.DoModal(); } ///////////////////////////////////////////////////////////////////////////// // PDFDPIOptions dialog class PDFDPIOptions : public CDialog { // Construction public: PDFDPIOptions(CWnd* pParent = NULL); // standard constructor // Dialog Data //{{AFX_DATA(PDFDPIOptions) enum { IDD = IDD_PDFDPIOPTIONS }; int m_edtPDFYRes; int m_edtPDFXRes; //}}AFX_DATA // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(PDFDPIOptions) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: // Generated message map functions //{{AFX_MSG(PDFDPIOptions) // NOTE: the ClassWizard will add member functions here //}}AFX_MSG DECLARE_MESSAGE_MAP() }; PDFDPIOptions::PDFDPIOptions(CWnd* pParent /*=NULL*/) : CDialog(PDFDPIOptions::IDD, pParent) { //{{AFX_DATA_INIT(PDFDPIOptions) m_edtPDFYRes = 150; m_edtPDFXRes = 150; //}}AFX_DATA_INIT } void PDFDPIOptions::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(PDFDPIOptions) DDX_Text(pDX, IDC_EDIT_YRES, m_edtPDFYRes); DDV_MinMaxInt(pDX, m_edtPDFYRes, 10, 1000); DDX_Text(pDX, IDC_EDIT_XRES, m_edtPDFXRes); DDV_MinMaxInt(pDX, m_edtPDFXRes, 10, 1000); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(PDFDPIOptions, CDialog) //{{AFX_MSG_MAP(PDFDPIOptions) // NOTE: the ClassWizard will add message map macros here //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // PDFDPIOptions message handlers ///////////////////////////////////////////////////////////////////////////// // CSegDemoApp message handlers void CSegDemoApp::OnFileOpenBitmap() { int nRet; m_bOpenMRC = FALSE; m_pRasterIO->PDFXResolution = m_PDFXResolution; m_pRasterIO->PDFYResolution = m_PDFYResolution; m_pRasterFileDlg->PutFilter(""); m_pRasterFileDlg->PutFileDlgFlags(0); m_pRasterFileDlg->PutFileName(""); m_pRasterFileDlg->PutDialogTitle("Open File"); if (m_bShowFDFOptionsDlg == TRUE) { m_pRasterFileDlg->PutUIFlags(OPEN_SHOW_MULTIPAGE | OPEN_SHOW_PREVIEW | OPEN_USEFILESTAMP | OPEN_SHOW_FILEINFO | OPEN_SHOW_LOADOPTIONS | OPEN_SHOW_PROGRESSIVE | OPEN_SHOW_LOADROTATED | OPEN_SHOW_LOADCOMPRESSED); } else { m_pRasterFileDlg->PutUIFlags(OPEN_SHOW_MULTIPAGE | OPEN_SHOW_PREVIEW | OPEN_USEFILESTAMP | OPEN_SHOW_FILEINFO | OPEN_SHOW_PDFOPTIONS | OPEN_SHOW_LOADOPTIONS | OPEN_SHOW_PROGRESSIVE | OPEN_SHOW_LOADROTATED | OPEN_SHOW_LOADCOMPRESSED); } nRet = m_pRasterFileDlg->ShowOpenDlg((long)m_pMainWnd->m_hWnd); if(nRet == 0 && m_pRasterFileDlg->GetDialogStatus() ==DLG_OK) { m_iPage = (short)m_pRasterFileDlg->GetPageNumber(); m_pRasterIO->GetFileInfo(NULL, m_pRasterFileDlg->GetFileName(), m_iPage, 0); if (m_bShowFDFOptionsDlg == TRUE && m_pRasterIO->InfoFormat == FILE_RAS_PDF) { PDFDPIOptions DPIOptions; DPIOptions.m_edtPDFXRes = m_pRasterFileDlg->PDFXResolution; DPIOptions.m_edtPDFYRes = m_pRasterFileDlg->PDFYResolution; nRet = DPIOptions.DoModal(); if (nRet != 2) { m_PDFXResolution = DPIOptions.m_edtPDFXRes; m_PDFYResolution = DPIOptions.m_edtPDFXRes; m_bShowFDFOptionsDlg = FALSE; } } else { m_PDFXResolution = m_pRasterFileDlg->PDFXResolution; m_PDFYResolution = m_pRasterFileDlg->PDFYResolution; } m_pRasterIO->PDFXResolution = m_PDFXResolution; m_pRasterIO->PDFYResolution = m_PDFYResolution; m_pRasterIO->PDFDisplayDepth = m_pRasterFileDlg->PDFDisplayDepth; m_pRasterIO->PDFGraphicsAlpha = m_pRasterFileDlg->PDFGraphicsAlpha; m_pRasterIO->PDFTextAlpha = m_pRasterFileDlg->PDFTextAlpha; POSITION pos = GetFirstDocTemplatePosition(); CDocTemplate* pDocTemplate = GetNextDocTemplate(pos); pDocTemplate->OpenDocumentFile((LPCTSTR)m_pRasterFileDlg->GetFileName()); } theApp.m_pRasterFileDlg->PutBitmap(0); } int CSegDemoApp::DisplayLEADError(int nCode) { CString str; if(nCode) { str.Format(TEXT("A LEADTOOLS error has occured.\nCODE = %d"), nCode); m_pMainWnd->MessageBox(str); } return(nCode); } HRESULT CSegDemoApp::CreateRasterObjectLic(ILEADRaster ** ppRaster) { HRESULT hr; *ppRaster = NULL; IClassFactory2 *pCF2 = NULL; hr = CoGetClassObject(CLSID_LEADRaster, CLSCTX_ALL, NULL, IID_IClassFactory2, (void**)&pCF2); if (!pCF2) return hr; IUnknown *pOuter = NULL; static const WCHAR BASED_CODE _szLicString[] =L"LEADTOOLS OCX Copyright (c) 1991-2004 LEAD Technologies, Inc."; BSTR LicKey = SysAllocString(_szLicString); BSTR pszLic = SysAllocString(_szLicString); hr = pCF2->CreateInstanceLic(pOuter, NULL, IID_IUnknown, pszLic, (void**)ppRaster); pCF2->Release(); SysFreeString(pszLic); return hr; } void CSegDemoApp::OnEditPaste() { OpenDocument(OPENMODE_PASTE); } void CSegDemoApp::OpenDocument(int nMode) { m_nOpenMode = nMode; OnFileNew(); m_nOpenMode = OPENMODE_FILE; } void CSegDemoApp::OnUpdateEditPaste(CCmdUI* pCmdUI) { //Create the licensed LTRaster COM object HRESULT hr; ILEADRaster* pRaster = NULL; hr = CreateRasterObjectLic(&pRaster); if (FAILED(hr)) { DisplayLEADError(ERROR_INV_PARAMETER); ExitMFCApp(); return; } else { pCmdUI->Enable(pRaster->Paste(PASTE_ISREADY)); } pRaster->Release(); } int CSegDemoApp::ExitInstance() { if (m_pRasterIO != NULL) m_pRasterIO->Release(); if (m_pRasterProc != NULL) m_pRasterProc->Release(); if (m_pRasterClrDlg != NULL) m_pRasterClrDlg->Release(); if (m_pRasterFileDlg != NULL) m_pRasterFileDlg->Release(); if (m_pRasterKrnDlg!=NULL) { m_pRasterKrnDlg->FreeDlg(); m_pRasterKrnDlg->Release(); } CoUninitialize(); return CWinApp::ExitInstance(); } void CSegDemoApp::OnFileOpenMrc() { int nRet; HCURSOR hOldCur; m_bOpenMRC = TRUE; m_pRasterFileDlg->PutFilter("MRC|*.mrc;*.tif"); m_pRasterFileDlg->PutFileDlgFlags(0); m_pRasterFileDlg->PutFileName(""); m_pRasterFileDlg->PutDialogTitle("Open MRC"); m_pRasterFileDlg->PutUIFlags(OPEN_SHOW_MULTIPAGE); nRet = m_pRasterFileDlg->ShowOpenDlg((long)m_pMainWnd->m_hWnd); if(nRet == 0 && m_pRasterFileDlg->GetDialogStatus() ==DLG_OK) { hOldCur = SetCursor(LoadCursor(IDC_WAIT)); m_iPage = (short)m_pRasterFileDlg->GetPageNumber(); POSITION pos = GetFirstDocTemplatePosition(); CDocTemplate* pDocTemplate = GetNextDocTemplate(pos); pDocTemplate->OpenDocumentFile((LPCTSTR)m_pRasterFileDlg->GetFileName()); SetCursor(hOldCur); } } void CSegDemoApp::OnFileSaveall() { CSaveListDlg SaveListDlg; SaveListDlg.DoModal(); }