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

📄 stepcali.cpp

📁 又VC++实现的基于TWAIN的扫描仪图像输入处理软件
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	Def_Stp_Para[i+1]	=LOBYTE(Tmp);
	Tmp=GetPrivateProfileInt("Motor_Move","Max_Vec",2500,InitDir2);
    Def_Stp_Para[i+2]	=HIBYTE(Tmp);	//最高速度
	Def_Stp_Para[i+3]	=LOBYTE(Tmp);
	Tmp=GetPrivateProfileInt("Motor_Move","Max_Acc",100,InitDir2);
    Def_Stp_Para[i+4]	=HIBYTE(Tmp);	//加速度最大值
	Def_Stp_Para[i+5]	=LOBYTE(Tmp);
	Tmp=GetPrivateProfileInt("Motor_Move","Max_Acc_Stp",500,InitDir2);
    Def_Stp_Para[i+6]	=HIBYTE(Tmp);	//最大加速步数
	Def_Stp_Para[i+7]	=LOBYTE(Tmp);

	i=130;	//扫描
	Tmp=GetPrivateProfileInt("Motor_Scan","Start_Vec",30000,InitDir2);
    Def_Stp_Para[i+0]	=HIBYTE(Tmp);	//启动速度
	Def_Stp_Para[i+1]	=LOBYTE(Tmp);
	Tmp=GetPrivateProfileInt("Motor_Scan","Max_Vec",20000,InitDir2);
    Def_Stp_Para[i+2]	=HIBYTE(Tmp);	//最高速度
	Def_Stp_Para[i+3]	=LOBYTE(Tmp);
	Tmp=GetPrivateProfileInt("Motor_Scan","Max_Acc",100,InitDir2);
    Def_Stp_Para[i+4]	=HIBYTE(Tmp);	//加速度最大值
	Def_Stp_Para[i+5]	=LOBYTE(Tmp);
	Tmp=GetPrivateProfileInt("Motor_Scan","Max_Acc_Stp",100,InitDir2);
    Def_Stp_Para[i+6]	=HIBYTE(Tmp);	//最大加速步数
	Def_Stp_Para[i+7]	=LOBYTE(Tmp);

	//***台面坐标缺省参数mm***
	i=138;
	Tmp=GetPrivateProfileInt("Plant_Para","Max_X_Wid",841,InitDir2);
    Def_Stp_Para[i+0]	=HIBYTE(Tmp);	//X方向最大宽度
	Def_Stp_Para[i+1]	=LOBYTE(Tmp);
	Tmp=GetPrivateProfileInt("Plant_Para","Max_Y_Len",841,InitDir2);
    Def_Stp_Para[i+2]	=HIBYTE(Tmp);	//Y方向最大长度
	Def_Stp_Para[i+3]	=LOBYTE(Tmp);
	Tmp=GetPrivateProfileInt("Plant_Para","Zero_Pos",10,InitDir2);
    Def_Stp_Para[i+4]	=HIBYTE(Tmp);	//扫描零点位置
	Def_Stp_Para[i+5]	=LOBYTE(Tmp);
	Tmp=GetPrivateProfileInt("Plant_Para","White_Pos",0,InitDir2);
    Def_Stp_Para[i+6]	=HIBYTE(Tmp);	//校正白线位置
	Def_Stp_Para[i+7]	=LOBYTE(Tmp);
	Tmp=GetPrivateProfileInt("Plant_Para","Black_Pos",0,InitDir2);
    Def_Stp_Para[i+8]	=HIBYTE(Tmp);	//校正黑线位置
	Def_Stp_Para[i+9]	=LOBYTE(Tmp);

	//***DSP软件延时周期数缺省参数***
	Tmp=GetPrivateProfileInt("DSP_Para","Wait_Per",2,InitDir2);
    Def_Stp_Para[148]	=LOBYTE(Tmp);
}

