/// <summary> /// 刷新控件 /// </summary> public void refreshWindow() { _hWindowControl1.HalconWindow.ClearWindow(); if (Ho_Image.IsInitialized()) { _hWindowControl1.HalconWindow.DispObj(Ho_Image); } }
/// <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(); }
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; } } }
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; } } }