2014-04-09 2 views
0

이미지의 일부분을 표시하는 간단한 격자가 있습니다.WPF 이미지 자르기 및 바인딩

<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> 

나는 RectangleGeometry에 직접 바인딩을 시도했다. 클립이 작동하지 않는 것 같습니다. 어떤 제안? 누구든지 클립을 이미지에 바인딩 한 경험이 있습니까?

여러 컨트롤에서 특정 이미지를 프로그래밍 방식으로 구분할 수 있어야합니다. 각 컨트롤에 대해 계산 된 부분으로 클립을 사용합니다. 당신이 당신의 이미지의 일부만을 표시하려면

답변

4

당신은 당신이 CroppedBitmap.SourceRect을 결합 할 수 Image.Source

<Image> 
    <Image.Source> 
     <CroppedBitmap Source="/NameSpace;component/Resources/image.jpg" SourceRect="{Binding RectGeo}"/> 
    </Image.Source> 
</Image> 

으로 CroppedBitmap을 사용할 수 있지만 당신은 RectGeoInt32Rect 유형

편집의이 있는지 확인해야합니다

런타임에 SourceRect을 변경하려는 경우 불행히도이 작업은 수행되지 않습니다. 오크가로 :

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(); 
    } 
} 

을하고 바인딩을 함께 사용 :

초기화 한 후, 속성 변경이

을 무시하는 것은 그래서 당신은 무엇을 할 수 CropperBitmap를 생성 할 사용자 정의 IValueConverter을 만들 수 있습니다 :

<Image ... Source="{Binding Path=RectGeo, Converter={StaticResource CropBitmapConverter}, ConverterParameter='pack://application:,,,/NameSpace;component/Resources/image.jpg'}" /> 
+0

감사합니다. CroppedBitmap 그러나, 내가 수동으로 RectangleGeometry를 InitializeComponent()로 설정 한 경우에만 작동합니다. – JordanTDN

+0

나중에 RectangleGeometry를 변경하면 작동하지 않습니다. – JordanTDN

+0

사각형 치수가 변경되면'RectGeo'에 대해'INotifyPropertyChanged.PropertyChanged' 이벤트를 발생 시키십니까? – dkozl