我们有一个图像,我们创建视图框坐标,这些坐标是图像中的多个/右下点,它们被设置为允许在我们的应用程序中的不同时间查看图像的某些部分。在WPF中,我们如何加载图像,并且在该图像中使用topleft / right right points,只显示该视图框中的图像部分?
我们有一个图像,我们创建视图框坐标,这些坐标是图像中的多个/右下点,它们被设置为允许在我们的应用程序中的不同时间查看图像的某些部分。在WPF中,我们如何加载图像,并且在该图像中使用topleft / right right points,只显示该视图框中的图像部分?
您可以使用CroppedBitmap执行此操作:
<Image>
<Image.Source>
<CroppedBitmap Source="<path to source image>" SourceRect="20,20,50,50"/>
</Image.Source>
</Image>
这将显示从位置(20,20)开始的图像的50x50区域
使用带有剪辑的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),因此不要忘记rect必须包含startoffsets。
这是在代码中计算它的方法:
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)
};
}
在我看来,您可以将图像控件作为视图框的一部分,如下所示:
<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来平移较小的视图框。