⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 staticoff.cpp

📁 又VC++实现的基于TWAIN的扫描仪图像输入处理软件
💻 CPP
字号:
// StaticOff.cpp : implementation file
//

#include "stdafx.h"
#include  <Windows.h>
#include "source10.h"
#include "StaticOff.h"
#include "Setscanner.h"

#include "stepcali.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

extern char InitDir2[100];
extern unsigned char Def_Stp_Para[300];	//下传缺省参数150B+分步校正参数150B存储缓冲区

/////////////////////////////////////////////////////////////////////////////
// CStaticOff dialog


CStaticOff::CStaticOff(CWnd* pParent /*=NULL*/)
	: CDialog(CStaticOff::IDD, pParent)
{
	//{{AFX_DATA_INIT(CStaticOff)
	
	m_TSH = _T("请修改静态偏移参数或选择相关操作.........");
	

	//读Def_Stp_Para缓冲区内的静态偏移校正参数(由JiaoZheng.cpp内读jiaose.ini文件初始化)进行显示初始化
	//int i=150+40;				//Def_Stp_Para缓冲区内的8个头静态偏移校正参数的起始位置为190
	m_OR1=Def_Stp_Para[190+0];
	m_OG1=Def_Stp_Para[190+1];
	m_OB1=Def_Stp_Para[190+2];

	m_OR2=Def_Stp_Para[190+3];
	m_OG2=Def_Stp_Para[190+4];
	m_OB2=Def_Stp_Para[190+5];

	m_OR3=Def_Stp_Para[190+6];
	m_OG3=Def_Stp_Para[190+7];
	m_OB3=Def_Stp_Para[190+8];

	m_OR4=Def_Stp_Para[190+9];
	m_OG4=Def_Stp_Para[190+10];
	m_OB4=Def_Stp_Para[190+11];

	m_OR5=Def_Stp_Para[190+12];
	m_OG5=Def_Stp_Para[190+13];
	m_OB5=Def_Stp_Para[190+14];


	//}}AFX_DATA_INIT
	Stp_Offset_INI();	//初始化Def_Stp_Para数组后150字节中的静态偏移参数
	RGB_Chk_ChgN(&m_OR1,&m_OG1,&m_OB1,32);	//将32~63转换成0~-31,供窗口显示
 	RGB_Chk_ChgN(&m_OR2,&m_OG2,&m_OB2,32);	//将32~63转换成0~-31,供窗口显示
	RGB_Chk_ChgN(&m_OR3,&m_OG3,&m_OB3,32);	//将32~63转换成0~-31,供窗口显示
	RGB_Chk_ChgN(&m_OR4,&m_OG4,&m_OB4,32);	//将32~63转换成0~-31,供窗口显示
	RGB_Chk_ChgN(&m_OR5,&m_OG5,&m_OB5,32);	//将32~63转换成0~-31,供窗口显示
}


void CStaticOff::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CStaticOff)
	DDX_Text(pDX, IDC_CCD1_B, m_OB1);
	DDX_Text(pDX, IDC_CCD1_R, m_OR1);
	DDX_Text(pDX, IDC_CCD1_G, m_OG1);
	DDX_Text(pDX, IDC_CCD2_B, m_OB2);
	DDX_Text(pDX, IDC_CCD2_R, m_OR2);
	DDX_Text(pDX, IDC_CCD2_G, m_OG2);
	DDX_Text(pDX, IDC_CCD3_B, m_OB3);
	DDX_Text(pDX, IDC_CCD3_R, m_OR3);
	DDX_Text(pDX, IDC_CCD3_G, m_OG3);
	DDX_Text(pDX, IDC_CCD4_B, m_OB4);
	DDX_Text(pDX, IDC_CCD4_R, m_OR4);
	DDX_Text(pDX, IDC_CCD4_G, m_OG4);
	DDX_Text(pDX, IDC_CCD5_B, m_OB5);
	DDX_Text(pDX, IDC_CCD5_R, m_OR5);
	DDX_Text(pDX, IDC_CCD5_G, m_OG5);
	DDX_Text(pDX, IDC_OFStatusL, m_TSH);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CStaticOff, CDialog)
	//{{AFX_MSG_MAP(CStaticOff)
	ON_BN_CLICKED(IDC_CuJiao, OnCuJiao)
	ON_BN_CLICKED(IDC_JingJiao, OnJingJiao)
	ON_BN_CLICKED(IDC_Save, OnSave)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CStaticOff message handlers

