C#和Halcon交互实现图片的放大和缩小
【转载】 C#和halcon实现图片的放大和缩小
e.Delta>0表示鼠标向上滚动,e.Delta<0表示向下滚动
要拖动的图像为Measure.currentImageL,可以更换。
#region 鼠标实现放大缩小,移动图片
//鼠标滚动事件:实现放大和缩小图像
private void WinHandle_HMouseWheel(object sender, HalconDotNet.HMouseEventArgs e)
{
try
{
HWindowControl WinHandle = sender as HWindowControl;
HObject ho_currentImage = null;
HOperatorSet.GenEmptyObj(out ho_currentImage);
if (WinHandle.Name == "WinHandle_Left")
{
ho_currentImage = Measure.ho_CurrentImageL;
}
if (WinHandle.Name == "WinHandle_Right")
{
ho_currentImage = Measure.ho_CurrentImageR;
}
//放大倍数,当前鼠标选择的图像点坐标Row, Col,按下鼠标的左键还是右键:o-没按下,1-左键,2-中键,4-右键
HTuple Zoom, Row, Col, Button;
HTuple RowLeftUpper, ColumnLeftUpper, RowRightLower, ColumnRightLower, Ht, Wt, ImagePartRowLeftUp, ImagePartColLeftUp, ImagePartRowRightLow, ImagePartColRightLow;
//鼠标向上滚动表示放大
if (e.Delta > 0)
{
Zoom = 1.5;
}
//向下滚动缩小
else
{
Zoom = 0.5;
}
//返回输出窗口中鼠标指针和鼠标按钮所按下的像素精确图像坐标,输出当前鼠标指针点的图像坐标以及按下的是鼠标左键还是右键,0是鼠标左键
HOperatorSet.GetMposition(WinHandle.HalconWindow, out Row, out Col, out Button);
//Get part返回窗口中显示的图像部分的左上角和右下角 //得到当前的窗口坐标,Row0:图像部分左上角的行索引,Column0:图像部分左上角的列索引,Row00:图像部分右下角的行索引,Column00:图像部分右下角的列索引
HOperatorSet.GetPart(WinHandle.HalconWindow, out RowLeftUpper, out ColumnLeftUpper, out RowRightLower, out ColumnRightLower);
//显示的部分图像的高
Ht = RowRightLower - RowLeftUpper;
//显示的部分图像的宽
Wt = ColumnRightLower - ColumnLeftUpper;
//普通版halcon能处理的图像最大尺寸是32K*32K。如果无限缩小原图像,导致显示的图像超出限制,则会造成程序崩溃
if (Ht * Wt < 32000 * 32000 || Zoom == 1.5)
{
//显示的放大或者缩小部分图像的左上角和右下角坐标
ImagePartRowLeftUp = (RowLeftUpper + ((1 - (1.0 / Zoom)) * (Row - RowLeftUpper)));
ImagePartColLeftUp = (ColumnLeftUpper + ((1 - (1.0 / Zoom)) * (Col - ColumnLeftUpper)));
ImagePartRowRightLow = ImagePartRowLeftUp + (Ht / Zoom);
ImagePartColRightLow = ImagePartColLeftUp + (Wt / Zoom);
//设置部分显示图像
HOperatorSet.SetPart(WinHandle.HalconWindow, ImagePartRowLeftUp, ImagePartColLeftUp, ImagePartRowRightLow, ImagePartColRightLow);
HOperatorSet.ClearWindow(WinHandle.HalconWindow);
if (ho_currentImage != null)
{
HOperatorSet.DispObj(ho_currentImage, WinHandle.HalconWindow);
}
}
}
catch (Exception)
{ }
} //【1】鼠标按下,准备拖动图像
private void WinHandle_HMouseDown(object sender, HalconDotNet.HMouseEventArgs e)
{
HWindowControl WinHandle = sender as HWindowControl;
if (WinHandle.Name == "WinHandle_Left")
{
if (Measure.ho_CurrentImageL == null)
{
return;
}
}
if (WinHandle.Name == "WinHandle_Right")
{
if (Measure.ho_CurrentImageR == null)
{
return;
}
}
HTuple Row, Column, Button;
//返回鼠标当前按下点的图像坐标
HOperatorSet.GetMposition(WinHandle.HalconWindow, out Row, out Column, out Button);
RowDown = Row; //鼠标按下时的行坐标
ColDown = Column; //鼠标按下时的列坐标
} //【2】鼠标移动,开始拖动图像
private void WinHandle_HMouseMove(object sender, HMouseEventArgs e)
{
try
{
HWindowControl WinHandle = sender as HWindowControl;
HObject ho_currentImage = null;
HOperatorSet.GenEmptyObj(out ho_currentImage);
if (WinHandle.Name == "WinHandle_Left")
{
ho_currentImage = Measure.ho_CurrentImageL;
}
if (WinHandle.Name == "WinHandle_Right")
{
ho_currentImage = Measure.ho_CurrentImageR;
}
HTuple Row = new HTuple(), Column = new HTuple(), Button = new HTuple(), pointGray = new HTuple();
HTuple hv_Width = new HTuple();
HTuple hv_Height = new HTuple();
if (ho_currentImage != null)
{
HOperatorSet.GetImageSize(ho_currentImage, out hv_Width, out hv_Height);
}
//bug
HOperatorSet.GetMposition(WinHandle.HalconWindow, out Row, out Column, out Button);
////获取当前鼠标的坐标值
if (hv_Height != null && (Row > 0 && Row < hv_Height) && (Column > 0 && Column < hv_Width))//设置3个条件项,防止程序崩溃。
{
HOperatorSet.GetGrayval(ho_currentImage, Row, Column, out pointGray); //获取当前点的灰度值
}
else
{
pointGray = "_";
}
String str = String.Format("Row:{0} Column:{1} Gray:{2}", Row, Column, pointGray);
ts_Grval.Text = str;
}
catch (HalconException )
{ } } //【3】鼠标抬起,完成拖动图像
private void WinHandle_HMouseUp(object sender, HalconDotNet.HMouseEventArgs e)
{
try
{
HWindowControl WinHandle = sender as HWindowControl;
HObject ho_currentImage = null;
HOperatorSet.GenEmptyObj(out ho_currentImage);
if (WinHandle.Name == "WinHandle_Left")
{
ho_currentImage = Measure.ho_CurrentImageL;
}
if (WinHandle.Name == "WinHandle_Right")
{
ho_currentImage = Measure.ho_CurrentImageR;
}
HTuple row1, col1, row2, col2, Row, Column, Button;
////获取当前鼠标的坐标值
HOperatorSet.GetMposition(WinHandle.HalconWindow, out Row, out Column, out Button);
double RowMove = Row - RowDown; //鼠标弹起时的行坐标减去按下时的行坐标,得到行坐标的移动值
double ColMove = Column - ColDown;//鼠标弹起时的列坐标减去按下时的列坐标,得到列坐标的移动值
//得到当前的窗口坐标
HOperatorSet.GetPart(WinHandle.HalconWindow, out row1, out col1, out row2, out col2);
//移动后的左上角和右下角坐标,这里可能有些不好理解。以左上角原点为参考点
HOperatorSet.SetPart(WinHandle.HalconWindow, row1 - RowMove, col1 - ColMove, row2 - RowMove, col2 - ColMove);
HOperatorSet.ClearWindow(WinHandle.HalconWindow);
if (ho_currentImage!=null)
HOperatorSet.DispObj(ho_currentImage, WinHandle.HalconWindow);
}
catch (Exception)
{
} }
#endregion
原图显示
private void btn_FullWindowLeft_Click(object sender, EventArgs e)
{
HOperatorSet.SetPart(WinHandle_Left.HalconWindow, 0, 0, measure.hv_HeightL - 1, measure.hv_WidthL - 1);
HOperatorSet.ClearWindow(WinHandle_Left.HalconWindow);
HOperatorSet.DispObj(Measure.ho_CurrentImageL, WinHandle_Left.HalconWindow);
if (Measure.ho_CurrentImageL != null)
HOperatorSet.DispObj(Measure.ho_CurrentImageL, WinHandle_Left.HalconWindow);
} private void btn_FullWindowRight_Click(object sender, EventArgs e)
{
HOperatorSet.SetPart(WinHandle_Right.HalconWindow, 0, 0, measure.hv_HeightR - 1, measure.hv_WidthR - 1);
HOperatorSet.ClearWindow(WinHandle_Right.HalconWindow);
HOperatorSet.DispObj(measure.ho_ImageRectifiedR, WinHandle_Right.HalconWindow);
HOperatorSet.DispObj(Measure.ho_CurrentImageR, WinHandle_Right.HalconWindow);
if (Measure.ho_CurrentImageR != null)
HOperatorSet.DispObj(Measure.ho_CurrentImageR, WinHandle_Right.HalconWindow);
}
C#和Halcon交互实现图片的放大和缩小的更多相关文章
- Android------实现图片双击放大,缩小,左右滑动的多种方式
项目中常常有图片浏览功能.像微信朋友圈图片浏览,QQ空间照片浏览 的功能. 实现图片双击放大,缩小,左右滑动等效果. 来看看我的效果图,希望能满足你的要求 前三个button按钮是参考网上的多种实 ...
- 实例讲解如何利用jQuery设置图片居中放大或者缩小
大家有没有见过其他网站的图片只要鼠标放上去就能放大,移出去的时候就能缩小,而且一直保持居中显示!其实jQuery提供一个animate函数可以使图片放大和缩小,只要改变图片的长和高就OK啦!但是ani ...
- 使用JavaScript 中的Math对象和勾股定理公式,计算鼠标的位置与页面图片中心点的距离,根据距离对页面上的图片进行放大或缩小处理。距离远时图片放大,距离近时图片缩小
查看本章节 查看作业目录 需求说明: 使用JavaScript 中的Math对象和勾股定理公式,计算鼠标的位置与页面图片中心点的距离,根据距离对页面上的图片进行放大或缩小处理.距离远时图片放大,距离近 ...
- 通过Java代码实现图片的放大和缩小
本文介绍的例子在Android安卓手机上测试通过. 先看看效果吧.可以看到这个开发好的安卓应用有三个按钮:Zoom In缩小图片,Zoom Out放大图片和Save保存. 初始页面: 可以在左边边框自 ...
- JS图片的放大与缩小
<!doctype html><head><meta charset=utf-8" /><title>javascript控制图片缩小或者放大 ...
- JavaScript特效之图片特效放大,缩小,旋转
效果图如下: 效果代码如下: <!doctype html> <html lang="en"> <head> <meta charset= ...
- js 实现图片的放大和缩小
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- [Swift通天遁地]三、手势与图表-(3)通过捏合手势放大和缩小图像视图
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- Java界面程序实现图片的放大缩小
Java界面程序实现图片的放大缩小.这个程序简单地实现了图片的打开.保存.放大一倍.缩小一倍和固定缩放尺寸,但是并没有过多的涵盖对图片的细节处理,只是简单地实现了图片大小的放缩. 思维导图如下: 效果 ...
随机推荐
- Spring 16: SM(Spring + MyBatis) 注解式事务 与 声明式事务
Spring事务处理方式 方式1:注解式事务 使用@Transactional注解完成事务控制,此注解可添加到类上,则对类中所有方法执行事务的设定,注解添加到方法上,则对该方法执行事务处理 @Tran ...
- Java方法总结
什么是方法 何谓方法 就是一个方法只完成一个功能,这样利于后期的扩展 例子: public static void main(String[] args) { System.out.printl ...
- .md图片链接转存并替换路径,及相关报错解决方法
最初我想把Typora中.md文件中的web图片链接都下载保存到本地,并且替换.md文本中的路径 说干就干,因为在网上没有找到现成的程序所以自己写了这个程序 思路是循环查找文件夹中的文件,然后yiel ...
- Centos7中用Docker安装MySQL教程
第一步 安装Docker 1.1 参考这位博主给出的命令安装好 https://blog.csdn.net/weixin_43423864/article/details/109481260 第二步 ...
- SUSE Linux Enterprise Server 12 使用二进制文件安装docker
Docker-CE in SUSE 虽然使用zypper添加源也能安装,不过我在SLES 12sp5 上安装时发现好多命令还需要自己手动软连接,干脆网上找了找文档,再自己小改下,用二进制部署,也是可以 ...
- HCNP Routing&Switching之ARP安全
前文我们了解了IP安全相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16652367.html:今天我们来聊一聊ARP安全相关话题: 什么是ARP? ...
- 记录一下对jdk8后的接口的一些理解
对于jdk8后的接口,接口中加入了可以定义默认方法和静态方法. 为什么要这样设计呢? 是为了在给接口扩展方法的时候,不会影响已经实现了该接口的类 加入默认方法可以解决:在添加方法的同时,不影响现有的实 ...
- 20_IO
IO框架 一. 流的概念 概念:内存与存储设备之间传输数据的通道 水借助管道传输:数据借助流传输 二. 流的分类 按方向[重点] 输入流:将<存储设备>中的内容读入到<内存>中 ...
- JuiceFS 在 Elasticsearch/ClickHouse 温冷数据存储中的实践
企业数据越存越多,存储容量与查询性能.以及存储成本之间的矛盾对于技术团队来说是个普遍难题.这个难题在 Elasticsearch 与 ClickHouse 这两个场景中尤为突出,为了应对不同热度数据对 ...
- [算法2-数组与字符串的查找与匹配] (.NET源码学习)
[算法2-数组与字符串的查找与匹配] (.NET源码学习) 关键词:1. 数组查找(算法) 2. 字符串查找(算法) 3. C#中的String(源码) 4. 特性Attribute 与内 ...