2

我的应用程序中已经有一个WPF Image控件。使用ScaleTransformTranslateTransform,该Image控件具有很好的缩放和平移功能。

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

4

2 回答 2

3

我认为CroppedBitmap可以帮助你:

<CroppedBitmap x:Key="croppedImage" 
      Source="{StaticResource masterImage}" SourceRect="30 20 105 50"/>
于 2013-01-11T16:28:59.310 回答
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;            
    }
于 2013-01-11T21:49:09.837 回答