//----------------		2004.2.23 初始化感光系数		------------//
//		读jiaose.ini文件,初始化Def_Stp_Para数组中的感光参数			//
//------------------------------------------------------------------//
void Stp_GanG_INI()
{
	int i,Tmp,Max;
	
	//感光目标码
	i=150;
	Tmp=GetPrivateProfileInt("CCD_Gang_Dly","GangCode",500,InitDir2);
    Max=GetPrivateProfileInt("CCD_Gang_Dly","GangCMAX",800,InitDir2);
    if(Tmp<200) Tmp=200;				//有效性检查
	   else if(Tmp>Max) Tmp=Max;
	Def_Stp_Para[i+0]	=HIBYTE(Tmp);
	Def_Stp_Para[i+1]	=LOBYTE(Tmp);

	//附加感光时间参数
	i=150+8;
	int j;
	char TmpStr[5];
	strcpy(TmpStr,"CCD1");
	for (j=1;j<=8;j++)
	{
		TmpStr[3]=LOBYTE(0x30+j);
		Tmp=GetPrivateProfileInt("CCD_Gang_Add",TmpStr,100,InitDir2);
		R_Check(&Tmp,0,255);	//附加感光时间设置值进行范围(0~255)检查
		Def_Stp_Para[i]	=LOBYTE(Tmp);
		i=i+1;
	}

	//感光延迟时间参数
	int R,G,B;
	char RStr[3],GStr[3],BStr[3];

	i=150+16;
	strcpy(RStr,"R1");
	strcpy(GStr,"G1");
	strcpy(BStr,"B1");

	for (j=1;j<=8;j++)
	{
		RStr[1]=LOBYTE(0x30+j);
		GStr[1]=LOBYTE(0x30+j);
		BStr[1]=LOBYTE(0x30+j);
		R=GetPrivateProfileInt("CCD_Gang_Dly",RStr,10,InitDir2);
		G=GetPrivateProfileInt("CCD_Gang_Dly",GStr,10,InitDir2);
		B=GetPrivateProfileInt("CCD_Gang_Dly",BStr,10,InitDir2);
		RGB_Check(&R,&G,&B,0,255);	//对感光时间R、G、B进行范围(1~254)检查
		Def_Stp_Para[i+0]	=LOBYTE(R);
		Def_Stp_Para[i+1]	=LOBYTE(G);
		Def_Stp_Para[i+2]	=LOBYTE(B);
		i=i+3;
	}
}

//----------------		2004.2.23 初始化静态偏移系数	------------//
//		读jiaose.ini文件,初始化Def_Stp_Para数组中的静态偏移参数		//
//------------------------------------------------------------------//
void Stp_Offset_INI()	
{
	//	*****  静态偏移下传参数 (设置值为-31~+31,下传值为0~+63) *****
	int R,G,B;
	int R1,G1,B1;
	char RStr[3],GStr[3],BStr[3];

	int i=150+40;
	strcpy(RStr,"R1");
	strcpy(GStr,"G1");
	strcpy(BStr,"B1");

	for (int j=1;j<=8;j++)
	{
		RStr[1]=LOBYTE(0x30+j);
		GStr[1]=LOBYTE(0x30+j);
		BStr[1]=LOBYTE(0x30+j);
		R=GetPrivateProfileInt("CCD_Offset",RStr,0,InitDir2);
		G=GetPrivateProfileInt("CCD_Offset",GStr,0,InitDir2);
		B=GetPrivateProfileInt("CCD_Offset",BStr,0,InitDir2);
		RGB_Chk_ChgP(R,G,B,-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);
		i=i+3;
	}
}

