Пример #1
0
 /// <summary>
 /// 刷新控件
 /// </summary>
 public void refreshWindow()
 {
     _hWindowControl1.HalconWindow.ClearWindow();
     if (Ho_Image.IsInitialized())
     {
         _hWindowControl1.HalconWindow.DispObj(Ho_Image);
     }
 }
Пример #2
0
        /// <summary>
        /// 让图片适应窗口显示
        /// </summary>
        public void DispImageFit()
        {
            try
            {
                if (Ho_Image.IsInitialized())
                {
                    _halconWindow1.ClearWindow();
                    HTuple width, height;
                    HOperatorSet.GetImageSize(Ho_Image, out width, out height);
                    HOperatorSet.SetPart(_halconWindow1, 0, 0, height - 1, width - 1);
                    _halconWindow1.DispObj(Ho_Image);

                    //if (_xld!=null)
                    //{
                    //    hWindowControl1.HalconWindow.DispObj(_xld);
                    //}
                }
            }
            catch (Exception ex)
            {
                StatusMessage.Text = ex.Message;
            }
        }
Пример #3
0
        private void hWindowControl1_HMouseWheel(object sender, HMouseEventArgs e)
        {
            if (Ho_Image.IsInitialized())
            {
                double mposition_row = 0, mposition_col = 0;
                int    button_state;

                HWindow hv_window = _halconWindow1;

                try
                {
                    hv_window.GetMpositionSubPix(out mposition_row, out mposition_col, out button_state);
                    hv_window.GetPart(out current_beginRow, out current_beginCol, out current_endRow, out current_endCol);
                }
                catch (Exception ex)
                {
                    StatusMessage.Text = ex.Message;
                }

                if (e.Delta > 0)                 // 放大图像
                {
                    zoom_beginRow = (int)(current_beginRow + (mposition_row - current_beginRow) * 0.300d);
                    zoom_beginCol = (int)(current_beginCol + (mposition_col - current_beginCol) * 0.300d);
                    zoom_endRow   = (int)(current_endRow - (current_endRow - mposition_row) * 0.300d);
                    zoom_endCol   = (int)(current_endCol - (current_endCol - mposition_col) * 0.300d);
                }
                else                // 缩小图像
                {
                    zoom_beginRow = (int)(mposition_row - (mposition_row - current_beginRow) / 0.700d);
                    zoom_beginCol = (int)(mposition_col - (mposition_col - current_beginCol) / 0.700d);
                    zoom_endRow   = (int)(mposition_row + (current_endRow - mposition_row) / 0.700d);
                    zoom_endCol   = (int)(mposition_col + (current_endCol - mposition_col) / 0.700d);
                }

                try
                {
                    int hw_width, hw_height;
                    hw_width  = _hWindowControl1.Size.Width;
                    hw_height = _hWindowControl1.Size.Height;

                    HTuple width, height;
                    HOperatorSet.GetImageSize(Ho_Image, out width, out height);

                    bool _isOutOfArea  = true;
                    bool _isOutOfSize  = true;
                    bool _isOutOfPixel = true; //避免像素过大

                    _isOutOfArea  = zoom_beginRow >= (int)height || zoom_endRow <= 0 || zoom_beginCol >= (int)width || zoom_endCol < 0;
                    _isOutOfSize  = (zoom_endRow - zoom_beginRow) > (int)height * 20 || (zoom_endCol - zoom_beginCol) > (int)width * 20;
                    _isOutOfPixel = hw_height / (zoom_endRow - zoom_beginRow) > 500 || hw_width / (zoom_endCol - zoom_beginCol) > 500;

                    if (_isOutOfArea || _isOutOfSize)
                    {
                        HOperatorSet.SetPart(_halconWindow1, 0, 0, height - 1, width - 1);
                        _halconWindow1.DispObj(Ho_Image);
                    }
                    else if (!_isOutOfPixel)
                    {
                        _halconWindow1.ClearWindow();
                        zoom_endCol = zoom_beginCol + (zoom_endRow - zoom_beginRow) * hw_width / hw_height;

                        hv_window.SetPart(zoom_beginRow, zoom_beginCol, zoom_endRow, zoom_endCol);
                        hv_window.DispObj(Ho_Image);
                    }
                }
                catch (Exception ex)
                {
                    DispImageFit();
                    StatusMessage.Text = ex.Message;
                }
            }
        }
Пример #4
0
        private void hWindowControl1_HMouseMove(object sender, HMouseEventArgs e)
        {
            if (Ho_Image.IsInitialized())
            {
                try
                {
                    int    button_state;
                    double positionX, positionY;
                    string str_value;
                    string str_position;
                    bool   _isXOut = true, _isYOut = true;
                    HTuple channel_count;                                    //元素

                    HOperatorSet.CountChannels(Ho_Image, out channel_count); //计算图片的通道


                    _halconWindow1.GetMpositionSubPix(out positionY, out positionX, out button_state);  //得到亚像素组成 取得坐标,及鼠标的状态
                    str_position = String.Format("X: {0:0000.0}, Y: {1:0000.0}", positionX, positionY); //把坐标转成字符格式

                    HTuple width, height;
                    HOperatorSet.GetImageSize(Ho_Image, out width, out height);
                    _isXOut = (positionX < 0 || positionX >= (double)width);  //判断是否超出范围,超出为1
                    _isYOut = (positionY < 0 || positionY >= (double)height); //判断是否超出范围,超出为1

                    if (!_isXOut && !_isYOut)
                    {
                        if ((int)channel_count == 1)
                        {
                            HTuple grayval;
                            HOperatorSet.GetGrayval(Ho_Image, (HTuple)positionY, (HTuple)positionX, out grayval);
                            str_value = String.Format("灰度值: {0:000.0}", (double)grayval);//显示出去
                        }
                        else
                        {
                            if ((int)channel_count == 3)
                            {
                                str_value = "";
                                HTuple  grayValRed, grayValGreen, grayValBlue;
                                HObject _RedChannel, _GreenChannel, _BlueChannel;
                                HOperatorSet.GenEmptyObj(out _RedChannel);
                                HOperatorSet.GenEmptyObj(out _GreenChannel);
                                HOperatorSet.GenEmptyObj(out _BlueChannel);
                                HOperatorSet.AccessChannel(Ho_Image, out _RedChannel, 1);
                                HOperatorSet.AccessChannel(Ho_Image, out _GreenChannel, 2);
                                HOperatorSet.AccessChannel(Ho_Image, out _BlueChannel, 3);

                                HOperatorSet.GetGrayval(_RedChannel, (HTuple)positionY, (HTuple)positionX, out grayValRed);
                                HOperatorSet.GetGrayval(_GreenChannel, (HTuple)positionY, (HTuple)positionX, out grayValGreen);
                                HOperatorSet.GetGrayval(_BlueChannel, (HTuple)positionY, (HTuple)positionX, out grayValBlue);

                                _RedChannel.Dispose();
                                _GreenChannel.Dispose();
                                _BlueChannel.Dispose();

                                str_value = String.Format("Val: ({0:000.0}, {1:000.0}, {2:000.0})", (double)grayValRed, (double)grayValGreen, (double)grayValBlue);//显示3个通道的灰度值
                            }
                            else
                            {
                                str_value = "";
                            }
                        }
                        StatusMessage.Text = str_position + "    " + str_value;
                    }

                    switch (button_state)
                    {
                    case 0:
                        this.Cursor = System.Windows.Forms.Cursors.Default;    //显示鼠标类型为手型
                        break;

                    case 1:
                        this.Cursor = System.Windows.Forms.Cursors.Hand; //显示鼠标类型为手型
                        _halconWindow1.ClearWindow();                    //清空窗体类容
                        _halconWindow1.SetPaint(new HTuple("default"));  //设置显示默认
                        //              保持图像显示比例
                        zoom_beginRow -= (int)(positionY - _start_positionY);
                        zoom_beginCol -= (int)(positionX - _start_positionX);
                        zoom_endRow   -= (int)(positionY - _start_positionY);
                        zoom_endCol   -= (int)(positionX - _start_positionX);
                        _halconWindow1.SetPart(zoom_beginRow, zoom_beginCol, zoom_endRow, zoom_endCol);
                        _halconWindow1.DispObj(Ho_Image);   //显示图片
                        break;
                    }
                }
                catch (Exception ex)
                {
                    StatusMessage.Text = ex.Message;
                }
            }
        }