2013-10-08 4 views
18

Я создал логику, которая обрезает изображение, которое содержится внутри границы, находящейся внутри сетки. Сетка имеет много границ, поэтому в этой сетке будет много изображений. Проблема в том, что, когда я увеличиваю изображение, логика увеличивала изображение (это нормально), но когда я использую логику обрезки, AdornerLayer выходит за границу, как изображение: Image zoomed with crop selectorAdornerLayer выходит за пределы границы, если я увеличиваю изображение WPF

На этом изображении рис отсутствует масштабирование, так что AdornerLayer правильно: enter image description here

код, который я использую, чтобы добавить урожай к изображению:

private void AddCropToElement(FrameworkElement fel, System.Drawing.Image img) 
{ 
    if (!cropElements.ContainsKey(Convert.ToString(((Image)fel).Source))) 
    { 
     if (_felCur != null) 
     { 
      RemoveCropFromCur(); 
     } 

     rcInterior = new Rect(
      fel.ActualWidth * 0.2, 
      fel.ActualHeight * 0.2, 
      fel.ActualWidth * 0.6, 
      fel.ActualHeight * 0.6); 
     rectMoving = false; 
     Rect newRect = scaleRect(rcInterior, img); 
     imgCropMove = img; 

     AdornerLayer aly = AdornerLayer.GetAdornerLayer(fel); 
     _clp = new CroppingAdorner(fel, rcInterior); 
     aly.Add(_clp); 
     cropElements.Add(Convert.ToString(((Image)fel).Source), fel); 

     imageCropped = _clp.Crop(new System.Drawing.Bitmap(img), newRect); 


     _clp.CropChanged += HandleCropChanged; 
     _felCur = fel; 
    } 
} 

в этом случае объект с именем желчь является картина, которую я хочу, чтобы обрезать и Граница - его родитель.

Как я могу решить проблему AdornerLayout, которая выходит наружу, если изображение увеличено?

+0

Не могли бы вы поделиться с кем-нибудь своим читателем кодом OnRender, пожалуйста? (или если вы используете рекламодатели xaml, сообщайте об этом) –

ответ

1

Вы используете Window Adorner по умолчанию или создали пользовательский AdornerDecorator вокруг своей границы в XAML?

<AdornerDecorator> 
    <Border>...</Border> 
</AdornerDecorator> 

Кроме того, если вы подаете коэффициент масштабирования на вашей границе, вы можете добавить Binding на вашем кадрирования отображения прямоугольника, чтобы соответствовать масштабу вашего объекта Border.

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