فهرست منبع

修改报告导出时有几率帧图显示不全BUG修改

zhangjiaxin 3 سال پیش
والد
کامیت
7b5291a968

+ 1 - 1
Bin/x64/Debug/Config/ProData/ReportTemplateConfig.xml

@@ -1,7 +1,7 @@
 <XmlConfig>
   <M_SY>
     <str_tb_ZBT>Inclusion Analysis </str_tb_ZBT>
-    <str_tb_FBT>东北大学</str_tb_FBT>
+    <str_tb_FBT>马鞍山钢铁股份有限公司</str_tb_FBT>
     <str_tb_YPBH>0001</str_tb_YPBH>
     <str_tb_CKBZ>GB/T30834-2014</str_tb_CKBZ>
     <b_ck_ypsm>True</b_ck_ypsm>

+ 8 - 1
OTSIncAReportApp/1-UI/Control_Grids/ParticlesGridDevidePage.cs

@@ -1449,6 +1449,7 @@ namespace OTSIncAReportGrids
         {
             string str_path_FIELD_FILES = result.FilePath + "\\FIELD_FILES\\";
             string str_path_FIELD_FILES_MARK = result.FilePath + "\\FIELD_FILES_MARK\\";
+            int intQuantity = 0;
 
             ////判断是否已经有导出过的标记帧图文件夹,如果已经存在,则直接返回不输出,先不加
             DirectoryInfo theFolder_FieldMark = new DirectoryInfo(str_path_FIELD_FILES_MARK);
@@ -1459,6 +1460,10 @@ namespace OTSIncAReportGrids
             }
             else
             {
+                theFolder_FieldMark.Delete(true);
+
+                //创建
+                theFolder_FieldMark.Create();
                 //已经存在的话,直接返回
                 //return;
             }
@@ -1480,7 +1485,7 @@ namespace OTSIncAReportGrids
                         string str_fieldid = Path.GetFileNameWithoutExtension(nextifile.Name);
                         str_fieldid = str_fieldid.Substring(5, str_fieldid.Length - 5);//减去field字符长度
 
-                        if (Convert.ToInt32(str_fieldid.ToString()) > 10)
+                        if (intQuantity > 10)
                             continue;
 
                         if (dataTable.Select(" fieldid = " + str_fieldid).Count() > 0)
@@ -1500,6 +1505,8 @@ namespace OTSIncAReportGrids
 
                             //循环将颗粒,进行标记到bitmap图上
                             DataRow[] drlist = dt_AllParticle.Select("  fieldid = " + str_fieldid);
