Bladeren bron

present colored particle preview when remove the background in CleannessA mode.

gsp 2 jaren geleden
bovenliggende
commit
997047dfa5

BIN
Bin/x64/Debug/Config/Simulate/SimImage1024_768_1.bmp


+ 5 - 22
OTSCPP/OTSImagePro/OTSImageProcess.cpp

@@ -1258,8 +1258,7 @@ namespace OTSIMGPROC
 			}
 		
 
-			//Mat cvcopyImg = Mat(nHeightImg, nWidthImg, CV_8UC1, pPixel);// use the medianblur method to achieve the same effect as open morphology(errod and dialate).
-			//pPixel = cvcopyImg.data;
+			
 			
 				BErode3(pPixel, pTempImg, 5, nHeightImg, nWidthImg);
 				BDilate3(pTempImg, pPixel, 5, nHeightImg, nWidthImg);
@@ -1330,9 +1329,7 @@ namespace OTSIMGPROC
 				BDilate3(pTempImg, pPixel, errodDilateParam, nHeightImg, nWidthImg);
 			}
 			
-			//Mat cvcopyImg = Mat(nHeightImg, nWidthImg, CV_8UC1, pPixel);// use the medianblur method to achieve the same effect as open morphology(errod and dialate).
-			//medianBlur(cvcopyImg, cvcopyImg, 5);
-			//pPixel = cvcopyImg.data;
+		
 
 			
 		}
@@ -1398,9 +1395,7 @@ namespace OTSIMGPROC
 				BErode3(pPixel, pTempImg, errodDilateParam, nHeightImg, nWidthImg);
 				BDilate3(pTempImg, pPixel, errodDilateParam, nHeightImg, nWidthImg);
 			}
-			/*Mat cvcopyImg = Mat(nHeightImg, nWidthImg, CV_8UC1, pPixel);
-			medianBlur(cvcopyImg, cvcopyImg, 5);
-			pPixel = cvcopyImg.data;*/
+		
 		}
 		a_pBinImgOut->SetImageData(pPixel,nWidthImg,nHeightImg);
 		
@@ -2029,12 +2024,7 @@ namespace OTSIMGPROC
 
 			}
 		}
-		/*ImshowImage(onePartImg);
-		ImshowChartData(onePartImg);*/
-		/*auto imgData = GetMatDataFromBseImg(onePartImg);
-		imgData = AdjustContrastY(imgData);
-		auto adjustImg = GetBSEImgFromMat(imgData);
-		ImshowImage(adjustImg);*/
+
 		BlurImage(onePartImg);
 		std::vector<CIntRangePtr> rngs = CalcuGrayLevelRange(onePartImg);
 		
@@ -2087,10 +2077,6 @@ namespace OTSIMGPROC
 			}
 			
 
-			/*for (auto p : partData->GetParticleList())
-			{
-				a_pOTSPart->AddSubParticle(p); 
-			}*/
 		}
 		
 
@@ -2275,10 +2261,7 @@ namespace OTSIMGPROC
 			}
 
 
-			/*for (auto p : partData->GetParticleList())
-			{
-				a_pOTSPart->AddSubParticle(p);
-			}*/
+			
 		}
 
 

+ 79 - 68
OTSIncAMeasureApp/5-OTSMeasureStatuImageFun/OTSMeasureStatusWindow.cs

@@ -74,7 +74,7 @@ namespace OTSMeasureApp
         //记录鼠标在BSE移动时 图像的位置
         double m_MouseMoveImageX = -1;
         double m_MouseMoveImageY = -1;
-   
+
         //记录采集点
         List<Point> m_ElementSignPoint = new List<Point>();
         //绘制采集点对象
@@ -101,7 +101,7 @@ namespace OTSMeasureApp
         int FieldWitdh = 0;
         double FieldHeight = 0;
 
-        private otsdataconst.OTS_SysType_ID  m_systype;
+        private otsdataconst.OTS_SysType_ID m_systype;
         #endregion
         public enum ImageType
         {
@@ -114,9 +114,9 @@ namespace OTSMeasureApp
             //线扫描曲线
             GrayLevelLine = 3,
             //显示去背景BSE图灰度曲线
-            GrayAbandonLevelChart = 4,           
+            GrayAbandonLevelChart = 4,
             //
-            ColorParticleImage=5
+            ColorParticleImage = 5
         }
         //图bfResult
         public static bool bfResult = false;
@@ -132,12 +132,12 @@ namespace OTSMeasureApp
 
             InitializeComponent();
             m_MeasureAppForm = MeasureApp;
-          
+
             m_ElementPointGDIObjects = new List<CRectangleGDIObject>();
 
-           
-           
-        
+
+
+
             //进入时首先对XRayTable进行隐藏
             panelXray.Visible = false;
             //国际化
