コード例 #1
0
        public void DrawColorDisCurve(int cNo, WriteableBitmap b, string ChartType)//绘制单个色差
        {
            this.ChartType = ChartType;
            List <List <Color> > al = new List <List <Color> >();

            if (ChartType == "XMark")
            {
                XMarkChart xm = new XMarkChart(b);
                al  = xm.getCurveColorDis();
                cNo = cNo - 7;
            }
            if (ChartType == "XRite")
            {
                XRiteColorChart x = new XRiteColorChart(b);
                al  = x.getCurveColorDis();
                cNo = cNo - 1;
            }
            DrawGraphic dg = new DrawGraphic(DrawCanvas);

            dg.DrawColorCy(0.9f);

            List <Color> tal = al[cNo];
            Color        c0  = (Color)tal[0];
            Color        c1  = (Color)tal[1];

            //picS.BackColor = c0;
            //picV.BackColor = c1;
            dg.DrawColorMoveHue(c0, c1, 0.9f);
        }
コード例 #2
0
        public void DrawWhiteBalanceCurve(WriteableBitmap b, string ChartType)//绘制白平衡的分析图
        {
            this.ChartType = ChartType;
            List <Color> al = new List <Color>();

            if (ChartType == "XMark")
            {
                XMarkChart xm = new XMarkChart(b);
                al = xm.getCurveWhiteBalance();
            }
            if (ChartType == "XRite")
            {
                XRiteColorChart x = new XRiteColorChart(b);
                al = x.getCurveWhiteBalance();
            }
            DrawGraphic dg = new DrawGraphic(DrawCanvas);

            //dg.InitCanvas(picCanvas.Width, picCanvas.Height);//需要先设置画布
            dg.DrawColorCy(0.9f);

            for (int i = 0; i < al.Count; i++)
            {
                Color c = (Color)al[i];
                dg.DrawColorPoint(c, 0.9f, 3);
            }
        }
コード例 #3
0
        public void DrawColorDisCurve(WriteableBitmap b, string ChartType)//绘制描述色差的图形
        {
            this.ChartType = ChartType;
            List <List <Color> > al = new List <List <Color> >();

            if (ChartType == "XMark")
            {
                XMarkChart xm = new XMarkChart(b);
                al = xm.getCurveColorDis();
            }
            if (ChartType == "XRite")
            {
                XRiteColorChart x = new XRiteColorChart(b);
                al = x.getCurveColorDis();
            }
            DrawGraphic dg = new DrawGraphic(DrawCanvas);

            dg.DrawColorCy(0.9f);
            for (int i = 7; i < 19; i++)
            {
                List <Color> tal = al[i - 7];
                Color        c0  = (Color)tal[0];
                Color        c1  = (Color)tal[1];
                //picS.BackColor = c0;
                //picV.BackColor = c1;
                dg.DrawColorMoveHue(c0, c1, 0.9f);
            }
        }
コード例 #4
0
        public void DrawMTFCurve(WriteableBitmap b, string ChartType)//绘制MTF的分析图
        {
            this.ChartType = ChartType;
            List <double> al = new List <double>();

            if (ChartType == "XMark")
            {
                XMarkChart xm = new XMarkChart(b);
                al = xm.getCurveMTF();
            }
            if (ChartType == "ISO12233")
            {
                ISO12233ExChart x = new ISO12233ExChart(b);
                al = x.getCurveMTF();
            }
            DrawGraphic dg = new DrawGraphic(DrawCanvas);

            //dg.InitCanvas(picCanvas.Width, picCanvas.Height);//需要先设置画布

            dg.DrawX();
            dg.DrawY();
            List <double> dlist = new List <double>();

            dlist.Add(0.0);
            dlist.Add(0.5);
            dlist.Add(1.0);
            dg.DrawYMark(dlist);
            dg.DrawXMark(dlist);
            dg.DrawTitle("MTF 曲线图");
            dg.DrawLines(al);
            //dg.DrawCurve(al);
            //picCanvas.Image = dg.Canvas;
        }
