【发布时间】:2015-02-17 02:43:00
【问题描述】:
我正在迁移一个 GIS 程序。原始代码是用 VB6 编写的,使用 gdi32 lib。新代码是用 VB.Net 编写的。我已经重写了除 GIS 特定算法之外的所有代码。我认为理解和迁移这些算法并不是一个好主意,因为它们自 1988 年以来就已经开发和测试。所以我决定使用 PInvoke 来解决问题:
Gdi32.Polygon(hdc, lpPoint, nCount)
在 Gdi32 类中:
<DllImport("gdi32.dll")> _
Friend Shared Function Polygon(ByVal hdc As Integer, ByRef lpPoint As Object, ByVal nCount As Integer) As Integer
End Function
为了获得 hdc,我这样做了:
hdc = MyPictureBox.CreateGraphics().GetHdc
到目前为止一切顺利。但后来我了解到,直接在 PictureBox 控件上绘图并不是一个好主意,因为它不是持久的。现在我想在 Bitmap 中绘制我的多边形,然后将此位图设置为 PictureBox 的 Image 属性:
hdc = Graphics.FromImage(MyBitmap).GetHdc()
[...] 'Draw the polygons
MyPictureBox.Image = MyBitmap
但这似乎不起作用。 PictureBox 上没有显示任何内容。有什么想法吗?
谢谢你:)
【问题讨论】:
-
这个没有意义,改用Graphics.DrawPolygon()方法吧。
-
感谢您的回答汉斯,但这正是我不想做的。我需要使用 gdi32 库方法。将 Polygon(hdc, lpPoint, nCount) 转换为 graphics.DrawPolygon(Pen, Points()) 迫使我理解他们使用的每种算法。
-
我认为这确实有效。我使用了类似的方法将文本绘制到位图中。确保你的坐标系是相同的——你认为像素就是像素。也许先尝试一个大的红色矩形......