@@ -178,7 +178,7 @@ namespace OTSMeasureApp
         {
             try
             {
-              
+
                 pbBSEImage.Image = coloredImage;
                 //设置Pictrue显示位置
                 pbBSEImage.Height = this.RestoreBounds.Height;
@@ -345,7 +345,7 @@ namespace OTSMeasureApp
                 {
                     nDwellTime = 8;
                 }
-               
+
 
                 int imageCount = GetScanImage(m_iWidth, m_iHeight, nDwellTime, ref originalBseData);
                 //取图不成功就返回
@@ -387,13 +387,13 @@ namespace OTSMeasureApp
 
                 //图像加载后的显示位置
                 m_CurrentMultiple = 0;
-           
+
 
                 pbBSEImage.Height = this.RestoreBounds.Height;
-              
+
                 pbBSEImage.Left = 0;
                 pbBSEImage.Top = 0;
-                
+
             }
             catch (Exception ex)
             {
@@ -618,7 +618,7 @@ namespace OTSMeasureApp
             m_IsShowImageType = ImageType.BSEImage;
             m_imagetype = ImageType.BSEImage;
             pbBSEImage.Show();
-          
+
 
         }
         #endregion
@@ -709,40 +709,51 @@ namespace OTSMeasureApp
                 //获取图像数据
                 COTSSample WSample = m_MeasureAppForm.m_ProjData.GetWorkingSample();
                 double pixelSize = WSample.CalculatePixelSize();
-              
+
                 var imageProcessParam = WSample.GetMsrParams().GetImageProcessParam();
 
                 var imageHandle = new CImageHandler();
                 m_systype = m_MeasureAppForm.m_ProjParam.GetResultData().m_systemTypeId;
-               
-               
+                if (m_systype == otsdataconst.OTS_SysType_ID.CleannessA)
+                {
+                    coloredParticleImage = new Bitmap(m_iWidth, m_iHeight);
+                    CBSEImgClr pImgNoBG = new CBSEImgClr(new Rectangle(0,0,m_iWidth,m_iHeight));
+                    bfResult = imageHandle.GetColoredImage(imageProcessParam, pixelSize, originalBseData, m_iWidth, m_iHeight, ref pImgNoBG,ref coloredParticleImage);
+                    m_imagetype = ImageType.ColorParticleImage;
+                    //coloredParticleImage.getp
+                    removeBGBseData = pImgNoBG.GetImageDataPtr();
+
+                }
+                else if(m_systype == otsdataconst.OTS_SysType_ID.IncA)
+                {
                     bfResult = imageHandle.GetBSEImage(imageProcessParam, pixelSize, originalBseData, m_iWidth, m_iHeight, ref removeBGBseData);
                     m_IsShowImageType = ImageType.RemoveBGImage;
                     m_imagetype = ImageType.RemoveBGImage;
-                    //获取去背景灰度图数据
-                    dGrayAbandonLevelData = new double[(int)GrayLevel.Max];
-                    dGrayAbandonLevelData = GetGrayAbandonData(removeBGBseData, dGrayAbandonLevelData);
 
-                    //计算灰度去背景最大值
-                    dGrayAbandonLevelMax = dGrayAbandonLevelData[0];
-                    for (int i = 1; i < (int)GrayLevel.Max; i++)
-                    {
-                        dGrayAbandonLevelMax = Math.Max(dGrayAbandonLevelMax, dGrayAbandonLevelData[i]);
-                    }
+                }
               
-               
 
+                //获取去背景灰度图数据
+                dGrayAbandonLevelData = new double[(int)GrayLevel.Max];
+                dGrayAbandonLevelData = GetGrayAbandonData(removeBGBseData, dGrayAbandonLevelData);
+
+                //计算灰度去背景最大值
+                dGrayAbandonLevelMax = dGrayAbandonLevelData[0];
+                for (int i = 1; i < (int)GrayLevel.Max; i++)
+                {
+                    dGrayAbandonLevelMax = Math.Max(dGrayAbandonLevelMax, dGrayAbandonLevelData[i]);
+                }
 
 
 
                 //取图不成功就返回
                 if (!bfResult) { return; }
 
-               
+
                 //用于线扫描曲线
-               
+
                 UpdateImageOrChart(m_imagetype);
-               
+
                 myChart.Visible = false;
                 pbBSEImage.Show();
                 //切换显示至BSE图
@@ -761,7 +772,7 @@ namespace OTSMeasureApp
                 log.Error("(LZMeasureStatusWindow.ShowRemoveBGImage_Click)  " + ex.ToString());
             }
         }
-       
+
         #endregion
         //显示灰度曲线
         #region 显示灰度曲线
@@ -779,9 +790,9 @@ namespace OTSMeasureApp
             try
             {
                 m_imagetype = ImageType.GrayLevelChart;
-              
+
                 pbBSEImage.Hide();
-               
+
                 //切换显示至BSE图
                 contextMenuStrip1.Items[(int)MeasureStateMenuType.ChangeDiffImageShow].Enabled = true;
                 contextMenuStrip1.Items[(int)MeasureStateMenuType.ChangeDiffImageShow].Enabled = true;
@@ -858,7 +869,7 @@ namespace OTSMeasureApp
         {
             System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(OTSMeasureStatusWindow));
             this.control_XRayTable1 = new Control_XRayTable();
-            this.control_XRayTable1.BackColor = System.Drawing.Color.FromArgb(180,255,255);
+            this.control_XRayTable1.BackColor = System.Drawing.Color.FromArgb(180, 255, 255);
             this.control_XRayTable1.Dock = System.Windows.Forms.DockStyle.Fill;
             this.control_XRayTable1.GBInfoStr = "";
             this.control_XRayTable1.GoodChineseName = "";
@@ -874,7 +885,7 @@ namespace OTSMeasureApp
             this.control_XRayTable1.TabIndex = 0;
             this.control_XRayTable1 = new OTSIncAGraph.Controls.Control_XRayTable();
             this.panelXray.Controls.Add(this.control_XRayTable1);
-         
+
             //添加鼠标点击事件
             myChart.MouseClick += new MouseEventHandler(this.LZMeasureStatusWindow_MouseClick);
             pbBSEImage.MouseClick += new MouseEventHandler(HiddenXrayTablePanel_MouseClick);
@@ -884,10 +895,10 @@ namespace OTSMeasureApp
             // 
             this.pbBSEImage.MouseUp += new MouseEventHandler(this.pbBSEImage_MouseUp);
             this.pbBSEImage.MouseDown += new MouseEventHandler(this.pbBSEImage_MouseDown);
-          
+
             this.MouseUp += new MouseEventHandler(this.pbBSEImage_MouseUp);
             this.MouseDown += new MouseEventHandler(this.pbBSEImage_MouseDown);
-       
+
             this.MouseWheel += new MouseEventHandler(this.pbBSEImage_MouseWheel);
 
             log = NLog.LogManager.GetCurrentClassLogger();
@@ -1087,7 +1098,7 @@ namespace OTSMeasureApp
                         IsShowGrayLevelLine = true;
                         Rectangle rectangle = GetPictureBoxZoomSize(pbBSEImage);
                         if (pointStart.Equals(pointEnd))
-                     
+
                         {
                             return;
                         }
@@ -1131,9 +1142,9 @@ namespace OTSMeasureApp
                         pen.DashPattern = new float[] { 5, 5 };
                         int fontOffWidth = 50;
                         int fontOffHeight = 10;
-                        
+
                         int scaleLine = 0;
-                        for (int i = 25; i <= 225; i+=25)
+                        for (int i = 25; i <= 225; i += 25)
                         {
                             scaleLine = (int)(grayValue * i);
                             e.Graphics.DrawLine(pen, new Point(rectangle.X, (rectangle.Y + rectangle.Height * 3 / 4) - scaleLine), new Point(rectangle.X + fontOffWidth, (rectangle.Y + rectangle.Height * 3 / 4) - scaleLine));
@@ -1382,7 +1393,7 @@ namespace OTSMeasureApp
                 m_imagetype = ImageType.GrayAbandonLevelChart;
                 COTSSample WSample = m_MeasureAppForm.m_ProjData.GetWorkingSample();
                 var pixelSize = WSample.CalculatePixelSize();
-                
+
 
                 var imageHandle = new CImageHandler();
                 bfResult = imageHandle.GetBSEImage(WSample.GetMsrParams().GetImageProcessParam(), pixelSize, originalBseData, m_iWidth, m_iHeight, ref removeBGBseData);
@@ -1399,7 +1410,7 @@ namespace OTSMeasureApp
 
                     }
                 }
