Files
VisionEdit/ImageWindow/HWindowTool_Smart.cs
liu.wenjie 9eb84c6265 1、更改所有位置显示窗体为自定义窗体,添加坐标及灰度显示
2、添加工具移除功能
3、PMA工具添加修改模板和定义搜索区域
2022-04-14 16:05:10 +08:00

177 lines
6.8 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using HalconDotNet;
namespace ViewROI
{
public partial class HWindowTool_Smart : UserControl
{
public bool DispStatus { get; set; }
public HImage hv_Image { get; set; }
HTuple hv_Width = new HTuple();
HTuple hv_Height = new HTuple();
public HWindow DispHWindow
{
get
{
return this.SmartWindow.HalconWindow;
}
}
public HWindowTool_Smart()
{
InitializeComponent();
}
public void DispImage(HObject inputImage)
{
if (inputImage == null || !inputImage.IsInitialized())
{
return;
}
#region
//获取图像大小及纵横比
HOperatorSet.GetImageSize(inputImage, out hv_Width, out hv_Height);
int im_width = int.Parse(hv_Width.ToString());
int im_height = int.Parse(hv_Height.ToString());
double im_AspectRatio = (double)(im_width) / (double)(im_height);
//获取窗口大小及纵横比
int w_width = SmartWindow.Size.Width;
int w_height = SmartWindow.Size.Height;
double w_AspectRatio = (double)(w_width) / (double)(w_height);
HOperatorSet.SetSystem("int_zooming", "false");//图像缩放之前最好将此参数设置为false.
HTuple para = new HTuple("constant");
HObject ho_zoomImage;
HOperatorSet.GenEmptyObj(out ho_zoomImage);
ho_zoomImage.Dispose();
if (w_width < im_width && im_AspectRatio > w_AspectRatio)
{
//超宽图像
HOperatorSet.ZoomImageSize(inputImage, out ho_zoomImage, w_width, w_width / im_AspectRatio, para);
}
else if (w_height < im_height && im_AspectRatio < w_AspectRatio)
{
//超高图像
HOperatorSet.ZoomImageSize(inputImage, out ho_zoomImage, w_height * im_AspectRatio, w_height, para);
}
#endregion
SmartWindow.HalconWindow.SetPart(0, 0,-2, -2);
hv_Image = new HImage(inputImage);
SmartWindow.HalconWindow.DispImage(hv_Image);
ho_zoomImage.Dispose();
hv_Width.Dispose();
hv_Height.Dispose();
}
private void SmartWindow_HMouseMove(object sender, HalconDotNet.HMouseEventArgs e)
{
// this.Cursor = e.Button == MouseButtons.Left ? Cursors.Hand : Cursors.Default;
if(DispStatus)
{
if (hv_Image != null && hv_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(hv_Image, out channel_count);
SmartWindow.HalconWindow.GetMpositionSubPix(out positionY, out positionX, out button_state);
str_position = String.Format("RC: {0:0},{1:0}", positionY, positionX);
_isXOut = (positionX < 0 || positionX >= hv_Width);
_isYOut = (positionY < 0 || positionY >= hv_Height);
if (!_isXOut && !_isYOut)
{
if ((int)channel_count == 1)
{
double grayVal;
grayVal = hv_Image.GetGrayval((int)positionY, (int)positionX);
str_value = String.Format("Val: {0:000}", grayVal);
}
else if ((int)channel_count == 3)
{
double grayValRed, grayValGreen, grayValBlue;
HImage _RedChannel, _GreenChannel, _BlueChannel;
_RedChannel = hv_Image.AccessChannel(1);
_GreenChannel = hv_Image.AccessChannel(2);
_BlueChannel = hv_Image.AccessChannel(3);
grayValRed = _RedChannel.GetGrayval((int)positionY, (int)positionX);
grayValGreen = _GreenChannel.GetGrayval((int)positionY, (int)positionX);
grayValBlue = _BlueChannel.GetGrayval((int)positionY, (int)positionX);
_RedChannel.Dispose();
_GreenChannel.Dispose();
_BlueChannel.Dispose();
str_value = String.Format("Gray: ({0:000}, {1:000}, {2:000})", grayValRed, grayValGreen, grayValBlue);
}
else
{
str_value = "";
}
grayValueLable.Text = $"Ch{channel_count.D }, {str_position}: {str_value}";
}
}
catch (Exception ex)
{
//不处理
}
}
}
}
private void HWindowTool_Smart_Load(object sender, EventArgs e)
{
this.MouseWheel += HWindowTool_Smart_MouseWheel;
}
private void HWindowTool_Smart_MouseWheel(object sender, MouseEventArgs e)
{
Point pt = SmartWindow.Location;
MouseEventArgs newe = new MouseEventArgs(e.Button, e.Clicks, e.X - pt.X, e.Y - pt.Y, e.Delta);
SmartWindow.HSmartWindowControl_MouseWheel(sender, newe);
}
private void HWindowTool_Smart_SizeChanged(object sender, EventArgs e)
{
//Point pt = SmartWindow.Location;
//Point pt2 = SmartWindow.PointToScreen(pt);
//this.SmartWindow.HalconWindow.SendMouseDoubleClickEvent(pt2.X+20, pt2.Y+30,(int)MouseButtons.Left);
}
private void tsmiDispCorr_Click(object sender, EventArgs e)
{
if(tsmiDispCorr.Checked)
{
tsmiDispCorr.Checked = false;
DispStatus = false;
grayValueLable.Visible = false;
}
else
{
tsmiDispCorr.Checked = true;
DispStatus = true;
grayValueLable.Visible = true;
}
}
}
}