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

📄 gainps.cpp

📁 又VC++实现的基于TWAIN的扫描仪图像输入处理软件
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// GainPS.cpp : implementation file
//

#include "stdafx.h"
#include  <Windows.h>
#include "source10.h"
#include "GainPS.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存储缓冲区

/////////////////////////////////////////////////////////////////////////////
// CGainPS dialog


CGainPS::CGainPS(CWnd* pParent /*=NULL*/)
	: CDialog(CGainPS::IDD, pParent)
{
	//{{AFX_DATA_INIT(CGainPS)

 	Stp_GanPs_INI();	//初始化Def_Stp_Para数组后150字节中的静态增益及偏色系数参数

	m_TSH = _T("请修改增益和偏色参数或选择相关操作.........");

	//读Def_Stp_Para缓冲区内的静态增益校正参数(由JiaoZheng.cpp内读jiaose.ini文件初始化)进行显示初始化

	m_GainCode=(Def_Stp_Para[152]<<8) | (Def_Stp_Para[153]);
	//int i=150+64;				//Def_Stp_Para缓冲区内的8个头静态增益校正参数的起始位置为150+64
	m_GR1=Def_Stp_Para[214+0];
	m_GG1=Def_Stp_Para[214+1];
	m_GB1=Def_Stp_Para[214+2];

	m_GR2=Def_Stp_Para[214+3];
	m_GG2=Def_Stp_Para[214+4];
	m_GB2=Def_Stp_Para[214+5];

	m_GR3=Def_Stp_Para[214+6];
	m_GG3=Def_Stp_Para[214+7];
	m_GB3=Def_Stp_Para[214+8];

	m_GR4=Def_Stp_Para[214+9];
	m_GG4=Def_Stp_Para[214+10];
	m_GB4=Def_Stp_Para[214+11];

	m_GR5=Def_Stp_Para[214+12];
	m_GG5=Def_Stp_Para[214+13];
	m_GB5=Def_Stp_Para[214+14];

	//int i=150+88;				//Def_Stp_Para缓冲区内的8个头增益范围系数的起始位置为150+88
	m_GanR1=Def_Stp_Para[238+0];
	m_GanR2=Def_Stp_Para[238+1];
	m_GanR3=Def_Stp_Para[238+2];
	m_GanR4=Def_Stp_Para[238+3];
	m_GanR5=Def_Stp_Para[238+4];

	//读Def_Stp_Para缓冲区内的偏色校正参数(由JiaoZheng.cpp内读jiaose.ini文件初始化)进行显示初始化
	int GangCode=(Def_Stp_Para[150]<<8) | (Def_Stp_Para[151]);
	GangCode=m_PSMax=100*((1024.0/m_GainCode)-1.0);					//偏色系数的最大值
	m_PSMin=100*(((1.0*GangCode)/(1.0*m_GainCode))-1.0);	//偏色系数的最小值(负值)

	//int i=150+120;				//Def_Stp_Para缓冲区内的整体偏色校正参数的起始位置为120
	m_ZTPSR = Def_Stp_Para[270+0]-100;	//将下传系数-100恢复原始增加减少的百分比,供窗口显示
	m_ZTPSG = Def_Stp_Para[270+1]-100;
	m_ZTPSB = Def_Stp_Para[270+2]-100;
	
	//int i=150+96=246;				//Def_Stp_Para缓冲区内的8个头偏色校正参数的起始位置为96
	m_PSR1=Def_Stp_Para[246+0]-100;
	m_PSG1=Def_Stp_Para[246+1]-100;
	m_PSB1=Def_Stp_Para[246+2]-100;

	m_PSR2=Def_Stp_Para[246+3]-100;
	m_PSG2=Def_Stp_Para[246+4]-100;
	m_PSB2=Def_Stp_Para[246+5]-100;

	m_PSR3=Def_Stp_Para[246+6]-100;
	m_PSG3=Def_Stp_Para[246+7]-100;
	m_PSB3=Def_Stp_Para[246+8]-100;

	m_PSR4=Def_Stp_Para[246+9]-100;
	m_PSG4=Def_Stp_Para[246+10]-100;
	m_PSB4=Def_Stp_Para[246+11]-100;

	m_PSR5=Def_Stp_Para[246+12]-100;
	m_PSG5=Def_Stp_Para[246+13]-100;
	m_PSB5=Def_Stp_Para[246+14]-100;

	//}}AFX_DATA_INIT
}