int CStaticOff::DoModal() 
{
	// TODO: Add your specialized code here and/or call the base class
	
	return CDialog::DoModal();
}

//////////////////////////////////////
//静态偏移设置窗口——初值获取校正函数	//
//////////////////////////////////////
void CStaticOff::OnCuJiao() 
{
	OffsetJiao(2);		//静态偏移初值获取校正
}

//////////////////////////////////////
//静态偏移设置窗口——精校正函数	//
//////////////////////////////////////
void CStaticOff::OnJingJiao() 
{
	OffsetJiao(3);		//静态偏移精校正

}

//////////////////////////////////////
//		静态偏移粗精校正函数		//
//////////////////////////////////////
void CStaticOff::OffsetJiao(int Cu_Jin) 
{
	UpdateData(true);				//将本过程外的变量值变化导入本过程,更新变量值
	
	//对输入的参数值进行有效性检查
	//	*****  静态偏移下传参数 (设置值为-31~+31) *****
	RGB_Check(&m_OR1,&m_OG1,&m_OB1,-31,31);	//对静态偏移设置值进行范围(-31~+31)检查
	RGB_Check(&m_OR2,&m_OG2,&m_OB2,-31,31);	//对静态偏移设置值进行范围(-31~+31)检查
	RGB_Check(&m_OR3,&m_OG3,&m_OB3,-31,31);	//对静态偏移设置值进行范围(-31~+31)检查
	RGB_Check(&m_OR4,&m_OG4,&m_OB4,-31,31);	//对静态偏移设置值进行范围(-31~+31)检查
	RGB_Check(&m_OR5,&m_OG5,&m_OB5,-31,31);	//对静态偏移设置值进行范围(-31~+31)检查

	m_TSH = _T("");
	UpdateData(false);  //将本过程内的变量值变化导出本过程,更新显示

	if (Cu_Jin==2)	
	  if (IDNO == MessageBox("是否继续底层静态偏移初始获取操作?","确认",MB_YESNO))
		{
			m_TSH = _T("请修改静态偏移参数或选择相关操作.........");
			UpdateData(false);  //将本过程内的变量值变化导出本过程
			return;
		}
	  else
		{
			m_TSH ="扫描仪正在进行静态偏移初值获取校正,等待接收校正结果参数.........";
			UpdateData(false);  //将本过程内的变量值变化导出本过程
		}

	if (Cu_Jin==3)	
		if (IDNO == MessageBox("是否继续底底层静态偏移精确调整操作?","确认",MB_YESNO))
		{
			m_TSH = _T("请修改静态偏移参数或选择相关操作.........");
			UpdateData(false);  //将本过程内的变量值变化导出本过程
			return;
		}
	  else
		{
			m_TSH ="扫描仪正在进行静态偏移精校正,等待接收校正结果参数.........";
			UpdateData(false);  //将本过程内的变量值变化导出本过程
		}

	//将输入的参数变量值写入Def_Stp_Para缓冲区,以供校正下传用(下传值为0~+63)
	int i=190;
    int R1,G1,B1;
	
	RGB_Chk_ChgP(m_OR1,m_OG1,m_OB1,-31,31,32,&R1,&G1,&B1);	//对静态偏移R、G、B进行范围(-31~+31)检查,设置值为负值时,将-1~-31转换成33~63
	Def_Stp_Para[i+0]=LOBYTE(R1);	//CCD1
	Def_Stp_Para[i+1]=LOBYTE(G1);
	Def_Stp_Para[i+2]=LOBYTE(B1);
	
	RGB_Chk_ChgP(m_OR2,m_OG2,m_OB2,-31,31,32,&R1,&G1,&B1);	//对静态偏移R、G、B进行范围(-31~+31)检查,设置值为负值时,将-1~-31转换成33~63
	Def_Stp_Para[i+3]=LOBYTE(R1);	//CCD2
	Def_Stp_Para[i+4]=LOBYTE(G1);
	Def_Stp_Para[i+5]=LOBYTE(B1);

	RGB_Chk_ChgP(m_OR3,m_OG3,m_OB3,-31,31,32,&R1,&G1,&B1);	//对静态偏移R、G、B进行范围(-31~+31)检查,设置值为负值时,将-1~-31转换成33~63
	Def_Stp_Para[i+6]=LOBYTE(R1);	//CCD3
	Def_Stp_Para[i+7]=LOBYTE(G1);
	Def_Stp_Para[i+8]=LOBYTE(B1);

	RGB_Chk_ChgP(m_OR4,m_OG4,m_OB4,-31,31,32,&R1,&G1,&B1);	//对静态偏移R、G、B进行范围(-31~+31)检查,设置值为负值时,将-1~-31转换成33~63
	Def_Stp_Para[i+9]=LOBYTE(R1);	//CCD4
	Def_Stp_Para[i+10]=LOBYTE(G1);
	Def_Stp_Para[i+11]=LOBYTE(B1);

	RGB_Chk_ChgP(m_OR5,m_OG5,m_OB5,-31,31,32,&R1,&G1,&B1);	//对静态偏移R、G、B进行范围(-31~+31)检查,设置值为负值时,将-1~-31转换成33~63
	Def_Stp_Para[i+12]=LOBYTE(R1);	//CCD5
	Def_Stp_Para[i+13]=LOBYTE(G1);
	Def_Stp_Para[i+14]=LOBYTE(B1);

	Step_Cali(Cu_Jin);				//下传底层静态偏移初始获取操作命令包并获取显示校正效果参数

	//用从底层获取的校正参数值更新偏移校正参数变量值
	i=190;
	m_OR1=Def_Stp_Para[i+0];
	m_OG1=Def_Stp_Para[i+1];
	m_OB1=Def_Stp_Para[i+2];
	
	m_OR2=Def_Stp_Para[i+3];
	m_OG2=Def_Stp_Para[i+4];
	m_OB2=Def_Stp_Para[i+5];
 	
	m_OR3=Def_Stp_Para[i+6];
	m_OG3=Def_Stp_Para[i+7];
	m_OB3=Def_Stp_Para[i+8];
	
	m_OR4=Def_Stp_Para[i+9];
	m_OG4=Def_Stp_Para[i+10];
	m_OB4=Def_Stp_Para[i+11];
	
	m_OR5=Def_Stp_Para[i+12];
	m_OG5=Def_Stp_Para[i+13];
	m_OB5=Def_Stp_Para[i+14];

	RGB_Chk_ChgN(&m_OR1,&m_OG1,&m_OB1,32);	//将32~63转换成0~-31,供窗口显示
 	RGB_Chk_ChgN(&m_OR2,&m_OG2,&m_OB2,32);	//将32~63转换成0~-31,供窗口显示
	RGB_Chk_ChgN(&m_OR3,&m_OG3,&m_OB3,32);	//将32~63转换成0~-31,供窗口显示
	RGB_Chk_ChgN(&m_OR4,&m_OG4,&m_OB4,32);	//将32~63转换成0~-31,供窗口显示
	RGB_Chk_ChgN(&m_OR5,&m_OG5,&m_OB5,32);	//将32~63转换成0~-31,供窗口显示

	//	*****  对静态偏移进行有效性检查 (设置值为-31~+31) *****
	RGB_Check(&m_OR1,&m_OG1,&m_OB1,-31,31);	//对静态偏移设置值进行范围(-31~+31)检查
	RGB_Check(&m_OR2,&m_OG2,&m_OB2,-31,31);	//对静态偏移设置值进行范围(-31~+31)检查
	RGB_Check(&m_OR3,&m_OG3,&m_OB3,-31,31);	//对静态偏移设置值进行范围(-31~+31)检查
	RGB_Check(&m_OR4,&m_OG4,&m_OB4,-31,31);	//对静态偏移设置值进行范围(-31~+31)检查
	RGB_Check(&m_OR5,&m_OG5,&m_OB5,-31,31);	//对静态偏移设置值进行范围(-31~+31)检查

	m_TSH ="请修改静态偏移参数或选择相关操作.........";
	UpdateData(false);  //将本过程内的变量值变化导出本过程,更新显示

}