//----------------	2004.2.23 初始化静态增益及偏色系数	---------------------//
//		读jiaose.ini文件,初始化Def_Stp_Para数组中的静态增益及偏色系数参数	 //
//---------------------------------------------------------------------------//
void Stp_GanPs_INI()
{
	//增益目标码
	int GangCode=GetPrivateProfileInt("CCD_Gang_Dly","GangCode",200,InitDir2);
    int GainCode=GetPrivateProfileInt("CCD_Gain","GainCode",980,InitDir2);
    int GainCMAX=GetPrivateProfileInt("CCD_Gain","GainCMAX",1000,InitDir2);
	if (GainCode<GangCode) GainCode=GangCode;		//增益目标码不能小于感光目标码
		else if (GainCode>GainCMAX) GainCode=GainCMAX;
	Def_Stp_Para[152]	=HIBYTE(GainCode);	//增益目标码
	Def_Stp_Para[153]	=LOBYTE(GainCode);

	int i,j,Tmp;
	//增益系数
	int R,G,B;
	char RStr[3],GStr[3],BStr[3];

	i=150+64;
	strcpy(RStr,"R1");
	strcpy(GStr,"G1");
	strcpy(BStr,"B1");

	for (j=1;j<=8;j++)
	{
		RStr[1]=LOBYTE(0x30+j);
		GStr[1]=LOBYTE(0x30+j);
		BStr[1]=LOBYTE(0x30+j);
		R=GetPrivateProfileInt("CCD_Gain",RStr,0,InitDir2);
		G=GetPrivateProfileInt("CCD_Gain",GStr,0,InitDir2);
		B=GetPrivateProfileInt("CCD_Gain",BStr,0,InitDir2);
		RGB_Check(&R,&G,&B,0,0x1f);	//对静态增益R、G、B进行范围(0~0x1f)检查
		Def_Stp_Para[i+0]	=LOBYTE(R);
		Def_Stp_Para[i+1]	=LOBYTE(G);
		Def_Stp_Para[i+2]	=LOBYTE(B);
		i=i+3;
	}

	//增益范围系数
	i=150+88;				//起始位置=150+88,每头一字节
	char TmpStr[5];
	strcpy(TmpStr,"CCD1");
	for (j=1;j<=5;j++)
	{
		TmpStr[3]=LOBYTE(0x30+j);
		Tmp=GetPrivateProfileInt("CCD_Gan_Range",TmpStr,3,InitDir2);
		Def_Stp_Para[i]	=LOBYTE(Tmp);
		i=i+1;
	}

/* 			*****  偏色调整系数下传参数  *****
	1. 作用:对增益目标码进行比例增加(系数为正)或比例减小(系数为负)
	2. 最大值:取决于增益目标码GainCode,即Max_Lim=((1024÷GainCode)-1)×100
	3. 最小值:取决于感光目标码GangCode,即Min_Lim=((GangCode÷GainCode)-1)×100
	4. 最大调整范围:感光目标码GangCode~最大目标码1024
	5. 系数的最大范围:Min_Lim~Max_Lim
    6. 在显示和输入时为原始值,在jiaose.ini文件中也为原始值(正负)。
	7. 在Def_Stp_Para缓冲区中保存的及下传的为加100偏移之后的正数。
*/
	int PS_Min,PS_Max;
	PS_Max=(int)(100*((1024.0/GainCode)-1.0));					//偏色系数的最大值
	PS_Min=(int)(100*(((1.0*GangCode)/(1.0*GainCode))-1.0));	//偏色系数的最小值(负值)
	
	if (PS_Max >155) PS_Max = 155;
	if (PS_Min <-99) PS_Min = -99;
	//将计算的偏色系数上下限值写入配置文件
	char str[36];
	sprintf(str, "%d", PS_Min);			//最小值
	WritePrivateProfileString("CCD_PSAdj","Ps_Min", str, InitDir2); 
	sprintf(str, "%d", PS_Max);			//最大值
	WritePrivateProfileString("CCD_PSAdj","Ps_Max", str, InitDir2); 
	
	i=150+120;
	Def_Stp_Para[i+3]	=LOBYTE(PS_Max+100);		//下传最大值
	Def_Stp_Para[i+4]	=LOBYTE(PS_Min+100);		//下传最小值

	//整体偏色系数
    R=GetPrivateProfileInt("CCD_PSAdj","ZTR",0,InitDir2);
	G=GetPrivateProfileInt("CCD_PSAdj","ZTG",0,InitDir2);
	B=GetPrivateProfileInt("CCD_PSAdj","ZTB",0,InitDir2);
    RGB_Check(&R,&G,&B,PS_Min,PS_Max);	//对偏色系数R、G、B进行范围检查
	Def_Stp_Para[i+0]	=LOBYTE(R+100);		//R通道整体
	Def_Stp_Para[i+1]	=LOBYTE(G+100);		//G通道整体
	Def_Stp_Para[i+2]	=LOBYTE(B+100);		//B通道整体

	//单头偏色系数
	i=150+96;
	strcpy(RStr,"R1");
	strcpy(GStr,"G1");
	strcpy(BStr,"B1");

	for (j=1;j<=8;j++)
	{
		RStr[1]=LOBYTE(0x30+j);
		GStr[1]=LOBYTE(0x30+j);
		BStr[1]=LOBYTE(0x30+j);
		R=GetPrivateProfileInt("CCD_PSAdj",RStr,0,InitDir2);
		G=GetPrivateProfileInt("CCD_PSAdj",GStr,0,InitDir2);
		B=GetPrivateProfileInt("CCD_PSAdj",BStr,0,InitDir2);
		RGB_Check(&R,&G,&B,PS_Min,PS_Max);	//对偏色系数R、G、B进行范围检查
		Def_Stp_Para[i+0]	=LOBYTE(R+100);
		Def_Stp_Para[i+1]	=LOBYTE(G+100);
		Def_Stp_Para[i+2]	=LOBYTE(B+100);
		i=i+3;
	}
}

