/*[]=====================================================================[]*/ /*[] LeadTools Run Time Library - Version 14 []*/ /*[] []*/ /*[] []*/ /*[] Copyright (c) 1991-2004 LEAD Technologies, Inc. []*/ /*[] All Rights Reserved. []*/ /*[]=====================================================================[]*/ #include "ImgPF.h" static L_BOOL ConvDialog_OnCommand (HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT uCodeNotify); static L_BOOL ConvDialog_OnHScroll (HWND hWnd, HWND hWndCtl, L_UINT nCode, L_INT nPos); static L_BOOL ConvDialog_OnInitDialog (HWND hWnd, HWND hWndFocus, LPARAM lParam); static L_VOID ConvDialog_OnTimer (HWND hWnd, UINT nID); static L_VOID ConvDialog_OnPaint (HWND hWnd); static L_VOID L_ApplyFilter (HWND hWnd); static L_VOID GetConvImages (HWND hWnd); static L_BOOL CALLBACK ConvsEnum (HWND hWnd, LPARAM lParam); #ifdef UNICODE extern HFONT ghDlgFont; #endif// UNICODE L_BOOL CALLBACK ConvDlgProc (HWND hWnd, L_UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { HANDLE_MSG (hWnd, WM_COMMAND, ConvDialog_OnCommand); HANDLE_MSG (hWnd, WM_INITDIALOG, ConvDialog_OnInitDialog); HANDLE_MSG (hWnd, WM_HSCROLL, ConvDialog_OnHScroll); HANDLE_MSG (hWnd, WM_TIMER, ConvDialog_OnTimer); HANDLE_MSG (hWnd, WM_PAINT, ConvDialog_OnPaint); case WM_USER_UPDATEVIEW: StatusProc.ProgressValue = 100; L_ApplyFilter (hWnd); break; } return FALSE; } static L_VOID ConvDialog_OnTimer(HWND hWnd, L_UINT nID) { Dialog_Timer(nID); } static L_VOID ConvDialog_OnPaint(HWND hWnd) { LPCONVDATA pConvData; HWND hWndParent; pCHILDDATA pData, pListData; HPALETTE hPalette, hSavedPalette; RECT rcImage; PAINTSTRUCT ps; HDC hDC; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); pConvData = (LPCONVDATA) GetWindowLong(hWnd, GWL_USERDATA); pListData = (pCHILDDATA)ComboBox_GetItemData(GetDlgItem(hWnd, IDC_CONV_IMG_COM), ComboBox_GetCurSel(GetDlgItem(hWnd, IDC_CONV_IMG_COM))); if(pConvData) { hDC = BeginPaint(GetDlgItem(hWnd, IDC_CONV_IMG_TXT), &ps); hPalette = L_CreatePaintPalette(hDC, &pListData->LeadBitmap); if (hPalette) { hSavedPalette = SelectPalette (hDC, hPalette, FALSE); RealizePalette (hDC); } GetClientRect(GetDlgItem(hWnd, IDC_CONV_IMG_TXT), &rcImage); FillRect(hDC, &rcImage, (HBRUSH) COLOR_WINDOW); FitImageToWindow(rcImage, &pListData->LeadBitmap, &rcImage); L_PaintDC(hDC, &pListData->LeadBitmap, NULL, NULL, &rcImage, &ps.rcPaint,SRCCOPY); if (hSavedPalette) SelectPalette (hDC, hSavedPalette, FALSE); if(hPalette) DeleteObject (hPalette); EndPaint(GetDlgItem(hWnd, IDC_CONV_IMG_TXT),&ps); } } static L_BOOL ConvDialog_OnInitDialog(HWND hWnd, HWND hWndFocus, LPARAM lParam) { LPCONVDATA pConvData; pCHILDDATA pData; HWND hWndParent; RECT rcRgn; L_INT nRangeMax [] = {100, 100, 100}; L_INT nRangeMin [] = {1, 1, 0}; L_INT nPosInit [] = {1, 1, 90}; L_INT nSlider; L_INT nRet; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); pConvData = (LPCONVDATA) lParam; pConvData->uXStep = 1; pConvData->uYStep = 1; pConvData->uThreshold = 70; pConvData->hRgn = NULL; if (L_BitmapHasRgn(&pData->LeadBitmap)) nRet = L_GetBitmapRgnHandle(&pData->LeadBitmap, NULL, &pConvData->hRgn); MemorizeAndCopyBitmap(hWndParent, &pConvData->Bitmap); L_ChangeBitmapViewPerspective(&pConvData->ConvBitmap, &pConvData->ConvBitmap, sizeof(BITMAPHANDLE), TOP_LEFT); MoveDialogToMiddle(hWnd); SetWindowLong(hWnd, GWL_USERDATA, (LONG)pConvData); GetConvImages(hWnd); StatusProc.bProgress = TRUE; StatusProc.bInvalidate = FALSE; StatusProc.bEnd = FALSE; StatusProc.DlgWnd = hWnd; StatusProc.ProgressValue = 100; StatusProc.ProgWnd = GetDlgItem(hWnd, IDC_CONV_PROG); Progress_SetRange(StatusProc.ProgWnd, 0, 100); Progress_SetPos(StatusProc.ProgWnd, 0); L_GetBitmapRgnBounds(&pData->LeadBitmap,NULL, &rcRgn); pConvData->nSldBaseID = IDC_CONV_XST_SLD; pConvData->nEdtBaseID = IDC_CONV_XST_EDT; pConvData->nSlideNum = 3; pConvData->uXStep = nPosInit[0]; pConvData->uYStep = nPosInit[1]; pConvData->uThreshold = nPosInit[2]; for (nSlider = 0; nSlider < pConvData->nSlideNum; nSlider++) { Trackbar_SetRange(GetDlgItem(hWnd, pConvData->nSldBaseID + nSlider), TRUE, nRangeMin[nSlider], nRangeMax[nSlider]); SetDlgItemInt(hWnd, pConvData->nEdtBaseID + nSlider, nPosInit[nSlider], FALSE); SetNumericEditBox(GetDlgItem(hWnd, pConvData->nEdtBaseID + nSlider), nRangeMin[nSlider], nRangeMax[nSlider], 1, 0, 0); } ShowWindow(hWnd, SW_SHOW); #ifdef UNICODE SetControlFont ( hWnd, ghDlgFont ) ; #endif// UNICODE InvalidateRect(hWnd, NULL, FALSE); L_ApplyFilter (hWnd); return TRUE; } L_VOID GetConvImages(HWND hWnd) { EnumChildWindows (hWndClient, ConvsEnum, (LONG)hWnd); ComboBox_SetCurSel(GetDlgItem(hWnd, IDC_CONV_IMG_COM), 0); } L_BOOL CALLBACK ConvsEnum(HWND hWnd, LPARAM lParam) { pCHILDDATA pData; HWND hDlg; L_TCHAR StripName[255]; L_INT nCount; hDlg = (HWND)lParam; pData = (pCHILDDATA) GetWindowLong(hWnd, GWL_USERDATA); if (!pData) return FALSE; memset(StripName, 0, sizeof(StripName)); Strip(StripName, pData->pszTitle); nCount = ComboBox_GetCount(GetDlgItem(hDlg, IDC_CONV_IMG_COM)); ComboBox_AddString(GetDlgItem(hDlg, IDC_CONV_IMG_COM), StripName); ComboBox_SetItemData(GetDlgItem(hDlg, IDC_CONV_IMG_COM), nCount , (LONG)pData); return TRUE; } static L_BOOL ConvDialog_OnCommand (HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT uCodeNotify) { LPCONVDATA pConvData; pCHILDDATA pData; HWND hWndParent; L_INT nValue; L_INT MinRange [] = {1, 1, 0}; L_INT MaxRange [] = {100, 100, 100}; L_INT nIndex; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); pConvData = (LPCONVDATA) GetWindowLong(hWnd, GWL_USERDATA); if(nID >= pConvData->nEdtBaseID && nID < pConvData->nEdtBaseID + pConvData->nSlideNum) { if(uCodeNotify == EN_CHANGE) { nValue = GetDlgItemInt(hWnd,nID, NULL, FALSE); nIndex = nID - pConvData->nEdtBaseID; Trackbar_SetPos (GetDlgItem(hWnd, nIndex + pConvData->nSldBaseID), TRUE, nValue); switch(nIndex) { case 0: if (pConvData->uXStep == (L_UINT)nValue) return FALSE; pConvData->uXStep = nValue; break; case 1: if (pConvData->uYStep == (L_UINT)nValue) return FALSE; pConvData->uYStep = nValue; break; case 2: if (pConvData->uThreshold == (L_UINT)nValue) return FALSE; pConvData->uThreshold = nValue; break; } L_ApplyFilter (hWnd); } } switch(nID) { case IDC_CONV_IMG_COM: if (uCodeNotify == CBN_SELCHANGE) { InvalidateRect(hWndCtl, NULL, FALSE); InvalidateRect(hWnd, NULL, FALSE); L_ApplyFilter (hWnd); } break; case IDCANCEL: StatusProc.bProgress = FALSE; StatusProc.bKillProgress = TRUE ; StatusProc.ProgressValue = 100 ; if (pConvData->hRgn) nIndex = L_SetBitmapRgnHandle(&pData->LeadBitmap, NULL, pConvData->hRgn, L_RGN_SET); DeleteRgn(pConvData->hRgn); EndDialog(hWnd, FALSE); break; case IDOK: ShowStatusWindow(FALSE); StatusProc.bStillWork = TRUE; StatusProc.bInvalidate = TRUE; StatusProc.bEnd = TRUE; DeleteRgn(pConvData->hRgn); EndDialog(hWnd, TRUE); break; } return TRUE; } static L_BOOL ConvDialog_OnHScroll (HWND hWnd, HWND hWndCtl, L_UINT nCode, L_INT nPos) { LPCONVDATA pConvData = (LPCONVDATA) GetWindowLong(hWnd, GWL_USERDATA); return SetDlgItemInt(hWnd, GetDlgCtrlID(hWndCtl) - pConvData->nSlideNum, Trackbar_GetPos(hWndCtl), TRUE); } static L_VOID L_ApplyFilter (HWND hWnd) { pCHILDDATA pData; pCHILDDATA pImgConvData; L_INT nRet = 0, i; HWND hWndParent; LPCONVDATA pConvData; POINT pPoints[10]={0}; L_UINT uNumOfPoints; RECT rcRect; L_INT nIndex; RECT rcRgn; if ( 100 != StatusProc.ProgressValue ) { StatusProc.bKillProgress = TRUE ; return ; } pConvData = (LPCONVDATA) GetWindowLong(hWnd,GWL_USERDATA); hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); FreeMemorizedBitmap (hWndParent); //MEMDISK// L_CopyBitmap(&pData->LeadBitmap, &pConvData->Bitmap, sizeof(BITMAPHANDLE)); nIndex = ComboBox_GetCurSel(GetDlgItem(hWnd, IDC_CONV_IMG_COM)); pImgConvData = (pCHILDDATA)ComboBox_GetItemData(GetDlgItem(hWnd, IDC_CONV_IMG_COM), nIndex); L_GetBitmapRgnBounds(&pImgConvData->LeadBitmap,NULL, &rcRgn); nRet = L_CorrelationBitmap(&pData->LeadBitmap, &pImgConvData->LeadBitmap, pPoints, 10, &uNumOfPoints, pConvData->uXStep, pConvData->uYStep, pConvData->uThreshold); if(nRet == SUCCESS) { // Release any previous region RECT rcOff = {0}; L_GetBitmapRgnBoundsClip (&pData->LeadBitmap, NULL, &rcOff); L_FreeBitmapRgn (&pData->LeadBitmap); InvalidateRect(hWndParent, NULL, FALSE); StatusProc.ProgressValue = 100; Progress_SetPos(StatusProc.ProgWnd , 0); if(StatusProc.bEnd) { StatusProc.bProgress = FALSE; StatusProc.bKillProgress = TRUE ; } if(uNumOfPoints) { for(i = 0; i < (L_INT)uNumOfPoints; i++) { rcRect.left = pPoints[i].x + rcOff.left; rcRect.top = pPoints[i].y + rcOff.top; rcRect.right = rcRect.left + (rcRgn.right - rcRgn.left); rcRect.bottom = rcRect.top + (rcRgn.bottom - rcRgn.top); if(i) L_SetBitmapRgnRect(&pData->LeadBitmap, NULL, &rcRect, L_RGN_OR); else L_SetBitmapRgnRect(&pData->LeadBitmap, NULL, &rcRect, L_RGN_SET); } } if(L_BitmapHasRgn(&pData->LeadBitmap)) { KillTimer(hWndParent, 1); pData->uTimerID = SetTimer(hWnd, 1, 100, NULL); } InvalidateRect(hWndParent, NULL, FALSE); } }