//////////////////////////////////////
//静态偏移设置窗口——参数保存函数	//
//////////////////////////////////////
void CStaticOff::OnSave() 
{
    UpdateData(true); //将本过程外的变量值变化导入本过程

	//	*****  静态偏移下传参数 (设置值为-31~+31,下传值为0~+63) *****
	RGB_Check(&m_OR1,&m_OG1,&m_OB1,-31,31);	//对静态偏移设置值进行范围(-31~+31)检查
	RGB_Check(&m_OR2,&m_OG2,&m_OB2,-31,31);	//对静态偏移设置值进行范围(-31~+31)检查
	RGB_Check(&m_OR3,&m_OG3,&m_OB3,-31,31);	//对静态偏移设置值进行范围(-31~+31)检查
	RGB_Check(&m_OR4,&m_OG4,&m_OB4,-31,31);	//对静态偏移设置值进行范围(-31~+31)检查
	RGB_Check(&m_OR5,&m_OG5,&m_OB5,-31,31);	//对静态偏移设置值进行范围(-31~+31)检查


	m_TSH = _T("");
	UpdateData(false);  //将本过程内的变量值变化导出本过程

	if (IDNO == MessageBox("是否将当前静态偏移参数保存到参数文件?","确认",MB_YESNO))
		{
			m_TSH = _T("请修改静态偏移参数或选择相关操作.........");
			UpdateData(false);  //将本过程内的变量值变化导出本过程
			return;
		}

	char str[36];

	//保存静态偏移设置参数到参数文件
	sprintf(str, "%d", m_OR1);
	WritePrivateProfileString("CCD_Offset","R1", str, InitDir2); 
	sprintf(str, "%d", m_OG1);
	WritePrivateProfileString("CCD_Offset","G1", str, InitDir2); 
	sprintf(str, "%d", m_OB1);
	WritePrivateProfileString("CCD_Offset","B1", str, InitDir2); 

	sprintf(str, "%d", m_OR2);
	WritePrivateProfileString("CCD_Offset","R2", str, InitDir2); 
	sprintf(str, "%d", m_OG2);
	WritePrivateProfileString("CCD_Offset","G2", str, InitDir2); 
	sprintf(str, "%d", m_OB2);
	WritePrivateProfileString("CCD_Offset","B2", str, InitDir2); 

	sprintf(str, "%d", m_OR3);
	WritePrivateProfileString("CCD_Offset","R3", str, InitDir2); 
	sprintf(str, "%d", m_OG3);
	WritePrivateProfileString("CCD_Offset","G3", str, InitDir2); 
	sprintf(str, "%d", m_OB3);
	WritePrivateProfileString("CCD_Offset","B3", str, InitDir2); 

	sprintf(str, "%d", m_OR4);
	WritePrivateProfileString("CCD_Offset","R4", str, InitDir2); 
	sprintf(str, "%d", m_OG4);
	WritePrivateProfileString("CCD_Offset","G4", str, InitDir2); 
	sprintf(str, "%d", m_OB4);
	WritePrivateProfileString("CCD_Offset","B4", str, InitDir2); 

	sprintf(str, "%d", m_OR5);
	WritePrivateProfileString("CCD_Offset","R5", str, InitDir2); 
	sprintf(str, "%d", m_OG5);
	WritePrivateProfileString("CCD_Offset","G5", str, InitDir2); 
	sprintf(str, "%d", m_OB5);
	WritePrivateProfileString("CCD_Offset","B5", str, InitDir2); 
	
	m_TSH = _T("请修改静态偏移参数或选择相关操作.........");
	UpdateData(false);  //将本过程内的变量值变化导出本过程

}

void CStaticOff::OnCancel() 
{
	m_TSH ="";
	UpdateData(false);  //将本过程内的变量值变化导出本过程

/*	if (IDNO == MessageBox("是否关闭静态偏移校正窗口?","确认",MB_YESNO))
		{
			m_TSH = _T("请修改静态偏移参数或选择相关操作.........");
			UpdateData(false);  //将本过程内的变量值变化导出本过程
			return;
		}
*/
	//读取jiaose.ini文件内的静态偏移设置参数初始化Def_Stp_Para缓冲区
	Stp_Offset_INI();	//初始化Def_Stp_Para数组中的静态偏移参数

	CDialog::OnCancel();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -