|  | @@ -120,11 +120,16 @@ namespace OTSIncAReportApp._3_ServiceCenter
 | 
	
		
			
				|  |  |                  list_dt_picdata = opencv_piclist();
 | 
	
		
			
				|  |  |                  list_mats = new OpenCvSharp.Mat[list_dt_picdata.Count];
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | -            else                  
 | 
	
		
			
				|  |  | +            else if (type == (int)Outpic_enum.Render_pic)
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  |                  list_dt_picdata = opencv_piclist_Render();
 | 
	
		
			
				|  |  |                  list_mats = new OpenCvSharp.Mat[list_dt_picdata.Count + 1];
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | +            else
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +                list_dt_picdata = NoBackgroundParticleDiagram();
 | 
	
		
			
				|  |  | +                list_mats = new OpenCvSharp.Mat[list_dt_picdata.Count];
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |            
 | 
	
		
			
				|  |  |              NLog.LogManager.GetCurrentClassLogger().Info("Organize and splice all pictures......");
 | 
	
	
		
			
				|  | @@ -319,6 +324,131 @@ namespace OTSIncAReportApp._3_ServiceCenter
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +        private List<DataTable> NoBackgroundParticleDiagram()
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            List<DataTable> list_dt_picdata = new List<DataTable>();
 | 
	
		
			
				|  |  | +            DataTable picDatat = new DataTable();
 | 
	
		
			
				|  |  | +            List<Field> fieldlist = resultFile.List_OTSField;
 | 
	
		
			
				|  |  | +            picDatat.Columns.Add("X", typeof(double));
 | 
	
		
			
				|  |  | +            picDatat.Columns.Add("Y", typeof(double));
 | 
	
		
			
				|  |  | +            foreach (var f in m_list_allDfield)
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +                DataRow dr = picDatat.NewRow();
 | 
	
		
			
				|  |  | +                dr["X"] = f.OTSCoordinatePos.X;
 | 
	
		
			
				|  |  | +                dr["Y"] = f.OTSCoordinatePos.Y;
 | 
	
		
			
				|  |  | +                picDatat.Rows.Add(dr);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            DataTable total_dt_X = picDatat.Copy();
 | 
	
		
			
				|  |  | +            DataView dv_x = total_dt_X.DefaultView;
 | 
	
		
			
				|  |  | +            DataView dv_x_2 = dv_x.ToTable(true, "X").DefaultView;
 | 
	
		
			
				|  |  | +            dv_x_2.Sort = "X ASC";
 | 
	
		
			
				|  |  | +            total_dt_X = dv_x_2.ToTable();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            DataTable total_dt_Y = picDatat.Copy();
 | 
	
		
			
				|  |  | +            DataView dv_Y = total_dt_Y.DefaultView;
 | 
	
		
			
				|  |  | +            DataView dv_Y_2 = dv_Y.ToTable(true, "Y").DefaultView;
 | 
	
		
			
				|  |  | +            dv_Y_2.Sort = "Y ASC";
 | 
	
		
			
				|  |  | +            total_dt_Y = dv_Y_2.ToTable();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            //循环每一行图片
 | 
	
		
			
				|  |  | +            for (int i = 0; i < total_dt_Y.Rows.Count; i++)
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +                NLog.LogManager.GetCurrentClassLogger().Info("Splice line" + i + 1.ToString() + "of" + total_dt_Y.Rows.Count.ToString() + ".....");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                DataTable data = new DataTable();
 | 
	
		
			
				|  |  | +                data.Columns.Add("mat", typeof(Bitmap));
 | 
	
		
			
				|  |  | +                data.Columns.Add("X", typeof(double));
 | 
	
		
			
				|  |  | +                //循环每行图片进行拼接
 | 
	
		
			
				|  |  | +                Bitmap bitmap = new Bitmap((int)m_list_allDfield[0].OriginalImage.Width, (int)m_list_allDfield[0].OriginalImage.Height);
 | 
	
		
			
				|  |  | +               
 | 
	
		
			
				|  |  | +                
 | 
	
		
			
				|  |  | +                
 | 
	
		
			
				|  |  | +                for (int a = 0; a < total_dt_X.Rows.Count; a++)
 | 
	
		
			
				|  |  | +                {
 | 
	
		
			
				|  |  | +                    DataRow dr2 = data.NewRow();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                   
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    //Bitmap bitmap = new Bitmap((int)m_list_allDfield[0].GetShowRect().Width, (int)m_list_allDfield[0].GetShowRect().Height);
 | 
	
		
			
				|  |  | +                    Graphics g = Graphics.FromImage(bitmap);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    g.Clear(Color.White);
 | 
	
		
			
				|  |  | +                    g.Dispose();
 | 
	
		
			
				|  |  | +                    dr2["mat"] = bitmap;
 | 
	
		
			
				|  |  | +                    dr2["X"] = total_dt_X.Rows[a]["X"];
 | 
	
		
			
				|  |  | +                    data.Rows.Add(dr2);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                //循环所有图片
 | 
	
		
			
				|  |  | +                foreach (var f in m_list_allDfield)
 | 
	
		
			
				|  |  | +                {
 | 
	
		
			
				|  |  | +                    if (total_dt_Y.Rows[i]["Y"].ToString() == f.OTSCoordinatePos.Y.ToString())
 | 
	
		
			
				|  |  | +                    {
 | 
	
		
			
				|  |  | +                        //循环图片的行数
 | 
	
		
			
				|  |  | +                        for (int c = 0; c < data.Rows.Count; c++)
 | 
	
		
			
				|  |  | +                        {
 | 
	
		
			
				|  |  | +                            if (data.Rows[c]["X"].ToString() == f.OTSCoordinatePos.X.ToString())
 | 
	
		
			
				|  |  | +                            {
 | 
	
		
			
				|  |  | +                                Bitmap image = new Bitmap(bitmap.Width, bitmap.Height);
 | 
	
		
			
				|  |  | +                                Graphics g2 = Graphics.FromImage(image);
 | 
	
		
			
				|  |  | +                                //g2.Clear(Color.White);
 | 
	
		
			
				|  |  | +                                Color color1 = Color.FromArgb(217, 217, 217);
 | 
	
		
			
				|  |  | +                                g2.Clear(color1);
 | 
	
		
			
				|  |  | +                                g2.DrawImage(image, 0, 0, f.OriginalImage.Width, f.OriginalImage.Height);
 | 
	
		
			
				|  |  | +                                Graphics graph_2 = Graphics.FromImage(image);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                                for (int a = 0; a < fieldlist.Count; a++)
 | 
	
		
			
				|  |  | +                                {
 | 
	
		
			
				|  |  | +                                    if (fieldlist[a].FieldID.ToString() == f.FieldID.ToString())
 | 
	
		
			
				|  |  | +                                    {
 | 
	
		
			
				|  |  | +                                        //先获取该Field中的所有Particle
 | 
	
		
			
				|  |  | +                                        List<Particle> list_particle;
 | 
	
		
			
				|  |  | +                                        list_particle = fieldlist[a].ParticleList;
 | 
	
		
			
				|  |  | +                                        //再循环计算所有的Particle对象
 | 
	
		
			
				|  |  | +                                        foreach (Particle particle in list_particle)
 | 
	
		
			
				|  |  | +                                        {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                                            List<Segment> list_seg;
 | 
	
		
			
				|  |  | +                                            list_seg = particle.SegmentList;
 | 
	
		
			
				|  |  | +                                            //创建颗粒分布图对应的类对象
 | 
	
		
			
				|  |  | +                                            List<DisplaySegment> list_dsegment = new List<DisplaySegment>();
 | 
	
		
			
				|  |  | +                                            //再循环取出里面所有的segment
 | 
	
		
			
				|  |  | +                                            foreach (Segment seg in list_seg)
 | 
	
		
			
				|  |  | +                                            {
 | 
	
		
			
				|  |  | +                                                #region 创建DSegment对象,并将STD分析出的化合物颜色保存到DSegment对象中
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                                                Point on_p = new Point() { X = seg.Start, Y = seg.Height };
 | 
	
		
			
				|  |  | +                                                Point off_p = new Point() { X = seg.Start + seg.Length, Y = seg.Height };
 | 
	
		
			
				|  |  | +                                                //var color = DrawFunction.GetColorBySTDTypeIDForBSEAndSorImage("#434343", particle.TypeId);
 | 
	
		
			
				|  |  | +                                                
 | 
	
		
			
				|  |  | +                                                Pen npen = new Pen(Color.FromArgb(255-particle.AveGray, 0, 0, 0));
 | 
	
		
			
				|  |  | +                                                graph_2.DrawLine(npen, on_p, off_p);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                                                #endregion
 | 
	
		
			
				|  |  | +                                            }
 | 
	
		
			
				|  |  | +                                        }
 | 
	
		
			
				|  |  | +                                    }
 | 
	
		
			
				|  |  | +                                }
 | 
	
		
			
				|  |  | +                                data.Rows[c]["mat"] = image;
 | 
	
		
			
				|  |  | +                                data.Rows[c]["X"] = f.OTSCoordinatePos.X;
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                DataView dataView1 = data.DefaultView;
 | 
	
		
			
				|  |  | +                dataView1.Sort = "X ASC";
 | 
	
		
			
				|  |  | +                data = dataView1.ToTable();
 | 
	
		
			
				|  |  | +                list_dt_picdata.Add(data);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            return list_dt_picdata;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          private List<DataTable> opencv_piclist_Render()
 | 
	
		
			
				|  |  |          {
 |