У нас есть изображение, в котором мы создаем координаты окна обзора, которые находятся в верхних/нижних правых точках в изображении, которые настроены для просмотра частей изображения в разное время в нашем приложении. В WPF, как мы загружаем изображение, а также с верхними/нижними правыми точками внутри этого изображения, показываем только часть изображения внутри этого окна просмотра?
В WPF просмотрите часть изображения
Ответ 1
Вы можете сделать это с помощью CroppedBitmap:
<Image>
<Image.Source>
<CroppedBitmap Source="<path to source image>" SourceRect="20,20,50,50"/>
</Image.Source>
</Image>
Это отобразит область 50x50 изображения, начиная с позиции (20,20)
Ответ 2
Использование RenderTransform с клипом работает еще лучше, потому что CroppedBitmap является незаменимым:
<Image x:Name="MyImage">
<Image.RenderTransform>
<TranslateTransform X="-100" Y="-100" />
</Image.RenderTransform>
<Image.Clip>
<RectangleGeometry Rect="0 0 250 250" />
</Image.Clip>
</Image>
Это отобразит изображение со смещением (100, 100) с размером (150, 150), поэтому не забудьте, что прямоугольник должен включать начальные значения.
Здесь можно вычислить его в коде:
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)
};
}
Ответ 3
Мне кажется, что вы можете сделать элемент управления изображением частью окна просмотра, как показано ниже:
<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>
Это даст вам окно 50x50. очевидно, вы можете изменить высоту и ширину в соответствии с вашими потребностями. Я использую scrollviewer для панорамирования меньшего окна просмотра.