5

画像の特定の部分を取得したいので、画像をトリミングしています。ただし、画像と平行でない部分を取りたい場合は、画像を回転させてからトリミングします。

画像を回転させて平行四角形をトリミングしたくありません。私が欲しいのは、画像を回転させずに、画像から角度を付けて長方形をトリミングすることです。

それを行う方法はありますか?

自分をうまく表現できなかったと思います。これが私がやりたいことです: example picture

赤いものが長方形であると仮定します:)私はそれを画像から切り取りたいと思っています。切り抜いた後は、天使にする必要はありません。だから mj は横になることができます。

4

1 に答える 1

6

このメソッドは、要求したことを実行する必要があります。

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);
于 2012-01-02T11:41:11.527 に答える