2011-01-13 71 views
19

Tôi đã tạo một ứng dụng hiển thị Hình ảnh .Tôi muốn triển khai tính năng phóng to và thu nhỏ (bằng cách sử dụng hai ngón tay) như trong ứng dụng trình xem ảnh trên điện thoại của người bản xứ. Bất kỳ ý tưởng nào về cách tiến hành.Làm cách nào để phóng to và thu nhỏ Hình ảnh trong WP7?

Cảm ơn trước.

+0

hai lựa chọn tốt cung cấp cho đến nay –

Trả lời

29

Có lẽ cách tiếp cận phù hợp nhất sẽ là bao gồm Silverlight for Windows Phone Toolkit. Điều này có chứa một GestureService sẽ giúp với pinch và xoay cử chỉ cảm ứng. Bạn có thể áp dụng nó cho một hình ảnh như thế này: -

<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> 

Sau đó, trong code-behind: -

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; 
    } 
+0

Cảm ơn cho câu trả lời Nhưng tôi đang tự động tải hình ảnh trong code.So là nó có thể làm các thủ tục trên hoàn toàn trong mã? – Vaysage

+1

@Vaysage: Bạn vẫn có thể sử dụng tính năng này với hình ảnh được tải động. Thông thường với các hình ảnh động, bạn sẽ gán một thể hiện mới của 'BitmapImage' vào thuộc tính' Source' của điều khiển 'Image' hiện có hơn là dỡ bỏ và tải các cá thể của phần tử' Image'. Nó sẽ được vào thời điểm này mà bạn cũng sẽ đặt Rotation trên biến đổi để 0 cũng như ScaleX và ScaleY để 1. – AnthonyWJones

+0

Cảm ơn, làm việc tuyệt vời. –

0

nếu bạn muốn xem hình ảnh đơn giản hỗ trợ cảm ứng đa điểm, tôi khuyên bạn nên sử dụng điều khiển WebBrowser để hiển thị hình ảnh.

Nó hỗ trợ thu phóng đa chạm và cuộn mượt mà theo mặc định. Nhưng bạn phải sao chép tệp vào bộ nhớ bị cô lập khỏi thư mục dự án. Đây là cách tôi đã thực hiện:

<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)); }); 

※ Bạn phải thiết lập các Build Action của tập tin hình ảnh để Content

+0

Tôi không có bằng chứng, nhưng tôi tin rằng điều khiển WebBrowser sẽ là một tài nguyên kiểm soát chuyên sâu để sử dụng nếu bạn chỉ sử dụng nó để xem một hình ảnh. Điều đó nói rằng, nếu nó được thực hiện công việc ... –

+0

@DanielBallinger // Tôi đã thực hiện ứng dụng và xuất bản (theo cách này). Tất nhiên, tôi biết có ưu và khuyết điểm. Nó rất dễ dàng để thực hiện xem hình ảnh có thể zoom trong khi nó có thể được tài nguyên chuyên sâu. Quyết định là của bạn. –

+0

Đây là một cách tiếp cận hợp lệ đối với một số trường hợp sử dụng và không xứng đáng được loại bỏ khỏi tầm tay. – kevinstueber

Các vấn đề liên quan