老师让我调试一个计算两种颜色色差并给出色差级别的WINDOWS程序。
因为每次求出的值偏差比较大,所以想计算5次值并将其平均值做为最终结果显示出来。
这就涉及到要求统计计算次数,我知道MouseEventArgs.Clicks 属性可以获取按下和释放鼠标的次数,但是在程序中应该怎么应用却不懂。
其中button_compute为计算色差按钮
麻烦好心人帮忙指点下,不甚感激。附一部分程序:
//以下内容为色差评估
private void buttonPG_Click(object sender, System.EventArgs e)      //选择功能为色差评估
{
GBth.Enabled=false;
GBth.Visible=false;
GBcm.Visible=false;
GBcm.Enabled=false;
GBpg.Visible=true;
GBpg.Enabled=true;
GBfz.Visible=false;
GBfz.Enabled=false;
GBwl.Visible=false;
GBwl.Enabled=false;
}               //分别获取两个颜色块的R、G、B值
private void panel1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
panel1.BackColor=mainflag.pixelColor;

} private void panel2_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
panel1.BackColor=mainflag.objColor;
}
                //将RGB值转化到计算色差所需的XYZ三刺激值空间
private void to2_XYZ(int r,int g,int b)      
{
double[,]a=new double[3,3]{{0.2025,0.1094,0.0703},{0.1162,0.2428,0.0331},{0.0133,0.0559,0.4340}};  
X=r*a[0,0]+g*a[0,1]+b*a[0,2];
Y=r*a[1,0]+g*a[1,1]+b*a[1,2];
Z=r*a[2,0]+g*a[2,1]+b*a[2,2];
}                //////////////////////////////////////
private double L(double y,double y0)
{
double l;
if ((y/y0)>0.008856)
{
l=116*Math.Pow(y/y0,1.0/3)-16.0;
return l;}
else
{
l=903.3*(y/y0);
return l;}
}
private double F(double I,double I0)
{
double f;
if ((I/I0)>0.008856)
{
f=Math.Pow(I/I0,1.0/3);
return f;}
else
{
f=7.787*(I/I0)+16.0/116;
return f;};
}
//计算色差
private void button_compute_Click(object sender, System.EventArgs e)
{
Color colorS,colorO;            //这里边是计算公式部分了
colorS=mainflag.pixelColor;
colorO=mainflag.objColor;
int r1,g1,b1,r2,g2,b2;
r1=colorS.R;
r2=colorO.R;
b1=colorS.B;
b2=colorO.B;
g1=colorS.G;
g2=colorO.G;
double X0=94.825,Y0=100.000,Z0=107.381,X1=0,X2=0,Y1=0,Y2=0,Z1=0,Z2=0,L1,L2,C1,C2,H1,H2,a1,a2,bl1,bl2;      
double[,]t=new double[3,4];
to2_XYZ(r1,g1,b1);
X1=X;Y1=Y;Z1=Z;
to2_XYZ(r2,g2,b2);
X2=X;Y2=Y;Z2=Z;
L1=L(Y1,Y0);
L2=L(Y2,Y0);
a1=500*(F(X1,X0)-F(Y1,Y0));
a2=500*(F(X2,X0)-F(Y2,Y0));
bl1=200*(F(Y1,Y0)-F(Z1,Z0));
bl2=200*(F(Y2,Y0)-F(Z2,Z0));
C1=Math.Pow(Math.Pow(a1,2)+Math.Pow(bl1,2),0.5);
C2=Math.Pow(Math.Pow(a2,2)+Math.Pow(bl2,2),0.5);
H1=Math.Atan(bl1/a1);
H2=Math.Atan(bl2/a2); t[0,1]=L1-L2;
t[0,0]=Math.Pow(Math.Pow(t[0,1],2)+Math.Pow((a2-a1),2)+Math.Pow((bl2-bl1),2),0.5);
t[0,2]=C1-C2;
t[0,3]=H1-H2; this.textBox11.Text=t[0,0].ToString();
this.textBox12.Text=t[0,1].ToString();
this.textBox13.Text=t[0,2].ToString();
this.textBox14.Text=t[0,3].ToString(); if(t[0,0]>11.6&&t[0,0]<=13.6)                    //根据计算得到的色差值所在范围来确定色差级别
this.textBox00.Text="1 级";
else if(t[0,0]>8.2&&t[0,0]<=11.6)
this.textBox00.Text="1-2 级";
else if(t[0,0]>5.6&&t[0,0]<=8.2)
this.textBox00.Text="2 级";
else if(t[0,0]>4.1&&t[0,0]<=5.6)
this.textBox00.Text="2-3 级";
else if(t[0,0]>3&&t[0,0]<=4.1)
this.textBox00.Text="3 级";
else if(t[0,0]>2.1&&t[0,0]<=3)
this.textBox00.Text="3-4 级";
else if(t[0,0]>1.3&&t[0,0]<=2.1)
this.textBox00.Text="4 级";
else if(t[0,0]>0.4&&t[0,0]<=1.3)
this.textBox00.Text="4-5 级";
else if(t[0,0]<=0.4)
this.textBox00.Text="5 级";
else 
this.textBox00.Text="";
} private void panel1_Click(object sender, System.EventArgs e)
{
mainflag.val=0;
}
private void panel2_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
if(RB_B.Checked)
{
mainflag.val=1;
}
else if(RB_S.Checked)
{
cdatabase cdatabase =new cdatabase();
if(cdatabase.ShowDialog()==DialogResult.OK)
panel2.BackColor=mainflag.objColor;
}
panel2.BackColor=mainflag.objColor; }
//色差评估结束