2016-12-17 15 views
-2

選択したエリアが完全な矩形でないときに、画像から特定のエリアをトリミングするにはどうすればよいですか?このimageでは、赤以外の領域を別の部分に切り抜けるにはどうすればよいですか?トリミングエリアが矩形でないときに画像をトリミングする

+0

イメージは長方形のみにすることができます。画像を見ると、私はあなたが何を望んでいるのかわからない。たぶん[これのようなもの?](http://stackoverflow.com/questions/30954503/how-to-crop-a-polygonal-area-from-an-image -in-a-winform-picturebox/30954946?s = 4 | 1.5201#30954946) – TaW

+0

「作物」の意味にかかっていると思います。それがARGB画像(アルファ/透明度付き)で、特定の色のピクセルを透明にしたい場合は、Bitmap.GetPixel()を実行して非表示にする色を確認し、私が想定しているピクセルのアルファ。 –

+0

画像処理の基礎や少なくともチュートリアルの本を読んでください... 助けが必要な用語:aoi、roi、mask – Piglet

答えて

0

画像の非矩形領域および/または色に基づく領域を分離するには、32ビット画像のアルファ/透明度プロパティを使用することが効果的です。たとえば、左側の画像は元の24ビット画像(アルファなし)で、右側はその画像を32ビットに変換した結果で、白または赤のすべてのピクセルでα= 0に設定した結果です元の画像。効果的に、これはあなたのイメージを非長方形にすることができます。

enter image description here

このためのコードはかなり単純です。以下のメソッドは、入力ビットマップ(24ビット)を取り、空白の32ビットイメージを生成し、すべてのピクセルをソースからデスティネーションに転送し、すべての白または赤のピクセルに対してアルファを0に設定します。

public Bitmap ModifyAlpha(Bitmap bmap) 
    { 
     Bitmap bmap32 = new Bitmap(bmap.Width, bmap.Height, PixelFormat.Format32bppArgb); 

     Color theColor = new Color(); 
     Color newColor = new Color(); 

     for (int i = 0; i < bmap.Width; i++) 
     { 
      for (int j = 0; j < bmap.Height; j++) 
      { 
       // Get the color of the pixel at (i,j) 
       theColor = bmap.GetPixel(i, j); 

       // Set the pixel color/range you want to make transparent 
       if ((theColor.R > 250 && theColor.G > 250 && theColor.B > 250) || 
        (theColor.R > 250)) 
       { 
        newColor = Color.FromArgb(0, theColor.R, theColor.G, theColor.B); 
        bmap32.SetPixel(i, j, newColor); 
       } else 
       { 
        bmap32.SetPixel(i, j, theColor); 
       } 
      } 
     } 
     return bmap32; 
    } 
関連する問題