/*[]=====================================================================[]*/ /*[] LeadTools Run Time Library - Version 14 []*/ /*[] []*/ /*[] []*/ /*[] Copyright (c) 1991-2004 LEAD Technologies, Inc. []*/ /*[] All Rights Reserved. []*/ /*[]=====================================================================[]*/ #include "ImgPF.h" static L_BOOL ImageInfo_OnCommand (HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT uCodeNotify); static L_BOOL ImageInfo_OnHScroll (HWND hWnd, HWND hWndCtl, L_UINT nCode, L_INT nPos); static L_BOOL ImageInfo_OnInitDialog (HWND hWnd, HWND hWndFocus, LPARAM lParam); static L_VOID ImageInfo_OnTimer (HWND hWnd, L_INT nID); static L_VOID L_ApplyFilter (HWND hWnd); static L_VOID L_GetChannelData (HWND hWnd); L_BOOL CALLBACK ImageInfDlgProc (HWND hWnd, L_UINT uMessage, WPARAM wParam, LPARAM lParam) { switch(uMessage) { HANDLE_MSG (hWnd, WM_COMMAND, ImageInfo_OnCommand); HANDLE_MSG (hWnd, WM_INITDIALOG, ImageInfo_OnInitDialog); HANDLE_MSG (hWnd, WM_HSCROLL, ImageInfo_OnHScroll); HANDLE_MSG (hWnd, WM_TIMER, ImageInfo_OnTimer); case WM_USER_UPDATEVIEW: StatusProc.ProgressValue = 100; L_ApplyFilter(hWnd); break; } return FALSE; } L_INT GetMaxChannelLen(pBITMAPHANDLE pBitmap) { if((pBitmap->BitsPerPixel == 16) && ISGRAY(pBitmap) || pBitmap->BitsPerPixel >= 48) return (0xffff); else if(pBitmap->BitsPerPixel == 12) return (0xfff); else return (0xff); } static L_BOOL ImageInfo_OnInitDialog (HWND hWnd, HWND hWndFocus, LPARAM lParam) { LPINFDLGDATA pInfDlgData; HWND hWndParent; pCHILDDATA pData; L_INT nRangeMax[] = {255, 255}; L_INT nRangeMin[] = {0, 0}; L_INT nPosInit [] = {0, 255}; L_INT nSlider; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); pInfDlgData = (LPINFDLGDATA)lParam; MoveDialogToMiddle(hWnd); SetWindowLong(hWnd,GWL_USERDATA,(LONG)pInfDlgData); pInfDlgData->uLutLength = GetMaxChannelLen(&pData->LeadBitmap); nRangeMax[0] = pInfDlgData->uLutLength; nRangeMax[1] = pInfDlgData->uLutLength; nPosInit [1] = pInfDlgData->uLutLength; Progress_SetRange(StatusProc.ProgWnd, 0, 100); Progress_SetPos(StatusProc.ProgWnd, 0); StatusProc.bProgress = TRUE; StatusProc.bInvalidate = FALSE; StatusProc.bEnd = FALSE; StatusProc.DlgWnd = hWnd; StatusProc.ProgressValue = 100; StatusProc.ProgWnd = GetDlgItem(hWnd, IDC_INF_PROG); pInfDlgData->uStart = 0; pInfDlgData->uEnd = pInfDlgData->uLutLength; pInfDlgData->uChannel = 0; pInfDlgData->nSlideNum = 2; pInfDlgData->nSldBaseID = IDC_INF_STR_SLD; pInfDlgData->nEdtBaseID = IDC_INF_STR_EDT; ComboBox_AddString(GetDlgItem(hWnd, IDC_INF_CHA_COM), TEXT("Master")); ComboBox_AddString(GetDlgItem(hWnd, IDC_INF_CHA_COM), TEXT("Red")); ComboBox_AddString(GetDlgItem(hWnd, IDC_INF_CHA_COM), TEXT("Green")); ComboBox_AddString(GetDlgItem(hWnd, IDC_INF_CHA_COM), TEXT("Blue")); ComboBox_SetCurSel(GetDlgItem(hWnd, IDC_INF_CHA_COM), 0); for (nSlider = 0; nSlider < pInfDlgData->nSlideNum; nSlider++) { Trackbar_SetTheRange(GetDlgItem(hWnd, pInfDlgData->nSldBaseID + nSlider), FALSE, nRangeMin[nSlider], nRangeMax[nSlider]); SetDlgItemInt(hWnd, pInfDlgData->nEdtBaseID + nSlider, nPosInit[nSlider], FALSE); } pData->uTimerID = SetTimer(hWnd, 1, 100, NULL); L_ApplyFilter(hWnd); L_GetChannelData(hWnd); return ( TRUE ); } static L_VOID ImageInfo_OnTimer (HWND hWnd, L_INT nID) { Dialog_Timer(nID); } static L_BOOL ImageInfo_OnCommand (HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT uCodeNotify) { LPINFDLGDATA pInfDlgData; HWND hWndParent; L_INT nRangeMax[] = {255, 255}; L_INT nRangeMin[] = {0, 0}; pCHILDDATA pData; L_INT nValue; L_INT nIndex; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); pInfDlgData = (LPINFDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); nRangeMax[1] = pInfDlgData->uLutLength; nRangeMax[0] = pInfDlgData->uEnd; nRangeMin[1] = pInfDlgData->uStart; if ((uCodeNotify == CBN_SELCHANGE ) && (nID == IDC_INF_CHA_COM)) { pInfDlgData->uChannel = ComboBox_GetCurSel(GetDlgItem(hWnd, IDC_INF_CHA_COM)); L_ApplyFilter(hWnd); L_GetChannelData(hWnd); } if (nID >= pInfDlgData->nEdtBaseID && nID < pInfDlgData->nEdtBaseID + pInfDlgData->nSlideNum) { if(uCodeNotify == EN_CHANGE) { nValue = GetDlgItemInt(hWnd, nID, NULL, TRUE); nIndex = nID - pInfDlgData->nEdtBaseID; Trackbar_SetPos(GetDlgItem(hWnd, nID + pInfDlgData->nSlideNum), TRUE, nValue); if(nValue > nRangeMax[nIndex]) { SetDlgItemInt(hWnd, nID, nRangeMax[nIndex], TRUE); return FALSE; } if(nValue < nRangeMin[nIndex]) { SetDlgItemInt(hWnd, nID, nRangeMin[nIndex], TRUE); return FALSE; } switch (nIndex) { case 0: if(pInfDlgData->uStart == (L_UINT)nValue) return TRUE; pInfDlgData->uStart = nValue; break; case 1: if(pInfDlgData->uEnd == (L_UINT)nValue) return TRUE; pInfDlgData->uEnd = nValue; break; } L_ApplyFilter(hWnd); } } switch (nID) { case IDCANCEL: case IDOK: StatusProc.bProgress = FALSE; StatusProc.bKillProgress = TRUE; StatusProc.ProgressValue = 100; StatusProc.bInvalidate = TRUE; StatusProc.bEnd = TRUE; EndDialog(hWnd, IDCANCEL - nID); break; } return TRUE; } static L_BOOL ImageInfo_OnHScroll (HWND hWnd, HWND hWndCtl, L_UINT nCode, L_INT nPos) { LPINFDLGDATA pInfDlgData = (LPINFDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); SetDlgItemInt(hWnd, GetDlgCtrlID(hWndCtl) - pInfDlgData->nSlideNum , Trackbar_GetPos(hWndCtl), TRUE); return TRUE; } L_VOID L_ApplyFilter(HWND hWnd) { pCHILDDATA pData; L_INT nRet = 0; HWND hWndParent; LPINFDLGDATA pInfDlgData; STATISTICSINFO StatisticInfo; L_TCHAR cMean[10]; L_TCHAR cStdDiv[10]; L_TCHAR cPercent[10]; if (100 != StatusProc.ProgressValue) { StatusProc.bKillProgress = TRUE ; return ; } pInfDlgData = (LPINFDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient, SendMessage); pData = LOCKCHILDDATA (hWndParent); nRet = L_GetBitmapStatisticsInfo(&pData->LeadBitmap, &StatisticInfo, pInfDlgData->uChannel, pInfDlgData->uStart, pInfDlgData->uEnd); if(nRet == SUCCESS) { ConvertFloatToString(StatisticInfo.uMean , cMean, 2); ConvertFloatToString(StatisticInfo.uStdDev , cStdDiv, 2); ConvertFloatToString(StatisticInfo.uPercent, cPercent, 2); SetDlgItemText(hWnd, IDC_INF_MEN_TXT, cMean); SetDlgItemText(hWnd, IDC_INF_STD_TXT, cStdDiv); SetDlgItemText(hWnd, IDC_INF_PER_TXT, cPercent); SetDlgItemInt(hWnd, IDC_INF_MED_TXT, StatisticInfo.uMedian, TRUE); SetDlgItemInt(hWnd, IDC_INF_MAX_TXT, StatisticInfo.uMax, TRUE); SetDlgItemInt(hWnd, IDC_INF_MIN_TXT, StatisticInfo.uMin, TRUE); SetDlgItemInt(hWnd, IDC_INF_PCT_TXT, StatisticInfo.uPixelCnt, TRUE); StatusProc.ProgressValue = 100; Progress_SetPos(StatusProc.ProgWnd , 0); if(StatusProc.bEnd) { StatusProc.bProgress = FALSE; StatusProc.bKillProgress = TRUE; } } } static L_VOID L_GetChannelData(HWND hWnd) { pCHILDDATA pData; L_INT nRet = 0; HWND hWndParent; LPINFDLGDATA pInfDlgData; STATISTICSINFO StatisticInfo; L_TCHAR cMean[10]; L_TCHAR cStdDiv[10]; pInfDlgData = (LPINFDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient, SendMessage); pData = LOCKCHILDDATA (hWndParent); StatusProc.bProgress = FALSE; nRet = L_GetBitmapStatisticsInfo(&pData->LeadBitmap, &StatisticInfo, pInfDlgData->uChannel, 0, pInfDlgData->uLutLength); StatusProc.bProgress = TRUE; if(nRet == SUCCESS) { ConvertFloatToString(StatisticInfo.uMean , cMean, 2); ConvertFloatToString(StatisticInfo.uStdDev, cStdDiv, 2); SetDlgItemText(hWnd, IDC_INF_CHN_MEN_TXT, cMean); SetDlgItemText(hWnd, IDC_INF_CHN_STD_TXT, cStdDiv); SetDlgItemInt(hWnd, IDC_INF_CHN_MED_TXT, StatisticInfo.uMedian, TRUE); SetDlgItemInt(hWnd, IDC_INF_CHN_MAX_TXT, StatisticInfo.uMax, TRUE); SetDlgItemInt(hWnd, IDC_INF_CHN_MIN_TXT, StatisticInfo.uMin, TRUE); SetDlgItemInt(hWnd, IDC_INF_CHN_PCT_TXT, StatisticInfo.uPixelCnt, TRUE); } }