📄 gainps.cpp
字号:
// 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 + -