/*[]=====================================================================[]*/ /*[] LeadTools Run Time Library - Version 14 []*/ /*[] []*/ /*[] []*/ /*[] Copyright (c) 1991-2004 LEAD Technologies, Inc. []*/ /*[] All Rights Reserved. []*/ /*[]=====================================================================[]*/ #include "CSDem32.h" static L_BOOL ConvertToDlg_OnCommand (HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT codeNotify); static L_BOOL ConvertToDlg_OnInitDialog (HWND hWnd, HWND hWndFocus, LPARAM lParam); static L_BOOL ConvertToDlg_OnClose (HWND hWnd); static L_VOID L_ApplyFilter (HWND hWnd); static L_INT InitialClrHandle (HWND hWnd); L_BOOL CALLBACK ConvertToDlgProc (HWND hWnd, L_UINT uMessage, WPARAM wParam, LPARAM lParam) { switch(uMessage) { HANDLE_MSG (hWnd, WM_COMMAND, ConvertToDlg_OnCommand); HANDLE_MSG (hWnd, WM_INITDIALOG, ConvertToDlg_OnInitDialog); HANDLE_MSG (hWnd, WM_DESTROY, ConvertToDlg_OnClose); HANDLE_MSG (hWnd, WM_CLOSE, ConvertToDlg_OnClose); case WM_USER_UPDATEVIEW: StatusProc.ProgressValue = 100; L_ApplyFilter (hWnd); break; } return FALSE; } static L_BOOL ConvertToDlg_OnInitDialog (HWND hWnd, HWND hWndFocus, LPARAM lParam) { LPCONVTODLGDATA pConvToDlgData; pCHILDDATA pData; HWND hWndParent; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); pConvToDlgData = (LPCONVTODLGDATA)lParam; MoveDialogToMiddle(hWnd); SetWindowLong(hWnd,GWL_USERDATA,(LONG)pConvToDlgData); //MEMDISK...// MemorizeAndCopyBitmap (hWndParent, &pConvToDlgData->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_CTC_PROG); UpdateWindow(hWnd); ShowWindow(hWnd, SW_SHOW); pConvToDlgData->nRdoBaseID = IDC_CTC_RGB_RAD; pConvToDlgData->nRadioNum = 14; pConvToDlgData->uConvertType = pData->uConvertType; pConvToDlgData->pInput = (L_UCHAR *) malloc (sizeof(L_UCHAR) * pData->LeadBitmap.Size); pConvToDlgData->pOutput = (L_UCHAR *) malloc (sizeof(L_UCHAR) * pData->LeadBitmap.Size); L_GetBitmapRowCol(&pData->LeadBitmap, pConvToDlgData->pInput, 0, 0, pData->LeadBitmap.Size); pData->bAutoHandle = TRUE; pData->bCMYKSetting = FALSE; Button_SetCheck(GetDlgItem(hWnd, pConvToDlgData->nRdoBaseID + 1), TRUE); Button_Enable (GetDlgItem(hWnd, IDC_CTC_STG_BTN), FALSE); ComboBox_Enable(GetDlgItem(hWnd, IDC_CTC_STG_COM), FALSE); pConvToDlgData->uToFlag = 1; InitialClrHandle(hWnd); L_ApplyFilter (hWnd); return ( TRUE ); } L_INT InitialClrHandle(HWND hWnd) { LPCONVTODLGDATA pConvToDlgData; pCHILDDATA pData; HWND hWndParent; L_UINT uToType; L_INT nRet; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); pConvToDlgData = (LPCONVTODLGDATA) GetWindowLong(hWnd, GWL_USERDATA); switch(pConvToDlgData->uToFlag) { case 0 : uToType = CCS_RGB ; break; case 1 : uToType = CCS_YUV ; break; case 2 : free (pConvToDlgData->pOutput); pConvToDlgData->pOutput = (L_UCHAR *) malloc (sizeof(L_UCHAR) * (pData->LeadBitmap.Size + (pData->LeadBitmap.Size / 3))); uToType = CCS_CMYK; break; case 3 : uToType = CCS_HSV ; break; case 4 : uToType = CCS_HLS ; break; case 5 : uToType = CCS_YIQ ; break; case 6 : uToType = CCS_CMY ; break; case 7 : uToType = CCS_LAB ; break; case 8 : uToType = CCS_XYZ ; break; case 9 : uToType = CCS_YUY2; break; case 10: uToType = CCS_YVU9; break; case 11: uToType = CCS_BGR ; break; case 12: uToType = CCS_UYVY; break; case 13: uToType = CCS_YCC ; break; default: return ERROR_INV_PARAMETER; } nRet = L_ClrInit(&pData->ClrHandle, CCS_BGR, uToType, NULL) ; if(nRet != SUCCESS) { L_FileError(hWnd, nRet, TEXT ("Color Conversion Demo"), NULL); return nRet; } return SUCCESS; } static L_BOOL ConvertToDlg_OnCommand (HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT codeNotify) { HWND hWndParent; pCHILDDATA pData; L_INT nIndex; LPCONVTODLGDATA pConvToDlgData; L_INT nRet; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); pConvToDlgData = (LPCONVTODLGDATA) GetWindowLong(hWnd, GWL_USERDATA); if (nID >= pConvToDlgData->nRdoBaseID && nID < pConvToDlgData->nRdoBaseID + pConvToDlgData->nRadioNum) { nIndex = nID - pConvToDlgData->nRdoBaseID; if (pConvToDlgData->uToFlag == (L_UINT)(nIndex)) return FALSE; pConvToDlgData->uToFlag = (L_UINT)nIndex; if(nID == IDC_CTC_CMYK_RAD) { pData->bAutoHandle = FALSE; pData->bCMYKSetting = TRUE; Button_Enable (GetDlgItem(hWnd, IDC_CTC_STG_BTN), FALSE); ComboBox_Enable(GetDlgItem(hWnd, IDC_CTC_STG_COM), TRUE); ComboBox_ResetContent(GetDlgItem(hWnd, IDC_CTC_STG_COM)); ComboBox_AddString(GetDlgItem(hWnd, IDC_CTC_STG_COM), TEXT("Auto Initialization")); ComboBox_AddString(GetDlgItem(hWnd, IDC_CTC_STG_COM), TEXT("CMYK Setting")); ComboBox_SetCurSel(GetDlgItem(hWnd, IDC_CTC_STG_COM), 0); } else if(nID == IDC_CTC_LAB_RAD) { pData->bAutoHandle = FALSE; pData->bCMYKSetting = FALSE; Button_Enable (GetDlgItem(hWnd, IDC_CTC_STG_BTN), FALSE); ComboBox_Enable (GetDlgItem(hWnd, IDC_CTC_STG_COM), TRUE); ComboBox_ResetContent(GetDlgItem(hWnd, IDC_CTC_STG_COM)); ComboBox_AddString (GetDlgItem(hWnd, IDC_CTC_STG_COM), TEXT("Auto Initialization")); ComboBox_AddString (GetDlgItem(hWnd, IDC_CTC_STG_COM), TEXT("LAB Setting")); ComboBox_SetCurSel (GetDlgItem(hWnd, IDC_CTC_STG_COM), 0); } else { pData->bAutoHandle = TRUE; Button_Enable (GetDlgItem(hWnd, IDC_CTC_STG_BTN), FALSE); ComboBox_Enable(GetDlgItem(hWnd, IDC_CTC_STG_COM), FALSE); } L_ApplyFilter (hWnd); return TRUE; } switch (nID) { case IDC_CTC_STG_COM: if (codeNotify == CBN_SELCHANGE) { nIndex = ComboBox_GetCurSel(GetDlgItem(hWnd, IDC_CTC_STG_COM)); if(nIndex == 0) { pData->bAutoHandle = TRUE; Button_Enable(GetDlgItem(hWnd, IDC_CTC_STG_BTN), FALSE); } else if(nIndex == 1) { pData->bAutoHandle = FALSE; pData->bCMYKSetting = (pConvToDlgData->uToFlag == CCS_CMYK) ? TRUE : FALSE; Button_Enable(GetDlgItem(hWnd, IDC_CTC_STG_BTN), TRUE); if(pData->bCMYKSetting) nRet = L_ClrInit(&pData->ManualHandle, CCS_BGR, CCS_CMYK, NULL); else nRet = L_ClrInit(&pData->ManualHandle, CCS_BGR, CCS_LAB , NULL); } L_ApplyFilter(hWnd); } break; case IDC_CTC_STG_BTN: nRet = L_ClrDlg((pData->bCMYKSetting) ? DLG_CMYK : DLG_LAB, hWnd, &pData->ManualHandle, NULL); if(nRet != SUCCESS) { break; } 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; switch(pConvToDlgData->uToFlag) { case 0 : pData->uConvertType = CCS_RGB ; break; case 1 : pData->uConvertType = CCS_YUV ; break; case 2 : pData->uConvertType = CCS_CMYK; break; case 3 : pData->uConvertType = CCS_HSV ; break; case 4 : pData->uConvertType = CCS_HLS ; break; case 5 : pData->uConvertType = CCS_YIQ ; break; case 6 : pData->uConvertType = CCS_CMY ; break; case 7 : pData->uConvertType = CCS_LAB ; break; case 8 : pData->uConvertType = CCS_XYZ ; break; case 9 : pData->uConvertType = CCS_YUY2; break; case 10: pData->uConvertType = CCS_YVU9; break; case 11: pData->uConvertType = CCS_BGR ; break; case 12: pData->uConvertType = CCS_UYVY; break; case 13: pData->uConvertType = CCS_YCC ; break; } EndDialog(hWnd, TRUE); break; } return TRUE; } static L_BOOL ConvertToDlg_OnClose (HWND hWnd) { HWND hWndParent; pCHILDDATA pData; LPCONVTODLGDATA pConvToDlgData; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); pConvToDlgData = (LPCONVTODLGDATA) GetWindowLong(hWnd, GWL_USERDATA); if(pConvToDlgData->pInput) { free(pConvToDlgData->pInput); pConvToDlgData->pInput = NULL; } if(pConvToDlgData->pOutput) { free(pConvToDlgData->pOutput); pConvToDlgData->pOutput = NULL; } L_ClrFree(pData->ClrHandle); L_ClrFree(pData->ManualHandle); return TRUE; } static L_VOID L_ApplyFilter (HWND hWnd) { pCHILDDATA pData; L_INT nRet = 0; HWND hWndParent; LPCONVTODLGDATA pConvToDlgData; L_UINT uToType; if ( 100 != StatusProc.ProgressValue ) { StatusProc.bKillProgress = TRUE ; return ; } pConvToDlgData = (LPCONVTODLGDATA) GetWindowLong(hWnd,GWL_USERDATA); hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); FreeMemorizedBitmap (hWndParent); //MEMDISK// L_CopyBitmap(&pData->LeadBitmap, &pConvToDlgData->Bitmap, sizeof(BITMAPHANDLE)); switch(pConvToDlgData->uToFlag) { case 0 : uToType = CCS_RGB ; break; case 1 : uToType = CCS_YUV ; break; case 2 : free (pConvToDlgData->pOutput); pConvToDlgData->pOutput = (L_UCHAR *) malloc (sizeof(L_UCHAR) * (pData->LeadBitmap.Size + (pData->LeadBitmap.Size / 3))); uToType = CCS_CMYK; break; case 3 : uToType = CCS_HSV ; break; case 4 : uToType = CCS_HLS ; break; case 5 : uToType = CCS_YIQ ; break; case 6 : uToType = CCS_CMY ; break; case 7 : uToType = CCS_LAB ; break; case 8 : uToType = CCS_XYZ ; break; case 9 : uToType = CCS_YUY2; break; case 10: uToType = CCS_YVU9; break; case 11: uToType = CCS_BGR ; break; case 12: uToType = CCS_UYVY; break; case 13: uToType = CCS_YCC ; break; default: return; } SetCursor (LoadCursor(NULL, IDC_WAIT)); if(pData->bAutoHandle || ComboBox_GetCurSel(GetDlgItem(hWnd, IDC_CTC_STG_COM)) != 1) { nRet = InitialClrHandle(hWnd); if (nRet != SUCCESS) { L_FileError(hWnd, nRet, TEXT ("Color Conversion Demo"), NULL); return; } } else pData->ClrHandle = pData->ManualHandle; nRet = L_ClrConvert(pData->ClrHandle, pConvToDlgData->pInput, pConvToDlgData->pOutput, pData->LeadBitmap.Width, pData->LeadBitmap.Height, (pData->LeadBitmap.BytesPerLine - pData->LeadBitmap.Width*3), 0);//0,0 if(nRet != SUCCESS) { L_FileError(hWnd, nRet, TEXT ("Color Conversion Demo"), NULL); return; } nRet = L_ClrInit(&pData->ClrHandle, uToType, CCS_BGR, NULL); if(nRet != SUCCESS) { L_FileError(hWnd, nRet, TEXT ("Color Conversion Demo"), NULL); return; } nRet = L_ClrConvertToBitmap(pData->ClrHandle, pConvToDlgData->pOutput, &pData->LeadBitmap, SIZEOFBITMAPHANDLE, pData->LeadBitmap.Width, pData->LeadBitmap.Height, 0, (pData->LeadBitmap.BytesPerLine - pData->LeadBitmap.Width*3));//4 if(nRet != SUCCESS) { L_FileError(hWnd, nRet, TEXT ("Color Conversion Demo"), NULL); return; } pConvToDlgData->uConvertType = uToType; SetCursor (LoadCursor(NULL, IDC_ARROW)); if(nRet == SUCCESS) { InvalidateRect(hWndParent, NULL, FALSE); StatusProc.ProgressValue = 100; Progress_SetPos(StatusProc.ProgWnd , 0); if(StatusProc.bEnd) { StatusProc.bProgress = FALSE; StatusProc.bKillProgress = TRUE ; } } }