twain3.0/huagao/CImageProcPage.cpp

375 lines
12 KiB
C++

// CImageProcPage.cpp: 实现文件
//
#include "stdafx.h"
#include "CImageProcPage.h"
#include "afxdialogex.h"
#include "resource.h"
#include <vector>
static std::vector<CString> filters = {
_T("不除色"),
_T("除红色"),
_T("除绿色"),
_T("除蓝色"),
_T("红色增强"),
_T("绿色增强"),
_T("蓝色增强")
};
static std::vector<CString> sharpens = {
_T(""),
_T("锐化"),
_T("进一步锐化"),
_T("模糊"),
_T("进一步模糊")
};
static std::vector<CString> multiout = {
_T("彩色+灰度+黑白"),
_T("彩色+灰度"),
_T("彩色+黑白"),
_T("灰度+黑白")
};
// CImageProcPage 对话框
IMPLEMENT_DYNAMIC(CImageProcPage, CTabPageSSL)
CImageProcPage::CImageProcPage(CWnd* pParent /*=nullptr*/)
: CTabPageSSL(IDD_PAGEIMGPROC, pParent)
, m_ckbFillBlack(FALSE)
, m_ckbAutoDeskrew(FALSE)
, m_ckbMultioutput(FALSE)
, m_ckbRemoveHole(FALSE)
, m_ckbDetachNoise(FALSE)
, m_ckbHSVCorrect(FALSE)
, indent(5)
, noise(8)
,threshold(40)
,is_bw(false)
{
}
CImageProcPage::~CImageProcPage()
{
}
void CImageProcPage::ImageProcPageUpdate(int val,int twss, int cmduplexsel,bool is_Crop,int dpi)
{
this->dpi = dpi;
this->twss = twss;
this->cmduplexsel = cmduplexsel;
CComboBox* m_temp = (CComboBox*)(GetDlgItem(IDC_CMBFILTER));
CButton* t_chMultiOutput = (CButton*)(GetDlgItem(IDC_CKMULTIOUTPUT));
CComboBox* m_temp_sharpen = (CComboBox*)(GetDlgItem(IDC_CMBSHARPEN));
is_bw = val == 2 ? true : false;
this->is_crop = is_Crop;
if (((CButton*)GetDlgItem(IDC_CKFILLBLACKRECT))->GetCheck() || ((CButton*)GetDlgItem(IDC_CKAUTODESKREW))->GetCheck() || is_crop)
((CButton*)GetDlgItem(IDC_ADVANCEDSET))->EnableWindow(true);
else
{
((CButton*)GetDlgItem(IDC_ADVANCEDSET))->EnableWindow(false);
}
if (val == 0)
{
GetDlgItem(IDC_CKHSVCORRECT)->EnableWindow(TRUE);
GetDlgItem(IDC_CKBACKGROUNDSMOOTH)->EnableWindow(TRUE);
if (dpi >= 500) {
GetDlgItem(IDC_CHMULTIPUT)->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_CHMULTIPUT))->SetCheck(FALSE);
GetDlgItem(IDC_CMBMULTIOUT)->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_CMBMULTIOUT))->SetCheck(FALSE);
}
else
{
GetDlgItem(IDC_CHMULTIPUT)->EnableWindow(TRUE);
GetDlgItem(IDC_CMBMULTIOUT)->EnableWindow(((CButton*)GetDlgItem(IDC_CHMULTIPUT))->GetCheck());
}
}
else {
GetDlgItem(IDC_CKHSVCORRECT)->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_CKHSVCORRECT))->SetCheck(FALSE);
GetDlgItem(IDC_CKBACKGROUNDSMOOTH)->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_CKBACKGROUNDSMOOTH))->SetCheck(FALSE);
GetDlgItem(IDC_CHMULTIPUT)->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_CHMULTIPUT))->SetCheck(FALSE);
GetDlgItem(IDC_CMBMULTIOUT)->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_CMBMULTIOUT))->SetCheck(FALSE);
}
if (0 == val||val==3)//彩色
{
m_temp->SetCurSel(0);
m_temp->EnableWindow(FALSE);
//t_chMultiOutput->SetCheck(TRUE);
t_chMultiOutput->EnableWindow(TRUE);
}
else
{
m_temp->EnableWindow(TRUE);
t_chMultiOutput->SetCheck(FALSE);
t_chMultiOutput->EnableWindow(FALSE);
GetDlgItem(IDC_CKBACKGROUNDSMOOTH)->EnableWindow(FALSE);
}
if (val == 2)
{
((CButton*)GetDlgItem(IDC_CHECKDETACHNOISE))->EnableWindow(true);
//m_temp->SetCurSel(4);
}
else
{
((CButton*)GetDlgItem(IDC_CHECKDETACHNOISE))->SetCheck(false);
((CButton*)GetDlgItem(IDC_CHECKDETACHNOISE))->EnableWindow(false);
m_edit_detachnoise.EnableWindow(false);
m_slider_detachnoise.EnableWindow(false);
}
#ifndef G300
if (twss == 19 || twss == 20 || twss == 21 || (cmduplexsel == 4) || ((CButton*)GetDlgItem(IDC_CKFILLBLACKRECT))->GetCheck() || ((CButton*)GetDlgItem(IDC_CKAUTODESKREW))->GetCheck())
#else
if (twss == 8 || twss == 9 || twss == 10 || (cmduplexsel == 4) || ((CButton*)GetDlgItem(IDC_CKFILLBLACKRECT))->GetCheck() || ((CButton*)GetDlgItem(IDC_CKAUTODESKREW))->GetCheck())
#endif // !G300
{
((CButton*)GetDlgItem(IDC_CKCROPMODEL))->SetCheck(false);
((CButton*)GetDlgItem(IDC_CKCROPMODEL))->EnableWindow(false);
}
else
((CButton*)GetDlgItem(IDC_CKCROPMODEL))->EnableWindow(true);
}
void CImageProcPage::ImageAutoDescrewUpdate(int val)
{
//CButton* t_chAutoDeskrew = (CButton*)(GetDlgItem(IDC_CKAUTODESKREW));
//if (16 == val)
//{
// t_chAutoDeskrew->SetCheck(TRUE);
//}
}
void CImageProcPage::DoDataExchange(CDataExchange* pDX)
{
CTabPageSSL::DoDataExchange(pDX);
DDX_Control(pDX, IDC_SLDOUTHOLE, m_slider_hole);
DDX_Control(pDX, IDC_EDIT_HOLE, m_edit_hole);
DDX_Control(pDX, IDC_EDITDETACHNOISE, m_edit_detachnoise);
DDX_Control(pDX, IDC_SLIDERDETACHNOISE, m_slider_detachnoise);
DDX_Control(pDX, IDC_SLIDERFADEBACKRANGE, m_slider_faderange);
DDX_Control(pDX, IDC_EDITFADEBACKRANGE, m_edit_faderange);
DDX_Control(pDX, IDC_CMBFILTER, m_cmBoxFilter);
DDX_Control(pDX, IDC_CMBSHARPEN, m_cmBoxSharpen);
DDX_Check(pDX, IDC_CKBACKGROUNDSMOOTH, m_ckbfadeback);
DDX_Check(pDX, IDC_CKFILLBLACKRECT, m_ckbFillBlack);
DDX_Check(pDX, IDC_CKAUTODESKREW, m_ckbAutoDeskrew);
DDX_Check(pDX, IDC_CKMULTIOUTPUT, m_ckbMultioutput);
DDX_Check(pDX, IDC_CKREMOVEHOLE, m_ckbRemoveHole);
DDX_Check(pDX, IDC_CHECKDETACHNOISE,m_ckbDetachNoise);
DDX_Check(pDX, IDC_CKHSVCORRECT, m_ckbHSVCorrect);
}
BOOL CImageProcPage::OnInitDialog()
{
CTabPageSSL::OnInitDialog();
m_edit_hole.SetSlideLink(this, IDC_SLDOUTHOLE);
m_edit_hole.SetParams(0.01, 0.50, 10, _T("%0.2f"),20);
m_edit_hole.SetValue(0.10);
m_edit_faderange.SetSlideLink(this, IDC_SLIDERFADEBACKRANGE);
m_edit_faderange.SetParams(1, 128, 1);
m_edit_faderange.SetValue(40);
m_edit_detachnoise.SetSlideLink(this, IDC_SLIDERDETACHNOISE);
m_edit_detachnoise.SetParams(10, 50, 10);
m_edit_detachnoise.SetValue(detachnoise);
((CButton*)GetDlgItem(IDC_CHECKDETACHNOISE))->SetCheck(is_detachnoise);
for (int i = 0; i < filters.size(); i++)
{
m_cmBoxFilter.InsertString(i, filters[i]);
}
for (int i = 0; i < sharpens.size(); i++)
{
m_cmBoxSharpen.InsertString(i, sharpens[i]);
}
for (int i = 0; i < multiout.size(); i++)
{
((CComboBox*)GetDlgItem(IDC_CMBMULTIOUT))->InsertString(i, multiout[i]);
}
return true;
}
BEGIN_MESSAGE_MAP(CImageProcPage, CTabPageSSL)
ON_BN_CLICKED(IDC_CKREMOVEHOLE, &CImageProcPage::OnCtrlChange)
ON_BN_CLICKED(IDC_ADVANCEDSET, &CImageProcPage::OnBnClickedAdvancedset)
ON_BN_CLICKED(IDC_CKFILLBLACKRECT, &CImageProcPage::OnBnClickedCkfillblackrect)
ON_BN_CLICKED(IDC_CKAUTODESKREW, &CImageProcPage::OnBnClickedCkautodeskrew)
ON_BN_CLICKED(IDC_CHECKDETACHNOISE, &CImageProcPage::OnBnClickedCheckdetachnoise)
ON_BN_CLICKED(IDC_CKBACKGROUNDSMOOTH, &CImageProcPage::OnBnClickedCkbackgroundsmooth)
ON_BN_CLICKED(IDC_CHMULTIPUT, &CImageProcPage::OnBnClickedChmultiput)
ON_BN_CLICKED(IDC_CKMULTIOUTPUT, &CImageProcPage::OnBnClickedCkmultioutput)
END_MESSAGE_MAP()
void CImageProcPage::EnableOutHoleCheckChanged(BOOL enable)
{
UpdateData();
((CButton*)GetDlgItem(IDC_EDIT_HOLE))->SetCheck(enable);
GetDlgItem(IDC_EDIT_HOLE)->EnableWindow(enable);
GetDlgItem(IDC_SLDOUTHOLE)->EnableWindow(enable);
GetDlgItem(IDC_EDIT_HOLE)->EnableWindow(enable);
}
void CImageProcPage::SetOutHoleValue(int value)
{
m_edit_hole.SetValue(value);
}
void CImageProcPage::SetMultiOutputEnable(int pixtype, bool enable)
{
switch (pixtype)
{
case 2://彩色
((CButton*)GetDlgItem(IDC_CKMULTIOUTPUT))->SetCheck(enable);
((CButton*)GetDlgItem(IDC_CKMULTIOUTPUT))->EnableWindow(TRUE);
break;
case 0://灰度 黑白
case 1:
((CButton*)GetDlgItem(IDC_CKMULTIOUTPUT))->SetCheck(FALSE);
((CButton*)GetDlgItem(IDC_CKMULTIOUTPUT))->EnableWindow(FALSE);
break;
default:
break;
}
}
void CImageProcPage::OnCtrlChange()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData();
m_edit_hole.EnableWindow(m_ckbRemoveHole);
m_slider_hole.EnableWindow(m_ckbRemoveHole);
}
void CImageProcPage::OnBnClickedAdvancedset()
{
// TODO: 在此添加控件通知处理程序代码
CAdvancedDLG cb(indent, noise, threshold,is_convex,((CButton*)GetDlgItem(IDC_CKFILLBLACKRECT))->GetCheck(),this);
cb.DoModal();
noise= cb.m_Slider_noise.m_iPosition;
indent = cb.m_Slider_indent.m_iPosition;
threshold = cb.m_Slider_threshold.m_iPosition;
is_convex = cb.is_convex;
}
void CImageProcPage::OnBnClickedCkfillblackrect()
{
// TODO: 在此添加控件通知处理程序代码
if(((CButton*)GetDlgItem(IDC_CKFILLBLACKRECT))->GetCheck()|| ((CButton*)GetDlgItem(IDC_CKAUTODESKREW))->GetCheck()||is_crop)
((CButton*)GetDlgItem(IDC_ADVANCEDSET))->EnableWindow(true);
else
{
((CButton*)GetDlgItem(IDC_ADVANCEDSET))->EnableWindow(false);
}
#ifndef G300
if (twss == 19 || twss == 20|| twss == 21 || (cmduplexsel == 4) || ((CButton*)GetDlgItem(IDC_CKFILLBLACKRECT))->GetCheck() || ((CButton*)GetDlgItem(IDC_CKAUTODESKREW))->GetCheck())
#else
if (twss == 8 || twss == 9 || twss == 10 || (cmduplexsel == 4) || ((CButton*)GetDlgItem(IDC_CKFILLBLACKRECT))->GetCheck() || ((CButton*)GetDlgItem(IDC_CKAUTODESKREW))->GetCheck())
#endif // !G300
{
((CButton*)GetDlgItem(IDC_CKCROPMODEL))->SetCheck(false);
((CButton*)GetDlgItem(IDC_CKCROPMODEL))->EnableWindow(false);
}
else
((CButton*)GetDlgItem(IDC_CKCROPMODEL))->EnableWindow(true);
}
void CImageProcPage::OnBnClickedCkautodeskrew()
{
// TODO: 在此添加控件通知处理程序代码
if (((CButton*)GetDlgItem(IDC_CKFILLBLACKRECT))->GetCheck() || ((CButton*)GetDlgItem(IDC_CKAUTODESKREW))->GetCheck() || is_crop)
((CButton*)GetDlgItem(IDC_ADVANCEDSET))->EnableWindow(true);
else
{
((CButton*)GetDlgItem(IDC_ADVANCEDSET))->EnableWindow(false);
}
#ifndef G300
if (twss == 19 || twss == 20 || twss == 21|| (cmduplexsel == 4) || ((CButton*)GetDlgItem(IDC_CKFILLBLACKRECT))->GetCheck() || ((CButton*)GetDlgItem(IDC_CKAUTODESKREW))->GetCheck())
#else
if (twss == 8 || twss == 9 || twss == 10 || (cmduplexsel == 4) || ((CButton*)GetDlgItem(IDC_CKFILLBLACKRECT))->GetCheck() || ((CButton*)GetDlgItem(IDC_CKAUTODESKREW))->GetCheck())
#endif // !G300
{
((CButton*)GetDlgItem(IDC_CKCROPMODEL))->SetCheck(false);
((CButton*)GetDlgItem(IDC_CKCROPMODEL))->EnableWindow(false);
}
else
((CButton*)GetDlgItem(IDC_CKCROPMODEL))->EnableWindow(true);
}
void CImageProcPage::OnBnClickedCheckdetachnoise()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData();
m_ckbDetachNoise = m_ckbDetachNoise && is_bw;
m_edit_detachnoise.EnableWindow(m_ckbDetachNoise);
m_slider_detachnoise.EnableWindow(m_ckbDetachNoise);
}
void CImageProcPage::OnBnClickedCkbackgroundsmooth()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData();
m_ckbfadeback = m_ckbfadeback && (!is_bw);
GetDlgItem(IDC_SLIDERFADEBACKRANGE)->EnableWindow(m_ckbfadeback);
GetDlgItem(IDC_EDITFADEBACKRANGE)->EnableWindow(m_ckbfadeback);
}
void CImageProcPage::OnBnClickedChmultiput()
{
// TODO: 在此添加控件通知处理程序代码
if (((CButton*)GetDlgItem(IDC_CHMULTIPUT))->GetCheck()) {
GetDlgItem(IDC_CMBMULTIOUT)->EnableWindow(TRUE);
GetDlgItem(IDC_CKMULTIOUTPUT)->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_CKMULTIOUTPUT))->SetCheck(FALSE);
}
else
{
GetDlgItem(IDC_CMBMULTIOUT)->EnableWindow(FALSE);
((CComboBox*)GetDlgItem(IDC_CMBMULTIOUT))->SetCurSel(0);
GetDlgItem(IDC_CKMULTIOUTPUT)->EnableWindow(TRUE);
}
}
void CImageProcPage::OnBnClickedCkmultioutput()
{
// TODO: 在此添加控件通知处理程序代码
if (((CButton*)GetDlgItem(IDC_CKMULTIOUTPUT))->GetCheck()) {
GetDlgItem(IDC_CMBMULTIOUT)->EnableWindow(FALSE);
GetDlgItem(IDC_CHMULTIPUT)->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_CHMULTIPUT))->SetCheck(FALSE);
((CComboBox*)GetDlgItem(IDC_CMBMULTIOUT))->SetCurSel(0);
}
else
{
if (dpi < 500) {
GetDlgItem(IDC_CMBMULTIOUT)->EnableWindow(FALSE);
GetDlgItem(IDC_CHMULTIPUT)->EnableWindow(TRUE);
}
}
}