贵阳设计网站建设/2024最火的十大新闻
51Halcon诚邀您的加入,专注于机器视觉开发与应用技术,我们一直都在努力!
您需要 登录 才可以下载或查看,没有帐号?会员注册
x
最近刚刚学习WPF和halcon的联合编程,在需求中需要创建模板,但是由于图片比较大直接在界面上画出目标区域偏差太大,所以想让图片能够放大和移动,这样会比较方便。我利用HHWindowControlWPF的鼠标事件结合WPF封装的ScaleTtransForm和TranslateTransform类编写。但是当我操作时,没有事件触发,有没有知道原因的。麻烦大家了。
下面贴上我的程序
1.xaml 对应的程序:
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:HalconDotNet="clr-namespace:HalconDotNet;assembly=halcondotnet" x:Class="Halcon界面.MainWindow"
Title="MainWindow" Height="350" Width="525">
MouseLeftButtonDown="image_MouseLeftButtonDown"
MouseLeftButtonUp="image_MouseLeftButtonUp"
MouseMove="image_MouseMove"
MouseWheel="image_MouseWheel"
MouseLeave="image_MouseLeave"
RenderOptions.BitmapScalingMode="NearestNeighbor" ImagePart="0,0,1024,1024" MouseDown="image_MouseDown" MouseUp="image_MouseUp">
2. cs 文件
private bool isMouseLeftButtonDown = false;
Point previousMousePoint = new Point();
//鼠标左键按下消息
private void image_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
isMouseLeftButtonDown = true;
previousMousePoint = e.GetPosition(image);
}
//鼠标左键弹起消息
private void image_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
isMouseLeftButtonDown = false;
}
//鼠标离开消息
private void image_MouseLeave(object sender, MouseEventArgs e)
{
isMouseLeftButtonDown = false;
}
private void image_MouseMove(object sender, MouseEventArgs e)
{
if (isMouseLeftButtonDown)
{
Point position = e.GetPosition(image);
tlt.X = position.X - this.previousMousePoint.X;
tlt.Y = position.Y - this.previousMousePoint.Y;
}
}
private void image_MouseWheel(object sender, MouseWheelEventArgs e)
{
Point centerPoint = e.GetPosition(image);
double val = (double)e.Delta / 2000;
if (stf.ScaleX < 0.3 && stf.ScaleY < 0.3 && e.Delta < 0)
{
return;
}
stf.CenterX = centerPoint.X;
stf.CenterY = centerPoint.Y;
stf.ScaleX += val;
stf.ScaleY += val;
}