1

C# で記述された地理的ソフトウェアでは、一時ディレクトリにファイルPictureBoxとして保存されている GIS マップを表示するために a が使用されます。pngマップ上に描画する必要がある幾何学的形状がいくつかあります。メソッドを使用System.Drawingしてこのアクションを実行しました。

これらの図形のいくつかのプロパティを変更したり削除したりする必要がある場合があります。その下を黒くせずに図形を削除する必要があります。同じ理由でColor.Transparent、を使用しても機能しません。Graphics#Clear(Color.Transparent)

図形を描画する目的でのみ使用される透明な背景を持つ別の画像ボックスを使用してみました。マップコンテナを使用するときはGraphics#Clear(Color.Transparent)そのままです。PictureBox最初は完璧なアイデアのように聞こえましたが、マップ コンテナーが非表示になり、マップ ビューアー パネルが完全に黒くなる方法と理由がわからないため、このアイデアも失敗しました。

MapViewerForm
    |-- Toolbar
    |-- StatusBar
    |-- MapViewer Panel (Provides scrollbars)
            |-- MapContainer Pictutebox
            |-- Shapes drawing canvas PictureBbox (The same size and location as map container, only difference is z-order)

私は2つのesを使用して「レイヤー」のアイデアを作成することを好みますPictureBox.他のアイデアよりも専門的ではないと思います(私は実際にはJava開発者であり、これはC#プロジェクトです!) JLayeredPane.これらの 2 つの画像ボックスの z オーダーを調整し、黒い画面のバグを省略します。ただし、マップ コンテナー自体に図形を描画し、その背後にあるマップの一部を失うことなくそれらをクリアする解決策がある場合は、その回答もいただければ幸いです。

PS: ファイルからマップ画像をロードしてプライベート フィールドに保存し、Bitmap図面Imageをクリアする必要がある場合は、picMapArea.Image = MapViewer.getInstance().getMapImage();(注:MapViewerシングルトン クラスです) のようなコードを使用してそのフィールドから画像をロードすると、ペイントされた形状は消えます。しかし、パフォーマンスが低く、遅れているため、明らかに「良いアイデア」のようなものではありません。

前もって感謝します。

4

2 に答える 2

2

追加のビットマップを使用するだけです:

Bitmap original = LoadBitmap(...);





Bitmap copy = new Bitmap(original);

Graphics graph = Graphics.FromImage(copy);

// draw some extra


PictureBox1.Image = copy;
于 2013-09-16T12:13:09.833 に答える
2

ピクチャボックス Paint イベントのイベント ハンドラーで形状を描画するだけです。

ビューを元に戻すには、pictureboxInvalidate()メソッドを呼び出すだけで、画像が再描画され、Paint イベント ハンドラーには何も描画されません。

于 2013-09-16T12:29:32.627 に答える