最近刚刚学习WPF和halcon的联合编程,在需求中需要创建模板,但是由于图片比较大直接在界面上画出目标区域偏差太大,所以想让图片能够放大和移动,这样会比较方便。我利用HHWindowControlWPF的鼠标事件结合WPF封装的ScaleTtransForm和TranslateTransform类编写。但是当我操作时,没有事件触发,有没有知道原因的。麻烦大家了。
下面贴上我的程序
1.xaml 对应的程序:
- <Window
- 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">
- <Grid>
- <Button x:Name="openImage" Content="打开图片" HorizontalAlignment="Left" Margin="137.791,264.045,0,0" VerticalAlignment="Top" Width="100.373" Height="31.18" Click="openImage_Click"/>
- <Button x:Name="operateImage" Content="处理图片" HorizontalAlignment="Left" Margin="307.941,264.045,0,0" VerticalAlignment="Top" Width="103.358" Height="31.18" Click="operateImage_Click"/>
- <HalconDotNet:HWindowControlWPF x:Name="image" HorizontalAlignment="Left" Margin="87.045,34.195,0,0" VerticalAlignment="Top" Width="320" Height="224.85"
- 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">
- <HalconDotNet:HWindowControlWPF.RenderTransform>
- <TransformGroup>
- <ScaleTransform x:Name="stf"></ScaleTransform>
- <TranslateTransform x:Name="tlt"></TranslateTransform>
- </TransformGroup>
- </HalconDotNet:HWindowControlWPF.RenderTransform>
- </HalconDotNet:HWindowControlWPF>
- </Grid>
- </Window>
复制代码
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;
- }
复制代码 |