public void SaveModule(string projectDirectory, string nodeName) { string imageFilePath; string configFile; imageFilePath = projectDirectory + @"\TileImage-" + nodeName + @".bmp"; if (SingleImage != null) { Bitmap image = ImageOperateTools.ImageCopy(SingleImage); image.Save(imageFilePath, image.RawFormat); image.Dispose(); } configFile = projectDirectory + @"\TileImage-" + nodeName + ".xml"; XmlParameter xmlParameter = new XmlParameter(); #region IDisplay xmlParameter.Add("DisplayWindowName", DisplayWindowName); xmlParameter.Add("IsDisplay", IsDisplay); #endregion xmlParameter.Add("SizeOfText", SizeOfText); xmlParameter.WriteParameter(configFile); return; }
public void GetDefectCell(string productName, string batchName, string boardName, string sideName, string shotName, string defectName, out DefectCell defectCell) { defectCell = new DefectCell(); string defectPath = _dataDir + "\\" + productName + "\\" + batchName + "\\" + boardName + "\\" + sideName + "\\" + shotName; MachVisionFile machVisionFile = new MachVisionFile(defectPath, shotName); defectName = Regex.Replace(defectName, @"(.bmp)$", ""); machVisionFile.ReadRoiInTemplate(defectName, out var roi); machVisionFile.ReadDefectInfos(defectName, out var defectInfos); defectCell.RoiInTemplate = roi; defectCell.DefectInfos = defectInfos; string imageFile = defectPath + "\\" + defectName + ".bmp"; if (!File.Exists(imageFile)) { return; } defectCell.DefectImage = ImageOperateTools.GetImageFromFile(imageFile); Bitmap templateImage; if (TryGetTemplateImg(sideName, shotName, roi, out templateImage)) { defectCell.TemplateImage = templateImage; } else { defectCell.TemplateImage = null; } }
public void InitModule(string projectDirectory, string nodeName) { string imageFilePath; string configFile; string strParamInfo = ""; XmlParameter xmlParameter = null; imageFilePath = projectDirectory + @"\TileImage-" + nodeName + @".bmp"; if (File.Exists(imageFilePath)) { var image = new Bitmap(imageFilePath, true); SingleImage = ImageOperateTools.ImageCopy(image); image.Dispose(); } else { SingleImage = new Bitmap(500, 100); } configFile = projectDirectory + @"\TileImage-" + nodeName + ".xml"; if (File.Exists(configFile)) { xmlParameter = new XmlParameter(); xmlParameter.ReadParameter(configFile); #region IDisplay strParamInfo = xmlParameter.GetParamData("DisplayWindowName"); if (strParamInfo != "") { DisplayWindowName = strParamInfo; } strParamInfo = xmlParameter.GetParamData("IsDisplay"); if (strParamInfo != "") { IsDisplay = Convert.ToBoolean(strParamInfo); } #endregion strParamInfo = xmlParameter.GetParamData("SizeOfText"); if (strParamInfo != "") { SizeOfText = Convert.ToInt32(strParamInfo); } } return; }
private bool TryGetTemplateImg(string sideName, string shotName, Rectangle roi, out Bitmap templateBitmap) { if (_templateBitmapDirectory.ContainsKey(sideName + shotName)) { Bitmap bitmap = _templateBitmapDirectory[sideName + shotName]; if (ImageOperateTools.BitmapCropImage(bitmap, roi, out templateBitmap)) { return(true); } } else { templateBitmap = null; } return(false); }
private bool GetTemplateBitmap(string sideName, string shotName, out Bitmap templateBitmap) { templateBitmap = null; try { string filePath = _modelDir + "\\" + sideName + "\\" + shotName + ".jpg"; if (!File.Exists(filePath)) { return(false); } templateBitmap = ImageOperateTools.GetImageFromFile(filePath); } catch (Exception ex) { templateBitmap = null; MessageBox.Show(ex.Message); return(false); } return(true); }
public static void GenDefectRegions(Bitmap bitmap, List <Rectangle> rectangles, double radiusOfDilation, out List <SingleDefectRegion> defectRegions) { defectRegions = new List <SingleDefectRegion>(); HObject ho_image; HObject ho_ConnectedDilations; HTuple hv_Row1OfRectangles = new HTuple(); HTuple hv_Row2OfRectangles = new HTuple(); HTuple hv_Column1OfRectangles = new HTuple(); HTuple hv_Column2OfRectangles = new HTuple(); HTuple hv_RadiusOfDilation = new HTuple(); HTuple hv_IndexOfRectangles = new HTuple(); HTuple hv_NumberListOfRectangles = new HTuple(); // initialation HOperatorSet.GenEmptyObj(out ho_image); ho_image.Dispose(); ImageOperateTools.Bitmap8HObjectBpp8(bitmap, out ho_image); for (int i = 0; i < rectangles.Count; i++) { var rectangle = rectangles[i]; hv_Row1OfRectangles.Append(new HTuple(rectangle.Top)); hv_Row2OfRectangles.Append(new HTuple(rectangle.Bottom)); hv_Column1OfRectangles.Append(new HTuple(rectangle.Left)); hv_Column2OfRectangles.Append(new HTuple(rectangle.Right)); } hv_RadiusOfDilation = radiusOfDilation; dilate_regions_pro(ho_image, out ho_ConnectedDilations, hv_Row1OfRectangles, hv_Row2OfRectangles, hv_Column1OfRectangles, hv_Column2OfRectangles, hv_RadiusOfDilation, out hv_IndexOfRectangles, out hv_NumberListOfRectangles); List <int> defectInfoIndexList = new List <int>(); List <int> defectInfoNumberList = new List <int>(); if (hv_IndexOfRectangles.TupleLength() > 0 && hv_NumberListOfRectangles.TupleLength() > 0) { defectInfoIndexList.AddRange(hv_IndexOfRectangles.ToIArr()); defectInfoNumberList.AddRange(hv_NumberListOfRectangles.ToIArr()); } else { return; } HOperatorSet.CountObj(ho_ConnectedDilations, out var hv_NumberOfDilations); for (var index = 1; index <= hv_NumberOfDilations; ++index) { SingleDefectRegion defectRegion = new SingleDefectRegion(); HOperatorSet.SelectObj(ho_ConnectedDilations, out var ho_Dilation, index); // DefectRegion.DefectInfoIndexList for (var cnt = 0; cnt < defectInfoNumberList[index - 1]; ++cnt) { defectRegion.DefectInfoIndexList.Add(defectInfoIndexList[0]); defectInfoIndexList.RemoveAt(0); } // DefectRegion.Xldxxx convert_single_region_to_points(ho_Dilation, out var hv_posYs, out var hv_posXs, out var hv_pointsNum); if (hv_posYs.TupleLength() > 0) { defectRegion.XldYs.AddRange(hv_posYs.ToDArr()); } if (hv_posXs.TupleLength() > 0) { defectRegion.XldXs.AddRange(hv_posXs.ToDArr()); } if (hv_pointsNum.TupleLength() > 0) { defectRegion.XldPointCount.AddRange(hv_pointsNum.ToIArr()); } // DefectRegion.SmallestRect HOperatorSet.SmallestRectangle1(ho_Dilation, out var hv_Row1, out var hv_Column1, out var hv_Row2, out var hv_Column2); defectRegion.SmallestRect = Rectangle.FromLTRB(hv_Column1.I, hv_Row1.I, hv_Column2.I, hv_Row2.I); defectRegions.Add(defectRegion); } return; }
public void Run() { //throw new NotImplementedException(); //WholeImage = null; //_originImages = new List<Bitmap>(); //MessageManager.Instance().Info("++++++TileImage.Run(): begin."); //lock (Task.TaskPool.PadLock) //{ // if (null != _device && null != _device.OriginImages && 0 < _device.OriginImages.Count) // { // foreach (var temp in _device.OriginImages) // { // _originImages.Add(_device.OriginImages.Dequeue()); // } // } //} //TileSingleImages(); //GetSingleRois(); //MessageManager.Instance().Info("++++++TileImage.Run(): end."); // if (null == SingleImage) { MessageManager.Instance().Warn("TileImage.Run: lack of single image."); return; } if (_device.TotalSize != CurrTotalSize) { WholeImage = null; CurrTotalSize = _device.TotalSize; SingleImages = new List <Bitmap>(); } if (null == SingleImages || 0 >= SingleImages.Count) { SingleImages = new List <Bitmap>(); for (int index = 0; index < CurrTotalSize; ++index) { SingleImages.Add(SingleImage); } } if (null == WholeImage) { TileSingleImages(SingleImages, out var wholeImage); if (null == wholeImage) { MessageManager.Instance().Alarm("TileImage.Run: error in TileSingleImages."); return; } WholeImage = ImageOperateTools.ImageCopy(wholeImage); } // DisplayBitmap = null; DisplayShapes = new List <AqShap>(); if (IsDisplay) { DisplayBitmap = WholeImage; GenerateResultDisplay(SingleImage.Height, out var contours); //DisplayContour.GetContours(_singleRois.XldPointYs, _singleRois.XldPointXs, _singleRois.XldPointsNums, out var contours, AqVision.Graphic.AqColorEnum.Yellow, 1); DisplayShapes = contours; IsUpdate = true; } else { IsUpdate = false; } return; }