1

画像

キャンバス(グレー)に画像(ブルー)が入っています。画像を操作して、操作後の画像の見える部分(赤色)を探したい。

そのために私はこの方法を使用します:

    private double GetSquare()
            {
                Rect rect = GetBounds(Image, Canvas);
                var canvasRect = RootGeometry.Rect;
                canvasRect.Intersect(rect);
                return canvasRect.Height * canvasRect.Width;
            }
  private static Rect GetBounds(FrameworkElement of, FrameworkElement from)
        {

            // Might throw an exception if of and from are not in the same visual tree
            GeneralTransform transform = of.TransformToVisual(from);
            return transform.TransformBounds(new Rect(0, 0, of.ActualWidth, of.ActualHeight));

        }

XAML:

<Canvas Grid.Row="1" x:Name="ImageCanvas" Background="Gray">
            <Canvas.Clip>
                <RectangleGeometry x:Name="RootGeometry"/>
            </Canvas.Clip>
            <Image  x:Name="Image" Stretch="Fill"
                   ManipulationStarted="OnManipulationStarted"
                   ManipulationDelta="OnManipulationDelta"
                   ManipulationCompleted="OnManipulationCompleted" Source="{...}" 
                   ImageOpened="OnImageOpened">
                    <Image.RenderTransform>
                        <TransformGroup>
                            <MatrixTransform x:Name="previousTransform" />
                            <TransformGroup x:Name="currentTransform">
                                <ScaleTransform x:Name="scaleTransform" />
                                <RotateTransform x:Name="rotateTransform" />
                                <TranslateTransform x:Name="translateTransform" />
                            </TransformGroup>
                        </TransformGroup>

                    </Image.RenderTransform>

                </Image>
        </Canvas>

この方法は、2次元画像に対して正しく機能します。ただし、3番目の画像の場合、メソッドは誤った結果を返します。たぶん誰かがメソッドが間違った結果を返す理由を説明し、画像の可視部分(3番目)を取得する方法を説明することができますか?

4

0 に答える 0