2012-01-02 5 views
4

画像の一部を取得して、画像を切り抜きたいのですが。しかし、イメージと平行でない部分を取得したい場合は、イメージを回転して後でクロップします。c#を使用してイメージから十字形を切り抜くにはどうすればよいですか?

イメージを回転して平行な四角形をクロップしたくないです。私が望むのは、画像を回転させずに、画像からある角度の矩形を切り抜くことです。

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

私は自分自身を十分に表現できないと思う。これは私がやりたいことです:example picture

赤いものが長方形であると仮定します:)イメージからその物を切り抜きたいです。切り取った後、天使にする必要はありません。だから私は寝ることができます。

+0

は、Webアプリケーションのものでしょうか? –

+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

申し訳ありませんが、私はもう1つのことを今すぐ求めなければなりません:(直方体が画像の大きさを超えたらどうしたらいいですか? :)それはのようにする必要があります:http://imageshack.us/photo/my-images/215/smoothcriminalleanexcee.jpg/ 実際にはあなたが見るようにまだ長方形です。長方形のサイズや開始点については何も変更されていません。 – user1125953

関連する問題