使用ScaleTransform和TranslateTransform显示WPF图像控件显示区域中的部分图像

时间:2013-01-11 16:16:18

标签: c# wpf

我的WPF Image控件已在我的应用程序中运行。使用ScaleTransformTranslateTransformImage控件的缩放和平移功能非常有效。

我想知道是否有任何方法可以使用ImageScaleTransformTranslateTransform控件中显示图像源的某个矩形区域。为了做到这一点,我想我需要在Image控件的视口中获取/设置图像源的矩形坐标。但似乎我找不到任何关于此的参考。

2 个答案:

答案 0 :(得分:3)

我认为CroppedBitmap可以帮助您:

<CroppedBitmap x:Key="croppedImage" 
      Source="{StaticResource masterImage}" SourceRect="30 20 105 50"/>

答案 1 :(得分:0)

幸运的是,矩形具有相同的大小,因此我可以轻松找到ScaleTrensformation的固定比例值,例如5.0,它将每个矩形适合视图端口。一旦确定,我可以提出以下函数来计算TranslateTransform的值,就图像中的坐标而言。希望它可以帮助处于类似情况的人。

    public void SetImageCoordinate(double x, double y)
    {

        TransformGroup transformGroup = (TransformGroup)image.RenderTransform;
        ScaleTransform transform = (ScaleTransform)transformGroup.Children[0];

        ImageSource imageSource = image.Source;
        BitmapImage bitmapImage = (BitmapImage) imageSource ;
        //Now since you got the image displayed in Image control. You can easily map the mouse position to the Pixel scale.

        var pixelMousePositionX = -(x ) / bitmapImage.PixelWidth * transform.ScaleX * image.ActualWidth;
        var pixelMousePositionY = -(y) / bitmapImage.PixelHeight * transform.ScaleY * image.ActualHeight;

        //MessageBox.Show("X: " + pixelMousePositionX + "; Y: " + pixelMousePositionY);

        var tt = (TranslateTransform)((TransformGroup)image.RenderTransform).Children.First(tr => tr is TranslateTransform);
        tt.X = pixelMousePositionX;
        tt.Y = pixelMousePositionY;            
    }