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); }
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); } }
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); } }
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; }
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("色散"); }
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; } }
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); }
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("测试错误,请检查照片"); } } }
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("成像品质"); }
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; }
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; }
public XMarkChartTestViewModel() { TestChart = new XMarkChart(); Test = TestXMark; }