Xaml 如何允许用户在Windows Phone 8上移动\调整图片控件的大小

Xaml 如何允许用户在Windows Phone 8上移动\调整图片控件的大小,xaml,windows-phone-8,nokia-imaging-sdk,lumia-imaging-sdk,Xaml,Windows Phone 8,Nokia Imaging Sdk,Lumia Imaging Sdk,下面是我在使用Windows8手机应用程序时面临的挑战 流量:用户使用Windows8手机拍照。该逻辑使用PhotoCamera类,该类适用于我的目的。一旦流可用,我将流传输到结果页面,在那里从流构造BitmapImage。然后,此位图图像用作图像对象的源,该对象在xaml文件中定义。这样做的目的是将拍摄的照片显示给用户进行确认,并且该流程工作正常。下面是结果页面的作用 protected override void OnNavigatedTo(NavigationEventArgs e)

下面是我在使用Windows8手机应用程序时面临的挑战

流量:用户使用Windows8手机拍照。该逻辑使用PhotoCamera类,该类适用于我的目的。一旦流可用,我将流传输到结果页面,在那里从流构造BitmapImage。然后,此位图图像用作图像对象的源,该对象在xaml文件中定义。这样做的目的是将拍摄的照片显示给用户进行确认,并且该流程工作正常。下面是结果页面的作用

protected override void OnNavigatedTo(NavigationEventArgs e)
    {

        base.OnNavigatedTo(e);
        MemoryStream stream = (MemoryStream)App.ObjectNavigationData;
        stream.Seek(0, SeekOrigin.Begin);
        var bitmapImage = new BitmapImage(); 
        bitmapImage.SetSource(stream);
        imgCaptureResult.Source = bitmapImage;
        imgCaptureResult.Visibility = System.Windows.Visibility.Visible;
    }
我想做的是显示一个矩形,用户可以在其中定义裁剪区域,我可以通过在图像对象本身上定义一个矩形对象(或多条线)来实现。只要覆盖对象(裁剪区域)是静态的,这就可以正常工作。请参见下面的xaml。(请注意,此处的画布是取景器(相机馈送),而不是结果页面。在结果页面中,我将使用图像对象而不是画布,但概念可行,我可以在另一个UI元素上覆盖线条,只要线条是静态的)



但是我希望用户能够通过手势重新调整这个矩形的大小,这样他就可以真正自定义裁剪区域。要么向上\向下移动整个矩形,要么向上\向下移动底部等。换句话说,我需要一个类似于在Paint.Net中看到的“选择”矩形的控件,以便用户可以选择裁剪区域。我想不出一个办法。我看了看手机API和诺基亚图像SDK,但什么也没让我想起。如有任何建议,我们将不胜感激。多亏了您还可以使用一种方法,用户可以分别选择垂直和水平边界,而不是平移它(如果平移不是直接向前的,并且没有控件可以轻松地进行)。让用户使用一些垂直滑块选择垂直限制,然后以同样的方式让用户进行水平选择。然后你可以用合适的颜色对他选择的区域进行垂直和水平着色,以显示平移效果。
只有当你没有达到你想要达到的目标时,你才会这样做

不确定是否要移动UI元素,但是为什么不保持UI元素的静态并变换图像以达到相同的效果呢。因此,不要移动UI裁剪区域,只需重新调整图像(调整大小、移动、旋转)。谢谢您的回复。你是对的,我的最终目标是裁剪图像,但我需要用户选择裁剪区域。你能想出什么办法帮我吗?我需要一个类似于“选择图像”的控件,您可以在Paint.Net中找到它。我会澄清我的问题。再次感谢您的回复。这样也可以选择。当您检测到来自用户的手势时,可以应用重构过滤器,以便用户修改矩形中可见的内容。(你可以看看诺基亚创意工作室是如何做到的。)谢谢。在你的建议之后,我取得了很大的进步,我几乎做到了。我处理了ManufactionStarted事件和ManufactionDelta,检索了所选矩形的坐标,并在重构过滤器中使用。需要更多的抛光,但核心已经完成。再次感谢!非常感谢。我同意,在触摸屏上平移并不是非常容易,我将尝试在两个边界上实现您的建议。谢谢你的帮助
<Canvas x:Name="viewfinderCanvas"
            Grid.Column="0"
            Width="640" 
            Height="480" 
            HorizontalAlignment="Left" >
        <!--Camera viewfinder -->
        <Canvas.Background>
            <VideoBrush x:Name="viewfinderBrush" />
        </Canvas.Background>
        <Line   X1="20" Y1="20"
                X2="100" Y2="20"
                Stroke="Red"
                StrokeThickness="4"/>
        <Line   X1="20" Y1="20"
                X2="20" Y2="100"
                Stroke="Red"
                StrokeThickness="4"/>
        <Line   X1="540" Y1="20"
                X2="620" Y2="20"
                Stroke="Red"
                StrokeThickness="4"/>
        <Line   X1="620" Y1="20"
                X2="620" Y2="100"
                Stroke="Red"
                StrokeThickness="4"/>
        <Line   X1="540" Y1="460"
                X2="620" Y2="460"
                Stroke="Red"
                StrokeThickness="4"/>
        <Line   X1="620" Y1="460"
                X2="620" Y2="380"
                Stroke="Red"
                StrokeThickness="4"/>
        <Line   X1="20" Y1="460"
                X2="100" Y2="460"
                Stroke="Red"
                StrokeThickness="4"/>
        <Line   X1="20" Y1="460"
                X2="20" Y2="380"
                Stroke="Red"
                StrokeThickness="4"/>
    </Canvas>