void CGainPS::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CGainPS)
	DDX_Text(pDX, IDC_CCD1_R2, m_GR1);
	DDX_Text(pDX, IDC_CCD1_G2, m_GG1);
	DDX_Text(pDX, IDC_CCD1_B2, m_GB1);
	
	DDX_Text(pDX, IDC_CCD2_R2, m_GR2);
	DDX_Text(pDX, IDC_CCD2_G2, m_GG2);
	DDX_Text(pDX, IDC_CCD2_B2, m_GB2);
	
	DDX_Text(pDX, IDC_CCD3_R2, m_GR3);
	DDX_Text(pDX, IDC_CCD3_G2, m_GG3);
	DDX_Text(pDX, IDC_CCD3_B2, m_GB3);
	
	DDX_Text(pDX, IDC_CCD4_R2, m_GR4);
	DDX_Text(pDX, IDC_CCD4_G2, m_GG4);
	DDX_Text(pDX, IDC_CCD4_B2, m_GB4);
	
	DDX_Text(pDX, IDC_CCD5_R2, m_GR5);
	DDX_Text(pDX, IDC_CCD5_G2, m_GG5);
	DDX_Text(pDX, IDC_CCD5_B2, m_GB5);
	
	DDX_Text(pDX, IDC_CCD1_Rang, m_GanR1);
	DDX_Text(pDX, IDC_CCD2_Rang, m_GanR2);
	DDX_Text(pDX, IDC_CCD3_Rang, m_GanR3);
	DDX_Text(pDX, IDC_CCD4_Rang, m_GanR4);
	DDX_Text(pDX, IDC_CCD5_Rang, m_GanR5);

	DDX_Text(pDX, IDC_CCD1_R, m_PSR1);
	DDX_Text(pDX, IDC_CCD1_G, m_PSG1);
	DDX_Text(pDX, IDC_CCD1_B, m_PSB1);
	
	DDX_Text(pDX, IDC_CCD2_R, m_PSR2);
	DDX_Text(pDX, IDC_CCD2_G, m_PSG2);
	DDX_Text(pDX, IDC_CCD2_B, m_PSB2);
	
	DDX_Text(pDX, IDC_CCD3_R, m_PSR3);
	DDX_Text(pDX, IDC_CCD3_G, m_PSG3);
	DDX_Text(pDX, IDC_CCD3_B, m_PSB3);
	
	DDX_Text(pDX, IDC_CCD4_R, m_PSR4);
	DDX_Text(pDX, IDC_CCD4_G, m_PSG4);
	DDX_Text(pDX, IDC_CCD4_B, m_PSB4);
	
	DDX_Text(pDX, IDC_CCD5_R, m_PSR5);
	DDX_Text(pDX, IDC_CCD5_G, m_PSG5);
	DDX_Text(pDX, IDC_CCD5_B, m_PSB5);
	
	DDX_Text(pDX, IDC_GainCode, m_GainCode);
	
	DDX_Text(pDX, IDC_PSMax, m_PSMax);
	DDX_Text(pDX, IDC_PSMin, m_PSMin);
	
	DDX_Text(pDX, IDC_ZTPSR, m_ZTPSR);
	DDX_Text(pDX, IDC_ZTPSG, m_ZTPSG);
	DDX_Text(pDX, IDC_ZTPSB, m_ZTPSB);
	
	DDX_Text(pDX, IDC_GPStatusL, m_TSH);
	//}}AFX_DATA_MAP
}


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

/////////////////////////////////////////////////////////////////////////////
// CGainPS message handlers

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

//////////////////////////////////////
//增益及偏色设置窗口——初值获取校正函数	//
//////////////////////////////////////
void CGainPS::OnCuJiao() 
{
	GainPSJiao(4);		//增益及偏色初值获取校正
	
}