+                            if (drlist.Count() > 0)
+                                intQuantity = intQuantity + 1;
                             for (int i_row = 0; i_row < drlist.Count(); i_row++)
                             {
                                 //string str_fieldid = drlist[i_row]["fieldid"].ToString();

+ 191 - 23
OTSIncAReportApp/1-UI/OTSTemplateDesigner/Export_ReportTemplate.cs

@@ -147,6 +147,7 @@ namespace OTSIncAReportApp.OTSTemplateDesigner
             DT_field_dt.Columns.Add(colpict2);
 
             //表名Largest_frame表:(子表)       显示20条颗粒除外的部份颗粒信息
+            DataTable DT_field_dt_copy = new DataTable();
             DataTable DT_Largest_frame = new DataTable();
             DT_Largest_frame.TableName = "Largest_frame";
             DT_Largest_frame.Columns.Add("pid");
@@ -338,36 +339,67 @@ namespace OTSIncAReportApp.OTSTemplateDesigner
             DirectoryInfo theFolder = new DirectoryInfo(str_path_FIELD_FILES_MARK);
             if (theFolder.Exists)
             {
-                for (int i = 0; i <= theFolder.GetFiles().Count(); i++)
+                //for (int i = 0; i <= theFolder.GetFiles().Count(); i++)
+                //{
+                //    //判断i.bmp图片是否存在,如果不存在跳出当前循环
+                //    if (!DetermineWhetherTheFileExists(theFolder, i))
+                //        continue;
+                //    //在数据表中有颗粒在该帧图中的话,则对该帧图标记图像进行读取存入数据库
+                //    DataRow[] datarowlist = dt_ParticlesGridDevidePage.Select(" fieldid = " + i);
+
+                //    if (datarowlist.Count() > 0)
+                //    {
+                //        Bitmap ls_bp_fieldmark = new Bitmap(theFolder.GetFiles()[i].FullName);
+
+                //        DataRow dr = DT_field_dt.NewRow();
+                //        MemoryStream newms_bp_fieldmark = new MemoryStream();
+                //        ls_bp_fieldmark.Save(newms_bp_fieldmark, System.Drawing.Imaging.ImageFormat.Bmp);
+                //        newms_bp_fieldmark.Seek(0, SeekOrigin.Begin);
+                //        byte[] newarr_fieldmark = new byte[newms_bp_fieldmark.Length];
+                //        newms_bp_fieldmark.Read(newarr_fieldmark, 0, newarr_fieldmark.Length);
+                //        dr["FieldImg"] = newarr_fieldmark;
+                //        dr["FieldId"] = i;
+
+                //        ls_bp_fieldmark.Dispose();
+                //        DT_field_dt.Rows.Add(dr);
+
+                //    }
+                //}
+                foreach (FileInfo nextifile in theFolder.GetFiles())
                 {
-                    //判断i.bmp图片是否存在,如果不存在跳出当前循环
-                    if (!DetermineWhetherTheFileExists(theFolder, i))
-                        continue;
-                    //在数据表中有颗粒在该帧图中的话,则对该帧图标记图像进行读取存入数据库
-                    DataRow[] datarowlist = dt_ParticlesGridDevidePage.Select(" fieldid = " + i);
-                    if (datarowlist.Count() > 0)
+                    if (nextifile.Name.Contains(".bmp") == true || nextifile.Name.Contains(".BMP") == true)
                     {
-                        Bitmap ls_bp_fieldmark = new Bitmap(theFolder.GetFiles()[i].FullName);
+                        //确认对应的帧图名
+                        string str_fieldid = Path.GetFileNameWithoutExtension(nextifile.Name);
+
+                        //在数据表中有颗粒在该帧图中的话,则对该帧图标记图像进行读取存入数据库
+                        DataRow[] datarowlist = dt_ParticlesGridDevidePage.Select(" fieldid = " + str_fieldid);
+                        if (datarowlist.Count() > 0)
+                        {
+                            Bitmap ls_bp_fieldmark = new Bitmap(nextifile.FullName);
 
-                        DataRow dr = DT_field_dt.NewRow();
-                        MemoryStream newms_bp_fieldmark = new MemoryStream();
-                        ls_bp_fieldmark.Save(newms_bp_fieldmark, System.Drawing.Imaging.ImageFormat.Bmp);
-                        newms_bp_fieldmark.Seek(0, SeekOrigin.Begin);
-                        byte[] newarr_fieldmark = new byte[newms_bp_fieldmark.Length];
-                        newms_bp_fieldmark.Read(newarr_fieldmark, 0, newarr_fieldmark.Length);
-                        dr["FieldImg"] = newarr_fieldmark;
-                        dr["FieldId"] = i;
+                            DataRow dr = DT_field_dt.NewRow();
+                            MemoryStream newms_bp_fieldmark = new MemoryStream();
+                            ls_bp_fieldmark.Save(newms_bp_fieldmark, System.Drawing.Imaging.ImageFormat.Bmp);
+                            newms_bp_fieldmark.Seek(0, SeekOrigin.Begin);
+                            byte[] newarr_fieldmark = new byte[newms_bp_fieldmark.Length];
+                            newms_bp_fieldmark.Read(newarr_fieldmark, 0, newarr_fieldmark.Length);
+                            dr["FieldImg"] = newarr_fieldmark;
+                            dr["FieldId"] = str_fieldid;
 
-                        ls_bp_fieldmark.Dispose();
-                        DT_field_dt.Rows.Add(dr);
+                            ls_bp_fieldmark.Dispose();
+                            DT_field_dt.Rows.Add(dr);
+
+                        }
 
                     }
                 }
-
-               
+                
+                DataView vw = DT_field_dt.DefaultView;
+                vw.Sort = "FieldId ASC";
+                DT_field_dt_copy = vw.ToTable();
             }
 
-
             #endregion
 
             #region 插入-前20颗粒外的颗粒
@@ -464,14 +496,150 @@ namespace OTSIncAReportApp.OTSTemplateDesigner
                 
             }
             #endregion
+            FrameGraphParticleTable(dt_ParticlesGridDevidePage, str_resultPath, fielddata, DT_field_dt);
 
-
-            m_list_dt.Add(DT_field_dt);
+            m_list_dt.Add(DT_field_dt_copy);
             m_list_dt.Add(DT_Largest_frame);
             m_list_dt.Add(DT_Largest20);
 
             return true;
         }