コード例 #5
0
        public void DrawDispersivenessCurve(WriteableBitmap b, string ChartType)//绘制色散分析图
        {
            this.ChartType = ChartType;
            List <List <int> > al = new List <List <int> >();
            WriteableBitmap    subB;

            if (ChartType == "XMark")
            {
                XMarkChart x = new XMarkChart(b);
                subB = x.getAreaHEdge();
                PhotoTestParameter xm = new PhotoTestParameter();
                al = xm.getCurveVDispersiveness(subB);
            }
            if (ChartType == "ISO12233")
            {
                ISO12233ExChart x = new ISO12233ExChart(b);
                subB = x.getAreaHEdge();
                PhotoTestParameter xm = new PhotoTestParameter();
                al = xm.getCurveHDispersiveness(b);
            }
            DrawGraphic dg = new DrawGraphic(DrawCanvas);

            dg.DrawX();
            List <double> MarkList = new List <double>();

            for (int i = 0; i < 101; i = i + 20)
            {
                MarkList.Add(i);
            }
            dg.DrawXMark(MarkList);
            MarkList.Clear();
            for (int i = 0; i < 255; i = i + 40)
            {
                MarkList.Add(i);
            }
            dg.DrawY();
            dg.DrawYMark(MarkList);

            List <double> ral, gal, bal;

            ral          = SilverlightLFC.common.Environment.getDoubleList <int>(al[0]);
            gal          = SilverlightLFC.common.Environment.getDoubleList <int>(al[1]);
            bal          = SilverlightLFC.common.Environment.getDoubleList <int>(al[2]);
            dg.ForeColor = Colors.Blue;
            dg.DrawLines(bal);
            dg.ForeColor = Colors.Red;
            dg.DrawLines(ral);
            dg.ForeColor = Colors.Green;
            dg.DrawLines(gal);
            dg.DrawTitle("色散");
        }
コード例 #6
0
 public void DrawBrightChangesCurve(WriteableBitmap b, string ChartType)//绘制亮度变化的分析图
 {
     this.ChartType = ChartType;
     if (ChartType == "XMark")
     {
         List <List <int> > al = new List <List <int> >();
         try
         {
             XMarkChart xm = new XMarkChart(b);
             al = xm.getCurveBrightnessChange();
         }
         catch (Exception ex)
         {
             if (ex is SilverlightLFC.common.LFCException)
             {
                 SilverlightLFC.common.Environment.ShowMessage(ex.Message);
             }
             else
             {
                 SilverlightLFC.common.Environment.ShowMessage("Error Process Image");
             }
         }
         DrawGraphic dg = new DrawGraphic(DrawCanvas);
         //dg.InitCanvas(picCanvas.Width, picCanvas.Height);
         dg.DrawX();
         List <double> MarkList = new List <double>();
         for (int i = 0; i < 101; i = i + 20)
         {
             MarkList.Add(i);
         }
         dg.DrawXMark(MarkList);
         MarkList.Clear();
         for (int i = 0; i < 255; i = i + 40)
         {
             MarkList.Add(i);
         }
         dg.DrawY();
         dg.DrawYMark(MarkList);
         List <int> val, hal;
         val          = al[1];
         hal          = al[0];
         dg.ForeColor = Colors.Blue;
         dg.DrawLines(SilverlightLFC.common.Environment.getDoubleList <int>(hal));
         dg.ForeColor = Colors.Red;
         dg.DrawLines(SilverlightLFC.common.Environment.getDoubleList <int>(val));
         dg.DrawTitle("亮度一致性变化");
         //picCanvas.Image = dg.Canvas;
     }
 }
コード例 #7
0
        public void DrawRainbowCurve(WriteableBitmap b, string ChartType)//绘制连续色阶准确性的分析图
        {
            this.ChartType = ChartType;
            List <Color> al = new List <Color>();

            if (ChartType == "XMark")
            {
                XMarkChart xm = new XMarkChart(b);
                al = xm.getCurveRainbow();
            }
            DrawGraphic dg = new DrawGraphic(DrawCanvas);

            dg.DrawColorCy(0.9f);

            dg.DrawColorList(al, 0.9f);
        }
