2

WPF Imageアプリケーションですでにコントロールが機能しています。とを使用するScaleTransformTranslateTransformImageコントロールのズーム機能とパン機能が非常にうまく機能します。

とを使用して、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

私にとって幸運なことに、長方形はすべて同じサイズであるため、各長方形をビューポートに収める5.0などのScaleTrensformationの固定スケール値を簡単に見つけることができました。それが決まったら、画像の座標で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 に答える