C#与Halcon联合编程实现鼠标拖动图片

C#与Halcon联合编程实现鼠标拖动图片

在上一篇文章中介绍了在HWindow控件中,鼠标对区域的点击选择。在日常的项目中,我们也经常会用到鼠标拖动图片的这个功能。先看下具体效果图:
C#与Halcon联合编程实现鼠标拖动图片_第1张图片
直接贴代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using HalconDotNet;

namespace SelectRegion
{
    public partial class Form1 : Form
    {
        private HWindow hWindow = null;//窗口变量
        private HImage image = null;//图像变量

        int mouse_X0, mouse_X1, mouse_Y0, mouse_Y1;//用来记录按下/抬起鼠标时的坐标位置
        public Form1()
        {
            InitializeComponent();
            hWindow = hWindowControl1.HalconWindow;

            image = new HImage();
            image.ReadImage(@"d:\BMW.jpg");//读取测试图像

            int width, height;
            image.GetImageSize(out width, out height);//获取图像宽度和高度
            hWindow.SetPart(0, 0, height - 1, width);//根据读取的图像设置HWindow中显示图像的宽度和高度

            hWindow.DispObj(image);//显示读取的图像
        }
       
        private void HDWindowControl_HMouseUp(object sender, HMouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                int row1, col1, row2, col2;
                if (mouse_X0 == 0 || mouse_Y0 == 0)
                    return;
                try
                {
                    int tempNum = 0;
                    hWindow.GetMposition(out mouse_X1, out mouse_Y1, out tempNum);

                    double dbRowMove, dbColMove;
                    dbRowMove = mouse_X0 - mouse_X1;//计算光标在X轴拖动的距离
                    dbColMove = mouse_Y0 - mouse_Y1;//计算光标在Y轴拖动的距离

                    hWindow.GetPart(out row1, out col1, out row2, out col2);//计算HWindow控件在当前状态下显示图像的位置
                    hWindow.SetPart((int)(row1 + dbRowMove), (int)(col1 + dbColMove), (int)(row2 + dbRowMove), (int)(col2 + dbColMove));//根据拖动距离调整HWindows控件显示图像的位置
                    RefreshImage();//刷新图像
                }
                catch (HalconException HDevExpDefaultException)
                {
                }
            }
        }
        private void RefreshImage()
        {
            hWindow.ClearWindow();//清空HWindow控件
            hWindow.DispObj(image);//重新显示图像
        }
        private void HDWindowControl_HMouseDown(object sender, HMouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                try
                {
                    int tempNum = 0;
                    hWindow.GetMposition(out mouse_X0, out mouse_Y0, out tempNum);//记录按下鼠标时的位置
                }
                catch (HalconException HDevExpDefaultException)
                {

                }
            }
        }
    }
}

最后,在hWindowControl控件的事件中添加已经编写好的对应函数,如下图:
C#与Halcon联合编程实现鼠标拖动图片_第2张图片
在hWindowControl中实现通过点击鼠标选择区域:
https://blog.csdn.net/biggestcherry/article/details/88715026

水平有限,难免有错误和不足之处,恳请批评指正。

你可能感兴趣的:(Halcon)