/// <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 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; } } }