+        private bool JudgeWhetherItExists(int id, DataTable dt,string column)
+        {
+            for (int i=0;i<dt.Rows.Count;i++)
+            {
+                if (id == Convert.ToInt32(dt.Rows[i][column].ToString()))
+                    return true;
+            }
+            return false;
+        }
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="dt_ParticlesGridDevidePage">数据源</param>
+        /// <param name="str_resultPath">地址</param>
+        /// <param name="fielddata"></param>
+        /// <param name="DT_field_dt">主表</param>
+        private void FrameGraphParticleTable(DataTable dt_ParticlesGridDevidePage,string str_resultPath, ParticleData fielddata,DataTable DT_field_dt)
+        {
+
+            //表名Largest_frame表:(子表)       显示20条颗粒除外的部份颗粒信息
+            DataTable FrameGraphSubTable = new DataTable();
+            FrameGraphSubTable.TableName = "FrameGraphSubTable";
+            FrameGraphSubTable.Columns.Add("pid");
+            FrameGraphSubTable.Columns.Add("Size");
+            FrameGraphSubTable.Columns.Add("Width");
+            FrameGraphSubTable.Columns.Add("Class");
+            FrameGraphSubTable.Columns.Add("ColName1");
+            FrameGraphSubTable.Columns.Add("ColName2");
+            FrameGraphSubTable.Columns.Add("ColName3");
+            FrameGraphSubTable.Columns.Add("ColName4");
+            FrameGraphSubTable.Columns.Add("ColName5");
+            FrameGraphSubTable.Columns.Add("ColName6");
+            FrameGraphSubTable.Columns.Add("ColVal1");
+            FrameGraphSubTable.Columns.Add("ColVal2");
+            FrameGraphSubTable.Columns.Add("ColVal3");
+            FrameGraphSubTable.Columns.Add("ColVal4");
+            FrameGraphSubTable.Columns.Add("ColVal5");
+            FrameGraphSubTable.Columns.Add("ColVal6");
+            DataColumn colpictid = new DataColumn("FieldId");
+            colpictid.DataType = typeof(int);
+            FrameGraphSubTable.Columns.Add(colpictid);
+            //图像列
+            DataColumn colpict = new DataColumn("p1");
+            colpict.DataType = System.Type.GetType("System.Byte[]");
+            FrameGraphSubTable.Columns.Add(colpict);
+
+            for (int i_row = 0; i_row < dt_ParticlesGridDevidePage.Rows.Count; i_row++)
+            {
+                if (dt_ParticlesGridDevidePage.Rows[i_row]["element"].ToString() == "")
+                    continue;
+                //获取颗粒的fieldid,和particleid
+                string str_fieldid = dt_ParticlesGridDevidePage.Rows[i_row]["fieldid"].ToString();
+
+                //if (Convert.ToInt32(str_fieldid) < 20)
+                if (JudgeWhetherItExists(Convert.ToInt32(str_fieldid), DT_field_dt, "FieldId"))
+                {
+
+                    string str_particleid = dt_ParticlesGridDevidePage.Rows[i_row]["particleid"].ToString();
+                    string str_subparticles = dt_ParticlesGridDevidePage.Rows[i_row]["SubParticles"].ToString();
+                    string str_typeid = dt_ParticlesGridDevidePage.Rows[i_row]["TypeId"].ToString();
+                    string str_typename = dt_ParticlesGridDevidePage.Rows[i_row]["TypeName"].ToString();
+                    string str_element = dt_ParticlesGridDevidePage.Rows[i_row]["Element"].ToString();
+
+                    //获取原始颗粒图像
+                    Bitmap bp_particle = new Bitmap(1, 1);
+                    string str_path = str_resultPath + "\\FIELD_FILES\\";
+                    string str_imagePath = str_path + "Field" + str_fieldid.ToString() + ".bmp";
+                    if (str_subparticles != null && str_subparticles != "")
+                    {
+                        
+                        continue;
+                    }
+                    else
+                    {
+                        //正常颗粒
+                        Rectangle rectangle = new Rectangle() { X = Convert.ToInt32(dt_ParticlesGridDevidePage.Rows[i_row]["RectLeft"]), Y = Convert.ToInt32(dt_ParticlesGridDevidePage.Rows[i_row]["RectTop"]), Width = Convert.ToInt32(dt_ParticlesGridDevidePage.Rows[i_row]["RectWidth"]), Height = Convert.ToInt32(dt_ParticlesGridDevidePage.Rows[i_row]["RectHeight"]) };
+                        Bitmap bp_field = fielddata.ReadImageFile(str_imagePath);
+                        bp_particle = fielddata.GetBitmapByParticle(bp_field, rectangle);
+                        bp_particle.Tag = new List<string>() { dt_ParticlesGridDevidePage.Rows[i_row]["FieldId"].ToString(), dt_ParticlesGridDevidePage.Rows[i_row]["ParticleId"].ToString(), dt_ParticlesGridDevidePage.Rows[i_row]["TypeId"].ToString() };
+                    }
+
+                    //获取该颗粒的xray能谱图像
+                    System.Drawing.Bitmap bp_xraybp = ExportXRayBitmap(str_fieldid,
+                        str_particleid, Convert.ToInt32(str_typeid), str_typename, fielddata);
+
+                    //获取该颗粒的二次放大处理图像
+                    Bitmap ls_processbitmap = new Bitmap(1, 1);
+                    ls_processbitmap = (Bitmap)bp_particle.Clone();//待完善
+
+                    //再将图像转成二进制流-------------------------------------------------------------------
+                    //原图
+                    MemoryStream newms_p1 = new MemoryStream();
+                    bp_particle.Save(newms_p1, System.Drawing.Imaging.ImageFormat.Bmp);
+                    newms_p1.Seek(0, SeekOrigin.Begin);
+                    byte[] newarr_p1 = new byte[newms_p1.Length];
+                    newms_p1.Read(newarr_p1, 0, newarr_p1.Length);
+                    //---------------------------------------------------------------------------------------                  
+                    DataRow dr = FrameGraphSubTable.NewRow();
+                    dr["p1"] = newarr_p1;
+                    newms_p1.Dispose();
+
+                    dr["pid"] = str_fieldid + dt_ParticlesGridDevidePage.Rows[i_row]["particleid"].ToString();
+                    dr["Size"] = Convert.ToDouble(dt_ParticlesGridDevidePage.Rows[i_row]["area"]).ToString("#0.00");  //可以需要选择切换,计算方式
+                    dr["Width"] = dt_ParticlesGridDevidePage.Rows[i_row]["rectwidth"].ToString();
+                    dr["Class"] = dt_ParticlesGridDevidePage.Rows[i_row]["typename"].ToString();
+
+                    dr["fieldid"] = str_fieldid;
+
+                    List<string> list_max_elementname = new List<string>();
+                    List<double> list_max_elementvale = new List<double>();
+                    GetMaxElementFromDataTable(dt_ParticlesGridDevidePage, i_row, out list_max_elementname, out list_max_elementvale);
+                    //元素1
+                    dr["ColName1"] = list_max_elementname[0];
+                    dr["ColVal1"] = list_max_elementvale[0].ToString();
+                    //元素2
+                    dr["ColName2"] = list_max_elementname[1];
+                    dr["ColVal2"] = list_max_elementvale[1].ToString();
+                    //元素3
+                    dr["ColName3"] = list_max_elementname[2];
+                    dr["ColVal3"] = list_max_elementvale[2].ToString();
+                    //元素4
+                    dr["ColName4"] = list_max_elementname[3];
+                    dr["ColVal4"] = list_max_elementvale[3].ToString();
+                    //元素5
+                    dr["ColName5"] = list_max_elementname[4];
+                    dr["ColVal5"] = list_max_elementvale[4].ToString();
+                    //元素6
+                    dr["ColName6"] = list_max_elementname[5];
+                    dr["ColVal6"] = list_max_elementvale[5].ToString();
+
+                    FrameGraphSubTable.Rows.Add(dr);
+                }
+
+            }
+            m_list_dt.Add(FrameGraphSubTable);
+        }
 
         private bool DetermineWhetherTheFileExists(DirectoryInfo theFolder ,int id)
         {

+ 41 - 0
OTSIncAReportApp/1-UI/OTSTemplateDesigner/OTSReport_Export.cs

@@ -1373,6 +1373,47 @@ namespace OTSIncAReportApp
                 }
                     
 
