Halcon视觉之家 - 51Halcon专注于机器视觉技术

 找回密码
 会员注册

QQ登录

只需一步,快速开始

扫一扫,微信登录

查看: 1511|回复: 4

[资料] C#开发Halcon实现缩放、平移功能代码

[复制链接]
  • TA的每日心情
    开心
    2 小时前
  • 签到天数: 878 天

    连续签到: 1 天

    [LV.10]以坛为家III

    190

    主题

    942

    帖子

    5729

    积分

    Rank: 9

    积分
    5729

    热心会员突出贡献切换助手验证会员最佳新人

    发表于 2020-2-24 17:27:52 | 显示全部楼层 |阅读模式

    51Halcon诚邀您的加入,专注于机器视觉开发与应用技术,我们一直都在努力!

    您需要 登录 才可以下载或查看,没有帐号?会员注册

    x
    1. //缩放图像
    2.         private void hWindowControl1_HMouseWheel(object sender, HMouseEventArgs e)
    3.         {
    4.             HTuple Zoom, Row, Col, Button;
    5.             HTuple Row0, Column0, Row00, Column00, Ht, Wt, r1, c1, r2, c2;
    6.             if (e.Delta > 0)
    7.             {
    8.                 Zoom = 1.5;
    9.             }
    10.             else
    11.             {
    12.                 Zoom = 0.5;
    13.             }
    14.             HOperatorSet.GetMposition(WindowID, out Row, out Col, out Button);
    15.             HOperatorSet.GetPart(WindowID, out Row0, out Column0, out Row00, out Column00);
    16.             Ht = Row00 - Row0;
    17.             Wt = Column00 - Column0;
    18.             if (Ht * Wt < 32000 * 32000 || Zoom == 1.5)//普通版halcon能处理的图像最大尺寸是32K*32K。如果无限缩小原图像,导致显示的图像超出限制,则会造成程序崩溃
    19.             {
    20.                 r1 = (Row0 + ((1 - (1.0 / Zoom)) * (Row - Row0)));
    21.                 c1 = (Column0 + ((1 - (1.0 / Zoom)) * (Col - Column0)));
    22.                 r2 = r1 + (Ht / Zoom);
    23.                 c2 = c1 + (Wt / Zoom);
    24.                 HOperatorSet.SetPart(WindowID, r1, c1, r2, c2);
    25.                 HOperatorSet.ClearWindow(WindowID);
    26.                 HOperatorSet.DispObj(ho_image, WindowID);
    27.             }
    28.         }
    29.         //鼠标按下,记录当前坐标值
    30.         private void hWindowControl1_HMouseDown(object sender, HMouseEventArgs e)
    31.         {
    32.             HTuple Row, Column, Button;
    33.             HOperatorSet.GetMposition(WindowID, out Row, out Column, out Button);
    34.             RowDown = Row;    //鼠标按下时的行坐标
    35.             ColDown = Column; //鼠标按下时的列坐标
    36.         }
    37.         //鼠标抬起,实现图像移动
    38.         private void hWindowControl1_HMouseUp(object sender, HMouseEventArgs e)
    39.         {
    40.             HTuple row1, col1, row2, col2,Row, Column, Button;
    41.             HOperatorSet.GetMposition(WindowID, out Row, out Column, out Button);
    42.             double RowMove = Row - RowDown;   //鼠标弹起时的行坐标减去按下时的行坐标,得到行坐标的移动值
    43.             double ColMove = Column - ColDown;//鼠标弹起时的列坐标减去按下时的列坐标,得到列坐标的移动值
    44.             HOperatorSet.GetPart(WindowID, out row1, out col1, out row2, out col2);//得到当前的窗口坐标
    45.             HOperatorSet.SetPart(WindowID, row1 - RowMove, col1 - ColMove, row2 - RowMove, col2 - ColMove);//这里可能有些不好理解。以左上角原点为参考点
    46.             HOperatorSet.ClearWindow(WindowID);
    47.             if (ImageHeight != null)
    48.             {
    49.                 HOperatorSet.DispObj(ho_image, WindowID);
    50.             }
    51.             else
    52.             {
    53.                 MessageBox.Show("请加载一张图片");
    54.             }      
    55.         }
    56.         //鼠标移动,实时显示当前坐标与灰度值
    57.         private void hWindowControl1_HMouseMove(object sender, HMouseEventArgs e)
    58.         {
    59.             HTuple Row, Column, Button, pointGray;
    60.             HOperatorSet.GetMposition(WindowID, out Row, out Column, out Button);              //获取当前鼠标的坐标值
    61.             if (ImageHeight != null && (Row > 0 && Row < ImageHeight) && (Column > 0 && Column < ImageWidth))//设置3个条件项,防止程序崩溃。
    62.             {
    63.                 HOperatorSet.GetGrayval(ho_image, Row, Column, out pointGray);                 //获取当前点的灰度值
    64.             }
    65.             else
    66.             {
    67.                 pointGray = "_";
    68.             }
    69.             String str = String.Format("Row:{0}  Column:{1}  Gray:{2}", Row, Column, pointGray); //格式化字符串
    70.             label1.Text = str;                                                                   //在label控件上显示数值        
    71.         }
    72.         //全屏显示图像,使缩放后的图像回到原始大小
    73.         private void button_FullWindow_Click(object sender, EventArgs e)
    74.         {
    75.             HOperatorSet.SetPart(WindowID, 0, 0, ImageHeight - 1, ImageWidth - 1);
    76.             HOperatorSet.ClearWindow(WindowID);
    77.             HOperatorSet.DispObj(ho_image, WindowID);
    78.         }
    复制代码

    网上找的代码,说实话上面这个代码是一般般,建议把再添加一个控件的MOVE方法,可以实现滚轮缩放,按住鼠标移动就拖拽,不像上面这个代码一样一卡一卡再显示!
    出现闪烁的话,在ClearWindow之前设置
    1. HOperatorSet.SetSystem("flush_graphic", "false");
    复制代码

    清除窗口后再重新打开
    1. HOperatorSet.SetSystem("flush_graphic", "true");
    复制代码

  • TA的每日心情

    2020-10-22 11:30
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    0

    主题

    9

    帖子

    20

    积分

    Rank: 1

    积分
    20
    发表于 2020-6-16 14:28:21 | 显示全部楼层
    多谢楼主分享!!
  • TA的每日心情

    2020-7-13 18:34
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    0

    主题

    19

    帖子

    46

    积分

    Rank: 1

    积分
    46

    切换助手验证会员

    发表于 2020-6-30 14:21:38 | 显示全部楼层
    后面两个你说添加的没看懂。。
  • TA的每日心情

    2021-1-8 08:35
  • 签到天数: 13 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    7

    主题

    18

    帖子

    58

    积分

    Rank: 1

    积分
    58

    切换助手验证会员

    发表于 2020-12-28 18:21:42 | 显示全部楼层
    进不去滚轮事件啊  hWindowControl1_HMouseWheel ,,点击什么的都能进就是这个进不了
  • TA的每日心情

    2021-1-8 08:35
  • 签到天数: 13 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    7

    主题

    18

    帖子

    58

    积分

    Rank: 1

    积分
    58

    切换助手验证会员

    发表于 2020-12-28 18:22:42 | 显示全部楼层
    RockKin 发表于 2020-12-28 18:21
    进不去滚轮事件啊  hWindowControl1_HMouseWheel ,,点击什么的都能进就是这个进不了 ...

    我用的是smartControl
    您需要登录后才可以回帖 登录 | 会员注册

    本版积分规则

    视觉培训招生

    建议您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流浏览器浏览本网站

    51Halcon会员技术交流会员技术交流 | 51Halcon官方客服咨询官方客服咨询 | Halcon切换助手使用反馈切换助手使用

    算子查询| 申请友链| 小黑屋| 手机版| Archiver|

    © 2015-2021 51Halcon机器视觉  X3.4  粤ICP备15095995号 粤公网安备44030602000670号

    快速回复 返回顶部 返回列表