-        
+
                 pbBSEImage.Hide();
 
                 //切换显示至BSE图
@@ -1413,8 +1424,8 @@ namespace OTSMeasureApp
                 {
                     contextMenuStrip1.Items[(int)MeasureStateMenuType.ChangeDiffImageShow].Text = "SwitchDisplayToBSEDiagram";
                 }
-                
-                UpdateImageOrChart(m_imagetype );
+
+                UpdateImageOrChart(m_imagetype);
 
                 int[] XData = new int[(int)GrayLevel.Max];
                 for (int i = 0; i < (int)GrayLevel.Max; i++)
@@ -1453,7 +1464,7 @@ namespace OTSMeasureApp
                     {
                         SetContentMenu();
                     }
-                    
+
                 }
             }
             catch (Exception ex)
@@ -1467,7 +1478,7 @@ namespace OTSMeasureApp
             //设置右键菜单中的项 是否可编辑
             SetContextMenuEnabled(true);
             //显示切换至BSE图
-            if (contextMenuStrip1.Items[(int)MeasureStateMenuType.ChangeDiffImageShow].Text == "切换显示至BSE图"|| contextMenuStrip1.Items[(int)MeasureStateMenuType.ChangeDiffImageShow].Text == "SwitchDisplayToBSEDiagram")
+            if (contextMenuStrip1.Items[(int)MeasureStateMenuType.ChangeDiffImageShow].Text == "切换显示至BSE图" || contextMenuStrip1.Items[(int)MeasureStateMenuType.ChangeDiffImageShow].Text == "SwitchDisplayToBSEDiagram")
             {
                 contextMenuStrip1.Items[(int)MeasureStateMenuType.ChangeDiffImageShow].Enabled = true;
 
@@ -1492,7 +1503,7 @@ namespace OTSMeasureApp
                     //panel1.Visible = false;
                 }
             }
-            else if (contextMenuStrip1.Items[(int)MeasureStateMenuType.ChangeDiffImageShow].Text == "切换显示至BSE去背景图"|| contextMenuStrip1.Items[(int)MeasureStateMenuType.ChangeDiffImageShow].Text == "SwitchDisplayToBSEBackgroundImage")
+            else if (contextMenuStrip1.Items[(int)MeasureStateMenuType.ChangeDiffImageShow].Text == "切换显示至BSE去背景图" || contextMenuStrip1.Items[(int)MeasureStateMenuType.ChangeDiffImageShow].Text == "SwitchDisplayToBSEBackgroundImage")
             {
                 contextMenuStrip1.Items[(int)MeasureStateMenuType.ChangeDiffImageShow].Enabled = true;
                 if (OTSCommon.Language.ReadDefaultLanguage() == "ZH")
@@ -1503,7 +1514,7 @@ namespace OTSMeasureApp
                 {
                     contextMenuStrip1.Items[(int)MeasureStateMenuType.ChangeDiffImageShow].Text = "SwitchDisplayToBSEDiagram";
                 }
-                
+
                 //显示去背景BSE图
                 if (originalBseData != null)
                 {
@@ -1511,12 +1522,12 @@ namespace OTSMeasureApp
                     m_IsShowImageType = ImageType.RemoveBGImage;
                     m_imagetype = ImageType.RemoveBGImage;
                     ShowImage(m_iWidth, m_iHeight, removeBGBseData);
-                  
+
                     pbBSEImage.Show();
                 }
             }
             myChart.Visible = false;
-            UpdateImageOrChart(m_imagetype );
+            UpdateImageOrChart(m_imagetype);
             GetLineImage(YSize, m_iWidth, ref Imagedata);
             m_CurrentMultiple = 0;
             panelXray.Visible = false;
@@ -1608,14 +1619,14 @@ namespace OTSMeasureApp
             }
             catch (Exception ex)
             {
-                
+
                 MessageBox.Show(table["message24"].ToString() + ex.ToString());
             }
         }
         #endregion
 
-     
-       
+
+
 
 
         #region 鼠标是否在图像上移动
