2010-02-04 39 views
11

Chúng tôi có một hình ảnh nơi chúng tôi tạo tọa độ hộp xem là các điểm trên/dưới bên phải trong hình ảnh được thiết lập để cho phép xem các phần của hình ảnh vào các thời điểm khác nhau trong ứng dụng của chúng tôi. Trong WPF, làm thế nào để chúng tôi tải một hình ảnh, và với các điểm toppft/bottom bên phải trong hình ảnh đó, chỉ hiển thị phần của hình ảnh trong hộp xem đó?Trong WPF, xem một phần của hình ảnh

Trả lời

14

Bạn có thể làm điều này với một CroppedBitmap:

<Image> 
    <Image.Source> 
    <CroppedBitmap Source="<path to source image>" SourceRect="20,20,50,50"/> 
    </Image.Source> 
</Image> 

này sẽ hiển thị khu vực 50x50 của hình ảnh bắt đầu từ vị trí (20,20)

0

Dường như với tôi rằng bạn có thể làm cho hình ảnh kiểm soát một phần của hộp xem như được hiển thị bên dưới:

<Viewbox Name="vBox" Stretch="None" HorizontalAlignment="Left" 
VerticalAlignment="Top" Height="50" Width="50"> 
<Image Name="ClippedImage" 
Source="{Binding NotifyOnSourceUpdated=True, NotifyOnTargetUpdated=True}" 
Stretch="None" /> 
</Viewbox> 

Điều này sẽ cung cấp cho bạn hộp xem 50x50. rõ ràng bạn có thể thay đổi chiều cao và chiều rộng cho phù hợp với nhu cầu của bạn. Tôi sử dụng một scrollviewer để xoay quanh khung nhìn nhỏ hơn.

1

Sử dụng một RenderTransform với Clip hoạt động tốt hơn, bởi vì CroppedBitmap là kinda bất biến:

<Image x:Name="MyImage"> 
    <Image.RenderTransform> 
     <TranslateTransform X="-100" Y="-100" /> 
    </Image.RenderTransform> 
    <Image.Clip> 
     <RectangleGeometry Rect="0 0 250 250" /> 
    </Image.Clip> 
</Image> 

này sẽ hiển thị hình ảnh ở bù đắp (100, 100) với kích thước (150, 150), vì vậy đừng quên rect phải bao gồm các startoffsets.

Đây là phương pháp để tính toán mã:

public static void ClipImage(System.Windows.Controls.Image image, Rect visibleRect) 
{ 
    image.RenderTransform = new TranslateTransform(-visibleRect.X, -visibleRect.Y); 
    image.Clip = new RectangleGeometry 
    { 
     Rect = new Rect(
      0, 
      0, 
      visibleRect.X + visibleRect.Width, 
      visibleRect.Y + visibleRect.Height) 
    }; 
} 
Các vấn đề liên quan