void image_canvas_ManipulationDelta(object sender, ManipulationDeltaEventArgs e)
{
FrameworkElement element = (FrameworkElement)e.Source;
if (element == null) return;
var deltaManipulation = e.DeltaManipulation;
var matrix = ((MatrixTransform)element.RenderTransform).Matrix;
Point center = new Point(element.ActualWidth / 2, element.ActualHeight / 2);
center = matrix.Transform(center);
//double scale_x_old = matrix.M11;
//double scale_y_old = matrix.M22;
if (!item.is_audio)
//if (the_image.ActualHeight < 300 && the_image.ActualHeight > 100 && the_image.ActualWidth < 300 && the_image.ActualWidth > 100)
// if (deltaManipulation.Scale.X >= 0.5 && deltaManipulation.Scale.X <= 2.5
// && deltaManipulation.Scale.Y >= 0.5 && deltaManipulation.Scale.Y <= 2.5)
matrix.ScaleAt(deltaManipulation.Scale.X, deltaManipulation.Scale.Y, center.X, center.Y);
//if (matrix.M11 < 0.5) matrix.M11 = 0.5; if (matrix.M11 > 2.0) matrix.M11 = 2.0;
//if (matrix.M22 < 0.5) matrix.M22 = 0.5; if (matrix.M22 > 2.0) matrix.M22 = 2.0;
if (!item.is_audio)
matrix.RotateAt(e.DeltaManipulation.Rotation, center.X, center.Y);
//matrix.Translate(e.DeltaManipulation.Translation.X, e.DeltaManipulation.Translation.Y);
//matrix.OffsetX = ((MatrixTransform)image_canvas.RenderTransform).Matrix.OffsetX + (image_canvas.ActualWidth / 2) - (the_image.ActualWidth / 2);
//matrix.OffsetY = ((MatrixTransform)image_canvas.RenderTransform).Matrix.OffsetY + (image_canvas.ActualHeight / 2) - (the_image.ActualHeight / 2);
element.RenderTransform = new MatrixTransform(matrix);
e.Handled = true;
}