Przeglądaj źródła

Merge branch 'Release2.4' of http://36.129.163.148:10080/gaoshipeng/OTS2_0 into Release2.4

gsp 2 lat temu
rodzic
commit
917551de49

+ 63 - 4
OTSCPP/OTSControl/Simulate/OTSEDSSim.cpp

@@ -230,24 +230,83 @@ namespace OTSController {
 			// failed to call CollectASpectrumFromTxtFile method
 			LogTrace(__FILE__, __LINE__, _T("COTSEDSSim::GetXRayByFeatures: failed to call CollectASpectrumFromTxtFile method."));
 		}
+		int icount = 0;
 		for (auto pXrayPoi : a_listXRayPoints)
 		{
 			pXrayPoi->SetXrayData(m_nRayData);
 			if (m_bDoQuantification)
 			{
+				CString sResult = "";
 				CElementChemistriesList listElementQuantifyData;
 
 				//CString sResult = _T("Quant=O,K-Serie,28.5\nQuant=Al,L-Serie,26.4\nQuant=S,L-Serie,1.6\nQuant=Ca,L-Serie,15.8\nQuant=Fe,L-Serie,9.5");
 				//CString sResult = _T("Quant=O,K-Serie,28.5\nQuant=Fe,L-Serie,49.5");
 				CElementPtr pElement = CElementPtr(new CElement());
 				//listElementQuantifyData = pElement->ExtractElementChemistrys(sResult);
+				switch (icount % 7)
+				{
+				case 0://MnS
+					sResult = _T("Quant=O,K-Serie,28.5\nQuant=S,L-Serie,10\nQuant=Mn,L-Serie,20\nQuant=Fe,L-Serie,9.5");
+					listElementQuantifyData = pElement->ExtractElementChemistrys(sResult);
+					pXrayPoi->SetElementQuantifyData(listElementQuantifyData);
+					break;
 
-				CString sResult = _T("Quant=O,K-Serie,28.5\nQuant=S,L-Serie,10\nQuant=Mn,L-Serie,20\nQuant=Fe,L-Serie,9.5");
-				listElementQuantifyData = pElement->ExtractElementChemistrys(sResult);
-				pXrayPoi->SetElementQuantifyData(listElementQuantifyData);
+				case 1://FeO
+					sResult = _T("Quant=O,K-Serie,4.84\nQuant=Al,L-Serie,1.47\nQuant=S,L-Serie,1.6\nQuant=Si,L-Serie,2.42\nQuant=Mn,L-Serie,2.97\nQuant=Fe,L-Serie,80.361");
+					listElementQuantifyData = pElement->ExtractElementChemistrys(sResult);
+					pXrayPoi->SetElementQuantifyData(listElementQuantifyData);
+					break;
 
-				pXrayPoi->SetElementQuantifyData(listElementQuantifyData);
+				case 3://Sulfide
+					sResult = _T("Quant=C,K-Serie,1.057\nQuant=S,L-Serie,2.177\nQuant=Fe,L-Serie,84.592");
+					listElementQuantifyData = pElement->ExtractElementChemistrys(sResult);
+					pXrayPoi->SetElementQuantifyData(listElementQuantifyData);
+					break;
+
+				case 4://Silicate
+					sResult = _T("Quant=O,K-Serie,9.75\nQuant=Al,L-Serie,1.08\nQuant=Si,L-Serie,5.261\nQuant=Mn,L-Serie,11.204\nQuant=Fe,L-Serie,50.403");
+					listElementQuantifyData = pElement->ExtractElementChemistrys(sResult);
+					pXrayPoi->SetElementQuantifyData(listElementQuantifyData);
+					break;
 
+				case 5://SiO2
+					sResult = _T("Quant=C,K-Serie,12.563\nQuant=O,L-Serie,1.906\nQuant=Si,L-Serie,26.126\nQuant=Fe,L-Serie,54.61");
+					listElementQuantifyData = pElement->ExtractElementChemistrys(sResult);
+					pXrayPoi->SetElementQuantifyData(listElementQuantifyData);
+					break;
+
+				case 6://AlO2
+					sResult = _T("Quant=Al,K-Serie,40\nQuant=O,L-Serie,40\nQuant=Fe,L-Serie,20");
+					listElementQuantifyData = pElement->ExtractElementChemistrys(sResult);
+					pXrayPoi->SetElementQuantifyData(listElementQuantifyData);
+					break;
+
+				//case 7:
+				//	sResult = _T("Quant=Al,K-Serie,1\nQuant=O,L-Serie,2\nQuant=Fe,L-Serie,2");
+				//	listElementQuantifyData = pElement->ExtractElementChemistrys(sResult);
+				//	pXrayPoi->SetElementQuantifyData(listElementQuantifyData);
+				//	break;
+
+				//case 8:
+				//	sResult = _T("Quant=Fe,K-Serie,10\nQuant=C,L-Serie,30\nQuant=F,L-Serie,25");
+				//	listElementQuantifyData = pElement->ExtractElementChemistrys(sResult);
+				//	pXrayPoi->SetElementQuantifyData(listElementQuantifyData);
+				//	break;
+
+				//case 9:
+				//	sResult = _T("Quant=O,K-Serie,40\nQuant=Si,L-Serie,40\nQuant=C,L-Serie,1");
+				//	listElementQuantifyData = pElement->ExtractElementChemistrys(sResult);
+				//	pXrayPoi->SetElementQuantifyData(listElementQuantifyData);
+				//	break;
+
+				default://Not Identified
+					sResult = _T("Quant=C,K-Serie,7.992\nQuant=Si,L-Serie,15.969\nQuant=Fe,L-Serie,69.805");
+					listElementQuantifyData = pElement->ExtractElementChemistrys(sResult);
+					pXrayPoi->SetElementQuantifyData(listElementQuantifyData);
+					break;
+				}
+
+				icount++;
 			}
 
 		}