+                //插入帧图子表
+                if(JudgeWhetherTheTableExists(list_dt, "FrameGraphSubTable"))
+                {
+                    sh.CreateTable("FrameGraphSubTable", strcolumns_Largest_frame, strcoltypes_Largest_frame);
+                    DataTable ls_Largest_frame = list_dt.Where(aa => aa.TableName.Contains("FrameGraphSubTable")).ToList()[0];
+                    for (int i = 0; i < ls_Largest_frame.Rows.Count; i++)
+                    {
+                        if (ls_Largest_frame.Rows[i][17] == null)
+                        {
+                            continue;
+                        }
+                        if (ls_Largest_frame.Rows[i][17] == DBNull.Value)
+                        {
+                            continue;
+                        }
+
+                        string ls_sqlstr = "insert into FrameGraphSubTable (pid, Size, Width, Class, ColName1, ColName2, ColName3, ColName4, ColName5, ColName6,ColVal1, ColVal2, ColVal3, ColVal4, ColVal5, ColVal6 ,FieldID,p1) values('"
+                            + ls_Largest_frame.Rows[i][0].ToString() + "','"
+                            + ls_Largest_frame.Rows[i][1].ToString() + "','"
+                            + ls_Largest_frame.Rows[i][2].ToString() + "','"
+                            + ls_Largest_frame.Rows[i][3].ToString() + "','"
+                            + ls_Largest_frame.Rows[i][4].ToString() + "','"
+                            + ls_Largest_frame.Rows[i][5].ToString() + "','"
+                            + ls_Largest_frame.Rows[i][6].ToString() + "','"
+                            + ls_Largest_frame.Rows[i][7].ToString() + "','"
+                            + ls_Largest_frame.Rows[i][8].ToString() + "','"
+                            + ls_Largest_frame.Rows[i][9].ToString() + "','"
+                            + ls_Largest_frame.Rows[i][10].ToString() + "','"
+                            + ls_Largest_frame.Rows[i][11].ToString() + "','"
+                            + ls_Largest_frame.Rows[i][12].ToString() + "','"
+                            + ls_Largest_frame.Rows[i][13].ToString() + "','"
+                            + ls_Largest_frame.Rows[i][14].ToString() + "','"
+                            + ls_Largest_frame.Rows[i][15].ToString() + "',"
+                            + ls_Largest_frame.Rows[i][16].ToString() + ",:p1)";
+
+                        byte[] byte_p1 = (byte[])ls_Largest_frame.Rows[i][17];
+
+                        int iresult = sh.ExecuteQuery(ls_sqlstr, "p1", byte_p1, tr);
+                    }
+                }
+
                 //插入 Largest20
                 if(JudgeWhetherTheTableExists(list_dt, "Largest20"))
                 {

+ 8 - 2
OTSIncAReportTemplate/OTSIncAReportTemplate.cs

@@ -384,7 +384,7 @@ namespace OTSIncAReportTemplate
                 }
                 //FlushMemory();
                 #region 主副表