@@ -1701,7 +1712,7 @@ namespace OTSMeasureApp
                 }
 
             }
-           
+
         }
         #endregion
         #region 获取线扫描初始位置
@@ -1761,7 +1772,7 @@ namespace OTSMeasureApp
             MenuItemLineScam.Checked = false;
             //电镜设置对象
             //控制类对象初始化
-        
+
             EDSController m_EDSHardwareMgr = EDSController.GetEDSController();
             //1.连接电镜
             if (m_EDSHardwareMgr.Connect())
@@ -1810,7 +1821,7 @@ namespace OTSMeasureApp
                         //4-2 根据位置绘制标记
                         Point ImgPoint = new Point((int)dMouseImgX, (int)dMouseImgY);
                         Rectangle rect = new Rectangle(p_mouseCurrentTempPoint, new Size(1, 1));
-                        CRectangleGDIObject createRect =  new CRectangleGDIObject(rect, ImgPoint, m_CurrentMultiple, CreateRectangleType.DrawBSEElementSignPoint);
+                        CRectangleGDIObject createRect = new CRectangleGDIObject(rect, ImgPoint, m_CurrentMultiple, CreateRectangleType.DrawBSEElementSignPoint);
                         m_ElementPointGDIObjects.Add(createRect);
                         //5.获取成功后弹出对话框
                         //计数率
@@ -1855,11 +1866,11 @@ namespace OTSMeasureApp
                 }
 
 
-               
+
             }
         }
 
-       
+
 
         public void DelElementPointGDIObjects()
         {
@@ -1951,7 +1962,7 @@ namespace OTSMeasureApp
         }
         public bool InsertDataToExcelTable(List<System.Data.DataTable> a_list_ElementData, string a_filePath, List<string> a_ImgFilePath)
         {
-           var m_xe = new ExcelEdit();
+            var m_xe = new ExcelEdit();
             m_xe.Create();
             Microsoft.Office.Interop.Excel.Worksheet ws = m_xe.GetSheet("Sheet1");
             m_xe.m_ws = ws;
@@ -2059,7 +2070,7 @@ namespace OTSMeasureApp
         //在picturebox的鼠标按下事件里.
         private void pbBSEImage_MouseUp(object sender, MouseEventArgs e)
         {
-       
+
             MoveFlag = false;
         }
 
@@ -2083,7 +2094,7 @@ namespace OTSMeasureApp
                     m_CurrentMultiple += Convert.ToSingle(m_Multiple.ToString("f2"));
                     pbBSEImage.Width += Convert.ToInt32(m_iWidth * m_Multiple);
                     pbBSEImage.Height += Convert.ToInt32(m_iHeight * m_Multiple);
-                    WheelElementPointGDIObjects(e.Location,m_CurrentMultiple);
+                    WheelElementPointGDIObjects(e.Location, m_CurrentMultiple);
                 }
             }
             else
@@ -2097,7 +2108,7 @@ namespace OTSMeasureApp
                 else
                 {
                     m_CurrentMultiple = 0;
-                    
+
                     pbBSEImage.Height = this.RestoreBounds.Height;
                     pbBSEImage.Width = this.RestoreBounds.Height * 4 / 3;
                     pbBSEImage.Left = 0;
@@ -2115,20 +2126,20 @@ namespace OTSMeasureApp
                                 int sizeChangeY = sizeChangePoint.Y - m_GetBSEImageInitPoint.Y;
                                 RectangleF sizeChangeRectF = m_ElementPointGDIObjects[0].GetZoomedRegionF();
                                 sizeChangeRectF.X = m_ElementPointGDIObjects[0].GetZoomedRegionF().X + sizeChangeX;
-                                m_ElementPointGDIObjects[0].SetInitRegionF(sizeChangeRectF);                        
+                                m_ElementPointGDIObjects[0].SetInitRegionF(sizeChangeRectF);
                                 m_GetBSEImageInitPoint = sizeChangePoint;
                             }
                         }
                     }
                 }
-                WheelElementPointGDIObjects(e.Location,m_CurrentMultiple);
+                WheelElementPointGDIObjects(e.Location, m_CurrentMultiple);
             }
         }
         /// <summary>
         /// 缩放时改变 单点标识位置
         /// </summary>
         /// <param name="m_CurrentMultiple"></param>
-        public void WheelElementPointGDIObjects(Point refPoint,float CurrentMultiple)
+        public void WheelElementPointGDIObjects(Point refPoint, float CurrentMultiple)
         {
             if (m_ElementPointGDIObjects.Count > 0)
             {
@@ -2202,7 +2213,7 @@ namespace OTSMeasureApp
                 }
 
             }
-          
+
             ToolWindow toolWindow = new ToolWindow(m_MeasureAppForm, this);
             int grayStart = 0;
             int grayEnd = 0;
@@ -2253,10 +2264,10 @@ namespace OTSMeasureApp
                 }
 
             }
-            SpecialParticleForm specialParticleForm = new SpecialParticleForm(CSpecialGrayRangeParam.GetParamFileFullName(), m_MeasureAppForm,  originalBseData, m_iWidth, m_iHeight,this);
+            SpecialParticleForm specialParticleForm = new SpecialParticleForm(CSpecialGrayRangeParam.GetParamFileFullName(), m_MeasureAppForm, originalBseData, m_iWidth, m_iHeight, this);
             DialogResult dialogResult = specialParticleForm.ShowDialog();
 
-    
+
         }
     }
 }

+ 36 - 36
OTSIncAMeasureApp/5-OTSMeasureStatuImageFun/ToolWindow.cs

@@ -238,42 +238,42 @@ namespace OTSMeasureApp
         }
 
         #region BSE图去背景
