0

ソリッド ポリゴンをメモリ (2D 配列) に描画し、そのポリゴンを数値 (たとえば「3」) で「塗りつぶす」必要があります。

これをC#でやりたいです。

Catfood の Shapefile リーダーを使用して、Shapefile からソリッド ポリゴンを取得しています (非常に優れています)。

何か案は?


サンディエゴ周辺の道路網を表す 16,000 本のポリラインを既に「マッピング」した後、この 2D 配列のごく一部を添付します (それらは数字の「9」として表示されます)。ソリッドポリゴンのシェープファイルをアップロードし、番号「3」で「描画」することで、同じことをしたいと思います。 メモリ内の「地形図」の小さなセクション

4

4 に答える 4

1

WriteableBitmapEx拡張機能を入手してください。これにより、必要なものをほぼすべて画像メモリに描画できます。

または、DrawingVisualを作成し、それを使用して必要なものを描画してから、イメージターゲットにレンダリングすることもできます。参照:この例

System.Drawingルートを経由する場合。

using System.Drawing;

Bitmap bmp = new Bitmap(200, 100);
Graphics g = Graphics.FromImage(bmp);
g.DrawLine(Pens.Black, 10, 10, 180, 80);

REF:(Henk Holterman)Windowsフォームを使用せずにC#グラフィックを描画する

しかし、私は(言い回しに基づいて)これは宿題だと思います、そしてあなたはそれを手動で行うように言われました。

それで; ブレゼンハムの線アルゴリズムが必要な線の場合は、塗りつぶしアルゴリズムで塗りつぶします。これを見る

于 2013-02-27T21:08:41.587 に答える
1

C# では、Bitmap クラスを使用して、任意の画面外描画を行うことができます。

于 2013-02-27T21:02:40.390 に答える
1

を作成しBitmap、そこから を取得しGraphics、 を呼び出しFillPolygonますGraphics

于 2013-02-27T21:02:55.477 に答える
0

int の 2D 配列で描画しているため (質問を編集した後にわかる限り)、2D 配列に数値を格納する独自のポリゴン塗りつぶしを実装する必要があるようです。この目的のために、この投稿を使用できます固体の 2 次元ポリゴンを描画するための良いアルゴリズム?

もう 1 つの解決策は、ちょっとした回避策です。PolygonFillビットマップでポリゴンを塗りつぶす、既に実装されているものを使用できます。これをチェックしてください。ビットマップ ピクセルの取得は非常に遅く、そのために FastBitmap 実装を使用できることを警告する必要があります。ここでは通常のビットマップを使用します。

Bitmap bmp = new Bitmap(0,0,mostRightPoint.X - mostLeftPoint.X, mostUpperPoint.Y - mostLowerPoint.Y);
//this implies that you are on the northern hemisphere
Graphics g = Graphics.FromImage(bmp);
g.Clear(Color.White); //clear the whole bitmap into white color
int [] points = new points[nmbOfPoints];

for(int i = 0;i<nmbOfPoints;i++)
{
      //put the points in the points array
}
g.FillPolygon(Brushes.Black, points);
g.Dispose();

ここで、ビットマップを反復処理する必要があります。ピクセルが黒の場所で、2D 配列に数字の 3 を入れます。次のように考えてください。

for(int i = 0;i<bmp.Width;i++)
for(int j = 0;j<bmp.Height;j++)
if(Bitmap.GetPixel(i,j) == Color.Black)
{
     2DArray[mostLeftPoint.X + i, mostLowerPoint.Y + j] = 3;
}

問題の意味と可能な解決策を理解したと思います。

于 2013-02-27T21:46:33.990 に答える