Beispiel #1
0
        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 };
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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;
            }
        }
Beispiel #5
0
        /// <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);
        }
Beispiel #6
0
        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();
        }
Beispiel #7
0
        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);
        }
Beispiel #8
0
        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);
        }
Beispiel #9
0
        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);
            }
        }
Beispiel #10
0
        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();
        }
Beispiel #11
0
        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);
        }
Beispiel #12
0
        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);
        }
Beispiel #13
0
 public FrmInteractiveROI(ProVision.Communal.Language lan, HalconDotNet.HObject hoImg) : this()
 {
     LanguageVersion           = lan;
     _hoImage                  = hoImg;
     this.btnLoadImage.Enabled = false;
 }
Beispiel #14
0
        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);
            }
        }
Beispiel #15
0
        /// <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;
            }
        }
Beispiel #17
0
        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;
            }
        }
Beispiel #18
0
 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)
 {
 }
Beispiel #21
0
 public CamDriver()
 {
     HoImage            = new HalconDotNet.HObject();
     DriverExceptionDel = new DriverExceptionOccuredDel(OnDriverExceptionOccured);
 }
Beispiel #22
0
 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);
 }
Beispiel #23
0
 public FrmInteractiveROI(ProVision.Communal.Language lan, HalconDotNet.HObject hoImg, HalconDotNet.HObject region) : this(lan, hoImg)
 {
     _hoResultRegion   = region;
     _isTransmitRegion = true;
 }
Beispiel #24
0
 /// <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);
 }
Beispiel #25
0
        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();
            }
        }
Beispiel #26
0
        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;
        }
Beispiel #27
0
        // -- 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);
            }
        }
Beispiel #28
0
        /// <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);
        }
Beispiel #29
0
        /// <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);
                }
            }
        }
Beispiel #30
0
        /// <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);
            }
        }