2012-01-02 5 views
4

Я хочу получить некоторые части изображения, чтобы обрезать изображения. Однако, когда я хочу получить часть, которая не параллельна изображению, я поворачиваю изображение и потом обрезаю его.Как обрезать крест прямоугольник из изображения с помощью C#?

Я не хочу поворачивать изображение и обрезать параллельный прямоугольник. Я хочу, не поворачивая изображение, обрезать прямоугольник под углом от изображения.

Есть ли способ сделать это?

Я думаю, что я не смог выразить себя достаточно хорошо. Это то, что я хочу сделать: example picture.

Предположим, что красная вещь - это прямоугольник :) Я хочу обрезать эту вещь из изображения. После обрезки его не нужно ангелом. Так что mj может лечь.

+0

является то, что в веб-приложении? –

+0

Требуется ли полное вращение на 360 градусов? или 90? – AlanFoster

+0

он не находится в веб-приложении. действительно, степень изменения может составлять 32,90. – user1125953

ответ

5

Этот метод должен выполнять то, что вы просили.

public static Bitmap CropRotatedRect(Bitmap source, Rectangle rect, float angle, bool HighQuality) 
{ 
    Bitmap result = new Bitmap(rect.Width, rect.Height); 
    using (Graphics g = Graphics.FromImage(result)) 
    { 
     g.InterpolationMode = HighQuality ? InterpolationMode.HighQualityBicubic : InterpolationMode.Default; 
     using (Matrix mat = new Matrix()) 
     { 
      mat.Translate(-rect.Location.X, -rect.Location.Y); 
      mat.RotateAt(angle, rect.Location); 
      g.Transform = mat; 
      g.DrawImage(source, new Point(0, 0)); 
     } 
    } 
    return result; 
} 

использования (используя пример MJ):

Bitmap src = new Bitmap("C:\\mjexample.jpg"); 
Rectangle rect = new Rectangle(272, 5, 100, 350); 
Bitmap cropped = cropRotatedRect(src, rect, -42.5f, true); 
+0

Большое вам спасибо. Это работает отлично. Просто интересно, что это влияет на качество изображения вообще? – user1125953

+0

Он влияет на качество изображения так же, как любое вращение (кроме 90 градусов) неизбежно влияет на качество. Если ответ - это то, что вам нужно, примите его в качестве ответа. – Rotem

+0

Извините, но теперь я должен задать еще одну вещь :(Что я могу сделать, если rectengle превышает размер изображения? Фактически в этом случае я хочу взять большую часть из задней части начальной точки, если я снова ее визуально повторю :) это должно быть как: http://imageshack.us/photo/my-images/215/smoothcriminalleanexcee.jpg/ На самом деле это все еще прямоугольник, как вы видите. Ничего не изменилось по размеру прямоугольника или отправной точке. – user1125953

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