+ 1 - 1
OTSCPP/OTSImagePro/FieldMgr.cpp

@@ -378,7 +378,7 @@ namespace OTSIMGPROC {
 		sizeImage.cx = dScanFiledSizeX;
 		sizeImage.cy = dScanFiledSizeY;
 		// pixel size (micros)
-		double dPixelSize = (double)dScanFiledSizeX / (double)sizeImage.cx;
+		//double dPixelSize = (double)dScanFiledSizeX / (double)ImageSizeByPixel.cx;
 
 		// the measure domain rectangle 
 		CRect rectMeasureDomain = m_pMeasureArea->GetDomainRect();

+ 244 - 244
OTSIncAReportApp/3-ServiceCenter/OutPIC.cs → OTSIncAReportApp/1-UI/Control_Graph/Controls/OutPIC.cs

@@ -1,244 +1,244 @@
-using OTSCommon.Model;
-using OTSIncAReportGraph;
-using OTSIncAReportGraph.Controls;
-using System;
-using System.Collections.Generic;
-using System.Data;
-using System.Drawing;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-
-namespace OTSIncAReportApp._3_ServiceCenter
-{
-    class OutPIC
-    {
-        
-        //包含particle的field的列表对象
-        public List<DisplayField> m_list_allDfield = null;
-        public ResultFile resultFile = null;
-        public SaveFileDialog sfd = null;
-        public int type = 0;
-        /// <summary>
-        /// 获取每行图片的位置配合opencv方法使用
-        /// </summary>
-        /// <returns></returns>
-        private List<DataTable> opencv_piclist()
-        {
-            List<DataTable> list_dt_picdata = new List<DataTable>();
-            DataTable picDatat = new DataTable();
-            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.Rect.X;
-                dr["Y"] = f.Rect.Y;
-                picDatat.Rows.Add(dr);
-            }
-            int y_max = Convert.ToInt32(picDatat.Compute("Max(Y)", "true"));
-            int y_min = Convert.ToInt32(picDatat.Compute("Min(Y)", "true"));
-            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));
-                for (int a = 0; a < total_dt_X.Rows.Count; a++)
-                {
-                    DataRow dr2 = data.NewRow();
-                    Bitmap bitmap = new Bitmap((int)m_list_allDfield[0].Rect.Width, (int)m_list_allDfield[0].Rect.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.Rect.Y.ToString())
-                    {
-                        for (int c = 0; c < data.Rows.Count; c++)
-                        {
-                            if (data.Rows[c]["X"].ToString() == f.Rect.X.ToString())
-                            {
-                                data.Rows[c]["mat"] = f.OriginalImage;
-                                data.Rows[c]["X"] = f.Rect.X;
-                            }
-                        }
-
-                    }
-                }
-
-
-                DataView dataView1 = data.DefaultView;
-                dataView1.Sort = "X ASC";
-                data = dataView1.ToTable();
-
-
-                list_dt_picdata.Add(data);
-            }
-
-            return list_dt_picdata;
-        }
-        public void opencv_outpic(/*int type*/)
-        {
-            List<DataTable> list_dt_picdata = new List<DataTable>();
-            if (type == (int)Outpic_enum.pic)
-            {
-                list_dt_picdata = opencv_piclist();
-            }
-            else
-                    if (type == (int)Outpic_enum.Render_pic)
-            {
-                list_dt_picdata = opencv_piclist_Render();
-            }
-
-            OpenCvSharp.Mat[] list_mats = new OpenCvSharp.Mat[list_dt_picdata.Count];
-            NLog.LogManager.GetCurrentClassLogger().Info("Organize and splice all pictures......");
-            for (int i = 0; i < list_dt_picdata.Count; i++)
-            {
-                OpenCvSharp.Mat[] mats = new OpenCvSharp.Mat[list_dt_picdata[i].Rows.Count];
-                for (int a = 0; a < list_dt_picdata[i].Rows.Count; a++)
-                {
-                    mats[a] = OpenCvSharp.Extensions.BitmapConverter.ToMat((Bitmap)list_dt_picdata[i].Rows[a]["mat"]);
-                }
-                OpenCvSharp.Mat pano = new OpenCvSharp.Mat();
-                OpenCvSharp.Cv2.HConcat(mats, pano);
-                list_mats[i] = pano;
-                
-            }
-            NLog.LogManager.GetCurrentClassLogger().Info("Picture splicing completed.");
-            NLog.LogManager.GetCurrentClassLogger().Info("Save to disk......");
-            OpenCvSharp.Mat save_pano = new OpenCvSharp.Mat();
-            OpenCvSharp.Cv2.VConcat(list_mats, save_pano);
-            OpenCvSharp.Cv2.ImWrite(sfd.FileName, save_pano);
-            NLog.LogManager.GetCurrentClassLogger().Info("Save complete.");
-        }
-       
-        private List<DataTable> opencv_piclist_Render()
-        {
-            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.Rect.X;
-                dr["Y"] = f.Rect.Y;
-                picDatat.Rows.Add(dr);
-            }
-            int y_max = Convert.ToInt32(picDatat.Compute("Max(Y)", "true"));
-            int y_min = Convert.ToInt32(picDatat.Compute("Min(Y)", "true"));
-            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));
-                for (int a = 0; a < total_dt_X.Rows.Count; a++)
-                {
-                    DataRow dr2 = data.NewRow();
-                    Bitmap bitmap = new Bitmap((int)m_list_allDfield[0].Rect.Width, (int)m_list_allDfield[0].Rect.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.Rect.Y.ToString())
-                    {
-                        for (int c = 0; c < data.Rows.Count; c++)
-                        {
-                            if (data.Rows[c]["X"].ToString() == f.Rect.X.ToString())
-                            {
-                                Bitmap image = new Bitmap(f.OriginalImage.Width, f.OriginalImage.Height);
-                                Graphics g2 = Graphics.FromImage(image);
-                                g2.DrawImage(f.OriginalImage, 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)
-                                        {
-                                            //创建DParticle颗粒
-                                            DisplayParticle dp = new DisplayParticle(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 };
-                                                Pen npen = new Pen(dp.Color);
-                                                graph_2.DrawLine(npen, on_p, off_p);
-
-                                                #endregion
-                                            }
-                                        }
-                                    }
-                                }
-                                data.Rows[c]["mat"] = image;
-                                data.Rows[c]["X"] = f.Rect.X;
-                            }
-                        }
-                    }
-
-                }
-
-                DataView dataView1 = data.DefaultView;
-                dataView1.Sort = "X ASC";
-                data = dataView1.ToTable();
-                list_dt_picdata.Add(data);
-            }
-
-            return list_dt_picdata;
-        }
-    }
-}
+using OTSCommon.Model;
+using OTSIncAReportGraph;
+using OTSIncAReportGraph.Controls;
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace OTSIncAReportApp._3_ServiceCenter
+{
+    class OutPIC
+    {
+        
+        //包含particle的field的列表对象
+        public List<DisplayField> m_list_allDfield = null;
+        public ResultFile resultFile = null;
+        public SaveFileDialog sfd = null;
+        public int type = 0;
+        /// <summary>
+        /// 获取每行图片的位置配合opencv方法使用
+        /// </summary>
+        /// <returns></returns>
+        private List<DataTable> opencv_piclist()
+        {
+            List<DataTable> list_dt_picdata = new List<DataTable>();
+            DataTable picDatat = new DataTable();
+            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.Rect.X;
+                dr["Y"] = f.Rect.Y;
+                picDatat.Rows.Add(dr);
+            }
+            int y_max = Convert.ToInt32(picDatat.Compute("Max(Y)", "true"));
+            int y_min = Convert.ToInt32(picDatat.Compute("Min(Y)", "true"));
+            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));
+                for (int a = 0; a < total_dt_X.Rows.Count; a++)
+                {
+                    DataRow dr2 = data.NewRow();
+                    Bitmap bitmap = new Bitmap((int)m_list_allDfield[0].Rect.Width, (int)m_list_allDfield[0].Rect.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.Rect.Y.ToString())
+                    {
+                        for (int c = 0; c < data.Rows.Count; c++)
+                        {
+                            if (data.Rows[c]["X"].ToString() == f.Rect.X.ToString())
+                            {
+                                data.Rows[c]["mat"] = f.OriginalImage;
+                                data.Rows[c]["X"] = f.Rect.X;
+                            }
+                        }
+
+                    }
+                }
+
+
+                DataView dataView1 = data.DefaultView;
+                dataView1.Sort = "X ASC";
+                data = dataView1.ToTable();
+
+
+                list_dt_picdata.Add(data);
+            }
+
+            return list_dt_picdata;
+        }
+        public void opencv_outpic(/*int type*/)
+        {
+            List<DataTable> list_dt_picdata = new List<DataTable>();
+            if (type == (int)Outpic_enum.pic)
+            {
+                list_dt_picdata = opencv_piclist();
+            }
+            else
+                    if (type == (int)Outpic_enum.Render_pic)
+            {
+                list_dt_picdata = opencv_piclist_Render();
+            }
+
+            OpenCvSharp.Mat[] list_mats = new OpenCvSharp.Mat[list_dt_picdata.Count];
+            NLog.LogManager.GetCurrentClassLogger().Info("Organize and splice all pictures......");
+            for (int i = 0; i < list_dt_picdata.Count; i++)
+            {
+                OpenCvSharp.Mat[] mats = new OpenCvSharp.Mat[list_dt_picdata[i].Rows.Count];
+                for (int a = 0; a < list_dt_picdata[i].Rows.Count; a++)
+                {
+                    mats[a] = OpenCvSharp.Extensions.BitmapConverter.ToMat((Bitmap)list_dt_picdata[i].Rows[a]["mat"]);
+                }
+                OpenCvSharp.Mat pano = new OpenCvSharp.Mat();
+                OpenCvSharp.Cv2.HConcat(mats, pano);
+                list_mats[i] = pano;
+                
+            }
+            NLog.LogManager.GetCurrentClassLogger().Info("Picture splicing completed.");
+            NLog.LogManager.GetCurrentClassLogger().Info("Save to disk......");
+            OpenCvSharp.Mat save_pano = new OpenCvSharp.Mat();
+            OpenCvSharp.Cv2.VConcat(list_mats, save_pano);
+            OpenCvSharp.Cv2.ImWrite(sfd.FileName, save_pano);
+            NLog.LogManager.GetCurrentClassLogger().Info("Save complete.");
+        }
+       
+        private List<DataTable> opencv_piclist_Render()
+        {
+            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.Rect.X;
+                dr["Y"] = f.Rect.Y;
+                picDatat.Rows.Add(dr);
+            }
+            int y_max = Convert.ToInt32(picDatat.Compute("Max(Y)", "true"));
+            int y_min = Convert.ToInt32(picDatat.Compute("Min(Y)", "true"));
+            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));
+                for (int a = 0; a < total_dt_X.Rows.Count; a++)
+                {
+                    DataRow dr2 = data.NewRow();
+                    Bitmap bitmap = new Bitmap((int)m_list_allDfield[0].Rect.Width, (int)m_list_allDfield[0].Rect.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.Rect.Y.ToString())
+                    {
+                        for (int c = 0; c < data.Rows.Count; c++)
+                        {
+                            if (data.Rows[c]["X"].ToString() == f.Rect.X.ToString())
+                            {
+                                Bitmap image = new Bitmap(f.OriginalImage.Width, f.OriginalImage.Height);
+                                Graphics g2 = Graphics.FromImage(image);
+                                g2.DrawImage(f.OriginalImage, 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)
+                                        {
+                                            //创建DParticle颗粒
+                                            DisplayParticle dp = new DisplayParticle(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 };
+                                                Pen npen = new Pen(dp.Color);
+                                                graph_2.DrawLine(npen, on_p, off_p);
+
+                                                #endregion
+                                            }
+                                        }
+                                    }
+                                }
+                                data.Rows[c]["mat"] = image;
+                                data.Rows[c]["X"] = f.Rect.X;
+                            }
+                        }
+                    }
+
+                }
+
+                DataView dataView1 = data.DefaultView;
+                dataView1.Sort = "X ASC";
+                data = dataView1.ToTable();
+                list_dt_picdata.Add(data);
+            }
+
+            return list_dt_picdata;
+        }
+    }
+}

+ 1 - 1
OTSIncAReportApp/OTSIncAReportApp.csproj

@@ -579,7 +579,7 @@
       <DependentUpon>OutputNlog.cs</DependentUpon>
     </Compile>
     <Compile Include="3-ServiceCenter\HardwareController.cs" />
-    <Compile Include="3-ServiceCenter\OutPIC.cs" />
+    <Compile Include="1-UI\Control_Graph\Controls\OutPIC.cs" />
     <Compile Include="Help.cs">
       <SubType>Form</SubType>
     </Compile>