-        protected Bitmap ShowRemoveBGImage(byte[] bBseData,int grayStart,int grayEnd)
-        {
-            try
-            {
-                int m_iWidth = 0;
-                int m_iHeight = 0;
-                //获取电镜中图像大小
-                string str = m_MeasureAppForm.m_ProjParam.GetBSEImageResolution();
-                string[] sArray = str.Split('X');
-                if (sArray[0] != "" && sArray[1] != "")
-                {
-                    m_iWidth = Convert.ToInt32(sArray[0]);
-                    m_iHeight = Convert.ToInt32(sArray[1]);
-                }
-                //去背景图
-                byte[] cBseData = null;
-                //获取图像数据
-                var imageHandle = new CImageHandler();
-                 //imagefun.GetBSEImage(bBseData, m_iHeight, m_iWidth, grayStart, grayEnd, ref cBseData);
-                bool bfResult = imageHandle.GetBSEImage(bBseData, m_iHeight, m_iWidth, grayStart, grayEnd, ref cBseData);
-                if (bfResult)
-                {
-                    Bitmap reImg= CImageHandler.ToGrayBitmap(cBseData, m_iWidth, m_iHeight);
-                    return reImg;
-                }
-                else
-                {
-                    return null;
-                }
-            }
-            catch (Exception ex)
-            {
-               log.Error("(ShowRemoveBGImage_Click):" + ex.ToString());
-            }
-            return null;
-        }
+        //protected Bitmap ShowRemoveBGImage(byte[] bBseData,int grayStart,int grayEnd)
+        //{
+        //    try
+        //    {
+        //        int m_iWidth = 0;
+        //        int m_iHeight = 0;
+        //        //获取电镜中图像大小
+        //        string str = m_MeasureAppForm.m_ProjParam.GetBSEImageResolution();
+        //        string[] sArray = str.Split('X');
+        //        if (sArray[0] != "" && sArray[1] != "")
+        //        {
+        //            m_iWidth = Convert.ToInt32(sArray[0]);
+        //            m_iHeight = Convert.ToInt32(sArray[1]);
+        //        }
+        //        //去背景图
+        //        byte[] cBseData = null;
+        //        //获取图像数据
+        //        var imageHandle = new CImageHandler();
+                
+        //        bool bfResult = imageHandle.GetBSEImage(bBseData, m_iHeight, m_iWidth, grayStart, grayEnd, ref cBseData);
+        //        if (bfResult)
+        //        {
+        //            Bitmap reImg= CImageHandler.ToGrayBitmap(cBseData, m_iWidth, m_iHeight);
+        //            return reImg;
+        //        }
+        //        else
+        //        {
+        //            return null;
+        //        }
+        //    }
+        //    catch (Exception ex)
+        //    {
+        //       log.Error("(ShowRemoveBGImage_Click):" + ex.ToString());
+        //    }
+        //    return null;
+        //}
         #endregion
     }
 }

+ 2 - 2
OTSIncAMeasureApp/5-OTSMeasureStatuImageFun/frmSpecialGrayParticle.cs

@@ -184,7 +184,7 @@ namespace OTSMeasureApp
                 var imageHandle = new CImageHandler();
                  //ImageFun.GetBSEImage(bBseData, m_iWidth, m_iHeight, startGray, endGray, ref cBseData);
 
-                imageHandle.GetBSEImage(bBseData, m_iWidth, m_iHeight, startGray, endGray, ref cBseData);
+                imageHandle.GetSpecificGreyRangeBSEImage(bBseData, m_iWidth, m_iHeight, startGray, endGray, ref cBseData);
 
                 bBseData = cBseData;
                 //取图不成功就返回
@@ -338,7 +338,7 @@ namespace OTSMeasureApp
                 var imageHandle = new CImageHandler();
                 //bool bfResult = imagefun.GetBSEImage(bBseData, m_iHeight, m_iWidth, grayStart, grayEnd, ref cBseData);
 
-                imageHandle.GetBSEImage(bBseData, m_iHeight, m_iWidth, grayStart, grayEnd, ref cBseData);
+                imageHandle.GetSpecificGreyRangeBSEImage(bBseData, m_iHeight, m_iWidth, grayStart, grayEnd, ref cBseData);
                 if (bfResult)
                 {
                     Bitmap reImg= CImageHandler.ToGrayBitmap(cBseData, m_iWidth, m_iHeight);

+ 142 - 132
OTSIncAMeasureApp/ServiceCenter/CImageHandler.cs

@@ -109,28 +109,7 @@ namespace OTSModelSharp.ServiceCenter
 
             return true;
         }
-        //public bool GetColoredImage(COTSImageProcParam ImgProcPrm, double pixelSize, byte[] BSEImage, int iWidth, int iHeight, ref Bitmap BSEImageNoBG)
-        //{
-        //    Rectangle rect = new Rectangle();
-        //    rect.Height = iHeight;
-        //    rect.Width = iWidth;
-        //    CBSEImgClr pBSEImageIn = new CBSEImgClr(rect);
-           
-
-
-           
-        //    pBSEImageIn.SetImageData(BSEImage, iWidth, iHeight);
-         
-        //    if (null == ImgProcPrm)
-        //    {
-        //        return false;
-        //    }
-
-        //    RemoveBGAndGetColoredParts(pBSEImageIn, ImgProcPrm, pixelSize, ref BSEImageNoBG);//RemoveBGAndGetColoredParts
-
-
-        //    return true;
-        //}
+       
 
         /// <summary>
         /// 获取测量的BSE图
@@ -142,7 +121,7 @@ namespace OTSModelSharp.ServiceCenter
         /// <param name="grayEnd"></param>
         /// <param name="BSEImageNoBG">去背景图数据</param>
         /// <returns></returns>
