public override HalconDotNet.HObject GetModelRegion() { if (_circularArc != null && _circularArc.IsInitialized()) { _circularArc.Dispose(); } HalconDotNet.HOperatorSet.GenCircleContourXld(out _circularArc, new HalconDotNet.HTuple(_locateRow), new HalconDotNet.HTuple(_locateCol), new HalconDotNet.HTuple(_radius), new HalconDotNet.HTuple(_startPhi), new HalconDotNet.HTuple(_startPhi + _extentPhi), new HalconDotNet.HTuple(_circularArcDir), new HalconDotNet.HTuple(1.0)); HalconDotNet.HObject rg = new HalconDotNet.HObject(); rg.Dispose(); HalconDotNet.HOperatorSet.GenRegionContourXld(_circularArc, out rg, "margin"); return(rg); }
protected internal virtual void InitFieldAndProperty() { _ROIManager = new InteractiveROI.ROIManager(); _hWndCtrller = new InteractiveROI.HWndCtrller(this.hWndcDisplay); _hWndCtrller.ChangeGraphicSettings(ProVision.InteractiveROI.GraphicContext.GC_COLOR, new HalconDotNet.HTuple("yellow")); _hWndCtrller.ChangeGraphicSettings(ProVision.InteractiveROI.GraphicContext.GC_LINEWIDTH, new HalconDotNet.HTuple(2)); _hWndCtrller.RegisterROICtroller(_ROIManager); _hWndCtrller.RegisterHwndCtrlMouseEvents(); _matchModelAssistant = new ProVision.MatchModel.ShapeModelAssistant(); _img = new HalconDotNet.HObject(); _isAutoCalibrate = false; _isGrabbedImage = false; _isCalibrating = false; _isCalibratedOK = false; _positionStep = 0; _angleStep = 0; _isCirclePointUpdated = new bool[] { false, false, false }; }
public override void Draw(HalconDotNet.HTuple hwndHandle) { HalconDotNet.HObject rgInternal = new HalconDotNet.HObject(); rgInternal.Dispose(); HalconDotNet.HOperatorSet.GenCircle(out rgInternal, new HalconDotNet.HTuple(_locateRow), new HalconDotNet.HTuple(_locateCol), new HalconDotNet.HTuple(_radiusInternal)); HalconDotNet.HOperatorSet.DispObj(rgInternal, hwndHandle); HalconDotNet.HObject rgExternal = new HalconDotNet.HObject(); rgExternal.Dispose(); HalconDotNet.HOperatorSet.GenCircle(out rgExternal, new HalconDotNet.HTuple(_locateRow), new HalconDotNet.HTuple(_locateCol), new HalconDotNet.HTuple(_radiusExternal)); HalconDotNet.HOperatorSet.DispObj(rgExternal, hwndHandle); HalconDotNet.HObject rec1 = new HalconDotNet.HObject(), rec2 = new HalconDotNet.HObject(), rec3 = new HalconDotNet.HObject(); rec1.Dispose(); HalconDotNet.HOperatorSet.GenRectangle2(out rec1, new HalconDotNet.HTuple(_locateRow), new HalconDotNet.HTuple(_locateCol), new HalconDotNet.HTuple(0), new HalconDotNet.HTuple(5), new HalconDotNet.HTuple(5)); HalconDotNet.HOperatorSet.DispObj(rec1, hwndHandle); rec2.Dispose(); HalconDotNet.HOperatorSet.GenRectangle2(out rec2, new HalconDotNet.HTuple(_sizeRowInternal), new HalconDotNet.HTuple(_sizeColInternal), new HalconDotNet.HTuple(0), new HalconDotNet.HTuple(5), new HalconDotNet.HTuple(5)); HalconDotNet.HOperatorSet.DispObj(rec2, hwndHandle); rec3.Dispose(); HalconDotNet.HOperatorSet.GenRectangle2(out rec3, new HalconDotNet.HTuple(_sizeRowExternal), new HalconDotNet.HTuple(_sizeColExternal), new HalconDotNet.HTuple(0), new HalconDotNet.HTuple(5), new HalconDotNet.HTuple(5)); HalconDotNet.HOperatorSet.DispObj(rec3, hwndHandle); }
public override void DisplayActiveHandle(HalconDotNet.HTuple hwndHandle) { HalconDotNet.HObject rec = new HalconDotNet.HObject(); rec.Dispose(); switch (ActiveHandleIdx) { case 0: { HalconDotNet.HOperatorSet.GenRectangle2(out rec, new HalconDotNet.HTuple(_locateRow), new HalconDotNet.HTuple(_locateCol), new HalconDotNet.HTuple(0), new HalconDotNet.HTuple(5), new HalconDotNet.HTuple(5)); HalconDotNet.HOperatorSet.DispObj(rec, hwndHandle); } break; default: break; } }
/// <summary> /// Bitmap转HObject /// </summary> /// <param name="bmp">8位Bitmap</param> /// <param name="hobj"></param> /// <returns></returns> private bool BitmapBpp8ToHObject(System.Drawing.Bitmap bmp, out HalconDotNet.HObject hobj) { bool rt = false; HalconDotNet.HOperatorSet.GenEmptyObj(out hobj); try { System.Drawing.Rectangle rect = new System.Drawing.Rectangle(0, 0, bmp.Width, bmp.Height); System.Drawing.Imaging.BitmapData srcBmpData = bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format8bppIndexed); HalconDotNet.HOperatorSet.GenImage1(out hobj, "byte", bmp.Width, bmp.Height, srcBmpData.Scan0); bmp.UnlockBits(srcBmpData); rt = true; } catch { } finally { } return(rt); }
public CalibImage(HalconDotNet.HObject hImg, ProVision.Calibration.CalibOnPlateAssistant assistant) { HalconDotNet.HTuple width, height; _hImage = hImg; _assistant = assistant; CanCalib = 1; //标记:未准备好标定 _plateStatus = ProVision.Calibration.CalibOnPlateAssistant.PS_NOT_FOUND; HalconDotNet.HOperatorSet.GetImageSize(_hImage, out width, out height); ImageWidth = width.I; ImageHeight = height.I; _estimatedPlateSize = 0; ErrorMessage = string.Empty; _caltabRegion = new HalconDotNet.HRegion(); _markCenterXLD = new HalconDotNet.HXLDCont(); _estimatedWorldCoordinateSystem = new HalconDotNet.HObject(); _qualityIssueList = new System.Collections.ArrayList(15); _markCenterRows = new HalconDotNet.HTuple(); _markCenterCols = new HalconDotNet.HTuple(); _plateEstimatedPose = new HalconDotNet.HPose(); }
protected virtual void InitFieldAndProperty() { _isCtrlKeyPressed = false; _isAltKeyPressed = false; _isTransmitted = false; _isUpdated = false; _isModifying = false; _isModified = false; _hoRawRegion = null; _hoBrushRegion = null; _hoSelectedRegion = null; _hoModifiedRegion = null; _colorForRawRegion = "blue"; _colorForBrushRegion = "magenta"; _colorForSelectedRegion = "green"; _colorForModifiedRegion = "yellow"; _zoomFactorForBrush = 50; _ROIManager = new ProVision.InteractiveROI.ROIManager(); _ROIManager.SetActiveROISign(ProVision.InteractiveROI.ROIManager.ROI_MODE_POS); _HwndCtrller = new ProVision.InteractiveROI.HWndCtrller(this.hwndcDisplay); _HwndCtrller.RegisterROICtroller(_ROIManager); _HwndCtrller.RegisterHwndCtrlMouseEvents(); _HwndCtrller.SetViewMode(ProVision.InteractiveROI.HWndCtrller.VIEW_MODE_NONE); //设置画模式:边缘/填充 _HwndCtrller.ChangeGraphicSettings(ProVision.InteractiveROI.GraphicContext.GC_DRAWMODE, "margin"); //设置区域颜色:蓝色 _HwndCtrller.ChangeGraphicSettings(ProVision.InteractiveROI.GraphicContext.GC_COLOR, _colorForRawRegion); //设置区域线段:1.5 _HwndCtrller.ChangeGraphicSettings(ProVision.InteractiveROI.GraphicContext.GC_LINEWIDTH, 1.5); }
public override bool Process(HalconDotNet.HObject hobjRaw) { bool rt = false; ResultOK = false; try { if (_IsLaunchAllowed) { _RawImage = hobjRaw; if (_IsEnableAlgorithm) { //1-算法需要的参数是否有效,进行图像处理 if (InspectArea != null && InspectArea.IsInitialized()) { //2-进行算法处理,更新函数返回值 if (LocationMembrane2()) { //3-更新图像处理结果标记:根据是否达标,更新图像处理结果标记 //4-显示图像处理结果图形变量,信息变量 Row = _matchModelAssistant.Result.Row; Col = _matchModelAssistant.Result.Col; Agl = _matchModelAssistant.Result.Angle; ResultOK = rt = true; } } } } } catch (HalconDotNet.HalconException hex) { ErrorMessage = hex.Message; } catch (System.Exception ex) { ErrorMessage = ex.Message; } finally { } return(rt); }
public virtual void AddIconicVar(HalconDotNet.HObject hobj) { InteractiveROI.HObjectEntry entry; if (hobj == null) { return; } if (hobj is HalconDotNet.HImage) { double r, c; int h, w, area; string s; area = ((HalconDotNet.HImage)hobj).GetDomain().AreaCenter(out r, out c); ((HalconDotNet.HImage)hobj).GetImagePointer1(out s, out w, out h); if (area == (w * h)) { this.ClearEntries(); if ((h != this._imageHeight) || (w != this._imageWidth)) { this._imageHeight = h; this._imageWidth = w; this._zoomWndFactor = (double)this._imageWidth / this._hWindowControl.Width; this.SetImagePart(0, 0, h, w); } } } entry = new HObjectEntry(hobj, this._GC.CopyGraphicSettings()); this._hObjList.Add(entry); if (this._hObjList.Count > _maxNum) { this._hObjList.RemoveAt(1); } }
static void Main(string[] args) { Dictionary <string, int[]> test = new Dictionary <string, int[]>(); test.Add("Red", new int[3] { 255, 0, 0 }); test.Add("Blue", new int[3] { 0, 0, 255 }); test.Add("Green", new int[3] { 0, 255, 0 }); Console.WriteLine($"red {(test["Red"])[0]}"); HalconDotNet.HObject[] tttttt = new HalconDotNet.HObject[3]; for (int i = 0; i < 3; i++) { //tttttt[i] = new HalconDotNet.HObject(); HalconDotNet.HOperatorSet.GenEmptyObj(out tttttt[i]); } Console.ReadLine(); }
public static System.Drawing.Bitmap Hobject2Bitmap(HalconDotNet.HObject HImg) { if (HImg == null) { return(null); } System.Drawing.Bitmap bmpImg; HalconDotNet.HTuple Channels; HalconDotNet.HOperatorSet.CountChannels(HImg, out Channels); System.Drawing.Imaging.PixelFormat pixelFmt = System.Drawing.Imaging.PixelFormat.Format24bppRgb; HalconDotNet.HTuple hred, hgreen, hblue, type, width, height; HalconDotNet.HOperatorSet.GetImagePointer3(HImg, out hred, out hgreen, out hblue, out type, out width, out height); bmpImg = new System.Drawing.Bitmap(width.I, height.I, pixelFmt); System.Drawing.Imaging.BitmapData bitmapData = bmpImg.LockBits(new System.Drawing.Rectangle(0, 0, width.I, height.I), System.Drawing.Imaging.ImageLockMode.ReadWrite, pixelFmt); unsafe { byte *data = (byte *)bitmapData.Scan0; byte *hr = (byte *)hred.IP; byte *hg = (byte *)hgreen.IP; byte *hb = (byte *)hblue.IP; for (int i = 0; i < width.I * height.I; i++) { *(data + (i * 3)) = (*(hb + i)); *(data + (i * 3) + 1) = *(hg + i); *(data + (i * 3) + 2) = *(hr + i); } } bmpImg.UnlockBits(bitmapData); return(bmpImg); }
protected override bool DoSoftTriggerOnce() { bool rt = false; try { if (!AcqHandle.TupleEqual(new HalconDotNet.HTuple())) { if (!_imgData.IsInitialized()) { _imgData = new HalconDotNet.HObject(); } _imgData.Dispose(); HalconDotNet.HOperatorSet.GrabImageAsync(out _imgData, AcqHandle, GrabTimeOut); if (_imgData != null) { //触发图像采集完成事件 OnImgDataOut(); rt = true; } } } catch (HalconDotNet.HalconException hex) { if (DriverExceptionDel != null) { DriverExceptionDel(string.Format("错误:Halcon模拟相机异步抓取失败!\n错误代码:{0}", hex.GetErrorCode())); } } finally { } return(rt); }
public FrmInteractiveROI(ProVision.Communal.Language lan, HalconDotNet.HObject hoImg) : this() { LanguageVersion = lan; _hoImage = hoImg; this.btnLoadImage.Enabled = false; }
public override void Draw(HalconDotNet.HTuple hwndHandle) { HalconDotNet.HObject line = new HalconDotNet.HObject(), rec1 = new HalconDotNet.HObject(), rec2 = new HalconDotNet.HObject(); line.Dispose(); HalconDotNet.HOperatorSet.GenRegionLine(out line, new HalconDotNet.HTuple(_startRow), new HalconDotNet.HTuple(_startCol), new HalconDotNet.HTuple(_extentRow), new HalconDotNet.HTuple(_extentCol)); HalconDotNet.HOperatorSet.DispObj(line, hwndHandle); rec1.Dispose(); HalconDotNet.HOperatorSet.GenRectangle2(out rec1, new HalconDotNet.HTuple(_startRow), new HalconDotNet.HTuple(_startCol), new HalconDotNet.HTuple(0), new HalconDotNet.HTuple(5), new HalconDotNet.HTuple(5)); HalconDotNet.HOperatorSet.DispObj(rec1, hwndHandle); rec2.Dispose(); HalconDotNet.HOperatorSet.GenRectangle2(out rec2, new HalconDotNet.HTuple(_locateRow), new HalconDotNet.HTuple(_locateCol), new HalconDotNet.HTuple(0), new HalconDotNet.HTuple(5), new HalconDotNet.HTuple(5)); HalconDotNet.HOperatorSet.DispObj(rec2, hwndHandle); if (_arrowHandle != null && _arrowHandle.IsInitialized()) { HalconDotNet.HOperatorSet.DispObj(_arrowHandle, hwndHandle); } }
/// <summary> /// 更新结果图形变量 /// [原始图像,搜索区域或跟随区域] /// </summary> /// <param name="resultData"></param> public void UpdateIconicResult(ProLaminator.Data.LaminatorProcessData resultData) { try { if (_hwndCtrller != null) { if (resultData != null) { this.Invoke( new System.Windows.Forms.MethodInvoker( () => { _hwndCtrller.ClearEntities(); _hoImage = resultData.RawImage; if (_tstImage != null && _tstImage.IsInitialized()) { _tstImage.Dispose(); } _tstImage = _hoImage.Clone(); _hwndCtrller.AddHobjEntity(_tstImage); _hwndCtrller.ChangeGraphicSettings(ProVision.InteractiveROI.GraphicContext.GC_COLOR, "red"); _hwndCtrller.AddHobjEntity(resultData.InspetcArea); _hwndCtrller.ChangeGraphicSettings(ProVision.InteractiveROI.GraphicContext.GC_COLOR, "green"); _hwndCtrller.AddHobjEntity(resultData.ResultRegion); _hwndCtrller.Repaint(); this.btneProOK.EditValue = resultData.ProductOKNumber; this.btneProNG.EditValue = resultData.ProductNGNumber; this.btneProTotal.EditValue = resultData.ProductTotalNumber; this.btneProYieldRatio.EditValue = resultData.ProductYieldRatio * 100; this.btneElapse.Text = System.Math.Round(resultData.ElapseTime, 2).ToString(); this.lblRunState.Text = resultData.RunState; this.lblInspectResult.Text = resultData.ImgResultOK ? "OK" : "NG"; this.lblInspectResult.ForeColor = resultData.ImgResultOK ? System.Drawing.Color.Green : System.Drawing.Color.Red; string r = System.Math.Round(resultData.Row.D, 2).ToString(); string c = System.Math.Round(resultData.Col.D, 2).ToString(); string a = System.Math.Round(resultData.DeltaAglRad.D, 2).ToString(); string x = resultData.DeltaX.ToString(); string y = resultData.DeltaY.ToString(); string da = resultData.DeltaAglDegree.ToString(); string flg = resultData.ResultFlag.ToString("00"); if (_displayResultList == null) { _displayResultList = new List <DisplayResult>(); } if (_displayResultList.Count > 0) { _displayResultList.Insert(0, new DisplayResult() { Row = r, COl = c, Angle = a, DeltaX = x, DeltaY = y, DeltaA = da, Flag = flg }); if (_displayResultList.Count > 3) { _displayResultList.RemoveAt(3); } } else { _displayResultList.Add(new DisplayResult() { Row = r, COl = c, Angle = a, DeltaX = x, DeltaY = y, DeltaA = da, Flag = flg }); } for (int i = 0; i < _displayResultList.Count; i++) { if (i == 0) { this.meLog.Text = ">>>"; this.meLog.Text += "定位坐标R:" + _displayResultList[i].Row + ",坐标C:" + _displayResultList[i].COl + ",弧角A:" + _displayResultList[i].Angle + "\r\n"; this.meLog.Text += "相对偏移X:" + _displayResultList[i].DeltaX + ",Y:" + _displayResultList[i].DeltaY + "角D:" + _displayResultList[i].DeltaA + "\r\n"; this.meLog.Text += "结果标记:" + _displayResultList[i].Flag; } else { this.meLog.Text += "\r\n>>>"; this.meLog.Text += "定位坐标R:" + _displayResultList[i].Row + ",坐标C:" + _displayResultList[i].COl + ",弧角A:" + _displayResultList[i].Angle + "\r\n"; this.meLog.Text += "相对偏移X:" + _displayResultList[i].DeltaX + ",Y:" + _displayResultList[i].DeltaY + "角D:" + _displayResultList[i].DeltaA + "\r\n"; this.meLog.Text += "结果标记:" + _displayResultList[i].Flag; } } })); } } } catch (HalconDotNet.HalconException hex) { } catch (System.Exception ex) { } }
public override void DisplayActiveHandle(HalconDotNet.HTuple hwndHandle) { HalconDotNet.HObject rec = new HalconDotNet.HObject(); rec.Dispose(); switch (ActiveHandleIdx) { //齐轴矩形定位中心 case 0: { HalconDotNet.HOperatorSet.GenRectangle2(out rec, new HalconDotNet.HTuple(_locateRow), new HalconDotNet.HTuple(_locateCol), new HalconDotNet.HTuple(0), new HalconDotNet.HTuple(5), new HalconDotNet.HTuple(5)); HalconDotNet.HOperatorSet.DispObj(rec, hwndHandle); } break; //齐轴矩形右上角点 case 1: { HalconDotNet.HOperatorSet.GenRectangle2(out rec, new HalconDotNet.HTuple(_upLeftRow), new HalconDotNet.HTuple(_botRightCol), new HalconDotNet.HTuple(0), new HalconDotNet.HTuple(5), new HalconDotNet.HTuple(5)); HalconDotNet.HOperatorSet.DispObj(rec, hwndHandle); } break; //齐轴矩形左上角点 case 2: { HalconDotNet.HOperatorSet.GenRectangle2(out rec, new HalconDotNet.HTuple(_upLeftRow), new HalconDotNet.HTuple(_upLeftCol), new HalconDotNet.HTuple(0), new HalconDotNet.HTuple(5), new HalconDotNet.HTuple(5)); HalconDotNet.HOperatorSet.DispObj(rec, hwndHandle); } break; //齐轴矩形左下角点 case 3: { HalconDotNet.HOperatorSet.GenRectangle2(out rec, new HalconDotNet.HTuple(_botRightRow), new HalconDotNet.HTuple(_upLeftCol), new HalconDotNet.HTuple(0), new HalconDotNet.HTuple(5), new HalconDotNet.HTuple(5)); HalconDotNet.HOperatorSet.DispObj(rec, hwndHandle); } break; //齐轴矩形右下角点 case 4: { HalconDotNet.HOperatorSet.GenRectangle2(out rec, new HalconDotNet.HTuple(_botRightRow), new HalconDotNet.HTuple(_botRightCol), new HalconDotNet.HTuple(0), new HalconDotNet.HTuple(5), new HalconDotNet.HTuple(5)); HalconDotNet.HOperatorSet.DispObj(rec, hwndHandle); } break; default: break; } }
private void Bbi_Click(object sender, ItemClickEventArgs e) { switch (e.Item.Tag.ToString()) { case "BBI_LOADIMAGE": LoadImage(); break; case "BBI_LINE": if (_hoImage != null && _hoImage.IsInitialized()) { if (_ROIManager != null) { _ROIManager.SetROIShape(new ProVision.InteractiveROI.ROILine()); //定义区域时,矢量线段不响应;主要用在定义测量 } } break; case "BBI_RECTANGLE1": if (_hoImage != null && _hoImage.IsInitialized()) { if (_ROIManager != null) { _ROIManager.SetROIShape(new ProVision.InteractiveROI.ROIRectangle1()); } } break; case "BBI_RECTANGLE2": if (_hoImage != null && _hoImage.IsInitialized()) { if (_ROIManager != null) { _ROIManager.SetROIShape(new ProVision.InteractiveROI.ROIRectangle2()); } } break; case "BBI_CIRCULARARC": if (_hoImage != null && _hoImage.IsInitialized()) { if (_ROIManager != null) { _ROIManager.SetROIShape(new ProVision.InteractiveROI.ROICircularArc()); //定义区域时,有向圆弧不响应;主要用在定义测量 } } break; case "BBI_CIRCLE": if (_hoImage != null && _hoImage.IsInitialized()) { if (_ROIManager != null) { _ROIManager.SetROIShape(new ProVision.InteractiveROI.ROICircle()); } } break; case "BBI_ANNULUS": if (_hoImage != null && _hoImage.IsInitialized()) { if (_ROIManager != null) { _ROIManager.SetROIShape(new ProVision.InteractiveROI.ROIAnnulus()); } } break; case "BBI_DELETEACTIVEROI": if (_hoImage != null && _hoImage.IsInitialized()) { if (_ROIManager != null) { _ROIManager.RemoveActiveROI(); } } break; case "BBI_DELETEALLROI": if (_hoImage != null && _hoImage.IsInitialized()) { if (_ROIManager != null) { _HwndCtrller.ResetAll(); _HwndCtrller.Repaint(); } } break; case "BBI_RESETWINDOW": if (_hoImage != null && _hoImage.IsInitialized()) { if (_ROIManager != null) { _HwndCtrller.ResetWindow(); _HwndCtrller.Repaint(); } } break; case "BBI_CLEARICONIC": if (_hoImage != null && _hoImage.IsInitialized()) { if (_ROIManager != null) { _HwndCtrller.ResetAll(); if (_hoModifiedRegion != null && _hoModifiedRegion.IsInitialized()) { _hoModifiedRegion.Dispose(); } if (_hoSelectedRegion != null && _hoSelectedRegion.IsInitialized()) { _hoSelectedRegion.Dispose(); } this.bchkiModifyRegion.Checked = false; this.lstbRegion.Items.Clear(); _isUpdated = false; } } break; case "BBI_UPDATEREGION": _isUpdated = false; if (_hoImage != null && _hoImage.IsInitialized()) { //若非传入区域 if (!_isTransmitted) { if (_ROIManager != null) { if (_hoRawRegion != null && _hoRawRegion.IsInitialized()) { _hoRawRegion.Dispose(); } HalconDotNet.HOperatorSet.GenEmptyObj(out _hoRawRegion); _roiList = _ROIManager.ROIList; if (_roiList != null && _roiList.Count > 0) { this.lstbRegion.Items.Clear(); string roiType = ""; for (int i = 0; i < _roiList.Count; i++) { HalconDotNet.HOperatorSet.ConcatObj(_hoRawRegion, ((ProVision.InteractiveROI.ROI)_roiList[i]).GetModelRegion(), out _hoRawRegion); roiType = ((ProVision.InteractiveROI.ROI)_roiList[i]).ROIShape.ToString(); this.lstbRegion.Items.Add(i.ToString("00") + "[" + roiType + "]"); } if (_hoModifiedRegion != null && _hoModifiedRegion.IsInitialized()) { _hoModifiedRegion.Dispose(); } _hoModifiedRegion = _hoRawRegion.Clone(); this.lstbRegion.SelectedIndex = 0; HalconDotNet.HOperatorSet.SelectObj(_hoModifiedRegion, out _hoSelectedRegion, 1); _isUpdated = true; } } } else { //传入区域--作为单一区域 this.lstbRegion.Items.Clear(); this.lstbRegion.Items.Add("00" + "[Arbitrary]"); if (_hoModifiedRegion != null && _hoModifiedRegion.IsInitialized()) { _hoModifiedRegion.Dispose(); } //修改区域与选择区域为同一指向 HalconDotNet.HOperatorSet.SelectObj(_hoRawRegion, out _hoModifiedRegion, 1); _hoSelectedRegion = _hoModifiedRegion; } } break; default: break; } }
public FrmDefineAndModifyRegion(ProCommon.Communal.Language lan, HalconDotNet.HObject hoImage) : this(lan) { _hoImage = hoImage; this.bbiLoadImage.Enabled = false; }
/// <summary> /// 图像处理 /// [注:调试模式下] /// </summary> /// <param name="camIdx"></param> /// <param name="hobj"></param> private void ImageProcessUnderDebugging(int camIdx, HalconDotNet.HObject hobj) { }
private void Device_Camera_ImageGrabbedEvt(ProCommon.Communal.Camera cam, HalconDotNet.HObject hobj) { }
public CamDriver() { HoImage = new HalconDotNet.HObject(); DriverExceptionDel = new DriverExceptionOccuredDel(OnDriverExceptionOccured); }
public override HalconDotNet.HObject GetModelRegion() { HalconDotNet.HObject rg = new HalconDotNet.HObject(); rg.Dispose(); HalconDotNet.HOperatorSet.GenCircle(out rg, new HalconDotNet.HTuple(_locateRow), new HalconDotNet.HTuple(_locateCol), new HalconDotNet.HTuple(_radius)); return(rg); }
public FrmInteractiveROI(ProVision.Communal.Language lan, HalconDotNet.HObject hoImg, HalconDotNet.HObject region) : this(lan, hoImg) { _hoResultRegion = region; _isTransmitRegion = true; }
/// <summary> /// Read dimensions of the image to adjust own window settings /// </summary> /// <param name="himage"></param> private void SetImagePart(HalconDotNet.HObject himage) { HalconDotNet.HTuple width, height; HalconDotNet.HOperatorSet.GetImageSize(himage, out width, out height); SetImagePart(0, 0, height[0].I, width[0].I); }
private void ModifyRegion() { bool isChs = LanguageVersion == ProCommon.Communal.Language.Chinese; string txt = isChs ? "修改区域异常!" : "Error occured when modify region!"; string caption = isChs ? "警告信息" : "Warning Message"; HalconDotNet.HTuple mr, mc, mbtntype; HalconDotNet.HObject tmpModify = null; HalconDotNet.HObject tmpKeep = null, tmpSelect = null; HalconDotNet.HOperatorSet.GenEmptyObj(out tmpKeep); HalconDotNet.HOperatorSet.GenEmptyObj(out tmpSelect); int cnt = 0; this.hwndcDisplay.Focus(); UpdateRegionForDisplay(); while (_isModifying) { try { HalconDotNet.HOperatorSet.GetMposition(this.hwndcDisplay.HalconWindow, out mr, out mc, out mbtntype); if (_hoBrushRegion != null && _hoBrushRegion.IsInitialized()) { _hoBrushRegion.Dispose(); } HalconDotNet.HOperatorSet.GenRectangle1(out _hoBrushRegion, mr - _zoomFactorForBrush, mc - _zoomFactorForBrush, mr + _zoomFactorForBrush, mc + _zoomFactorForBrush); UpdateRegionForDisplay(); if (mbtntype.TupleEqual(new HalconDotNet.HTuple(1))) //按下鼠标左键 { HalconDotNet.HOperatorSet.Difference(_hoSelectedRegion, _hoBrushRegion, out tmpModify); _hoSelectedRegion.Dispose(); _hoSelectedRegion = tmpModify; //若初始区域为数组型 cnt = _hoModifiedRegion.CountObj(); for (int i = 0; i < cnt; i++) { tmpSelect.Dispose(); //未选择的区域,不修改,需要保留 if (i != this.lstbRegion.SelectedIndex) { HalconDotNet.HOperatorSet.SelectObj(_hoModifiedRegion, out tmpSelect, i + 1); } //选择的区域,更新为上述修改后的区域 else { HalconDotNet.HOperatorSet.CopyObj(_hoSelectedRegion, out tmpSelect, 1, 1); } HalconDotNet.HOperatorSet.ConcatObj(tmpKeep, tmpSelect, out tmpKeep); } tmpSelect.Dispose(); _hoModifiedRegion.Dispose(); _hoModifiedRegion = tmpKeep; HalconDotNet.HOperatorSet.WaitSeconds(0.001); } else if (mbtntype.TupleEqual(new HalconDotNet.HTuple(4))) //按下鼠标右键 { _isModifying = false; if (_hoBrushRegion != null && _hoBrushRegion.IsInitialized()) { _hoBrushRegion.Dispose(); } //UpdateRegionForDisplay(); _isModified = true; } } catch (HalconDotNet.HalconException hex) { //_isModifying = false; //ProCommon.DerivedForm.FrmMsgBox.Show(txt + "\r\n" + hex.Message, caption, // ProCommon.DerivedForm.MyButtons.OK, // ProCommon.DerivedForm.MyIcon.Error, isChs); } //System.Threading.Thread.Sleep(1); Application.DoEvents(); } }
public FrmDefineAndModifyRegion(ProCommon.Communal.Language lan, HalconDotNet.HObject hoImage, HalconDotNet.HObject rawRegion) : this(lan, hoImage) { this.bbiLine.Enabled = false; this.bbiRectangle1.Enabled = false; this.bbiRectangle2.Enabled = false; this.bbiCircle.Enabled = false; this.bbiCircularArc.Enabled = false; this.bbiAnnulus.Enabled = false; this.bbiDeleteActiveROI.Enabled = false; this.bbiDeleteAllROI.Enabled = false; _hoRawRegion = rawRegion; _isTransmitted = true; }
// -- following by relative HObject converter codes /// <summary> /// Convert HObject to BitmapImage /// </summary> /// <param name="HImg"></param> /// <returns></returns> public static System.Drawing.Bitmap Hobject2Bitmap(HalconDotNet.HObject HImg) { if (HImg == null) { return(null); } try { System.Drawing.Bitmap bmpImg; HalconDotNet.HTuple Channels; HalconDotNet.HOperatorSet.CountChannels(HImg, out Channels); if (Channels.I == 1) { System.Drawing.Imaging.PixelFormat pixelFmt = System.Drawing.Imaging.PixelFormat.Format8bppIndexed; HalconDotNet.HTuple hpointer, type, width, height; const int Alpha = 255; Int64[] ptr = new Int64[2]; HalconDotNet.HOperatorSet.GetImagePointer1(HImg, out hpointer, out type, out width, out height); bmpImg = new System.Drawing.Bitmap(width.I, height.I, pixelFmt); System.Drawing.Imaging.ColorPalette pal = bmpImg.Palette; for (int i = 0; i < 256; i++) { pal.Entries[i] = System.Drawing.Color.FromArgb(Alpha, i, i, i); } bmpImg.Palette = pal; System.Drawing.Imaging.BitmapData bitmapData = bmpImg.LockBits(new System.Drawing.Rectangle(0, 0, width.I, height.I), System.Drawing.Imaging.ImageLockMode.ReadWrite, pixelFmt); int PixelsSize = System.Drawing.Bitmap.GetPixelFormatSize(bitmapData.PixelFormat) / 8; Console.WriteLine(bitmapData.Scan0); ptr[0] = (Int64)bitmapData.Scan0; ptr[1] = (Int64)hpointer.IP; if (width % 4 == 0) { CopyMemory(ptr[0], ptr[1], width * height * PixelsSize); } else { ptr[1] += width; CopyMemory(ptr[0], ptr[1], width * PixelsSize); ptr[0] += width; } bmpImg.UnlockBits(bitmapData); } else if (Channels.I == 3) { System.Drawing.Imaging.PixelFormat pixelFmt = System.Drawing.Imaging.PixelFormat.Format24bppRgb; HalconDotNet.HTuple hred, hgreen, hblue, type, width, height; HalconDotNet.HOperatorSet.GetImagePointer3(HImg, out hred, out hgreen, out hblue, out type, out width, out height); bmpImg = new System.Drawing.Bitmap(width.I, height.I, pixelFmt); System.Drawing.Imaging.BitmapData bitmapData = bmpImg.LockBits(new System.Drawing.Rectangle(0, 0, width.I, height.I), System.Drawing.Imaging.ImageLockMode.ReadWrite, pixelFmt); unsafe { byte *data = (byte *)bitmapData.Scan0; byte *hr = (byte *)hred.IP; byte *hg = (byte *)hgreen.IP; byte *hb = (byte *)hblue.IP; for (int i = 0; i < width.I * height.I; i++) { *(data + (i * 3)) = (*(hb + i)); *(data + (i * 3) + 1) = *(hg + i); *(data + (i * 3) + 2) = *(hr + i); } } bmpImg.UnlockBits(bitmapData); } else if (Channels.I == 4) { System.Drawing.Imaging.PixelFormat pixelFmt = System.Drawing.Imaging.PixelFormat.Format32bppRgb; HalconDotNet.HTuple hred, hgreen, hblue, type, width, height; HalconDotNet.HOperatorSet.GetImagePointer3(HImg, out hred, out hgreen, out hblue, out type, out width, out height); bmpImg = new System.Drawing.Bitmap(width.I, height.I, pixelFmt); System.Drawing.Imaging.BitmapData bitmapData = bmpImg.LockBits(new System.Drawing.Rectangle(0, 0, width.I, height.I), System.Drawing.Imaging.ImageLockMode.ReadWrite, pixelFmt); unsafe { byte *data = (byte *)bitmapData.Scan0; byte *hr = (byte *)hred.IP; byte *hg = (byte *)hgreen.IP; byte *hb = (byte *)hblue.IP; for (int i = 0; i < width.I * height.I; i++) { *(data + (i * 4)) = *(hb + i); *(data + (i * 4) + 1) = *(hg + i); *(data + (i * 4) + 2) = *(hr + i); *(data + (i * 4) + 3) = 255; } bmpImg.UnlockBits(bitmapData); } } else { bmpImg = null; } return(bmpImg); } catch (HalconDotNet.HalconException ex) { Console.WriteLine("In ImageTypeConverter.Hobject2Bitmap: " + ex.Message); return(null); } catch (System.Exception ex) { Console.WriteLine("In ImageTypeConverter.Hobject2Bitmap: " + ex.Message); return(null); } }
/// <summary> /// Calculates the ModelROI region for all objects contained /// in ROIList, by adding and subtracting the positive and /// negative ROI objects. /// 计算合成区域(联合结果) /// </summary> public bool CalculateSyntheticalRegion() { HalconDotNet.HObject tmpAdd, tmpDiff, tmp; HalconDotNet.HTuple area = new HalconDotNet.HTuple(), row = new HalconDotNet.HTuple(), col = new HalconDotNet.HTuple(); if (_operationFlag == ROI_MODE_NONE) { return(true); } tmpAdd = new HalconDotNet.HObject(); tmpAdd.GenEmptyObj(); tmpDiff = new HalconDotNet.HObject(); tmpDiff.GenEmptyObj(); tmp = new HalconDotNet.HObject(); tmp.GenEmptyObj(); for (int i = 0; i < ROIList.Count; i++) { switch (((ROI)ROIList[i]).GetOperationFlag()) { case ROI.MODE_NEGATIVE: HalconDotNet.HOperatorSet.Union2(tmpDiff, ((ROI)ROIList[i]).GetModelRegion(), out tmpDiff); break; case ROI.MODE_POSITIVE: HalconDotNet.HOperatorSet.Union2(tmpAdd, ((ROI)ROIList[i]).GetModelRegion(), out tmpAdd); break; } } if (_syntheticalRegion != null && _syntheticalRegion.IsInitialized()) { _syntheticalRegion.Dispose(); } HalconDotNet.HOperatorSet.AreaCenter(tmpAdd, out area, out row, out col); if (area.TupleNotEqual(new HalconDotNet.HTuple()) && area[0].D > 0) { if (tmp != null && tmp.IsInitialized()) { tmp.Dispose(); } HalconDotNet.HOperatorSet.Difference(tmpAdd, tmpDiff, out tmp); HalconDotNet.HOperatorSet.AreaCenter(tmp, out area, out row, out col); if (area.TupleNotEqual(new HalconDotNet.HTuple()) && area[0].D > 0) { _syntheticalRegion = tmp; } } if (_syntheticalRegion == null || ROIList.Count == 0) { return(false); } return(true); }
/// <summary> /// 添加图形对象 /// </summary> /// <param name="hobj"></param> public void AddHobjEntity(HalconDotNet.HObject hobj) { InteractiveROI.HObjectEntity entry; if (hobj == null) { return; } HalconDotNet.HObject obj = hobj as HalconDotNet.HObject; if (obj != null && obj.IsInitialized()) { HalconDotNet.HTuple cls = new HalconDotNet.HTuple(); HalconDotNet.HOperatorSet.GetObjClass(obj, out cls); if (cls.TupleNotEqual(new HalconDotNet.HTuple())) { switch (cls[0].S) { case "image": { HalconDotNet.HTuple r, c, h = new HalconDotNet.HTuple(), w = new HalconDotNet.HTuple(), area = new HalconDotNet.HTuple(); HalconDotNet.HObject domain; HalconDotNet.HOperatorSet.GetDomain(obj, out domain); if (domain != null && domain.IsInitialized()) { HalconDotNet.HOperatorSet.AreaCenter(domain, out area, out r, out c); } if (area != null && area.TupleNotEqual(new HalconDotNet.HTuple())) { HalconDotNet.HOperatorSet.GetImageSize(obj, out w, out h); } if (w != null && w.TupleNotEqual(new HalconDotNet.HTuple())) { if (area[0].I == (w * h)[0].I) //有效图像(即定义域面积等于其宽高乘积) { ClearEntities(); if ((h[0].I != _imageHeight) || (w[0].I != _imageWidth)) { _imageHeight = h; _imageWidth = w; ZoomWndFactor = (double)_imageWidth / _hWndCtrl.Width; SetImagePart(0, 0, h[0].I, w[0].I); } } } entry = new HObjectEntity(hobj, _grpCntx.CopyGraphicSettings()); _hObjEntityList.Add(entry); } break; case "region": case "xld_cont": entry = new HObjectEntity(hobj, _grpCntx.CopyGraphicSettings()); _hObjEntityList.Add(entry); break; case "xld_poly": break; case "xld_parallel": break; default: break; } } if (_hObjEntityList.Count > _MaxNum) { _hObjEntityList.RemoveAt(1); } } }
/// <summary> /// Convert HObject to BitmapImage /// </summary> /// <param name="HImg"></param> /// <returns></returns> public static System.Windows.Media.Imaging.BitmapImage Hobject2Bitmapimage(HalconDotNet.HObject HImg) { if (HImg == null) { return(null); } try { System.Windows.Media.Imaging.BitmapImage bmpimg = new System.Windows.Media.Imaging.BitmapImage(); HalconDotNet.HTuple Channels; HalconDotNet.HOperatorSet.CountChannels(HImg, out Channels); if (Channels.I == 1) { System.Windows.Media.PixelFormat pixelFmt = System.Windows.Media.PixelFormats.Gray8; HalconDotNet.HTuple hpointer, type, width, height; HalconDotNet.HOperatorSet.GetImagePointer1(HImg, out hpointer, out type, out width, out height); System.Windows.Media.Imaging.WriteableBitmap MetaImg = new System.Windows.Media.Imaging.WriteableBitmap(width.I, height.I, 96, 96, pixelFmt, null); MetaImg.Lock(); unsafe { byte *data = (byte *)MetaImg.BackBuffer; byte *img_ptr = (byte *)hpointer.IP; for (int i = 0; i < width.I * height.I; i++) { *(data + i) = (*(img_ptr + i)); } } MetaImg.Unlock(); bmpimg = ConvertWriteablebitmapToBitmapimage(MetaImg); } else if (Channels.I == 3) { System.Windows.Media.PixelFormat pixelFmt = System.Windows.Media.PixelFormats.Bgr24; HalconDotNet.HTuple hred, hgreen, hblue, type, width, height; HalconDotNet.HOperatorSet.GetImagePointer3(HImg, out hred, out hgreen, out hblue, out type, out width, out height); System.Windows.Media.Imaging.WriteableBitmap MetaImg = new System.Windows.Media.Imaging.WriteableBitmap(width.I, height.I, 96, 96, pixelFmt, null); MetaImg.Lock(); unsafe { byte *data = (byte *)MetaImg.BackBuffer; byte *hr = (byte *)hred.IP; byte *hg = (byte *)hgreen.IP; byte *hb = (byte *)hblue.IP; for (int i = 0; i < width.I * height.I; i++) { *(data + (i * 3)) = (*(hb + i)); *(data + (i * 3) + 1) = *(hg + i); *(data + (i * 3) + 2) = *(hr + i); } } MetaImg.Unlock(); bmpimg = ConvertWriteablebitmapToBitmapimage(MetaImg); } else if (Channels.I == 4) { System.Windows.Media.PixelFormat pixelFmt = System.Windows.Media.PixelFormats.Pbgra32; HalconDotNet.HTuple hred, hgreen, hblue, type, width, height; HalconDotNet.HOperatorSet.GetImagePointer3(HImg, out hred, out hgreen, out hblue, out type, out width, out height); System.Windows.Media.Imaging.WriteableBitmap MetaImg = new System.Windows.Media.Imaging.WriteableBitmap(width.I, height.I, 96, 96, pixelFmt, null); MetaImg.Lock(); unsafe { byte *data = (byte *)MetaImg.BackBuffer; byte *hr = (byte *)hred.IP; byte *hg = (byte *)hgreen.IP; byte *hb = (byte *)hblue.IP; for (int i = 0; i < width.I * height.I; i++) { *(data + (i * 4)) = *(hb + i); *(data + (i * 4) + 1) = *(hg + i); *(data + (i * 4) + 2) = *(hr + i); *(data + (i * 4) + 3) = 255; } } MetaImg.Unlock(); bmpimg = ConvertWriteablebitmapToBitmapimage(MetaImg); } else { bmpimg = null; } return(bmpimg); } catch (HalconDotNet.HalconException ex) { Console.WriteLine("In ImageTypeConverter.Hobject2Bitmapimage: " + ex.Message); return(null); } catch (System.Exception ex) { Console.WriteLine("In ImageTypeConverter.Hobject2Bitmapimage: " + ex.Message); return(null); } }