除了RGB颜色模型外,还有一种根据颜色的直观特性创建的颜色模型——HSB,如图4-12所示。

H是Hue的首字母,表示色调,取值范围为0~360,刻画不同的色彩,比如红色为0,绿色为120,蓝色为240;S是Saturation的首字母,表示饱和度,取值范围为 0% -- 100%,表示混合了白色的比例,值越高颜色越鲜艳;B 表示亮度度,取值范围为0% -- 100%,等于0时为黑色,等于100时最明亮。
输入并运行以下代码:
Sub 游戏执行过程(hWndForm As hWnd)
Dim gg As yGDI = hWndForm
gg.Cls BGR(180, 180, 180) 'GDI的颜色值。
gg.Pen 0, 0 '设置线条为没有
Dim i As Long
For i = 0 To 350 Step 10
画扇形(gg, 120, 120, 110, i+10, i , HSBtoRGB_Gdi(HSB(i, 100, 100, 255)))
Next
End Sub
其中,HSB() 函数获得 HSB的颜色值。HSBtoRGB_Gdi( )函数可以将HSB颜色转换为RGB颜色,变量i的值从0变到360,HSBtoRGB_Gdi(i,100,100)则得到了光谱上各种单色的效果。如图所示。

利用随机数和HSV颜色模型,可以生成一组两种颜色的值:
Randomize
Dim h As Long = int(Rnd * 18)*10
Dim color1 As COLORREF = HSBtoRGB_Gdi(HSB(h, 90, 80, 255))
Dim color2 As COLORREF = HSBtoRGB_Gdi(HSB(h + 180, 90, 80, 255))
其中,颜色1的色调h在0~180,颜色2的色调为h+180,修改代码,可以实现每个圆盘的随机颜色效果:

所有代码
Sub 游戏执行过程(hWndForm As hWnd)
Dim gg As yGDI = hWndForm
gg.Cls BGR(180, 180, 180) 'GDI的颜色值。
gg.Pen 0, 0 '设置线条为没有
Dim i As Long, j As Long, 度 As Long
Dim As Long centerX, centerY
For centerX = 70 To 310 Step 120
For centerY = 70 To 190 Step 120
Randomize
Dim h As Long = int(Rnd * 18)*10
Dim color1 As COLORREF = HSBtoRGB_Gdi(HSB(h, 90, 80, 255))
Dim color2 As COLORREF = HSBtoRGB_Gdi(HSB(h + 180, 90, 80, 255))
For j = 60 To 20 Step -20
For i = 0 To 350 Step 18
画扇形(gg, centerX, centerY, j, i + 3 + 度, i + 0 + 度, BGR(0, 0, 0))
画扇形(gg, centerX, centerY, j, i + 8 + 度, i + 3 + 度, color1)
画扇形(gg, centerX, centerY, j, i + 13 + 度, i + 8 + 度, BGR(255, 255, 255))
画扇形(gg, centerX, centerY, j, i + 18 + 度, i + 13 + 度, color2)
Next
度 += 9
Next
Next
Next
End Sub
假如需要 HSB颜色,VFB已经直接提供

其中,A值是透明度。在画画中不支持HSB,需要转换函数转换为 RGB
评论一下?