2016-04-01 15 views
-2

1 en boy oranına aşağıdaki yada bir belirttiğindeKırpma 1 Bir bit eşlem: I gibi bir en-boy oranına sahip bit haritası bilgisi

enter image description here

enter image description here

.. her hangi bir görüntü oranına olabilir Bu görüntüleri çevreleyen kısımları kesmek için bir seçeneğe ihtiyacım var, böylece 1: 1 En boy oranlı bir Görüntü üretilir. Bu

enter image description here

Ben bu görüntülerde merkez noktasını alacak düşünüyorum

ve mahsulün dışarı gibi taraf ..

ben web platformu bu yöntemi bulduk .. ama Bitmap yok

public static WebImage BestUsabilityCrop(WebImage image, decimal targetRatio) 
     { 
      decimal currentImageRatio = image.Width/(decimal)image.Height; 
      int difference; 

      //image is wider than targeted 
      if (currentImageRatio > targetRatio) 
      { 
       int targetWidth = Convert.ToInt32(Math.Floor(targetRatio * image.Height)); 
       difference = image.Width - targetWidth; 
       int left = Convert.ToInt32(Math.Floor(difference/(decimal)2)); 
       int right = Convert.ToInt32(Math.Ceiling(difference/(decimal)2)); 
       image.Crop(0, left, 0, right); 
      } 
      //image is higher than targeted 
      else if (currentImageRatio < targetRatio) 
      { 
       int targetHeight = Convert.ToInt32(Math.Floor(image.Width/targetRatio)); 
       difference = image.Height - targetHeight; 
       int top = Convert.ToInt32(Math.Floor(difference/(decimal)2)); 
       int bottom = Convert.ToInt32(Math.Ceiling(difference/(decimal)2)); 
       image.Crop(top, 0, bottom, 0); 
      } 
      return image; 
     } 

bu sorunu çözmek için bir yol tavsiye edin

bir Crop yöntemi. Bu merkezden kırpma yok

public static Image Crop(Image source) 
{ 
    if (source.Width == source.Height) return source; 
    int size = Math.Min(source.Width, source.Height); 
    var sourceRect = new Rectangle((source.Width - size)/2, (source.Height - size)/2, size, size); 
    var cropped = new Bitmap(size, size); 
    using (var g = Graphics.FromImage(cropped)) 
     g.DrawImage(source, 0, 0, sourceRect, GraphicsUnit.Pixel); 
    return cropped; 
} 

:

+1

Kaynak dikdörtgeni alan bir DrawImage aşırı yükü var. Uygun bir hedef bitmapi çizmek için bunu kullanın! – TaW

+0

Görüntü dikdörtgenini kareye dönüştürmeyi mi istiyorsunuz? –

+0

@IvanStoev evet .. tür – techno

cevap

1

Böyle bir şey kullanabilirsiniz. Alttan/sağdan kırpmak istiyorsanız, sadece var sourceRect = new Rectangle(0, 0, size, size); kullanın.

+0

Teşekkürler:) ............. – techno

İlgili konular