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
シングルトン クラスです) のようなコードを使用してそのフィールドから画像をロードすると、ペイントされた形状は消えます。しかし、パフォーマンスが低く、遅れているため、明らかに「良いアイデア」のようなものではありません。
前もって感謝します。