2

画像を切り抜こうとしています。トリミング領域を選択するために、長方形の要素を使用しています。長方形の初期の幅と高さは、それぞれ100に設定されています。ピンチすると、長方形のサイズが大きくなります。拡大されたこの長方形のサイズを取得するにはどうすればよいですか?

私が使用しているコードは次のとおりです。

    private void GestureListener_PinchDelta(object sender, PinchGestureEventArgs e)  
    {                                                     
         ImageTransformation.ScaleX = _initialScale * e.DistanceRatio;   
         ImageTransformation.ScaleY = ImageTransformation.ScaleX;   
         cropRectangle.Width = cropRectangle.Width + e.DistanceRatio;  
         cropRectangle.Height = cropRectangle.Height + e.DistanceRatio;  
    }

拡大した長方形のサイズを取得できません

4

1 に答える 1

0

RenderTransformsは、レンダリングにのみ影響するため、コントロールの幅と高さを変更しません。より良い方法があるかどうかはわかりませんが、元のサイズと倍率を使用してレンダリングサイズを簡単に計算できます。

これは非常に基本的な例です

xaml

<Canvas x:Name="cnv" Grid.Row="1">      
    <Rectangle Canvas.Top="150" Canvas.Left="150" 
               Width="200" Height="200" x:Name="myrect" 
               Fill="AliceBlue" 
               ManipulationStarted="myrect_ManipulationStarted" 
               ManipulationDelta="myrect_ManipulationDelta" 
               ManipulationCompleted="myrect_ManipulationCompleted">             
    </Rectangle>
</Canvas>

コード

public MainPage()
{
    InitializeComponent();

    transformGroup = new TransformGroup();
    translation = new TranslateTransform();
    scale = new ScaleTransform();
    transformGroup.Children.Add(scale);
    transformGroup.Children.Add(translation);
    myrect.RenderTransform = transformGroup;
}

private TransformGroup transformGroup;
private TranslateTransform translation;
private ScaleTransform scale;

private void myrect_ManipulationStarted(object sender, ManipulationStartedEventArgs e)
{
    //change the color of the Rectangle to a half transparent Red
    myrect.Fill = new SolidColorBrush(Color.FromArgb(127, 255, 0, 0));
}

private void myrect_ManipulationDelta(object sender, ManipulationDeltaEventArgs e)
{
    translation.X += e.DeltaManipulation.Translation.X;
    translation.Y += e.DeltaManipulation.Translation.Y;

    //Scale the Rectangle
    if (e.DeltaManipulation.Scale.X != 0)
        scale.ScaleX *= e.DeltaManipulation.Scale.X;
    if (e.DeltaManipulation.Scale.Y != 0)
        scale.ScaleY *= e.DeltaManipulation.Scale.Y;

}

private void myrect_ManipulationCompleted(object sender, ManipulationCompletedEventArgs e)
{
    myrect.Fill = new SolidColorBrush(Color.FromArgb(255, 255, 0, 0));
    Debug.WriteLine(myrect.Width * scale.ScaleX);
    Debug.WriteLine(myrect.Height * scale.ScaleY);
}
于 2013-02-08T08:22:54.090 に答える