求助高人 关于给闭合三角形填充颜色问题
我用如下代码在同一个picture空间给很多(5000以上)个三角形填充颜色,屏幕会卡住。三角形数量少的话就不会出现、怎么解决啊。
Private Declare Function CreatePolygonRgn Lib "gdi32" (lpPoint As POINTAPI, ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long
'创建区域
Private Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long
'创建纯色的刷子
Private Declare Function FillRgn Lib "gdi32" (ByVal hdc As Long, ByVal hRgn As Long, ByVal hBrush As Long) As Long
'用指定刷子填充区域的函数
Private Type POINTAPI
x As Long
y As Long
End Type
'点结构
Private Const WINDING = 2
'根据绘图方向填充图形
Private Sub Picture1_Paint()
Dim POI(2) As POINTAPI
POI(0).x = 0 '第一个点的横坐标(使用容器的坐标系)
POI(0).y = 0 '第一个点的纵坐标(使用容器的坐标系)
POI(1).x = 0 '第二个点的横坐标
POI(1).y = 200 '第二个点的纵坐标
POI(2).x = 200
POI(2).y = 200
Shapes = CreatePolygonRgn(POI(0), 3, WINDING)
'创建三角形区域,POI(0)是第一个点,3是点数
Brush = CreateSolidBrush(QBColor(3))
'创建一个黑色的刷子(RGB(0,0,0)代表黑色)
FillRgn Picture1.hdc, Shapes, Brush
'填充三角形,Me.hdc是窗体的图形设备句柄,shapes是区域句柄,Brush是刷子句柄
End Sub
[解决办法]
可否考虑在内存中绘图,填充,然后再通过bitblt复制到picturebox上来?速度肯定可以提高,但具体提高多少我就没有试验过了。
[解决办法]
楼主可以使用OpenGl,几千三角形对于显卡来说小菜一碟。随便问一句,这有有限元网格划分么?
[解决办法]
这个使用OpenGL的确是不错的方法