导航
关闭

泛亚电竞平台 - 首页

当前位置:泛亚电竞平台 > 创业指导 >  - 正文

泛亚电竞平台Algorithm to Switch Between RGB and HSB Color Values

作者:泛亚电竞平台 时间:2021-08-27 浏览:
后台-模块-广告管理-内容页头部广告位(PC)
后台-模块-广告管理-内容页头部广告位(手机)

First, declare some types: Type RGBColor Red As Byte Green As Byte Blue As Byte End Type Type HSBColor Hue As Double Saturation As Double Brightness As Double End Type

Next, here's a brief pseudocode explanation of the procedure used by the RGB-to-HSB algorithm: Set a Delta variable equal to [Max(r,g,b) - Min(r,g,b)] * Then Brightness = Max(r,g,b) * 100 / 255 * If the color is (00,00,00) (black), then Saturation = 0, and h = -1; otherwise: Saturation = 255 * Delta / Max(r,g,b) Case Max(r,g,b) is equal to the value of + Red : Set h = (Green - Blue) / Delta + Green : h = 2 + (Blue - Red) / Delta + Blue : h = 4 + (Red - Green) / Delta * Hue = h * 60 , if h small then 0 , we have Hue = h + 360

Now, here's the VB code for the RGB-to-HSB conversion: Function RGBToHSB(rgb As RGBColor) As HSBColor Dim minRGB, maxRGB, Delta As Double Dim h, s, b As Double h = 0 minRGB = Min(Min(rgb.Red, rgb.Green), rgb.Blue) maxRGB = Max(Max(rgb.Red, rgb.Green), rgb.Blue) Delta = (maxRGB - minRGB) b = maxRGB If (maxRGB <> 0) Then s = 255 * Delta / maxRGB Else s = 0 End If If (s 0) Then If rgb.Red = maxRGB Then h = (CDbl(rgb.Green) - CDbl(rgb.Blue)) / Delta Else If rgb.Green = maxRGB Then h = 2 + (CDbl(rgb.Blue) - CDbl(rgb.Red)) / Delta Else If rgb.Blue = maxRGB Then h = 4 + (CDbl(rgb.Red) - CDbl(rgb.Green)) / Delta End If End If End If Else h = -1 End If h = h * 60 If h < 0 Then h = h + 360 RGBToHSB.Hue = h RGBToHSB.Saturation = s * 100 / 255 RGBToHSB.Brightness = b * 100 / 255 End Function Of course, you also need to go the other direction, changing from HSB to RGB. Note that:

When Max = Red, abs((Green - Blue) / Delta) is always smaller than 1, or -1 < (Green - Blue) / Delta.

When Max = Green, abs((Blue - Red) / Delta) is always smaller than 1, or 1 < 2 + (Blue - Red) / Delta 4 Then HSBToRGB.Green = CByte(Round(maxRGB - Delta)) HSBToRGB.Red = CByte(Round((h - 4) * Delta)) + HSBToRGB.Green Else HSBToRGB.Red = CByte(Round(maxRGB - Delta)) HSBToRGB.Green = CByte(HSBToRGB.Red - Round((h - 4) * Delta)) End If Else If h > 1 Then HSBToRGB.Green = CByte(Round(maxRGB)) If h > 2 Then HSBToRGB.Red = CByte(Round(maxRGB - Delta)) HSBToRGB.Blue = CByte(Round((h - 2) * Delta)) + HSBToRGB.Red Else HSBToRGB.Blue = CByte(Round(maxRGB - Delta)) HSBToRGB.Red = CByte(HSBToRGB.Blue - Round((h - 2) * Delta)) End If Else If h > -1 Then HSBToRGB.Red = CByte(Round(maxRGB)) If h > 0 Then HSBToRGB.Blue = CByte(Round(maxRGB - Delta)) HSBToRGB.Green = CByte(Round(h * Delta)) + HSBToRGB.Blue Else HSBToRGB.Green = CByte(Round(maxRGB - Delta)) HSBToRGB.Blue = CByte(HSBToRGB.Green - Round(h * Delta)) End If End If End If End If End If End Function

泛亚电竞平台
后台-模块-广告管理-内容页底部广告位(PC)
后台-模块-广告管理-内容页底部广告位(手机)
标签:

评论专区

评论列表