コード例 #8
0
        public void Test(List <WriteableBitmap> b)
        {
            if (b.Count == 0 || b == null)
            {
                return;
            }
            bl = b;
            try
            {
                HB.Photo = (b[1]);
                VB.Photo = (b[2]);
                xt       = new XMarkChart();
                decimal d = xt.getBrightChanges(b[0]);//原始
                textBoxBrightChanges.Text = d.ToString();
                textBoxBB.Text            = xt.ProcessInfor["BrightChanges_BorderBright"].ToString();
                textBoxCB.Text            = xt.ProcessInfor["BrightChanges_CBright"].ToString();
                LT.Text = xt.ProcessInfor["BrightChanges_LT"].ToString();
                LB.Text = xt.ProcessInfor["BrightChanges_LB"].ToString();
                RT.Text = xt.ProcessInfor["BrightChanges_RT"].ToString();
                RB.Text = xt.ProcessInfor["BrightChanges_RB"].ToString();

                List <int> hl, vl;
                DCTestLibrary.PhotoTest pt = new DCTestLibrary.PhotoTest();
                hl           = pt.getImageGrayHLine(b[1], b[1].PixelHeight / 2);
                vl           = pt.getImageGrayVLine(b[2], b[2].PixelWidth / 2);
                dg.ForeColor = Colors.Blue;
                dg.DrawBrightLines(hl);
                dg.ForeColor = Colors.Red;
                dg.DrawBrightLines(vl);
            }
            catch (Exception xe)        //未知的异常
            {
                if (xe is LFCException) //已经是系统约定的错误类型,直接往上抛
                {
                    SilverlightLFC.common.Environment.ShowMessage(xe.Message);
                }
                else
                {
                    SilverlightLFC.common.Environment.ShowMessage("测试错误,请检查照片");
                }
            }
        }
コード例 #9
0
        public void DrawWaveQCurve(int no, WriteableBitmap b, string ChartType)//绘制成像一致性的分析图
        {
            this.ChartType = ChartType;
            List <List <decimal> > al = new List <List <decimal> >();

            if (ChartType == "XMark")
            {
                XMarkChart xm = new XMarkChart(b);
                al = xm.getCurveWaveQ();
            }
            DrawGraphic dg = new DrawGraphic(DrawCanvas);

            dg.DrawX();
            List <double> MarkList = new List <double>();
            int           step     = (al[(no - 1) * 2]).Count / 5;

            for (int i = 0; i < (al[(no - 1) * 2]).Count; i = i + step)
            {
                MarkList.Add(i);
            }
            dg.DrawXMark(MarkList);
            MarkList.Clear();
            for (int i = 0; i < 255; i = i + 40)
            {
                MarkList.Add(i);
            }
            dg.DrawY();
            dg.DrawYMark(MarkList);

            List <decimal> Sal, Val;

            Sal          = al[(no - 1) * 2];
            Val          = al[(no - 1) * 2 + 1];
            dg.ForeColor = Colors.Blue;
            dg.DrawLines(SilverlightLFC.common.Environment.getDoubleList <decimal>(Sal));
            dg.ForeColor = Colors.Red;
            dg.DrawLines(SilverlightLFC.common.Environment.getDoubleList <decimal>(Val));
            dg.DrawTitle("成像品质");
        }
コード例 #10
0
        public void DrawLatitudeCurve(WriteableBitmap b, string ChartType)//绘制动态范围的分析图
        {
            this.ChartType = ChartType;
            List <decimal> al = new List <decimal>();

            if (ChartType == "XMark")
            {
                XMarkChart xm = new XMarkChart(b);
                al = xm.getCurveLatitude();
            }
            if (ChartType == "XRite")
            {
                XRiteColorChart xr = new XRiteColorChart(b);
                al = xr.getCurveLatitude();
            }
            DrawGraphic dg = new DrawGraphic(DrawCanvas);

            dg.DrawX();
            List <double> MarkList = new List <double>();

            for (int i = 0; i < 101; i = i + 20)
            {
                MarkList.Add(i);
            }
            dg.DrawXMark(MarkList);
            MarkList.Clear();
            for (int i = 0; i < 255; i = i + 40)
            {
                MarkList.Add(i);
            }
            dg.DrawY();
            dg.DrawYMark(MarkList);
            dg.ForeColor = Colors.Red;
            dg.DrawStepPoint(SilverlightLFC.common.Environment.getDoubleList <decimal>(al));
            dg.DrawTitle("宽容度");
            //picCanvas.Image = dg.Canvas;
        }