-                DataTable ls_dt_frame = list_dt.Where(aa => aa.TableName.Contains("Largest_frame")).ToList()[0].Copy();//副表
+                DataTable ls_dt_frame = list_dt.Where(aa => aa.TableName.Contains("FrameGraphSubTable")).ToList()[0].Copy();//副表
                 DataTable ls_dt_fielddt = list_dt.Where(aa => aa.TableName.Contains("field_dt")).ToList()[0].Copy();//帧图主表
                 DataSet ds = new DataSet("fieldimgds");
 
@@ -907,6 +907,11 @@ namespace OTSIncAReportTemplate
             ls_Largest_frame2.TableName = "Largest_frame";
             list_dt.Add(ls_Largest_frame2);
 
+            //DataTable ls_FrameGraphSubTable = sh.ExecuteQuery("select * from FrameGraphSubTable where cast(fieldid as int) > " + strmix + " and cast(fieldid as int) < " + strmax + " ");
+            DataTable ls_FrameGraphSubTable = sh.ExecuteQuery("select * from FrameGraphSubTable ");
+            ls_FrameGraphSubTable.TableName = "FrameGraphSubTable";
+            list_dt.Add(ls_FrameGraphSubTable);
+
 
             DataTable ls_Largest20 = sh.ExecuteQuery("select * from Largest20");
             ls_Largest20.TableName = "Largest20";
@@ -921,7 +926,8 @@ namespace OTSIncAReportTemplate
             //ls_Largest2new.TableName = "Largest2new";
             //list_dt.Add(ls_Largest2new);
 
-            DataTable ls_field_dt = sh.ExecuteQuery("select * from field_dt where cast(fieldid as int) > " + strmix + " and cast(fieldid as int) < " + strmax + " ");
+            //DataTable ls_field_dt = sh.ExecuteQuery("select * from field_dt where cast(fieldid as int) > " + strmix + " and cast(fieldid as int) < " + strmax + " ");
+            DataTable ls_field_dt = sh.ExecuteQuery("select * from field_dt ");
             ls_field_dt.TableName = "field_dt";
             list_dt.Add(ls_field_dt);