Как увеличить и уменьшить изображения в WP7? - PullRequest
19 голосов
/ 13 января 2011

Я сделал приложение, которое отображает изображения. Теперь я хочу реализовать функцию увеличения и уменьшения масштаба (используя два кончика пальца), как в родном приложении просмотра фотографий Windows Phone. Любая идея о том, как действовать.

Заранее спасибо.

Ответы [ 3 ]

29 голосов
/ 13 января 2011

Пожалуй, самым целесообразным подходом было бы включить Silverlight для Windows Phone Toolkit . Он содержит GestureService, который поможет сжимать и вращать жесты. Вы можете применить его к изображению, как это: -

 <Image Source="someSourceUrl" RenderTransformOrigin="0.5, 0.5" CacheMode="BitmapCache">
     <Image.RenderTransform>
         <CompositeTransform x:Name="transform" />
     </Image.RenderTransform>
     <toolkit:GestureService.GestureListener>
         <toolkit:GestureListener PinchStarted="OnPinchStarted" PinchDelta="OnPinchDelta" />
     </toolkit:GestureService.GestureListener>
 </Image>

Затем в коде позади: -

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

    private void OnPinchDelta(object sender, PinchGestureEventArgs e)
    {
        transform.Rotation = initialAngle + e.TotalAngleDelta;
        transform.ScaleX = initialScale * e.DistanceRatio;
        transform.ScaleY = initialScale * e.DistanceRatio;
    }
5 голосов
/ 13 января 2011

Проверьте мультитач-образец Лорана Бюньона - http://multitouch.codeplex.com/

0 голосов
/ 02 февраля 2012

, если вам нужен простой просмотрщик изображений, поддерживающий мультитач, я рекомендую вам использовать WebBrowser для отображения изображения.

По умолчанию поддерживается мультитач-масштабирование и плавная прокрутка. Но вы должны скопировать файл в изолированное хранилище из папки проекта. Вот как я это сделал:

<Grid x:Name="LayoutRoot" Background="Transparent">
    <phone:WebBrowser 
        Name="MyWebBrowserControl"
        HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="0" />
</Grid>

IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication();

        // if image file does not exist in isolated storage, copy it to there~!
        if (!isf.FileExists(filename))
        {
            StreamResourceInfo sr = Application.GetResourceStream(new Uri(filename, UriKind.Relative));
            using (BinaryReader br = new BinaryReader(sr.Stream))
            {
                byte[] data = br.ReadBytes((int)sr.Stream.Length);

                using (BinaryWriter bw = new BinaryWriter(isf.OpenFile(filename, FileMode.OpenOrCreate)))
                {
                    bw.Write(data);
                    bw.Close();
                }

                br.Close();
            }
        }

        Dispatcher.BeginInvoke(() => { MyWebBrowserControl.Navigate(new Uri(filename, UriKind.Relative)); });

※ Необходимо установить Действие построения файла изображения на Содержимое

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...