/*[]=====================================================================[]*/ /*[] LeadTools Run Time Library - Version 14 []*/ /*[] []*/ /*[] []*/ /*[] Copyright (c) 1991-2004 LEAD Technologies, Inc. []*/ /*[] All Rights Reserved. []*/ /*[]=====================================================================[]*/ #include "ImgPF.h" static L_BOOL FFTndDlg_OnCommand (HWND hWnd, L_INT id, HWND hWndCtl, L_UINT codeNotify); static L_BOOL FFTndDlg_OnHScroll (HWND hWnd, HWND hWndCtl, L_UINT nCode, L_INT nPos); static L_BOOL FFTndDlg_OnInitDialog (HWND hWnd, HWND hWndFocus, LPARAM lParam); static L_VOID L_ApplyFilter (HWND hWnd); static L_VOID FFTndDlg_OnTimer (HWND hWnd, L_INT ID); L_BOOL CALLBACK FFTndDlgProc (HWND hWnd, L_UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { HANDLE_MSG (hWnd, WM_COMMAND, FFTndDlg_OnCommand); HANDLE_MSG (hWnd, WM_INITDIALOG, FFTndDlg_OnInitDialog); HANDLE_MSG (hWnd, WM_HSCROLL, FFTndDlg_OnHScroll); HANDLE_MSG (hWnd, WM_TIMER, FFTndDlg_OnTimer); case WM_USER_UPDATEVIEW: StatusProc.ProgressValue = 100; L_ApplyFilter (hWnd); break; } return FALSE; } static L_BOOL FFTndDlg_OnInitDialog (HWND hWnd, HWND hWndFocus, LPARAM lParam) { LPFTDATA pFFTData = (LPFTDATA)lParam; HWND hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pCHILDDATA pData = LOCKCHILDDATA (hWndParent); L_INT nRangeMax[] = {pData->LeadBitmap.Width - 1, pData->LeadBitmap.Width - 1, pData->LeadBitmap.Height - 1, pData->LeadBitmap.Height - 1}; L_INT nRangeMin[] = {0, 0, 0, 0}; L_INT nPosInit [] = {0, pData->LeadBitmap.Width, 0, pData->LeadBitmap.Height}; L_INT nSlider; SetWindowLong(hWnd, GWL_USERDATA, (LONG)pFFTData); MoveDialogToMiddle(hWnd); //MEMDISK...// MemorizeAndCopyBitmap (hWndParent, &pFFTData->Bitmap); 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_FFT_ND_PROG); pFFTData->nRdoBaseID = IDC_FFT_ND_RED_RAD; pFFTData->nRadioNum = 4; pFFTData->nSlideNum = 4; pFFTData->nSldBaseID = IDC_FFT_ND_XMIN_SLD; pFFTData->nEdtBaseID = IDC_FFT_ND_XMIN_EDT; pFFTData->uFlags = FFT_RED | FFT_IFFT_SCL | FFT_IFFT_MAG; pFFTData->rcRange.left = 0; pFFTData->rcRange.top = 0; pFFTData->rcRange.right = pData->LeadBitmap.Width - 1; pFFTData->rcRange.bottom = pData->LeadBitmap.Height - 1; pFFTData->bKeepX = FALSE; pFFTData->bKeepY = FALSE; Button_SetCheck(GetDlgItem(hWnd, IDC_FFT_ND_SCAL_RAD), TRUE); Button_SetCheck(GetDlgItem(hWnd, IDC_FFT_ND_RED_RAD), TRUE); Button_SetCheck(GetDlgItem(hWnd, IDC_FFT_ND_MAG_RAD), TRUE); for (nSlider = 0; nSlider < pFFTData->nSlideNum; nSlider++) { Trackbar_SetRange(GetDlgItem(hWnd, pFFTData->nSldBaseID + nSlider), FALSE, nRangeMin[nSlider], nRangeMax[nSlider]); SetDlgItemInt(hWnd, pFFTData->nEdtBaseID + nSlider, nPosInit[nSlider], FALSE); SetNumericEditBox(GetDlgItem(hWnd, pFFTData->nEdtBaseID + nSlider), nRangeMin[nSlider], nRangeMax[nSlider], 1, 0, FALSE); Trackbar_SetPos(GetDlgItem(hWnd, pFFTData->nSldBaseID + nSlider), TRUE, nPosInit[nSlider]); } InvalidateRect(hWndParent, NULL, FALSE); L_ApplyFilter (hWnd); return ( TRUE ); } static L_VOID FFTndDlg_OnTimer (HWND hWnd, L_INT ID) { Dialog_Timer(ID); } static L_BOOL FFTndDlg_OnCommand (HWND hWnd, L_INT id, HWND hWndCtl, L_UINT codeNotify) { LPFTDATA pFFTData = (LPFTDATA) GetWindowLong(hWnd, GWL_USERDATA); HWND hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pCHILDDATA pData = LOCKCHILDDATA (hWndParent); L_INT nRangeMax[] = {pData->LeadBitmap.Width - 1, pData->LeadBitmap.Width - 1, pData->LeadBitmap.Height - 1, pData->LeadBitmap.Height - 1}; L_INT nRangeMin[] = {0, 0, 0, 0}; HWND hCtl; L_INT nValue; L_INT nIndex; if (id >= pFFTData->nRdoBaseID && id < pFFTData->nRdoBaseID + pFFTData->nRadioNum) { nIndex = id - pFFTData->nRdoBaseID; pFFTData->uFlags &= 0xffffff0f; if (nIndex == 3) pFFTData->uFlags |= FFT_GRAY; else pFFTData->uFlags |= (pFFTData->nRadioNum - (nIndex + 1)) << 4; L_ApplyFilter (hWnd); return TRUE; } if (id >= pFFTData->nEdtBaseID && id < pFFTData->nEdtBaseID + pFFTData->nSlideNum) { if(codeNotify == EN_CHANGE) { nValue = GetDlgItemInt(hWnd, id, NULL, TRUE); hCtl = GetDlgItem(hWnd,id + pFFTData->nSlideNum); nIndex = id - pFFTData->nEdtBaseID; if(nValue > nRangeMax[nIndex]) { SetDlgItemInt(hWnd, id, nRangeMax[nIndex], TRUE); return FALSE; } if(nValue < nRangeMin[nIndex]) { SetDlgItemInt(hWnd, id, nRangeMin[nIndex], TRUE); return FALSE; } switch (nIndex) { case 0: if(pFFTData->rcRange.left == nValue) return TRUE; if(nValue > pFFTData->rcRange.right) nValue = pFFTData->rcRange.right; pFFTData->rcRange.left = nValue; break; case 1: if(pFFTData->rcRange.right == nValue) return TRUE; if(nValue < pFFTData->rcRange.left) nValue = pFFTData->rcRange.left; pFFTData->rcRange.right = nValue; break; case 2: if(pFFTData->rcRange.top == nValue) return TRUE; if(nValue > pFFTData->rcRange.bottom) nValue = pFFTData->rcRange.bottom; pFFTData->rcRange.top = nValue; break; case 3: if(pFFTData->rcRange.bottom == nValue) return TRUE; if(nValue < pFFTData->rcRange.top) nValue = pFFTData->rcRange.top; pFFTData->rcRange.bottom = nValue; break; } Trackbar_SetPos(hCtl, TRUE, nValue); L_ApplyFilter (hWnd); } return TRUE; } switch (id) { case IDC_FFT_ND_XKEP_CHK: pFFTData->bKeepX = Button_GetCheck(hWndCtl); L_ApplyFilter (hWnd); break; case IDC_FFT_ND_YKEP_CHK: pFFTData->bKeepY = Button_GetCheck(hWndCtl); L_ApplyFilter (hWnd); break; case IDC_FFT_ND_CLIP_RAD: pFFTData->uFlags &= 0xffff0fff; pFFTData->uFlags |= FFT_IFFT_CLIP; L_ApplyFilter (hWnd); break; case IDC_FFT_ND_SCAL_RAD: pFFTData->uFlags &= 0xffff0fff; pFFTData->uFlags |= FFT_IFFT_SCL; L_ApplyFilter (hWnd); break; case IDC_FFT_ND_MAG_RAD: case IDC_FFT_ND_PHAS_RAD: case IDC_FFT_ND_BOTH_RAD: pFFTData->uFlags &= 0xfffff0ff; pFFTData->uFlags |= ((id - IDC_FFT_ND_MAG_RAD) + 1) << 8; L_ApplyFilter (hWnd); break; 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; EndDialog(hWnd, TRUE); break; } return TRUE; } static L_BOOL FFTndDlg_OnHScroll (HWND hWnd, HWND hWndCtl, L_UINT nCode, L_INT nPos) { LPFTDATA pFFTData = (LPFTDATA) GetWindowLong(hWnd, GWL_USERDATA); SetDlgItemInt(hWnd, GetDlgCtrlID(hWndCtl) - pFFTData->nSlideNum , Trackbar_GetPos(hWndCtl), TRUE); return TRUE; } L_VOID L_ApplyFilter (HWND hWnd) { pCHILDDATA pData; L_INT nRet = 0; HWND hWndParent; LPFTDATA pFFTData; pFTARRAY pTmpFtArray; // L_COMPLEX L_FAR * L_FAR * lpcxData; // L_INT nIndex; if (100 != StatusProc.ProgressValue) { StatusProc.bKillProgress = TRUE; return; } pFFTData = (LPFTDATA) GetWindowLong(hWnd, GWL_USERDATA); hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient, SendMessage); pData = LOCKCHILDDATA (hWndParent); L_FreeBitmap(&pData->LeadBitmap); L_CopyBitmap(&pData->LeadBitmap, &pFFTData->Bitmap, sizeof(BITMAPHANDLE)); /* lpcxData = (L_COMPLEX L_FAR * L_FAR *) malloc(pData->LeadBitmap.Height * sizeof(L_COMPLEX L_FAR *)); for(nIndex = 0; nIndex < pData->LeadBitmap.Height; nIndex++) { lpcxData[nIndex] = (L_COMPLEX L_FAR *) malloc(pData->LeadBitmap.Width * sizeof(L_COMPLEX)); } for(nIndex = 0; nIndex < pData->LeadBitmap.Height; nIndex++) { memcpy(lpcxData[nIndex], pFFTData->lpcxData[nIndex],pData->LeadBitmap.Width * sizeof(L_COMPLEX)); } */ L_AllocFTArray(&pData->LeadBitmap, &pTmpFtArray, sizeof(FTARRAY)); memcpy(pTmpFtArray->acxData, pFFTData->pFtArray->acxData, sizeof(L_COMPLEX) * pTmpFtArray->uHeight * pTmpFtArray->uWidth); nRet = L_FrqFilterBitmap(pTmpFtArray, &pFFTData->rcRange, (pFFTData->bKeepX ? FRQ_INSIDE_X : FRQ_OUTSIDE_X) | (pFFTData->bKeepY ? FRQ_INSIDE_Y : FRQ_OUTSIDE_Y) ); if (nRet == SUCCESS) { nRet = L_FFTBitmap(&pData->LeadBitmap, pTmpFtArray, pFFTData->uFlags| FFT_IFFT); } if(nRet == SUCCESS) { InvalidateRect(hWndParent, NULL, FALSE); StatusProc.ProgressValue = 100; Progress_SetPos(StatusProc.ProgWnd , 0); if(StatusProc.bEnd) { StatusProc.bProgress = FALSE; StatusProc.bKillProgress = TRUE ; } } /* for(nIndex = 0; nIndex < pData->LeadBitmap.Height; nIndex++) { free(lpcxData[nIndex]); }*/ L_FreeFTArray(pTmpFtArray); }