0

私はデルフィと一緒に働いています。画像に示すように続く点の配列があります。

代替テキスト

次に、この配列をCreatePolygonRgnに渡して、rgn1という領域を作成します。

rgn1 := CreatePolygonRgn(tmpary1[0],Count,WINDING);

次に、領域を塗りつぶして、画像に示すようにTImageコントロールに表示します。問題は左側からであり、ポイントも領域でカバーされていますが、右側からは配列のポイントはカバーされていません。これは、左側からは緑色の境界線は表示されていませんが、右側からは表示されている画像で確認できます。私はどこかを間違えていますか?私の質問があなたにはっきりしないならば、それから尋ねてください。
ありがとうございました。

編集:

  for cnt := 0 to Count - 1 do begin
     p1 := imgmain.Picture.Bitmap.ScanLine[tmpary[cnt].Y];
     p1[tmpary[cnt].X].rgbtBlue := 0;
     p1[tmpary[cnt].X].rgbtGreen := 255;
     p1[tmpary[cnt].X].rgbtRed := 0;
  end;
  rgn1 := CreatePolygonRgn(tmpary1[0],tmpseq1.Count,WINDING);
  imgmain.Picture.Bitmap.Canvas.Brush.Color := clRed;
  FillRgn(imgmain.Picture.Bitmap.Canvas.Handle,rgn1,imgmain.Picture.Bitmap.Canvas.Brush.Handle);
4

2 に答える 2

2

それはちょうどそれが機能する方法かもしれません。FillRectたとえば、は左と上の境界線を含みますが、長方形の右と下の境界線は除外します。 おそらく同じことが当てはまると思いますFillRgn

編集:ここでも確認しました。

于 2010-06-25T08:59:12.573 に答える
0

両方の質問が互いに関連しているので、ついに私は自分の問題の実行可能な解決策とこの問題の解決策を見つけました。
私はその地域を埋めていて、それからその地域の境界を取得しようとしました。元の配列のいくつかのポイントを境界として取得していましたが、いくつかのポイントは実際の境界ポイントでした。実際の境界のすべてのポイントが欲しかった。


そこで、領域を赤色で塗りつぶし、配列のピクセルを赤色で塗りつぶしてから、フラッドフィルアルゴリズムを実行します。それは私が必要としたすべてのポイントを与えるでしょう。

于 2010-07-07T05:44:51.610 に答える