Как обрезать крест прямоугольник с изображения с помощью C #? - PullRequest
5 голосов
/ 02 января 2012

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

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

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

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

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

1 Ответ

6 голосов
/ 02 января 2012

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

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);
...