2016-02-03 4 views
0

У меня возникает проблема при обрезании изображения на C# (wpf/silverlight). Я делаю это с изображением разрешения 640x960:Как закрепить динамическое изображение?

<Image Source="/someImage.png"> 
<Image.Clip> 
     <EllipseGeometry Center="320,480" RadiusX="120" RadiusY="120" /> 
    </Image.Clip> 
</Image> 

Но выше код даже не обрезает изображение правильно. Есть идеи ?

Моей второй проблемой является: Если параметры изображения проходят через некоторый веб-API (например, высота и ширина изображения). Затем, как связать/вычислить Центр и Радиус.

Спасибо.

ответ

0

1) Вы не видите изображения, потому что вы не указали Width и Height свойства (по умолчанию их значения установлены на 0).
2) Для того, чтобы связать Center, RadiusX, RadiusY свойства вы должны создать вид модели (вы должны быть знакомы с MVVM шаблон), а затем установить его на изображение DataContext свойство:

public class ImageViewModel : INotifyPropertyChanged 
{ 
    private Point _center; 
    private int _radiusX; 
    private int _radiusY; 


    public Point Center 
    { 
     get 
     { 
      return _center; 
     } 
     set 
     { 
      if (_center != value) 
      { 
       _center = value; 
       OnPropertyChanged(); 
      } 
     } 
    } 

    public int RadiusX 
    { 
     get 
     { 
      return _radiusX; 
     } 
     set 
     { 
      if (_radiusX != value) 
      { 
       _radiusX = value; 
       OnPropertyChanged(); 
      } 
     } 
    } 

    public int RadiusY 
    { 
     get 
     { 
      return _radiusY; 
     } 
     set 
     { 
      if (_radiusY != value) 
      { 
       _radiusY = value; 
       OnPropertyChanged(); 
      } 
     } 
    } 


    public event PropertyChangedEventHandler PropertyChanged; 


    public void OnUpdate(Point center, int radiusX, int radiusY) 
    { 
     Center = center; 
     RadiusX = radiusX; 
     RadiusY = radiusY; 
    } 


    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) 
    { 
     PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 

при получении новых значений, вызов OnUpdate в вашей модели просмотра, он установит новые значения, повысит событие PropertyChanged и ваше представление будет обновляться.
3) код позади:

myImage.DataContext = new ImageViewModel { Center = new Point(320,480), RadiusX = 120, RadiusY = 120 } 

4) XAML:

<Image x:Name="myImage" Source="/someImage.png"> 
    <Image.Clip> 
     <EllipseGeometry Center="{Binding Point}" RadiusX="{Binding RadiusX}" RadiusY="{Binding RadiusY}" /> 
    </Image.Clip> 
</Image> 
+0

еще один запрос, Если мое изображение 640 шириной и 920 высотой. Затем, как определить центр и радиус X/Y по эллиптической геометрии? – prdp89

+0

@ prdp89, когда вы получаете новую высоту и просто вызываете OnUpdate со следующими значениями: OnUpdate (новая точка (ширина/2, высота/2), высота/8, высота/8). – Verbon

Смежные вопросы