在C#编写的地理软件中,aPictureBox
用于显示GIS地图,该地图以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)
我更喜欢使用两个PictureBox
es 并制作“层”的想法,我认为它比另一个想法不专业(我实际上是一个 java 开发人员,这是一个 C# 项目!),我认为JLayeredPane
C# 中应该有类似 java 的东西调整这两个图片框的 z 顺序并省略黑屏错误,但是如果有一种解决方案可以在地图容器本身上绘制形状然后清除它们而不会丢失位于它们后面的地图部分,我也会很感激这个答案。
PS:如果我们从文件中加载地图图片并将其存储在一个Bitmap
或Image
私有字段中,当我们需要清除绘图时,使用一段代码从该字段加载图像picMapArea.Image = MapViewer.getInstance().getMapImage();
(注意:MapViewer
是一个单例类)绘制的形状将消失但这显然不是一个“好主意”,因为性能不佳和滞后。
提前致谢。