【问题标题】:VB.Net Draw on Drawing.Bitmap using gdi32 functionsVB.Net 使用 gdi32 函数在 Drawing.Bitmap 上绘制
【发布时间】: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()) 迫使我理解他们使用的每种算法。
  • 我认为这确实有效。我使用了类似的方法将文本绘制到位图中。确保你的坐标系是相同的——你认为像素就是像素。也许先尝试一个大的红色矩形......

标签: vb.net vb6 gdi


【解决方案1】:

在 .net 中,您可以将绘图调用放入绘制事件中,它会显示为持久化。

【讨论】:

  • 他有一个.net PictureBox
【解决方案2】:

感谢大家的回答,最后我与架构师讨论了这个问题,尽管存在潜在风险,我们还是决定翻译算法。所以我不会继续寻找正确的答案。无论如何,谢谢你们:)

【讨论】:

    猜你喜欢
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多