首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 一个C# WINDOWS程序中需计算5次值的平均值,统计计算次数部分不知道如何编写??? [已结贴,结贴人:ost86]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ost86
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 揭贴率:
    发表于:2008-08-08 16:05:56 楼主
    老师让我调试一个计算两种颜色色差并给出色差级别的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;

    }
    //色差评估结束
    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Red_angelX
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-08 16:11:581楼 得分:10
    沙发先
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Red_angelX
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-08 16:13:232楼 得分:35
    没看懂你要干什么
    要获得按下弹起用MousePress  Release事件里加个计数器就好了..
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • LQknife
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-08 17:04:513楼 得分:10
    没看懂,帮你顶
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lxuan_025
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-08 17:22:094楼 得分:10


    不懂  帮顶
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zlkingdom
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 11:40:565楼 得分:35
    你要计算色差?
    在鼠标移动完了以后你再取值进行计算吧,如果点一下就计算一下是很浪费性能呢,给你的程序在计算之前设置一个标准点
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ost86
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 14:48:486楼 得分:0
    虽然各位的回答都不是我想要的,不过给出的分数如果不给也是被系统回收,那还是分给你们好了。
    谢谢罗:)
    程序的事我还是自己请教老师吧
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved