VisualFreeBasic游戏趣味编程_4.6_HSB颜色模型

2026-1-21 / 0 评论 / 53 阅读

除了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

评论一下?

OωO
取消