首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将hsl转换为hsb

将hsl转换为hsb
EN

Stack Overflow用户
提问于 2012-08-06 04:32:23
回答 2查看 1.1K关注 0票数 0

将HSL转换为HSB的公式是什么?我只能找到我可以轻松地将RGB移植到HSL的代码。根据this stack overflow answer,我可以使用以下公式将hsb转换为hsl:

(b - s) /2

但我想走另一条路,(b+s) *2返回的值与photoshop的转换结果明显不同,例如:

?rgbtohsb(100,100,100) s: 0 h: 0 b: 200,而photoshop返回0,0,39

这是我的代码,基于easyrgb.com网站的rgb to hsl代码(这是用Brightscript编写的,一种基本的类似于Roku Digital Video Player的语言):

代码语言:javascript
复制
function RGBtoHSB(r as integer, g as integer, b as integer) as object
hue=0.0
var_R = ( R / 255 )
?"var_R=";var_r
var_G = ( G / 255 )
?"var_g=";var_g
var_B = ( B / 255 )
?"var_b=";var_b
var_Min = min([ var_R, var_G, var_B ])    'Min. value of RGB
?"var_min=";var_min
var_Max = max([ var_R, var_G, var_B ])    'Max. value of RGB
?"var_max=";var_max
del_Max = var_Max - var_Min             'Delta RGB value
?"del_max=";del_max



LUM = ( var_Max + var_Min ) / 2
?"LUM=";LUM
if ( del_Max = 0 )                     'This is a gray, no chroma...
?"del_max=0"
   HUE = 0                                'HSL results from 0 to 1
   SAT = 0
else                                    'Chromatic data...
?"del_max";del_max
   if ( LUM < 0.5 ) then 
        SAT = del_Max / ( var_Max + var_Min )
        ?"Lum < 0.5 so SAt=";sat
   else           
   ?"LUM > 0.5, LUM=";LUM
        SAT = del_Max / ( 2 - var_Max - var_Min )
        ?"SAT=";SAT

       del_R = ( ( ( var_Max - var_R ) / 6 ) + ( del_Max / 2 ) ) / del_Max
       ?"del_r=";del_r
       del_G = ( ( ( var_Max - var_G ) / 6 ) + ( del_Max / 2 ) ) / del_Max
       ?"del_g=";del_g
       del_B = ( ( ( var_Max - var_B ) / 6 ) + ( del_Max / 2 ) ) / del_Max
       ?"del_b=";del_b


       if var_R = var_Max THEN
           HUE = del_B - del_G
           ?"var_r=var_max, so HUE=";hue
       else if ( var_G = var_Max ) then 
           HUE = ( 1 / 3 ) + del_R - del_B
           ?"var_g=var_max so HUE=";hue
       else if ( var_B = var_Max ) then 
           HUE = ( 2 / 3 ) + del_G - del_R
           ?"var_b=var_max so HUE=";hue
       end if



       if ( HUE < 0 ) then 
           HUE = HUE + 1
           ?"hue < 0 so hue=";hue
       end if
       if ( HUE > 1 ) then 
           HUE = HUE - 1
           ?"hue > 1 so hue=";hue
       end if

    end if
end if


?"sleeping"
sleep(5000)

bri=0.0
bri=(lum+sat) *2
?"hue=";HUE;" SAT=";sat;" LUM=";lum;" bri=";bri 

return {h:int(hue*255),s:int(sat*255),l:int(lum*255),b:int(bri*255)}
end function
EN

回答 2

Stack Overflow用户

发布于 2012-11-13 15:13:23

我已经写了一些直接从HSV来回转换HSL的函数。但是,它假定S、L、B和V值的范围从0到1,而不是从0到100。此外,这些函数在C#中,而不是在BrightScript中。

https://gist.github.com/4085710

代码被发布到公共领域。

票数 0
EN

Stack Overflow用户

发布于 2015-07-10 00:00:04

与相关

色调对于两者都是相同的,所以让我们来看看数学:

代码语言:javascript
复制
var SL = {s:0, l:0},
    SB = {s:0, b:0};

function sb2sl(){
  var l = (2 - SB.s / 100) * SB.b / 2;              // Lightness range 0-100
  SL.s = Math.round( SB.s * SB.b / (l<50 ? l * 2 : 200 - l * 2) ) |0;
  SL.l = Math.round( l );
}
function sl2sb(){
  var t = SL.s * (SL.l<50 ? SL.l : 100-SL.l) / 100; // Temp value
  SB.s = Math.round( 200 * t / (SL.l+t) ) |0;
  SB.b = Math.round( t+SL.l );
}
// Above, the "|0" prevents the NaN while dividing by 0

另请参阅:http://code.stephenmorley.org/javascript/colour-handling-and-processing/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11819844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档