如何获取矩形内部的图像部分进行裁剪,Windows Phone 8

时间:2013-12-10 13:08:31

标签: c# image xaml windows-phone-8

我有一个图像,顶部有一个矩形。图像可以缩放和拖动。我需要在这些操作后将图像的一部分放在矩形内,并将其保存为jpeg。

这是我的代码,

private void OnPinchStarted(object sender, PinchStartedGestureEventArgs e)
{
    initialAngle = compositeTransform.Rotation;
    initialScale = compositeTransform.ScaleX;
}

private void OnPinchDelta(object sender, PinchGestureEventArgs e)
{
    if (1.0 <= (initialScale * e.DistanceRatio))
    {
        compositeTransform.ScaleX = initialScale * e.DistanceRatio;
        compositeTransform.ScaleY = initialScale * e.DistanceRatio;
    }
}

  private void OnDragDelta(object sender, DragDeltaGestureEventArgs e)
{
compositeTransform.TranslateX += e.HorizontalChange;
compositeTransform.TranslateY += e.VerticalChange;
 }

我的XAML是

<Image x:Name="mypic" RenderTransformOrigin="0.5, 0.5" CacheMode="BitmapCache" HorizontalAlignment="Left"  Margin="79,0,0,0" VerticalAlignment="Top" Height="345" >
                <Image.RenderTransform>
                    <TransformGroup>
                        <ScaleTransform x:Name="scale" />
                        <TranslateTransform x:Name="transform" />
                        <CompositeTransform x:Name="compositeTransform"/>
                    </TransformGroup>
                </Image.RenderTransform>
                <toolkit:GestureService.GestureListener>
                    <toolkit:GestureListener DragDelta="OnDragDelta" PinchStarted="OnPinchStarted" PinchDelta="OnPinchDelta" />
                </toolkit:GestureService.GestureListener>
            </Image>
            <Rectangle x:Name="rect" Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="250" Margin="111,26,0,0" Stroke="Black" VerticalAlignment="Top" Width="233" Opacity="0.1" StrokeThickness="3"/>
            <Button Content="Button" HorizontalAlignment="Left" Margin="275,396,0,0" VerticalAlignment="Top" Click="ClipImage"/>

在ClipImage方法中,如何获取裁剪后的图像?我在这里没有使用画布..是否使用画布必需?如果我移动矩形我可以调用CompositionTarget.Rendering来获取当前的x,y点。我如何继续这种情况?

编辑: 我现在能够使用以下代码获取矩形内的部分图像..

  void ClipImage()
{
    RectangleGeometry geo = new RectangleGeometry();
    r = (Rectangle)rect;
    GeneralTransform gt = r.TransformToVisual(LayoutRoot);
    Point p = gt.Transform(new Point(0, 0));
    geo.Rect = new Rect(p.X, p.Y, (r.Width) + 50, (r.Height) + 50);
    mypic.Clip = geo;
    r.Visibility = System.Windows.Visibility.Collapsed;

    TranslateTransform t = new TranslateTransform();
    t.X = -p.X;
    t.Y = -p.Y;
    mypic.RenderTransform = t;

}

当我不平移或缩放图像时这很好用,但是当用户缩放图像时,这不起作用。可以帮助一些人。

0 个答案:

没有答案