linearRGB与HSL的转换
有没有人知道从线性RGB颜色(不是sRGB颜色)获得HSL的方法?我已经看过很多sRGB< - > HSL转换,但没有找到linearRGB< - > HSL。不确定它是否具有微小的调整功能,但是我很欣赏有人可能对此有所了解。
线性RGB与线性化sRGB(采用[0,255]并使其为[0,1])不同。从/到sRGB的线性RGB转换位于http://en.wikipedia.org/wiki/SRGB。在VBA中,这将表达(采用线性化的sRGB值[0,1]):
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
我尝试将线性RGB值发送到标准RGB_to_HSL例程并从HSL_to_RGB退出,但它不起作用。也许是因为当前的HSL&lt; - > RGB算法解释了伽马校正而线性RGB没有经过伽马校正 - 我不确切知道。我已经看到几乎没有引用可以做到这一点,除了两个:
参考
http://en.wikipedia.org/wiki/HSL_and_HSV#cite_note-9
(编号项目10)。
关于开源的参考
项目Grafx2 @
http://code.google.com/p/grafx2/issues/detail?id=63#c22
贡献者指出这一点
他做过线性RGB&lt; - > 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)
到HSL
修改/调整饱和度
350%
从HSL->线性发回
RGB-> sRGB,结果就是
FF19FF
(R=255, G=25, B=255
)。
使用.NET中的可用功能,例如来自System.Drawing.Color
的.getHue
,在任何HSL值的100%调制以上的任何sRGB空间中都不起作用,因此需要发送线性RGB而不是sRGB。
没有找到相关结果
已邀请:
4 个回复
绊伦欧
信藉乒
蕉衫
田眯衅