コード例 #11
0
ファイル: Page.xaml.cs プロジェクト: lynxliu/CameraTest
        public void XMarkTest()//测试XMark卡的各种参数
        {
            processbar.Value = 0;
            ResultPanel.Children.Clear();
            sw.Stop();
            sw.Start();

            Button     li;
            XMarkChart xm = new XMarkChart(SourcePhoto);

            xm.CorrectChart();
            xm.BeginAnalyse();
            processbar.Value = 10;

            decimal r;

            r          = xm.getAberration() * 100;
            li         = new Button();
            li.Click  += new RoutedEventHandler(XMarkMTF_Click);
            li.Name    = "WAberration";
            li.Content = "广角端畸变:" + r.ToString() + " %";
            li.SetValue(ToolTipService.ToolTipProperty, "数据表示照片里面几何变形程度,正表示桶形畸变,负表示枕型畸变,0为无畸变");
            ResultPanel.Children.Add(li);
            processbar.Value = 20;

            r          = Convert.ToDecimal(xm.getLatitude());
            li         = new Button();
            li.Name    = "DynamicLatitude";
            li.Content = "动态范围:" + r.ToString() + " 级";
            li.Click  += new RoutedEventHandler(XMarkLatitude_Click);
            li.SetValue(ToolTipService.ToolTipProperty, "数据表示在一张照片里面可以分辨的灰度等级的数量");
            ResultPanel.Children.Add(li);
            processbar.Value = 30;

            r          = xm.getColorDis();
            li         = new Button();
            li.Name    = "ColorTrendValue";
            li.Content = "色彩趋向差异:" + r.ToString() + " 度";
            li.Click  += new RoutedEventHandler(XMarkColorDis_Click);
            li.SetValue(ToolTipService.ToolTipProperty, "数据表示在拍摄标准颜色时候色调的偏差,完全准确时为0");
            ResultPanel.Children.Add(li);
            processbar.Value = 40;

            r          = xm.getNoiseNum() * 100;
            li         = new Button();
            li.Name    = "Noise";
            li.Content = "噪点:" + r.ToString() + " %";
            li.SetValue(ToolTipService.ToolTipProperty, "数据表示在一张照片里面可以分辨的噪点数量");
            ResultPanel.Children.Add(li);
            processbar.Value = 50;

            r          = xm.getWhiteBanlance() * 100;
            li         = new Button();
            li.Name    = "AutoWhiteBalanceDistance";
            li.Content = "白平衡能力:" + r.ToString() + " %";
            li.Click  += new RoutedEventHandler(XMarkWhiteBalance_Click);
            li.SetValue(ToolTipService.ToolTipProperty, "数据表示拍摄灰度的时刻偏离灰度的程度,完全准确时为0");
            ResultPanel.Children.Add(li);
            processbar.Value = 60;

            r          = Convert.ToDecimal(xm.getVEdgeDispersiveness());
            li         = new Button();
            li.Name    = "Dispersiveness";
            li.Content = "色散:" + r.ToString() + " Pxl";
            li.SetValue(ToolTipService.ToolTipProperty, "数据表示红绿蓝三原色在边界分离的程度,也就是平均分离到几个像素,无色散时为0");
            li.Click += new RoutedEventHandler(XMarkDispersiveness_Click);
            ResultPanel.Children.Add(li);
            processbar.Value = 70;

            r          = xm.getBrightChanges() * 100;
            li         = new Button();
            li.Name    = "TLightingEquality";
            li.Content = "亮度一致性:" + r.ToString() + " %";
            li.Click  += new RoutedEventHandler(XMarkBrightChanges_Click);
            li.SetValue(ToolTipService.ToolTipProperty, "数据表示在照片里面中心亮度和四周亮度的差异,无差异时为0");
            ResultPanel.Children.Add(li);
            processbar.Value = 80;

            r          = xm.getHEdgeResoveLines();
            li         = new Button();
            li.Name    = "ResolvingPower";
            li.Content = "分辨率:" + r.ToString() + " lw/ph";
            li.Click  += new RoutedEventHandler(XMarkMTF_Click);
            li.SetValue(ToolTipService.ToolTipProperty, "数据表示在一张照片里面可以分辨的水平线条的数量");
            ResultPanel.Children.Add(li);
            processbar.Value = 90;

            r          = xm.getWaveQ() * 100;
            li         = new Button();
            li.Name    = "WaveQ";
            li.Content = "成像一致性:" + r.ToString() + " %";
            li.Click  += new RoutedEventHandler(XMarkWaveQ_Click);
            li.SetValue(ToolTipService.ToolTipProperty, "数据表示照片里面还原正弦灰度区域的能力,完全还原时为0,差异越大数据越大");
            ResultPanel.Children.Add(li);
            processbar.Value = 100;

            sw.Stop();
            li.SetValue(ToolTipService.ToolTipProperty, "测试共花费" + sw.Interval.Milliseconds.ToString() + "ms");

            Logo.Source = xm.AnalysePhoto;
        }
コード例 #12
0
 public XMarkChartTestViewModel()
 {
     TestChart = new XMarkChart();
     Test      = TestXMark;
 }