我们有一个图像,我们在其中创建视图框坐标,这些坐标是图像中的多个/右下点,这些点设置为允许在我们的应用程序中的不同时间查看图像的某些部分。在WPF中,我们如何加载图像,并在该图像中使用topleft / right right point,仅显示该视图框中的图像部分?
答案 0 :(得分:14)
您可以使用CroppedBitmap执行此操作:
<Image>
<Image.Source>
<CroppedBitmap Source="<path to source image>" SourceRect="20,20,50,50"/>
</Image.Source>
</Image>
这将显示从位置(20,20)开始的图像的50x50区域
答案 1 :(得分:1)
使用带剪辑的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)
};
}
答案 2 :(得分:0)
在我看来,您可以将图像控件作为视图框的一部分,如下所示:
<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的视图框。显然你可以改变高度和宽度以满足你的需要。我使用滚动查看器来平移较小的视图框。