Browse Source

新增报告原图颗粒导出功能实现

gaoshipeng 2 years ago
parent
commit
976188bde2

+ 25 - 1
OTSIncAReportApp/1-UI/Control_Graph/Controls/Control_DrawDistrbutionImageAndBSE.cs

@@ -63,7 +63,8 @@ namespace OTSIncAReportGraph.Controls
     public enum Outpic_enum
     {
         pic=0,
-        Render_pic=1
+        Render_pic=1,
+            noBackground_pic=2
     }
 
     public partial class Control_DrawDistrbutionImageAndBSE : UserControl
@@ -2265,5 +2266,28 @@ namespace OTSIncAReportGraph.Controls
             m_CurGBFields.Clear();
             Invalidate();
         }
+
+        private void ToolStripMenuItem_ParticleSplicing_Click(object sender, EventArgs e)
+        {
+            SaveFileDialog sfd = new SaveFileDialog();
+
+            sfd.Filter = "png Files(*.png)| *.png |BMP Files(*.bmp)| *.bmp |JPG Files(*.jpg)|*.jpg;*.jpeg";
+            if (sfd.ShowDialog() == DialogResult.OK)
+            {
+                this.Cursor = System.Windows.Forms.Cursors.WaitCursor;
+                OutPIC outpic = new OutPIC();
+                outpic.m_list_allDfield = m_list_allDfield;
+                outpic.resultFile = resultFile;
+                outpic.sfd = sfd;
+                outpic.type = (int)Outpic_enum.noBackground_pic;
+                outpic.m_ReportApp = m_ReportApp;
+                Thread bThread = new Thread(new ThreadStart(outpic.opencv_outpic));
+
+                bThread.IsBackground = true;
+
+                bThread.Start();
+
+            }
+        }
     }
 }

+ 16 - 7
OTSIncAReportApp/1-UI/Control_Graph/Controls/Control_DrawDistrbutionImageAndBSE.designer.cs

@@ -47,6 +47,7 @@
             this.aSTMToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
             this.显示所有帧ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
             this.清除ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.ToolStripMenuItem_ParticleSplicing = new System.Windows.Forms.ToolStripMenuItem();
             this.CMenuStrip.SuspendLayout();
             this.SuspendLayout();
             // 
@@ -56,6 +57,7 @@
             this.CMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
             this.ToolStripMenuItem_selected,
             this.ToolStripMenuItem_movesempoint,
+            this.ToolStripMenuItem_ParticleSplicing,
             this.toolStripMenuItem_copyimage,
             this.ExportoriginalspliceToolStripMenuItem,
             this.ToolStripMenuItemDelete_Particle,
@@ -63,7 +65,7 @@
             this.ImportSTDDb,
             this.显示国标信息ToolStripMenuItem});
             this.CMenuStrip.Name = "contextMenuStrip1";
-            this.CMenuStrip.Size = new System.Drawing.Size(211, 180);
+            this.CMenuStrip.Size = new System.Drawing.Size(211, 224);
             // 
             // ToolStripMenuItem_selected
             // 
@@ -124,7 +126,6 @@
             this.显示国标信息ToolStripMenuItem.Name = "显示国标信息ToolStripMenuItem";
             this.显示国标信息ToolStripMenuItem.Size = new System.Drawing.Size(210, 22);
             this.显示国标信息ToolStripMenuItem.Text = "显示国标信息";
-          
             // 
             // toolStripMenuItem2
             // 
@@ -132,7 +133,7 @@
             this.toolStripMenuItem1,
             this.查询DS类颗粒ToolStripMenuItem});
             this.toolStripMenuItem2.Name = "toolStripMenuItem2";
-            this.toolStripMenuItem2.Size = new System.Drawing.Size(180, 22);
+            this.toolStripMenuItem2.Size = new System.Drawing.Size(112, 22);
             this.toolStripMenuItem2.Text = "方法一";
             // 
             // toolStripMenuItem1
@@ -157,7 +158,7 @@
             this.toolStripMenuItem4,
             this.toolStripMenuItem10});
             this.toolStripMenuItem3.Name = "toolStripMenuItem3";
-            this.toolStripMenuItem3.Size = new System.Drawing.Size(180, 22);
+            this.toolStripMenuItem3.Size = new System.Drawing.Size(112, 22);
             this.toolStripMenuItem3.Text = "方法二";
             // 
             // toolStripMenuItem4
@@ -181,14 +182,14 @@
             this.aSTMToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
             this.显示所有帧ToolStripMenuItem});
             this.aSTMToolStripMenuItem.Name = "aSTMToolStripMenuItem";
-            this.aSTMToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
+            this.aSTMToolStripMenuItem.Size = new System.Drawing.Size(112, 22);
             this.aSTMToolStripMenuItem.Tag = "";
             this.aSTMToolStripMenuItem.Text = "ASTM";
             // 
             // 显示所有帧ToolStripMenuItem
             // 
             this.显示所有帧ToolStripMenuItem.Name = "显示所有帧ToolStripMenuItem";
-            this.显示所有帧ToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
+            this.显示所有帧ToolStripMenuItem.Size = new System.Drawing.Size(136, 22);
             this.显示所有帧ToolStripMenuItem.Tag = "ASTMAll";
             this.显示所有帧ToolStripMenuItem.Text = "显示所有帧";
             this.显示所有帧ToolStripMenuItem.Click += new System.EventHandler(this.显示国标信息ToolStripMenuItem_Click);
@@ -196,10 +197,17 @@
             // 清除ToolStripMenuItem
             // 
             this.清除ToolStripMenuItem.Name = "清除ToolStripMenuItem";
-            this.清除ToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
+            this.清除ToolStripMenuItem.Size = new System.Drawing.Size(112, 22);
             this.清除ToolStripMenuItem.Text = "清除";
             this.清除ToolStripMenuItem.Click += new System.EventHandler(this.清除ToolStripMenuItem_Click);
             // 
+            // ToolStripMenuItem_ParticleSplicing
+            // 
+            this.ToolStripMenuItem_ParticleSplicing.Name = "ToolStripMenuItem_ParticleSplicing";
+            this.ToolStripMenuItem_ParticleSplicing.Size = new System.Drawing.Size(210, 22);
+            this.ToolStripMenuItem_ParticleSplicing.Text = "导出颗粒拼接图";
+            this.ToolStripMenuItem_ParticleSplicing.Click += new System.EventHandler(this.ToolStripMenuItem_ParticleSplicing_Click);
+            // 
             // Control_DrawDistrbutionImageAndBSE
             // 
             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
@@ -234,5 +242,6 @@
         private System.Windows.Forms.ToolStripMenuItem 清除ToolStripMenuItem;
         private System.Windows.Forms.ToolStripMenuItem aSTMToolStripMenuItem;
         private System.Windows.Forms.ToolStripMenuItem 显示所有帧ToolStripMenuItem;
+        private System.Windows.Forms.ToolStripMenuItem ToolStripMenuItem_ParticleSplicing;
     }
 }

+ 131 - 1
OTSIncAReportApp/1-UI/Control_Graph/Controls/OutPIC.cs

@@ -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()
         {