📄 如何在vb中画出圆滑的曲线.txt
字号:
一 个 办 法 是 利 用 API函 数 PolyBezier绘 制 Bezier曲 线 , 下 面 就 是 一 个 例 子 :
Private Type POINTL
x As Long
y As Long
End Type
Private Declare Function PolyBezier Lib "gdi32" (ByVal hdc As Long, lppt As POINTL, ByVal cPoints As Long) As Long
Private Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Private apt(0 To 3) As POINTL
Private Declare Function MoveTo Lib "gdi32" Alias "MoveToEx" ( _
ByVal hdc As Long, ByVal x As Long, ByVal y As Long, _
Optional lpPoint As Any = 0) As Long
Sub InitBezier(cxClient As Long, cyClient As Long)
apt(0).x = ScaleX(cxClient / 2, vbTwips, vbPixels)
apt(0).y = ScaleY(cyClient / 10, vbTwips, vbPixels)
apt(1).x = ScaleX(cxClient / 4, vbTwips, vbPixels)
apt(1).y = ScaleY(cyClient / 2, vbTwips, vbPixels)
apt(2).x = ScaleX(3 * cxClient / 4, vbTwips, vbPixels)
apt(2).y = ScaleY(cyClient / 2, vbTwips, vbPixels)
apt(3).x = ScaleX(cxClient / 2, vbTwips, vbPixels)
apt(3).y = ScaleY(9 * cyClient / 10, vbTwips, vbPixels)
ForeColor = vbRed
End Sub
Sub DrawBezier()
DrawStyle = vbSolid
PolyBezier hdc, apt(0), 4
DrawStyle = vbDot
MoveTo hdc, apt(0).x, apt(0).y
LineTo hdc, apt(1).x, apt(1).y
MoveTo hdc, apt(2).x, apt(2).y
LineTo hdc, apt(3).x, apt(3).y
End Sub
Private Sub Form_Click()
InitBezier ScaleWidth, ScaleHeight
DrawBezier
End Sub
不 过 , 从 这 个 例 子 你 可 以 看 出 , Bezier曲 线 并 不 通 过 事 先 指 定 的 所 有 点 。 而 我 们 有 时 希 望 圆 滑 曲 线 通 过 所 有 采 样 点 。 这 时 你 应 该 采 用 插 值 的 办 法 来 绘 制 圆 滑 曲 线 。 一 般 在 工 科 的 数 学 书 或 计 算 机 算 法 书 上 都 可 以 找 到 插 值 的 公 式 , 并 根 据 你 的 实 际 情 况 选 择 适 当 的 插 值 方 法 。
<END>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -