Exemple #1
0
 /// <summary>
 /// 刷新控件
 /// </summary>
 public void refreshWindow()
 {
     _hWindowControl1.HalconWindow.ClearWindow();
     if (Ho_Image.IsInitialized())
     {
         _hWindowControl1.HalconWindow.DispObj(Ho_Image);
     }
 }
Exemple #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;
            }
        }
        private void Button_Click_Height_Measure(object sender, RoutedEventArgs e)
        {
            int       Cam_idx = global.GetIns().CamSel;
            Info_Ctrl Infc    = new Info_Ctrl();

            if (false == ImageOperate.FindTrackPos(Obj[Cam_idx], this.CamSetting.HalconID, out Infc, ImageOperate.Track_Model, false))
            {
                return;
            }

            HObject Ho_Image;
            HTuple  hv_c = null, hv_r = null;

            HOperatorSet.GenEmptyObj(out Ho_Image);
            try
            {
                double Angle = CameraADisp.Disp_Adjust_Line(Obj[Cam_idx], INI.axis_roi[Cam_idx].adjust_r1, INI.axis_roi[Cam_idx].adjust_c1, INI.axis_roi[Cam_idx].adjust_phi, INI.axis_roi[Cam_idx].adjust_r2,
                                                            INI.axis_roi[Cam_idx].adjust_c2, this.CamSetting.HalconID, false);
                //HOperatorSet.RotateImage(Obj[Cam_idx], out Ho_Image, Angle, "constant");
                HOperatorSet.DispObj(Obj[Cam_idx], this.CamSetting.HalconID);

                //恢复信息
                double r1 = INI.axis_roi[Cam_idx].axis_d1_r1 + Infc.pos_y;
                double c1 = INI.axis_roi[Cam_idx].axis_d1_c1 + Infc.pos_x;
                CameraADisp.Measure_Diameter(Obj[Cam_idx], r1, c1, new HTuple(-Angle).TupleRad(), INI.axis_roi[Cam_idx].axis_d1_r2, INI.axis_roi[Cam_idx].axis_d1_c2, out hv_c, out hv_r, this.CamSetting.HalconID, false);

                //找到垂直线和找到图像的高度和宽度,来找到在哪儿画横线和纵线
                HTuple hv_Width, hv_Height, hv_HalfHeight, hv_HalfWidth;
                HOperatorSet.GetImageSize(Obj[Cam_idx], out hv_Width, out hv_Height);
                hv_HalfHeight = hv_Height / 2;
                hv_HalfWidth  = hv_c;
                CameraADisp.draw_line(hv_HalfHeight, 0, hv_HalfHeight, hv_Width, this.CamSetting.HalconID, "blue");


                //操作系统,操作系统本身自带选择功能,qt做映射
                //win api


                double x = 0;
                double y = 0;
                CameraADisp.GetPoint(hv_c, hv_r, Angle, out x, out y);
                Console.WriteLine("hv_c:" + hv_c.ToString() + " hv_r:" + hv_r.ToString() + " end x:" + x.ToString() + " end y;" + y.ToString());
                CameraADisp.draw_line(hv_r, hv_c, y, x, this.CamSetting.HalconID, "green");
                CameraADisp.GetPoint(hv_c, hv_r, Angle + 180, out x, out y);
                CameraADisp.draw_line(hv_r, hv_c, y, x, this.CamSetting.HalconID, "green");

                //INI.axis_roi[Cam_idx].d3_min = hv_c;
                INI.axis_roi[Cam_idx].axis_d3_r1           = hv_r;
                INI.axis_roi[Cam_idx].axis_d3_c1           = hv_c;
                INI.axis_roi[Cam_idx].axis_d3_relative_phi = Angle;


                //this.D3_Min.Text = INI.axis_roi[Cam_idx].d3_min.ToString();
                INI.writting();
            }
            catch (HalconException ex)
            {
                Console.WriteLine(ex.ToString());
            }

            Ho_Image.Dispose();
        }
Exemple #4
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;
                }
            }
        }
Exemple #5
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;
                }
            }
        }