根据鼠标位置在WPF中放大图像

12 浏览
0 Comments

根据鼠标位置在WPF中放大图像

我在一个画布中有一个放大图像的问题。我想使用MatrixTransform,但它不起作用。它返回一个我不理解的异常!这是XAML代码:


    
        
        
    
    

后台代码:

private void Button_Click(object sender, RoutedEventArgs e)
{
    Bitmap Bmp = new Bitmap(@"C:\Desktop\image1.bmp");
    ImageSource.Source = CreateBitmapSourceFromGdiBitmap(Bmp);
    Container.Width = Bmp.Width;
    Container.Height = Bmp.Height;
}
private void Container_MouseWheel(object sender, MouseWheelEventArgs e)
{
    var element = sender as UIElement;
    var position = e.GetPosition(element);
    var transform = element.RenderTransform as MatrixTransform;
    var matrix = transform.Matrix;
    var scale = e.Delta >= 0 ? 1.1 : (1.0 / 1.1); // 选择适当的缩放因子
    matrix.ScaleAtPrepend(scale, scale, position.X, position.Y);
    transform.Matrix = matrix;
}

如果有人能给我一些提示,那就太好了,谢谢!

0
0 Comments

在WPF中根据鼠标位置放大图像的问题是由于缺乏缩放功能导致的。解决方法是使用XAML代码中的ScrollViewer将图像放大,并使用滚动条来平移图像。代码中的ScaleTransform将图像的ScaleX和ScaleY属性绑定到ScaleFactor属性,通过更改ScaleFactor属性的值来实现缩放。在Window_Loaded事件中,通过计算比例将图像的初始大小设置为适应窗口。在Image_MouseWheel事件中,根据鼠标滚轮的方向来增加或减小ScaleFactor的值,并使用LineRight、LineLeft、LineDown和LineUp方法来平移图像。

这个解决方法不是完美的,但是可以正常工作,并且实现起来很简单。

0
0 Comments

问题原因:

问题出现的原因是在WPF中,使用RenderTransform进行缩放时,无法使ScrollViewer的大小或滚动栏按照缩放进行调整。

解决方法:

要解决这个问题,可以按照以下步骤进行操作:

1. 将transform.Matrix = matrix;替换为element.RenderTransform = new MatrixTransform(matrix);

2. 将容器删除,将图像设置为ScrollViewer的第一个子元素。

3. 设置图像的宽度和高度与图像源相匹配。

4. 使用LayoutTransform代替RenderTransform。

5. 在代码后台中使用LayoutTransform。

具体的代码示例如下:

element.RenderTransform = new MatrixTransform(matrix);

如果要在代码后台中使用LayoutTransform,可以将所有的RenderTransforms替换为LayoutTransforms,因为它们都是"Transform"类型的。可以按下Ctrl + Shift + F,然后在项目中搜索所有的用法。

这样,就可以解决Zoom on image according to mouse position in wpf的问题了。

0
0 Comments

在WPF中,有一个问题是如何根据鼠标位置缩放图像。有一个解决方法是使用Wiesław Šoltés在这里提供的优秀解决方案。只需要将答案中的代码粘贴进去即可。

0