//////////////////////////////////////
//增益及偏色设置窗口——精校正函数	//
//////////////////////////////////////
void CGainPS::OnJingJiao() 
{
	GainPSJiao(5);		//增益及偏色精校正
	
}
//////////////////////////////////////
//		增益及偏色粗精校正函数		//
//////////////////////////////////////
void CGainPS::GainPSJiao(int Cu_Jin) 
{
	UpdateData(true);				//将本过程外的变量值变化导入本过程,更新变量值
	
	//从jiaose.ini文件中读取 感光目标码
    int GangCode=GetPrivateProfileInt("CCD_Gang_Dly","GangCode",500,InitDir2);
    int GainCMAX=GetPrivateProfileInt("CCD_Gain","GainCMAX",980,InitDir2);

	//对输入的参数值进行有效性检查(不小于感光目标码且不大于980)
	if (m_GainCode<GangCode) m_GainCode=GangCode;
		else if (m_GainCode>GainCMAX) m_GainCode=GainCMAX;
	
    RGB_Check(&m_GR1,&m_GG1,&m_GB1,0,0x1f);	//对静态增益输入值R、G、B进行范围(0~0x1f)检查
    RGB_Check(&m_GR2,&m_GG2,&m_GB2,0,0x1f);	//对静态增益输入值R、G、B进行范围(0~0x1f)检查
    RGB_Check(&m_GR3,&m_GG3,&m_GB3,0,0x1f);	//对静态增益输入值R、G、B进行范围(0~0x1f)检查
    RGB_Check(&m_GR4,&m_GG4,&m_GB4,0,0x1f);	//对静态增益输入值R、G、B进行范围(0~0x1f)检查
    RGB_Check(&m_GR5,&m_GG5,&m_GB5,0,0x1f);	//对静态增益输入值R、G、B进行范围(0~0x1f)检查

    R_Check(&m_GanR1,1,4);	//对增益范围输入值进行范围(1~4)检查
    R_Check(&m_GanR2,1,4);
    R_Check(&m_GanR3,1,4);
    R_Check(&m_GanR4,1,4);
    R_Check(&m_GanR5,1,4);

	//偏色系数在显示和输入时为原始值,在jiaose.ini文件中也为原始值。
	//在Def_Stp_Para缓冲区中保存的及下传的为偏移之后的正数。
	//偏色系数的最大值取决于增益目标码m_GainCode,即Max_Lim=(1-(1024÷m_GainCode))×100
	m_PSMax=100*((1024.0/m_GainCode)-1.0);					//偏色系数的最大值
	m_PSMin=100*(((1.0*GangCode)/(1.0*m_GainCode))-1.0);	//偏色系数的最小值(负值)

	
    RGB_Check(&m_PSR1,&m_PSG1,&m_PSB1,m_PSMin,m_PSMax);	//对偏色系数输入值进行范围(m_PSMin~m_PSMax)检查
    RGB_Check(&m_PSR2,&m_PSG2,&m_PSB2,m_PSMin,m_PSMax);	//对偏色系数输入值进行范围(m_PSMin~m_PSMax)检查
    RGB_Check(&m_PSR3,&m_PSG3,&m_PSB3,m_PSMin,m_PSMax);	//对偏色系数输入值进行范围(m_PSMin~m_PSMax)检查
    RGB_Check(&m_PSR4,&m_PSG4,&m_PSB4,m_PSMin,m_PSMax);	//对偏色系数输入值进行范围(m_PSMin~m_PSMax)检查
    RGB_Check(&m_PSR5,&m_PSG5,&m_PSB5,m_PSMin,m_PSMax);	//对偏色系数输入值进行范围(m_PSMin~m_PSMax)检查

    RGB_Check(&m_ZTPSR,&m_ZTPSG,&m_ZTPSB,m_PSMin,m_PSMax);	//对偏色系数输入值进行范围(m_PSMin~m_PSMax)检查

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

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

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

	//将输入的参数变量值写入Def_Stp_Para缓冲区,以供校正下传用
	Def_Stp_Para[152]	=HIBYTE(m_GainCode);	//增益目标码
	Def_Stp_Para[153]	=LOBYTE(m_GainCode);
	
	//静态增益
	int i=150+64;
	Def_Stp_Para[i+0]	=LOBYTE(m_GR1);		//CCD1
	Def_Stp_Para[i+1]	=LOBYTE(m_GG1);
	Def_Stp_Para[i+2]	=LOBYTE(m_GB1);
	
	Def_Stp_Para[i+3]	=LOBYTE(m_GR2);		//CCD2
	Def_Stp_Para[i+4]	=LOBYTE(m_GG2);
	Def_Stp_Para[i+5]	=LOBYTE(m_GB2);
	
	Def_Stp_Para[i+6]	=LOBYTE(m_GR3);		//CCD3
	Def_Stp_Para[i+7]	=LOBYTE(m_GG3);

⌨️ 快捷键说明

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