/*[]=====================================================================[]*/ /*[] LeadTools Run Time Library - Version 14 []*/ /*[] []*/ /*[] []*/ /*[] Copyright (c) 1991-2004 LEAD Technologies, Inc. []*/ /*[] All Rights Reserved. []*/ /*[]=====================================================================[]*/ #include "ImgPF.h" static L_BOOL LightDialog_OnInitDialog (HWND hWnd, HWND hWndFocus, LPARAM lParam); static L_BOOL LightDialog_OnCommand (HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT codeNotify); static L_VOID L_ApplyFilter (HWND hWnd); static L_VOID LightDialog_OnTimer (HWND hWnd, L_INT nID); L_INT nWidthRange; L_INT nHeightRange; L_BOOL CALLBACK LightDialogProc (HWND hWnd, L_UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { HANDLE_MSG (hWnd, WM_COMMAND, LightDialog_OnCommand); HANDLE_MSG (hWnd, WM_INITDIALOG, LightDialog_OnInitDialog); HANDLE_MSG (hWnd, WM_TIMER, LightDialog_OnTimer); case WM_USER_UPDATEVIEW: StatusProc.ProgressValue = 100; L_ApplyFilter (hWnd); break; } return FALSE; } static L_BOOL LightDialog_OnInitDialog(HWND hWnd, HWND hWndFocus, LPARAM lParam) { LPLIGHTCTRLDATA pLgtCtrlDlgData; pCHILDDATA pData; HWND hWndParent; L_INT nPosInit [] = { 50, 50, 50, 150, 150, 150, 210, 210, 210}; L_INT nSlider; L_INT nMaxRange; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); pLgtCtrlDlgData = (LPLIGHTCTRLDATA) lParam; MoveDialogToMiddle(hWnd); SetWindowLong(hWnd, GWL_USERDATA, (LONG)pLgtCtrlDlgData); StatusProc.bProgress = TRUE; StatusProc.bInvalidate = FALSE; StatusProc.bEnd = FALSE; StatusProc.DlgWnd = hWnd; StatusProc.ProgressValue = 100; StatusProc.ProgWnd = GetDlgItem(hWnd, IDC_LGT_PROG); nMaxRange = 0xFF; if (Is16Bit(&pData->LeadBitmap)) { if (pData->LeadBitmap.BitsPerPixel == 12) nMaxRange = 0xFFF; else nMaxRange = 0xFFFF; } Progress_SetRange(StatusProc.ProgWnd, 0, 100); Progress_SetPos(StatusProc.ProgWnd, 0); //MEMDISK...// MemorizeAndCopyBitmap (hWndParent, &pLgtCtrlDlgData->Bitmap); pLgtCtrlDlgData->nSlideNum = 9; pLgtCtrlDlgData->nEdtBaseID = IDC_LGT_LOW_BLUE_EDT; nPosInit[0] = nPosInit[1] = nPosInit[2] = pLgtCtrlDlgData->uLowAvr [0] = pLgtCtrlDlgData->uLowAvr [1] = pLgtCtrlDlgData->uLowAvr [2] = Is16Bit(&pData->LeadBitmap) ? 50 * 257 : 50; nPosInit[3] = nPosInit[4] = nPosInit[5] = pLgtCtrlDlgData->uAverage[0] = pLgtCtrlDlgData->uAverage[1] = pLgtCtrlDlgData->uAverage[2] = Is16Bit(&pData->LeadBitmap) ? 150 * 257 : 150; nPosInit[6] = nPosInit[7] = nPosInit[8] = pLgtCtrlDlgData->uHighAvr[0] = pLgtCtrlDlgData->uHighAvr[1] = pLgtCtrlDlgData->uHighAvr[2] = Is16Bit(&pData->LeadBitmap) ? 210 * 257 : 210; for (nSlider = 0; nSlider < pLgtCtrlDlgData->nSlideNum; nSlider++) { SetDlgItemInt(hWnd, pLgtCtrlDlgData->nEdtBaseID + nSlider, nPosInit[nSlider], FALSE); EnableWindow(GetDlgItem(hWnd, pLgtCtrlDlgData->nEdtBaseID + nSlider), (pLgtCtrlDlgData->uFlag == RGB_SPACE) || (nSlider % 3 == 0)); SetNumericEditBox(GetDlgItem(hWnd, pLgtCtrlDlgData->nEdtBaseID + nSlider), 0, nMaxRange, 1, 0, 0); } pLgtCtrlDlgData->uFlag = YUV_SPACE; pLgtCtrlDlgData->bLocal = FALSE; Button_SetCheck(GetDlgItem(hWnd, IDC_LGT_YUV_RAD), TRUE); pData->uTimerID = SetTimer(hWnd, 1, 100, NULL); ShowWindow(hWnd, SW_SHOW); L_ApplyFilter (hWnd); return TRUE; } static L_VOID LightDialog_OnTimer(HWND hWnd, L_INT nID) { Dialog_Timer(nID); } static L_BOOL LightDialog_OnCommand(HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT codeNotify) { LPLIGHTCTRLDATA pLgtCtrlDlgData = (LPLIGHTCTRLDATA) GetWindowLong(hWnd, GWL_USERDATA); pCHILDDATA pData; HWND hWndParent; L_INT nValue, nRet; L_INT nEdtValue[] = { 0, pLgtCtrlDlgData->uLowAvr[1], pLgtCtrlDlgData->uLowAvr[2], 0, pLgtCtrlDlgData->uAverage[1], pLgtCtrlDlgData->uAverage[2], 0, pLgtCtrlDlgData->uHighAvr[1], pLgtCtrlDlgData->uHighAvr[2]}; L_INT nSlider; L_INT nIndex; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); if (nID >= pLgtCtrlDlgData->nEdtBaseID + pLgtCtrlDlgData->nSlideNum && nID < pLgtCtrlDlgData->nEdtBaseID + pLgtCtrlDlgData->nSlideNum + 3) { if (pLgtCtrlDlgData->uFlag != (L_UINT)1 << (nID - (pLgtCtrlDlgData->nEdtBaseID + pLgtCtrlDlgData->nSlideNum))) { pLgtCtrlDlgData->uFlag = 1 << (nID - (pLgtCtrlDlgData->nEdtBaseID + pLgtCtrlDlgData->nSlideNum)); for (nSlider = 0; nSlider < pLgtCtrlDlgData->nSlideNum; nSlider++) { if (nSlider % 3 != 0) { EnableWindow(GetDlgItem(hWnd, pLgtCtrlDlgData->nEdtBaseID + nSlider), (pLgtCtrlDlgData->uFlag == RGB_SPACE)); } } L_ApplyFilter (hWnd); } } if (nID >= pLgtCtrlDlgData->nEdtBaseID && nID < pLgtCtrlDlgData->nEdtBaseID + pLgtCtrlDlgData->nSlideNum) { if(codeNotify == EN_CHANGE) { nIndex = (nID - pLgtCtrlDlgData->nEdtBaseID) % 3; nValue = GetDlgItemInt(hWnd, nID, &nRet, FALSE); switch((nID - pLgtCtrlDlgData->nEdtBaseID) / 3) { case 0: if (nValue > (L_INT)pLgtCtrlDlgData->uAverage[nIndex]) return FALSE; if (nValue == (L_INT)pLgtCtrlDlgData->uLowAvr[nIndex]) return FALSE; pLgtCtrlDlgData->uLowAvr[nIndex] = nValue; break; case 1: if (nValue < (L_INT)pLgtCtrlDlgData->uLowAvr[nIndex] || nValue > (L_INT)pLgtCtrlDlgData->uHighAvr[nIndex]) return FALSE; if (nValue == (L_INT)pLgtCtrlDlgData->uAverage[nIndex]) return FALSE; pLgtCtrlDlgData->uAverage[nIndex] = nValue; break; case 2: if (nValue < (L_INT)pLgtCtrlDlgData->uAverage[nIndex]) return FALSE; if (nValue == (L_INT)pLgtCtrlDlgData->uHighAvr[nIndex]) return FALSE; pLgtCtrlDlgData->uHighAvr[nIndex] = nValue; break; } L_ApplyFilter (hWnd); } } switch(nID) { case IDCANCEL: StatusProc.bProgress = FALSE; StatusProc.bKillProgress = TRUE ; StatusProc.ProgressValue = 100 ; EndDialog(hWnd, FALSE); break; case IDOK: ShowStatusWindow(FALSE); StatusProc.bStillWork = TRUE; StatusProc.bInvalidate = TRUE; StatusProc.bEnd = TRUE; InvalidateRect(hWndParent, NULL, FALSE); EndDialog(hWnd, TRUE); break; } return TRUE; } static L_VOID L_ApplyFilter (HWND hWnd) { pCHILDDATA pData; L_INT nRet = 0; HWND hWndParent; LPLIGHTCTRLDATA pLgtCtrlDlgData; L_UINT puAverage[3]; L_UINT puHighAvr[3]; L_UINT puLowAvr[3]; if ( 100 != StatusProc.ProgressValue ) { StatusProc.bKillProgress = TRUE ; return ; } pLgtCtrlDlgData = (LPLIGHTCTRLDATA) GetWindowLong(hWnd,GWL_USERDATA); hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); puAverage[0] = pLgtCtrlDlgData->uAverage[0]; puAverage[1] = pLgtCtrlDlgData->uAverage[1]; puAverage[2] = pLgtCtrlDlgData->uAverage[2]; puLowAvr[0] = pLgtCtrlDlgData->uLowAvr[0]; puLowAvr[1] = pLgtCtrlDlgData->uLowAvr[1]; puLowAvr[2] = pLgtCtrlDlgData->uLowAvr[2]; puHighAvr[0] = pLgtCtrlDlgData->uHighAvr[0]; puHighAvr[1] = pLgtCtrlDlgData->uHighAvr[1]; puHighAvr[2] = pLgtCtrlDlgData->uHighAvr[2]; FreeMemorizedBitmap (hWndParent); //MEMDISK// L_CopyBitmap(&pData->LeadBitmap, &pLgtCtrlDlgData->Bitmap, sizeof(BITMAPHANDLE)); nRet = L_LightControlBitmap(&pData->LeadBitmap, puLowAvr, puAverage, puHighAvr, pLgtCtrlDlgData->uFlag); if(nRet == SUCCESS) { InvalidateRect(hWndParent, NULL, FALSE); StatusProc.ProgressValue = 100; Progress_SetPos(StatusProc.ProgWnd , 0); if(StatusProc.bEnd) { StatusProc.bProgress = FALSE; StatusProc.bKillProgress = TRUE ; } } }