2017-04-03 15 views
1

c#では、以下のようにビットマップイメージ内のポリゴンを塗りつぶすことができます。C#ポリゴンの内側に埋め込む

 using (Graphics g = Graphics.FromImage(bitmap)) 
     { 
      g.FillPolygon(colorBrush, points.ToArray()); 
     } 

After Using FillPolygon()

FillPolygon方法は、この場合には、白画素と黒画素が同じままで、ポリゴン内の画素を埋めます。

今、私はこの操作のちょうど反対を望みます。つまり、外側のピクセルが塗りつぶされ、内側のピクセルは同じままになります。この場合、黒のピクセルは外のピクセルです。

編集 私はオブジェクトのバイナリイメージを持っているとします。背景色(黒)でピクセルをクリップする必要があり、白いポリゴンの内側のピクセルは変更されません。

+0

2パス操作を実行できます。最初のパスを意味する、このビットマップを作成します。第2パス:生成されたビットマップ内のピクセルが黒であるとき、他のビットマップのピクセルを埋める。 –

+0

白い背景を使用し、ポリゴンを黒く塗りつぶすのに間違っていますか? – Piglet

+0

私はそれを試したことはありませんが、ポリゴンポイントにビットマップの角を含めることができます。それが動作すれば、ポリゴン内のすべてのものが外に出るようになり、同じ結果が得られます。 – Abion47

答えて

1

次のようにあなたがGraphicsPathを使用してこれを行うことができます。

  1. がパスにポリゴンを追加します。
  2. 「反転」したい領域を含む矩形をパスに追加します。
  3. Graphics.FillPath()を使用してパスを埋めます。プログラム例については

、Windowsはアプリフォームのデフォルトを作成し、次のようにOnPaint()を上書き:

protected override void OnPaint(PaintEventArgs e) 
{ 
    base.OnPaint(e); 

    var points = new [] 
    {    
     new PointF(150, 250), 
     new PointF(50, 500), 
     new PointF(250, 400), 
     new PointF(300, 100), 
     new PointF(500, 500), 
     new PointF(500, 50), 
    }; 

    using (var path = new GraphicsPath()) 
    { 
     path.AddPolygon(points); 

     // Uncomment this to invert: 
     // p.AddRectangle(this.ClientRectangle); 

     using (var brush = new SolidBrush(Color.Black)) 
     { 
      e.Graphics.FillPath(brush, path); 
     } 
    } 
} 

あなたがいることを実行します(とウィンドウのサイズを変更)あなたは白の内側に黒の形状が表示されます場合は窓。

指定された行のコメントを外してプログラムを実行すると、黒いウィンドウ内に白い形が表示されます(つまり、逆さまを付けてClientRectangleを追加します)。

+0

で置き換える必要があります。箱からすぐに出ます。ありがとう。 – Ultraviolet

関連する問題