#include #include #include #include "resource.h" #include "..\\..\\..\\include\\ltdic.h" /* LEADTOOLS main header file. */ #include "J2KOpt.h" extern L_INT32 nTempQFactor; extern FILEJ2KOPTIONS J2KOptions; //J2K Options button was pressed L_VOID OnJ2KOptions ( HWND hDlg ) { HINSTANCE hInstance; HCURSOR hOldCursor=NULL; hInstance = (HINSTANCE) GetWindowLong(hDlg, GWL_HINSTANCE); hOldCursor = SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_WAIT))); DialogBox(hInstance, MAKEINTRESOURCE(IDD_J2KOPTDLG), hDlg, SetJ2KOptionsDlgProc); SetCursor(hOldCursor); } L_BOOL GetEditInt ( HWND hDlg, L_INT nID, L_INT L_FAR* pVal, L_INT nMinVal, L_INT nMaxVal ) { L_BOOL bTranslated = 0; *pVal = GetDlgItemInt(hDlg,nID, ( int *) &bTranslated, FALSE); if(!bTranslated || *pVal < nMinVal || *pVal > nMaxVal) { SelectTextAndBeep(hDlg,nID); return FALSE; } return TRUE; } L_VOID SelectTextAndBeep ( HWND hDlg,L_INT nID ) { Edit_SetSel(GetDlgItem(hDlg,nID), 0, -1); SetFocus(GetDlgItem(hDlg,nID)); MessageBeep(0); } //Fill J2K options structure from dialog L_BOOL FileSaveGetJ2KOptionsAdvanced ( HWND hDlg,pFILEJ2KOPTIONS pJ2KOptions ) { FILEJ2KOPTIONS J2KOptions; L_INT xcb, ycb; L_INT width; L_INT height; char szNum[32]; J2KOptions = *pJ2KOptions; if(!GetEditInt( hDlg,LT_DLG_J2KOPTIONS_IDEDT_XOSIZ, (int *) &J2KOptions.uXOsiz, 0, 0x3FFFFFFF)) return FALSE; if(!GetEditInt(hDlg,LT_DLG_J2KOPTIONS_IDEDT_YOSIZ, (int *) &J2KOptions.uYOsiz, 0, 0x3FFFFFFF)) return FALSE; if(!GetEditInt(hDlg,LT_DLG_J2KOPTIONS_IDEDT_XTSIZ, (int *) &J2KOptions.uXTsiz, 0, 0x3FFFFFFF)) return FALSE; if(!GetEditInt(hDlg,LT_DLG_J2KOPTIONS_IDEDT_YTSIZ, (int *) &J2KOptions.uYTsiz, 0, 0x3FFFFFFF)) return FALSE; if(!GetEditInt(hDlg,LT_DLG_J2KOPTIONS_IDEDT_XTOSIZ, (int *) &J2KOptions.uXTOsiz, 0, 0x3FFFFFFF)) return FALSE; if(!GetEditInt(hDlg,LT_DLG_J2KOPTIONS_IDEDT_YTOSIZ, (int *)&J2KOptions.uYTOsiz, 0, 0x3FFFFFFF)) return FALSE; if(!GetEditInt(hDlg,LT_DLG_J2KOPTIONS_IDEDT_DECOMPLEVEL, (int *) &J2KOptions.uDecompLevel, 0, 32)) return FALSE; if(!GetEditInt(hDlg,LT_DLG_J2KOPTIONS_IDEDT_GUARDBITS, (int *) &J2KOptions.uGuardBits, 0, 7)) return FALSE; if(!GetEditInt(hDlg,LT_DLG_J2KOPTIONS_IDEDT_MANTISSA, &J2KOptions.nDerivedBaseMantissa, 0, 2047)) return FALSE; if(!GetEditInt(hDlg,LT_DLG_J2KOPTIONS_IDEDT_EXPONENT, &J2KOptions.nDerivedBaseExponent, 0, 16)) return FALSE; if(!GetEditInt(hDlg,LT_DLG_J2KOPTIONS_IDEDT_CODEBLOCKWIDTH, &J2KOptions.nCodBlockWidth, 2, 64)) return FALSE; if(!GetEditInt(hDlg,LT_DLG_J2KOPTIONS_IDEDT_CODEBLOCKHEIGHT, &J2KOptions.nCodBlockHeight, 2, 64)) return FALSE; for (xcb=0, width = J2KOptions.nCodBlockWidth; width > (1< (1< 12)) { SelectTextAndBeep(hDlg,LT_DLG_J2KOPTIONS_IDEDT_CODEBLOCKHEIGHT); return FALSE; } if ( J2KOptions.uXTOsiz > J2KOptions.uXOsiz ) { SelectTextAndBeep(hDlg,LT_DLG_J2KOPTIONS_IDEDT_XTOSIZ); return FALSE; } if ( J2KOptions.uYTOsiz > J2KOptions.uYOsiz ) { SelectTextAndBeep(hDlg,LT_DLG_J2KOPTIONS_IDEDT_YTOSIZ); return FALSE; } if(J2KOptions.uXOsiz > J2KOptions.uXTOsiz + J2KOptions.uXTsiz) { SelectTextAndBeep(hDlg,LT_DLG_J2KOPTIONS_IDEDT_XOSIZ); return FALSE; } if(J2KOptions.uYOsiz > J2KOptions.uYTOsiz + J2KOptions.uYTsiz) { SelectTextAndBeep(hDlg,LT_DLG_J2KOPTIONS_IDEDT_YOSIZ); return FALSE; } if(J2KOptions.uXTsiz < (L_UINT)(2 << J2KOptions.uDecompLevel) || J2KOptions.uYTsiz < (L_UINT)(2 << J2KOptions.uDecompLevel)) { SelectTextAndBeep(hDlg,LT_DLG_J2KOPTIONS_IDEDT_DECOMPLEVEL); return FALSE; } J2KOptions.bUseColorTransform = (( Button_GetCheck(GetDlgItem (hDlg,LT_DLG_J2KOPTIONS_IDCHK_COLORTRANSFORM)) == BST_CHECKED ) ? TRUE : FALSE ) ; J2KOptions.bDerivedQuantization = (( Button_GetCheck(GetDlgItem (hDlg,LT_DLG_J2KOPTIONS_IDCHK_DERIVEDQUANTIZATION)) == BST_CHECKED ) ? TRUE : FALSE ) ; J2KOptions.bUseSOPMarker = (( Button_GetCheck(GetDlgItem (hDlg,LT_DLG_J2KOPTIONS_IDCHK_USESOPMARKER)) == BST_CHECKED ) ? TRUE : FALSE ) ; J2KOptions.bUseEPHMarker = (( Button_GetCheck(GetDlgItem (hDlg,LT_DLG_J2KOPTIONS_IDCHK_USEEPHMARKER)) == BST_CHECKED ) ? TRUE : FALSE ) ; J2KOptions.CodBlockStyleFlags.bSelectiveACBypass = (( Button_GetCheck(GetDlgItem (hDlg,LT_DLG_J2KOPTIONS_IDCHK_SELECTIVEACBYPASS)) == BST_CHECKED ) ? TRUE : FALSE ) ; J2KOptions.CodBlockStyleFlags.bResetContextOnBoundaries = (( Button_GetCheck(GetDlgItem (hDlg,LT_DLG_J2KOPTIONS_IDCHK_RESETCONTEXT)) == BST_CHECKED ) ? TRUE : FALSE ) ; J2KOptions.CodBlockStyleFlags.bTerminationOnEachPass = (( Button_GetCheck(GetDlgItem (hDlg,LT_DLG_J2KOPTIONS_IDCHK_TERMINATION)) == BST_CHECKED ) ? TRUE : FALSE ) ; J2KOptions.CodBlockStyleFlags.bVerticallyCausalContext = (( Button_GetCheck(GetDlgItem (hDlg,LT_DLG_J2KOPTIONS_IDCHK_VERTICALLYCAUSAL)) == BST_CHECKED ) ? TRUE : FALSE ) ; J2KOptions.CodBlockStyleFlags.bPredictableTermination = (( Button_GetCheck(GetDlgItem (hDlg,LT_DLG_J2KOPTIONS_IDCHK_PREDICTABLETERMINATION)) == BST_CHECKED ) ? TRUE : FALSE ) ; J2KOptions.CodBlockStyleFlags.bErrorResilienceSymbol = (( Button_GetCheck(GetDlgItem (hDlg,LT_DLG_J2KOPTIONS_IDCHK_ERRORRESILIENCE)) == BST_CHECKED ) ? TRUE : FALSE ) ; J2KOptions.uCompressionControl = (J2KCOMPRESSIONCONTROL)(ComboBox_GetCurSel(GetDlgItem (hDlg,LT_DLG_SAVE_IDCMB_J2KCOMPRESSIONCONTROL))+1); J2KOptions.uProgressOrder = (ComboBox_GetCurSel(GetDlgItem (hDlg,LT_DLG_SAVE_IDCMB_J2KPROGRESSIONORDER))); if(!GetEditInt( hDlg,LT_DLG_SAVE_IDEDT_J2KTARGETSIZE, (int *) &J2KOptions.uTargetFileSize, 100, 0x3FFFFFFF)) return FALSE; memset(szNum,0,32); GetWindowText(GetDlgItem(hDlg, LT_DLG_SAVE_IDEDT_J2KCOMPRESSIONRATIO), szNum, 32); if(lstrlen(szNum)) { J2KOptions.fCompressionRatio = (L_FLOAT )atof(((char *)(LPCSTR)szNum)); if(J2KOptions.fCompressionRatio < 1.0) { J2KOptions.fCompressionRatio = 15.0f; } } else { J2KOptions.fCompressionRatio = 15.0f; } *pJ2KOptions = J2KOptions; return TRUE; } //Fill dialog from J2K options structure L_VOID FileSaveFillJ2KOptionsAdvanced( HWND hDlg , pFILEJ2KOPTIONS pJ2KOptions) { L_CHAR szNo[16]; Button_SetCheck( GetDlgItem (hDlg,LT_DLG_J2KOPTIONS_IDCHK_SELECTIVEACBYPASS), (pJ2KOptions->CodBlockStyleFlags.bSelectiveACBypass? BST_CHECKED : BST_UNCHECKED ) ); Button_SetCheck( GetDlgItem (hDlg,LT_DLG_J2KOPTIONS_IDCHK_RESETCONTEXT), (pJ2KOptions->CodBlockStyleFlags.bResetContextOnBoundaries? BST_CHECKED : BST_UNCHECKED ) ); Button_SetCheck( GetDlgItem (hDlg,LT_DLG_J2KOPTIONS_IDCHK_TERMINATION), (pJ2KOptions->CodBlockStyleFlags.bTerminationOnEachPass? BST_CHECKED : BST_UNCHECKED ) ); Button_SetCheck( GetDlgItem (hDlg,LT_DLG_J2KOPTIONS_IDCHK_VERTICALLYCAUSAL), (pJ2KOptions->CodBlockStyleFlags.bVerticallyCausalContext? BST_CHECKED : BST_UNCHECKED ) ); Button_SetCheck( GetDlgItem (hDlg,LT_DLG_J2KOPTIONS_IDCHK_PREDICTABLETERMINATION), (pJ2KOptions->CodBlockStyleFlags.bPredictableTermination? BST_CHECKED : BST_UNCHECKED ) ); Button_SetCheck( GetDlgItem (hDlg,LT_DLG_J2KOPTIONS_IDCHK_ERRORRESILIENCE), (pJ2KOptions->CodBlockStyleFlags.bErrorResilienceSymbol? BST_CHECKED : BST_UNCHECKED ) ); Button_SetCheck( GetDlgItem (hDlg,LT_DLG_J2KOPTIONS_IDCHK_COLORTRANSFORM), (pJ2KOptions->bUseColorTransform? BST_CHECKED : BST_UNCHECKED ) ); Button_SetCheck( GetDlgItem (hDlg,LT_DLG_J2KOPTIONS_IDCHK_DERIVEDQUANTIZATION), (pJ2KOptions->bDerivedQuantization? BST_CHECKED : BST_UNCHECKED ) ); Button_SetCheck( GetDlgItem (hDlg,LT_DLG_J2KOPTIONS_IDCHK_USESOPMARKER), (pJ2KOptions->bUseSOPMarker? BST_CHECKED : BST_UNCHECKED ) ); Button_SetCheck( GetDlgItem (hDlg,LT_DLG_J2KOPTIONS_IDCHK_USEEPHMARKER), (pJ2KOptions->bUseEPHMarker? BST_CHECKED : BST_UNCHECKED ) ); SetWindowText(GetDlgItem (hDlg,LT_DLG_J2KOPTIONS_IDEDT_XOSIZ),_itoa( pJ2KOptions->uXOsiz, szNo , 10 ) ); SetWindowText(GetDlgItem (hDlg,LT_DLG_J2KOPTIONS_IDEDT_YOSIZ),_itoa( pJ2KOptions->uYOsiz, szNo , 10 ) ); SetWindowText(GetDlgItem (hDlg,LT_DLG_J2KOPTIONS_IDEDT_XTSIZ),_itoa( pJ2KOptions->uXTsiz, szNo , 10 ) ); SetWindowText(GetDlgItem (hDlg,LT_DLG_J2KOPTIONS_IDEDT_YTSIZ),_itoa( pJ2KOptions->uYTsiz, szNo , 10 ) ); SetWindowText(GetDlgItem (hDlg,LT_DLG_J2KOPTIONS_IDEDT_XTOSIZ),_itoa( pJ2KOptions->uXTOsiz, szNo , 10 ) ); SetWindowText(GetDlgItem (hDlg,LT_DLG_J2KOPTIONS_IDEDT_YTOSIZ),_itoa( pJ2KOptions->uYTOsiz, szNo , 10 ) ); SetWindowText(GetDlgItem (hDlg,LT_DLG_J2KOPTIONS_IDEDT_DECOMPLEVEL),_itoa( pJ2KOptions->uDecompLevel, szNo , 10 ) ); SetWindowText(GetDlgItem (hDlg,LT_DLG_J2KOPTIONS_IDEDT_GUARDBITS),_itoa( pJ2KOptions->uGuardBits, szNo , 10 ) ); SetWindowText(GetDlgItem (hDlg,LT_DLG_J2KOPTIONS_IDEDT_MANTISSA),_itoa( pJ2KOptions->nDerivedBaseMantissa, szNo , 10 ) ); SetWindowText(GetDlgItem (hDlg,LT_DLG_J2KOPTIONS_IDEDT_EXPONENT),_itoa( pJ2KOptions->nDerivedBaseExponent, szNo , 10 ) ); SetWindowText(GetDlgItem (hDlg,LT_DLG_J2KOPTIONS_IDEDT_CODEBLOCKWIDTH),_itoa( pJ2KOptions->nCodBlockWidth, szNo , 10 ) ); SetWindowText(GetDlgItem (hDlg,LT_DLG_J2KOPTIONS_IDEDT_CODEBLOCKHEIGHT),itoa( pJ2KOptions->nCodBlockHeight, szNo , 10 ) ); SetWindowText(GetDlgItem (hDlg,LT_DLG_SAVE_IDEDT_J2KTARGETSIZE),itoa( pJ2KOptions->uTargetFileSize, szNo , 10 ) ); SetWindowText(GetDlgItem (hDlg,LT_DLG_SAVE_IDEDT_QFACTOR),itoa( nTempQFactor, szNo , 10 ) ); sprintf(szNo,"%f",pJ2KOptions->fCompressionRatio); SetWindowText(GetDlgItem (hDlg,LT_DLG_SAVE_IDEDT_J2KCOMPRESSIONRATIO ),szNo); switch(pJ2KOptions->uCompressionControl) { case J2K_COMPRESSION_RATIO: ComboBox_SetCurSel(GetDlgItem (hDlg,LT_DLG_SAVE_IDCMB_J2KCOMPRESSIONCONTROL),0); ShowHideCompressionFields(hDlg,0); break; case J2K_COMPRESSION_TARGETSIZE: ComboBox_SetCurSel(GetDlgItem (hDlg,LT_DLG_SAVE_IDCMB_J2KCOMPRESSIONCONTROL),1); ShowHideCompressionFields(hDlg,1); break; case J2K_COMPRESSION_QFACTOR : ComboBox_SetCurSel(GetDlgItem (hDlg,LT_DLG_SAVE_IDCMB_J2KCOMPRESSIONCONTROL),2); ShowHideCompressionFields(hDlg,2); break; } switch(pJ2KOptions->uProgressOrder) { case J2K_LAYER_RESOLUTION_COMPONENT_POSITION : ComboBox_SetCurSel(GetDlgItem (hDlg,LT_DLG_SAVE_IDCMB_J2KPROGRESSIONORDER),0); break; case J2K_RESOLUTION_LAYER_COMPONENT_POSITION : ComboBox_SetCurSel(GetDlgItem (hDlg,LT_DLG_SAVE_IDCMB_J2KPROGRESSIONORDER),1); break; case J2K_RESOLUTION_POSITION_COMPONENT_LAYER : ComboBox_SetCurSel(GetDlgItem (hDlg,LT_DLG_SAVE_IDCMB_J2KPROGRESSIONORDER),2); break; case J2K_POSITION_COMPONENT_RESOLUTION_LAYER : ComboBox_SetCurSel(GetDlgItem (hDlg,LT_DLG_SAVE_IDCMB_J2KPROGRESSIONORDER),3); break; case J2K_COMPONENT_POSITION_RESOLUTION_LAYER : ComboBox_SetCurSel(GetDlgItem (hDlg,LT_DLG_SAVE_IDCMB_J2KPROGRESSIONORDER),4); break; } } L_VOID ShowHideCompressionFields(HWND hDlg , L_INT nIndex) { switch(nIndex) { //Compression Ratio case 0: ShowWindow(GetDlgItem(hDlg,LT_DLG_SAVE_IDEDT_J2KTARGETSIZE),SW_HIDE); ShowWindow(GetDlgItem(hDlg,LT_DLG_SAVE_IDSTC_J2KTARGETSIZE),SW_HIDE); ShowWindow(GetDlgItem(hDlg,LT_DLG_SAVE_IDSTC_J2KCOMPRESSIONRATIO),SW_SHOW); ShowWindow(GetDlgItem(hDlg,LT_DLG_SAVE_IDEDT_J2KCOMPRESSIONRATIO),SW_SHOW); ShowWindow(GetDlgItem(hDlg,LT_DLG_SAVE_IDEDT_QFACTOR),SW_HIDE); ShowWindow(GetDlgItem(hDlg,LT_DLG_SAVE_IDSTC_QFACTOR),SW_HIDE); break; //Target File Size case 1: ShowWindow(GetDlgItem(hDlg,LT_DLG_SAVE_IDEDT_J2KTARGETSIZE),SW_SHOW); ShowWindow(GetDlgItem(hDlg,LT_DLG_SAVE_IDSTC_J2KTARGETSIZE),SW_SHOW); ShowWindow(GetDlgItem(hDlg,LT_DLG_SAVE_IDSTC_J2KCOMPRESSIONRATIO),SW_HIDE); ShowWindow(GetDlgItem(hDlg,LT_DLG_SAVE_IDEDT_J2KCOMPRESSIONRATIO),SW_HIDE); ShowWindow(GetDlgItem(hDlg,LT_DLG_SAVE_IDEDT_QFACTOR),SW_HIDE); ShowWindow(GetDlgItem(hDlg,LT_DLG_SAVE_IDSTC_QFACTOR),SW_HIDE); break; //Use QFactor case 2: ShowWindow(GetDlgItem(hDlg,LT_DLG_SAVE_IDEDT_J2KTARGETSIZE),SW_HIDE); ShowWindow(GetDlgItem(hDlg,LT_DLG_SAVE_IDSTC_J2KTARGETSIZE),SW_HIDE); ShowWindow(GetDlgItem(hDlg,LT_DLG_SAVE_IDSTC_J2KCOMPRESSIONRATIO),SW_HIDE); ShowWindow(GetDlgItem(hDlg,LT_DLG_SAVE_IDEDT_J2KCOMPRESSIONRATIO),SW_HIDE); ShowWindow(GetDlgItem(hDlg,LT_DLG_SAVE_IDEDT_QFACTOR),SW_SHOW); ShowWindow(GetDlgItem(hDlg,LT_DLG_SAVE_IDSTC_QFACTOR),SW_SHOW); break; } } //Dialog procedure for the J2K options dialog BOOL CALLBACK SetJ2KOptionsDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { int i; switch(uMsg) { case WM_INITDIALOG: for(i = 0 ; i < SIZE_OF_ARRAY(J2KCompressionStrings);i++) { ComboBox_AddString(GetDlgItem (hDlg,LT_DLG_SAVE_IDCMB_J2KCOMPRESSIONCONTROL), J2KCompressionStrings[i]); } for(i = 0 ; i < SIZE_OF_ARRAY(J2KProgressingOrders);i++) { ComboBox_AddString(GetDlgItem (hDlg,LT_DLG_SAVE_IDCMB_J2KPROGRESSIONORDER), J2KProgressingOrders[i]); } FileSaveFillJ2KOptionsAdvanced ( hDlg,&J2KOptions) ; break; case WM_COMMAND: switch (GET_WM_COMMAND_ID(wParam, lParam)) { case IDCANCEL: EndDialog(hDlg, FALSE); break; case IDOK: if(FileSaveGetJ2KOptionsAdvanced(hDlg,&J2KOptions)) { EndDialog(hDlg, TRUE); } break; case LT_DLG_J2KOPTIONS_IDBTN_DEFAULT: { FILEJ2KOPTIONS J2K_Options ; HDICOMDS hTempDataSet = L_DicomCreateDS(NULL); // Get default J2K Options if(hTempDataSet) { L_DicomGetDefaultJ2KOptions( hTempDataSet,&J2K_Options, sizeof(FILEJ2KOPTIONS)); L_DicomFreeDS(hTempDataSet); } FileSaveFillJ2KOptionsAdvanced (hDlg, &J2K_Options ) ; } break; case LT_DLG_SAVE_IDCMB_J2KCOMPRESSIONCONTROL: if(HIWORD(wParam) == CBN_SELCHANGE) { int nCursel = (ComboBox_GetCurSel(GetDlgItem (hDlg,LT_DLG_SAVE_IDCMB_J2KCOMPRESSIONCONTROL))); if(nCursel != CB_ERR ) { ShowHideCompressionFields(hDlg,nCursel); } } break; } break; default: return FALSE; } return TRUE; }