2010-02-04 16 views
11

Mamy obraz, w którym tworzymy współrzędne okna widoku, które są górnymi/dolnymi prawymi punktami w obrazie, które są skonfigurowane, aby umożliwić oglądanie fragmentów obrazu w różnym czasie w naszej aplikacji. W WPF, w jaki sposób możemy załadować obraz, a przy prawym/dolnym prawym punkcie tego obrazu, pokazujemy tylko część obrazu w tym polu widoku?W WPF, zobacz część obrazu

Odpowiedz

14

Można to zrobić z CroppedBitmap:

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

ten wyświetli obszar 50x50 obrazu zaczynającej się w pozycji (20,20)

0

Wydaje mi się, że można zrobić zdjęcie kontroluj część widoku, jak pokazano poniżej:

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

To da ci widok pola 50x50. oczywiście możesz zmienić wysokość i szerokość, aby dostosować je do swoich potrzeb. Używam scrollviewera do przesuwania po mniejszym oknie podglądu.

1

Korzystanie z RenderTransform z klipsem działa nawet lepiej, bo CroppedBitmap kinda niezmienne:

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

Spowoduje to wyświetlenie obrazu o przesunięcie (100, 100) o wymiarach (150, 150), więc nie zapominaj, że rect musi zawierać startoffsets.

Oto metoda obliczania go w kodzie:

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