-        public bool GetBSEImage(byte[] BSEImage, int iWidth, int iHeight, int grayStart, int grayEnd, ref byte[] BSEImageNoBG)
+        public bool GetSpecificGreyRangeBSEImage(byte[] BSEImage, int iWidth, int iHeight, int grayStart, int grayEnd, ref byte[] BSEImageNoBG)
         {
             Rectangle rect = new Rectangle();
             rect.Height = iHeight;
@@ -164,6 +143,7 @@ namespace OTSModelSharp.ServiceCenter
             ImageProForClr imgpro = new ImageProForClr();
             int num=0;
             imgpro.GetSpecialGrayRangeImage(pBSEImageIn, cIntRangeClr, pBSEImageOut,ref num);
+
             for (int i = 0; i < iWidth; i++)
             {
                 for (int j = 0; j < iHeight; j++)
@@ -187,6 +167,28 @@ namespace OTSModelSharp.ServiceCenter
 
             BSEImageNoBG = pBSEImageOut.GetImageDataPtr();
 
+            return true;
+        }
+        public bool GetColoredImage(COTSImageProcParam ImgProcPrm, double pixelSize, byte[] BSEImage, int iWidth, int iHeight, ref CBSEImgClr a_pImgOut, ref Bitmap BSEImageNoBG)
+        {
+            Rectangle rect = new Rectangle();
+            rect.Height = iHeight;
+            rect.Width = iWidth;
+            CBSEImgClr pBSEImageIn = new CBSEImgClr(rect);
+
+
+
+
+            pBSEImageIn.SetImageData(BSEImage, iWidth, iHeight);
+
+            if (null == ImgProcPrm)
+            {
+                return false;
+            }
+
+            RemoveBGAndGetColoredParts(pBSEImageIn, ImgProcPrm, pixelSize, ref a_pImgOut, ref BSEImageNoBG);//RemoveBGAndGetColoredParts
+
+
             return true;
         }
         // remove background
@@ -251,26 +253,125 @@ namespace OTSModelSharp.ServiceCenter
 
             foreach (var p in parts)
             {
-                //OTSCLRINTERFACE.ImageProForClr imgpro = new OTSCLRINTERFACE.ImageProForClr();
-                //imgpro.SplitRawParticleIntoGreyScaleParticle(p,new CDoubleRangeClr(ecdrange.GetStart(),ecdrange.GetEnd()),  a_pixelSize, a_pImgIn);
-                //var subparts = p.GetSubParticles();
-                //foreach (var subp in subparts)
-                //{
-                //    int bseValue = (new Random()).Next(10, 255);
-                //    foreach (var s in subp.GetFeature().GetSegmentsList())
-                //    {
+              
+                foreach (var s in p.GetFeature().GetSegmentsList())
+                {
+                   
+                    for (int i = s.GetStart(); i < s.GetStart() + s.GetLength(); i++)
+                    {
+                        var bseValue = a_pImgIn.GetBSEValue(i, s.GetHeight());
+                        a_pImgOut.SetBSEValue(i, s.GetHeight(), bseValue);
+                    }
+                }
+
+
+            }
+           
+          
+          
+            return;
+        }
+        private void RemoveBGAndGetColoredParts(CBSEImgClr a_pImgIn, COTSImageProcParam a_pImgProcessParam, double a_pixelSize, ref CBSEImgClr a_pImgOut, ref Bitmap a_pBmpOut)
+        {
+
+
+            List<COTSParticleClr> parts = new List<COTSParticleClr>();
+            List<COTSParticleClr> specialGreyparts = new List<COTSParticleClr>();
+            var ecdrange = a_pImgProcessParam.GetIncAreaRange();
+            if (!RemoveBGAndGetParts(a_pImgIn, a_pImgProcessParam, a_pixelSize, ref parts))
+            {
+                return;
+            }
+
+            if (a_pImgProcessParam.GetSpecialGreyRangeParam().GetIsToRun())
+            {
+                var param = a_pImgProcessParam.GetSpecialGreyRangeParam();
+                var ranges = param.GetSpecialGreyRanges();
+
+
+                foreach (var r in ranges)
+                {
+                    CIntRangeClr r1 = new CIntRangeClr();
+                    r1.SetStart(r.range.GetStart());
+                    r1.SetEnd(r.range.GetEnd());
+
+                    CDoubleRangeClr r2 = new CDoubleRangeClr();
+                    r2.SetStart(r.diameterRange.GetStart());
+                    r2.SetEnd(r.diameterRange.GetEnd());
+
+                    GetParticlesBySpecialGray(a_pImgIn, r1, r2, a_pixelSize, ref specialGreyparts);
+                }
+
+            }
+
+
+            for (int i = 0; i < a_pBmpOut.Width; i++)
+            {
+                for (int j = 0; j < a_pBmpOut.Height; j++)
+                {
+                    a_pBmpOut.SetPixel(i, j, Color.White);
+                }
+            }
+            Random c = new Random();
+            if (specialGreyparts.Count > 0)
+            {
+                foreach (var p in specialGreyparts)
+                {
+                    Color cValue = GetRandomColor30(c);
+                    foreach (var s in p.GetFeature().GetSegmentsList())
+                    {
+                        for (int i = s.GetStart(); i < s.GetStart() + s.GetLength(); i++)
+                        {
+                            var bseValue = a_pImgIn.GetBSEValue(i, s.GetHeight());
+                            a_pBmpOut.SetPixel(i, s.GetHeight(), cValue);
+                        }
+                    }
+
+                }
+
+            }
+
+
+            foreach (var p in parts)
+            {
 
-                //        for (int i = s.GetStart(); i < s.GetStart() + s.GetLength(); i++)
-                //        {
+                    Color cValue = GetRandomColor30(c);
+                    foreach (var s in p.GetFeature().GetSegmentsList())
+                    {
 
-                //            a_pImgOut.SetBSEValue(i, s.GetHeight(), bseValue);
-                //        }
-                //    }
+                        for (int i = s.GetStart(); i < s.GetStart() + s.GetLength(); i++)
+                        {
+
+                        a_pBmpOut.SetPixel(i, s.GetHeight(), cValue);
+                        }
+                    }
+
+            }
+
+            if (specialGreyparts.Count > 0)
+            {
+                foreach (var p in specialGreyparts)
+                {
+                    foreach (var s in p.GetFeature().GetSegmentsList())
+                    {
+                        for (int i = s.GetStart(); i < s.GetStart() + s.GetLength(); i++)
+                        {
+                            var bseValue = a_pImgIn.GetBSEValue(i, s.GetHeight());
+                            a_pImgOut.SetBSEValue(i, s.GetHeight(), bseValue);
+                        }
+                    }
 
+                }
+
+            }
+
+
+            foreach (var p in parts)
+            {
 
-                //}
                 foreach (var s in p.GetFeature().GetSegmentsList())
                 {
+
                     for (int i = s.GetStart(); i < s.GetStart() + s.GetLength(); i++)
                     {
                         var bseValue = a_pImgIn.GetBSEValue(i, s.GetHeight());
@@ -280,104 +381,13 @@ namespace OTSModelSharp.ServiceCenter
 
 
             }
-           
-          
-          
+
             return;
         }
-        //private void RemoveBGAndGetColoredParts(CBSEImgClr a_pImgIn, COTSImageProcParam a_pImgProcessParam, double a_pixelSize, ref Bitmap a_pImgOut)
-        //{
-
-
-        //    List<COTSParticleClr> parts = new List<COTSParticleClr>();
-        //    List<COTSParticleClr> specialGreyparts = new List<COTSParticleClr>();
-        //    var ecdrange = a_pImgProcessParam.GetIncAreaRange();
-        //    if (!RemoveBGAndGetParts(a_pImgIn, a_pImgProcessParam, a_pixelSize, ref parts))
-        //    {
-        //        return;
-        //    }
-
-        //    if (a_pImgProcessParam.GetSpecialGreyRangeParam().GetIsToRun())
-        //    {
-        //        var param = a_pImgProcessParam.GetSpecialGreyRangeParam();
-        //        var ranges = param.GetSpecialGreyRanges();
-
-
-        //        foreach (var r in ranges)
-        //        {
-        //            CIntRangeClr r1 = new CIntRangeClr();
-        //            r1.SetStart(r.range.GetStart());
-        //            r1.SetEnd(r.range.GetEnd());
-
-        //            CDoubleRangeClr r2 = new CDoubleRangeClr();
-        //            r2.SetStart(r.diameterRange.GetStart());
-        //            r2.SetEnd(r.diameterRange.GetEnd());
-
-        //            GetParticlesBySpecialGray(a_pImgIn, r1, r2, a_pixelSize, ref specialGreyparts);
-        //        }
-
-        //    }
-
-
-        //    for (int i = 0; i < a_pImgOut.Width; i++)
-        //    {
-        //        for (int j = 0; j < a_pImgOut.Height; j++)
-        //        {
-        //            a_pImgOut.SetPixel(i, j, Color.White);
-        //        }
-        //    }
-        //    if (specialGreyparts.Count > 0)
-        //    {
-        //        foreach (var p in specialGreyparts)
-        //        {
-        //            Color cValue = GetRandomColor30();
-        //            foreach (var s in p.GetFeature().GetSegmentsList())
-        //            {
-        //                for (int i = s.GetStart(); i < s.GetStart() + s.GetLength(); i++)
-        //                {
-        //                    var bseValue = a_pImgIn.GetBSEValue(i, s.GetHeight());
-        //                    a_pImgOut.SetPixel(i, s.GetHeight(), cValue);
-        //                }
-        //            }
-
-        //        }
-
-        //    }
-
-
-        //    foreach (var p in parts)
-        //    {
-        //        OTSCLRINTERFACE.ImageProForClr imgpro = new OTSCLRINTERFACE.ImageProForClr();
-        //        imgpro.SplitRawParticleIntoGreyScaleParticle(p, new CDoubleRangeClr(ecdrange.GetStart(), ecdrange.GetEnd()), a_pixelSize, a_pImgIn);
-               
-        //        //imgpro.SplitRawParticleIntoWaterShedParticle(p, new CDoubleRangeClr(ecdrange.GetStart(), ecdrange.GetEnd()), a_pixelSize, a_pImgIn);
-        //        var subparts = p.GetSubParticles();
-        //        foreach (var subp in subparts)
-        //        {
-        //            Color cValue = GetRandomColor30();
-        //            foreach (var s in subp.GetFeature().GetSegmentsList())
-        //            {
-
-        //                for (int i = s.GetStart(); i < s.GetStart() + s.GetLength(); i++)
-        //                {
-                           
-        //                    a_pImgOut.SetPixel(i, s.GetHeight(), cValue);
-        //                }
-        //            }
-
-
-        //        }
-               
-
-        //    }
-
-
-
-        //    return;
-        //}
-        public Color GetRandomColor30()
+       
+        public Color GetRandomColor30(Random r)
         {
-            Random r = new Random();
+           
             int n = r.Next(0, 31);
 
             Color ret_color;

+ 14 - 11
OTSIncAReportApp/1-UI/Control_Graph/Controls/Control_DrawDistrbutionImageAndBSE.cs

@@ -1949,22 +1949,23 @@ namespace OTSIncAReportGraph.Controls
 
         private void ToolStripMenuItemDelete_Particle_Click(object sender, EventArgs e)
         {
-            DialogResult dr = MessageBox.Show("Should I delete particles", "Tips", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
+            DialogResult dr = MessageBox.Show("Remove all these particles permanently?", "Tips", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
             if (dr== DialogResult.OK)
             {
-                
-               if (DeleteParticlesFromLibrary(m_mouseOver_dparticle.ParticleId, m_mouseOver_dparticle.FieldId))
+                foreach (var p in m_list_allDPart)
                 {
-                    MessageBox.Show("Deleted successfully");
-
-
-                    m_mouseOver_dparticle.IsDeleted=true;
+                    if (p.IsSelect)
+                    {
+                        DeleteParticlesFromLibrary(p.objParticleData.ParticleId, p.objParticleData.FieldId);
 
+                        p.IsDeleted = true;
+                    }
+                  
+                
                 }
-               else
-                {
-                    MessageBox.Show("Delete failed");
-                }
+                MessageBox.Show("Deleted successfully");
+         
+                Invalidate();
             }
             else
             {
@@ -1996,6 +1997,8 @@ namespace OTSIncAReportGraph.Controls
             if (resultFile.List_OTSField == null)
                 return false;
             Particle particle = resultFile.List_OTSField.Find(x => x.FieldID == in_clr_fieldid).ParticleList.Find(x => x.ParticleId == in_clr_tagid);
+           
+            
             if (new ParticleData(resultFile.FilePath).DeleteFromData(Convert.ToString(particle.FieldId), Convert.ToString(particle.XrayId)))
             {
 

+ 35 - 28
OTSIncAReportApp/1-UI/Control_Grids/ParticlesGridDevidePage.cs

@@ -2036,9 +2036,9 @@ namespace OTSIncAReportGrids
                         cell = row.CreateCell(0);
                         cell.CellStyle = cellStyle;
                         cell.SetCellValue(j + 1);
-                        /*cell =*/ row.CreateCell(1);
-                        /*cell = */row.CreateCell(2);
-                       /* cell = */row.CreateCell(3);
+                        row.CreateCell(1);
+                        row.CreateCell(2);
+                        row.CreateCell(3);
                         drawing = sheet3.CreateDrawingPatriarch();
                         //锚点
                         anchor3 = drawing.CreateAnchor(0, 0, 0, 0, 1, j + 2, 2, j + 3);//XSSFClientAnchor(dx1,dy1,dx2,dy2,col1,row1,col2,row2);参数说明:dx1 dy1 起始单元格中的x,y坐标.dx2 dy2 结束单元格中的x,y坐标col1, row1 指定起始的单元格,下标从0开始col2, row2 指定结束的单元格,下标从0开始
@@ -2124,44 +2124,51 @@ namespace OTSIncAReportGrids
             ParticleData fielddata = new ParticleData(result.FilePath);
             List<Particle> particles = fielddata.GetParticleAllList();
 
-            List<Particle> ls_list_cotsparticleclr = new List<Particle>();
-            for (int l = 0; l < dgV_ParticlesDevidePage.SelectedRows.Count; l++)
+          
+
+            DialogResult dr = MessageBox.Show("Remove all these particles permanently?", "Tips", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
+            if (dr == DialogResult.OK)
             {
-                //从事先加载的Bitmap对象的Tag中取出List<string>
-                DataGridViewRow dgvr = dgV_ParticlesDevidePage.SelectedRows[l];
-                Bitmap ls_bp = (Bitmap)dgvr.Cells[2].Value;
-                List<string> list_str = (List<string>)ls_bp.Tag;
-                if (list_str != null)
+
+                for (int ii = 0; ii < dgV_ParticlesDevidePage.SelectedRows.Count; ii++)
                 {
-                    int i_ls_fieldid = Convert.ToInt32(list_str[0]);
-                    int i_ls_particleid = Convert.ToInt32(list_str[1]);
-                    foreach (Particle item in particles)
+                    //从事先加载的Bitmap对象的Tag中取出List<string>
+                    DataGridViewRow dgvr = dgV_ParticlesDevidePage.SelectedRows[ii];
+                    Bitmap ls_bp = (Bitmap)dgvr.Cells[2].Value;
+                    List<string> list_str = (List<string>)ls_bp.Tag;
+                    if (list_str != null)
                     {
-                        if (i_ls_fieldid == item.FieldId && i_ls_particleid == item.ParticleId)
+                        int i_ls_fieldid = Convert.ToInt32(list_str[0]);
+                        int i_ls_particleid = Convert.ToInt32(list_str[1]);
+                        foreach (Particle item in particles)
                         {
-                            if (DeleteParticlesFromLibrary(item.ParticleId, item.FieldId))
+                            if (i_ls_fieldid == item.FieldId && i_ls_particleid == item.ParticleId)
                             {
-                                MessageBox.Show("Deleted successfully");
-
-                                for (int i = 0; i < particlesAll.Rows.Count; i++)
+                                if (DeleteParticlesFromLibrary(item.ParticleId, item.FieldId))
                                 {
-                                    if (particlesAll.Rows[i]["Fieldid"].ToString() == item.FieldId.ToString() && particlesAll.Rows[i]["Particleid"].ToString() == item.ParticleId.ToString())
+                                  
+
+                                    for (int i = 0; i < particlesAll.Rows.Count; i++)
                                     {
-                                        particlesAll.Rows.RemoveAt(i);
+                                        if (particlesAll.Rows[i]["Fieldid"].ToString() == item.FieldId.ToString() && particlesAll.Rows[i]["Particleid"].ToString() == item.ParticleId.ToString())
+                                        {
+                                            particlesAll.Rows.RemoveAt(i);
+                                        }
                                     }
-                                }
 
-                                DisplayData();
-                            }
-                            else
-                            {
-                                MessageBox.Show("Delete failed");
+                                  
+                                }
+                                else
+                                {
+                                    MessageBox.Show("Delete failed");
+                                }
+                                break;
                             }
-                            break;
                         }
-                    }
 
+                    }
                 }
+                DisplayData();
             }
         }