WPF图像裁剪和绑定

Jor*_*TDN 0 c# wpf binding

我有一个显示一部分图像的简单网格。

 <Grid x:Name="back_side" Margin="-1" RenderTransformOrigin="0.5,0.5" RenderTransform="{Binding ScaleTransformBack}" Width="Auto">
        <Image Source="/NameSpace;component/Resources/image.jpg" Stretch="Fill">
            <Image.Clip>
                <RectangleGeometry Rect="{Binding RectGeo}"/>
            </Image.Clip>
        </Image>
    </Grid>
Run Code Online (Sandbox Code Playgroud)

我也尝试在后面的代码中直接绑定到RectangleGeometry。该剪辑似乎不想工作。有什么建议么?任何人都具有将剪辑绑定到图像的经验吗?

我需要能够以编程方式在多个控件上分割特定图像。使用剪辑作为要显示的每个控件的计算部分。

dko*_*ozl 5

如果您只想显示图像的一部分,则可以CroppedBitmap用作Image.Source

<Image>
    <Image.Source>
        <CroppedBitmap Source="/NameSpace;component/Resources/image.jpg" SourceRect="{Binding RectGeo}"/>
    </Image.Source>
</Image>
Run Code Online (Sandbox Code Playgroud)

您可以绑定,CroppedBitmap.SourceRect但是需要确保它RectGeoInt32Rect类型

编辑

不幸的是,如果您打算SourceRect在运行时进行更改,那么它将无法正常工作:

初始化之后,属性更改将被忽略

因此,您可以做的是创建自定义IValueConverter,这将创建一个CroppedBitmap

public class CropBitmapConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return new CroppedBitmap(new BitmapImage(new Uri((string)parameter, UriKind.RelativeOrAbsolute)), (Int32Rect)value);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
Run Code Online (Sandbox Code Playgroud)

并与您的绑定一起使用:

<Image ... Source="{Binding Path=RectGeo, Converter={StaticResource CropBitmapConverter}, ConverterParameter='pack://application:,,,/NameSpace;component/Resources/image.jpg'}" />
Run Code Online (Sandbox Code Playgroud)