在WPF中,查看图像的一部分

Far*_*ver 11 wpf image

我们有一个图像,我们创建视图框坐标,这些坐标是图像中的多个/右下点,这些点设置为允许在我们的应用程序中的不同时间查看图像的某些部分.在WPF中,我们如何加载图像,并在该图像中使用topleft/right right point,仅显示该视图框中的图像部分?

Kri*_*den 15

您可以使用CroppedBitmap执行此操作:

<Image>
  <Image.Source>
    <CroppedBitmap Source="<path to source image>" SourceRect="20,20,50,50"/>
  </Image.Source>
</Image>
Run Code Online (Sandbox Code Playgroud)

这将显示从位置(20,20)开始的图像的50x50区域


Jer*_*gen 5

将 RenderTransform 与 Clip 结合使用效果更好,因为 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>
Run Code Online (Sandbox Code Playgroud)

这将在偏移量 (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)
    };
}
Run Code Online (Sandbox Code Playgroud)