有谁知道从linearRGB颜色(而不是sRGB颜色)获取HSL的方法吗?我看到很多sRGB < - > HSL转换,但对于linearRGB < - > HSL没有任何影响。不确定它是否具有相同的转换和微小的调整,但我会很感激任何人可能对此有所了解。线性化RGB与线性化sRGB(取[0,255]并使其成[0,1])不同。从/到sRGB的线性RGB转换为http://en.wikipedia.org/wiki/SRGB。在VBA中,这将是表示(以线性sRGB值[0,1]取):LinearRGB转换为/从HSL
Public Function sRGB_to_linearRGB(value As Double)
If value < 0# Then
sRGB_to_linearRGB = 0#
Exit Function
End If
If value <= 0.04045 Then
sRGB_to_linearRGB = value/12.92
Exit Function
End If
If value <= 1# Then
sRGB_to_linearRGB = ((value + 0.055)/1.055)^2.4
Exit Function
End If
sRGB_to_linearRGB = 1#
End Function
Public Function linearRGB_to_sRGB(value As Double)
If value < 0# Then
linearRGB_to_sRGB = 0#
Exit Function
End If
If value <= 0.0031308 Then
linearRGB_to_sRGB = value * 12.92
Exit Function
End If
If value < 1# Then
linearRGB_to_sRGB = 1.055 * (value^(1#/2.4)) - 0.055
Exit Function
End If
linearRGB_to_sRGB = 1#
End Function
我试图从HSL_to_RGB线性RGB值标准RGB_to_HSL程序发送和退了出去,但它不起作用。也许是因为目前的HSL < - > RGB算法解释了伽玛校正,而线性RGB不是伽玛校正 - 我不知道。我所看到的几乎没有提及,这是可以完成的,除了两个:
- 参考上 http://en.wikipedia.org/wiki/HSL_and_HSV#cite_note-9 (编号为第10项)。
- @ http://code.google.com/p/grafx2/issues/detail?id=63#c22 一个开源项目 一个Grafx2引用其中的贡献者指出 他做线性RGB < - > HSL 转换,并在为.diff文件提供的附件中他的评论一些C代码 (我真的不能阅读:()
我的意图是:
- 从sRGB的发送(例如,
FF99FF
(R=255, G=153, B=255
))至 线性RGB(R=1.0, G=0.318546778125092, B=1.0
)- 使用上面的代码(例如, 的G = 153将被线性从
sRGB_to_linearRGB(153/ 255)
获得 RGB)
- 使用上面的代码(例如, 的G = 153将被线性从
- 到HSL
- 修改/调制饱和度 350%
- 从HSL-> Linear RGB-> sRGB发回,结果为
FF19FF
(R=255, G=25, B=255
)。
使用从.NET如.getHue
从System.Drawing.Color
可用的功能,在上述任意HSL值的100%调制,因此需要进行线性RGB任何sRGB空间不工作,以代替sRGB而发送。
400代表赏金!! ??哇靠! – 2012-11-17 20:55:44