//-----------------------------	2004.3.24 ----------------------------------//
//				读jiaose.ini文件,初始化Def_Stp_Para数组中的:				//
//					1. 分步校正控制参数										//
//					2. 动态增益均值滤波控制参数								//
//--------------------------------------------------------------------------//
void Stp_Cai_CtrP_INI()
{
	int i,Tmp;
	//***分步校正控制参数***
	i=150+125;
	Tmp=GetPrivateProfileInt("Cali_Ctr_Para","Max_F_Num",10,InitDir2);
    Def_Stp_Para[i+0]	=LOBYTE(Tmp);	//最大值查找的次数
	Tmp=GetPrivateProfileInt("Cali_Ctr_Para","Min_F_Num",10,InitDir2);
    Def_Stp_Para[i+1]	=LOBYTE(Tmp);	//最小值查找的次数
	Tmp=GetPrivateProfileInt("Cali_Ctr_Para","GangG_Err",32,InitDir2);
    Def_Stp_Para[i+2]	=LOBYTE(Tmp);	//感光门限
	Tmp=GetPrivateProfileInt("Cali_Ctr_Para","SOff_Err",6,InitDir2);
    Def_Stp_Para[i+3]	=LOBYTE(Tmp);	//静态偏移门限
	Tmp=GetPrivateProfileInt("Cali_Ctr_Para","SGain_err",16,InitDir2);
    Def_Stp_Para[i+4]	=LOBYTE(Tmp);	//静态增益门限
	Tmp=GetPrivateProfileInt("Cali_Ctr_Para","PGain_err",12,InitDir2);
    Def_Stp_Para[i+5]	=LOBYTE(Tmp);	//动态增益门限

	//***动态增益均值滤波控制参数***
	i=150+134;
	Tmp=GetPrivateProfileInt("PGain_Aver_Para","Aver_P_Ena",0,InitDir2);
    Def_Stp_Para[i+0]	=LOBYTE(Tmp);	//均值滤波处理允许=0xA5-->允许
	
	Tmp=GetPrivateProfileInt("PGain_Aver_Para","Aver_Num",8,InitDir2);
    Def_Stp_Para[i+1]	=LOBYTE(Tmp);	//均值范围:N
	Tmp=GetPrivateProfileInt("PGain_Aver_Para","Aver_Num_MI",3,InitDir2);
    Def_Stp_Para[i+2]	=LOBYTE(Tmp);	//N值的2的幂次方	以方便求平均值
	Tmp=GetPrivateProfileInt("PGain_Aver_Para","Aver_Err",32,InitDir2);
    Def_Stp_Para[i+3]	=LOBYTE(Tmp);	//象点值偏差r(下传值	折半匹配时,动态增益效果值与各通道目标码的偏差范围)
}

//----------------2004.2.23---------------------//
//		对输入参数R进行范围(Min~Max)检查		//
//----------------------------------------------//
void R_Check(int *R,int Min,int Max)
{
	if(*R<Min) *R=Min;
		else if(*R>Max) *R=Max;
}

//----------------2004.2.23---------------------//
//	对输入参数R、G、B进行范围(Min~Max)检查	//
//----------------------------------------------//
void RGB_Check(int *R,int *G,int *B,int Min,int Max)
{
	if(*R<Min) *R=Min;
		else if(*R>Max) *R=Max;
	if(*G<Min) *G=Min;
		else if(*G>Max) *G=Max;
	if(*B<Min) *B=Min;
		else if(*B>Max) *B=Max;
}

//----------------2004.2.23 供下传--------------//
//	对输入参数R、G、B进行范围(Min~Max)检查	//
//	  若值为负,则将其转换成正数:R=Base-R		//
//			R、G、B-->R1、G1、B1				//		
//----------------------------------------------//
void RGB_Chk_ChgP(int R,int G,int B,int Min,int Max,int Base,int *R1,int *G1,int *B1)
{
	*R1=R;
	*G1=G;
	*B1=B;
	if(*R1<Min) *R1=Min;				//设置值的范围检查
		else if(*R1>Max) *R1=Max;
	if(*G1<Min) *G1=Min;
		else if(*G1>Max) *G1=Max;
	if(*B1<Min) *B1=Min;
		else if(*B1>Max) *B1=Max;
	
	if (*R1<0) *R1=Base-*R1;			//设置值为负值时,将-1~-31转换成33~63
	if (*G1<0) *G1=Base-*G1;
	if (*B1<0) *B1=Base-*B1;
}

//----------------2004.2.23 供窗口显示----------//
//		对上传参数R、G、B进行范围转换			//
//		若R>=Base,则将其转换成:R=Base-R		//
//----------------------------------------------//
void RGB_Chk_ChgN(int *R,int *G,int *B,int Base)
{
 	if (*R>=Base) *R=Base-*R;		//将32~63转换成0~-31,供窗口显示
	if (*G>=Base) *G=Base-*G;
	if (*B>=Base) *B=Base-*B;
}

⌨️ 快捷键说明

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