任何人都不会知道的一个方式得到快速转换颜色从linearRGB色(不仅限色)?我已经看到了很多好的表现<->赫尔辛基公共转换,但没有为linearRGB<->赫尔辛基公共.不知道,如果它是fundementally相同的转换与一些小的调整,但是我会很感激的任何见解人可能在这。

线性RGB是不一样的线性化的屏(其是考虑[0,255]的,并使其在[0,1]).线性RGB转变,从/向屏是在 http://en.wikipedia.org/wiki/SRGB.在VBA,这将是表示(在线仅限值[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,但是它不工作。也许是因为目前的赫尔辛基公共<->RGB算法的帐户于修正和线性RGB不是纠正伽马-我不知道到底。我已经看到,几乎没有参考文献,这是可以做到的,除了两个:

  1. 参考上 http://en.wikipedia.org/wiki/HSL_and_HSV#cite_note-9 (编号为项目10).
  2. 参考在一个开放源 项目Grafx2@ http://code.google.com/p/grafx2/issues/detail?id=63#c22 在其中的贡献的国家 他已经做了线性RGB <->赫尔辛基公共 转换,并提供了一些C码在一个附件对他的评论中的一个。差异的文件 (我真的不能读取:()

我的意图是:

  1. 发送好的表现(例如, FF99FF (R=255, G=153, B=255))来 线性RGB(R=1.0, G=0.318546778125092, B=1.0)
    • 使用上述代码(例如, G=153将是获得在线 RGB从 sRGB_to_linearRGB(153 / 255))
  2. 到赫尔辛基公共
  3. 修改/调制饱和度 350%
  4. 送回自赫尔辛基公共->线 RGB->好的表现,结果会是 FF19FF (R=255, G=25, B=255).

使用可利用的功能。净,例如 .getHue 从一个 System.Drawing.Color 不工作的任何屏空间100%以上的调任何赫尔辛基公共价值,因此需要进行线性RGB可以发送,而不是表现。

有帮助吗?

解决方案

它不会有多大意义的转换到线性RGB,由于赫尔辛基公共定义方面的伽玛编码的价值观。相反,写你自己的函数转换成屏到赫尔辛基公共、调制饱和这些价值(使潜在的出色域的饱和的价值观),然后转换回到屏,压强度超出仅限范围内(或不允许饱和的变化,可以不被编码在屏).

其他提示

系统。窗户。媒体。颜色 类可以让你获得或设定的scRGB通过ScA,ScR,ScG,渣打银行的性质,或RGB通过,R,G,B性质。

所以你可以转换RGB到赫尔辛基公共、处理,然后转换回RGB和存储在一个颜色的实例。然后你可以读出转换scRGB性质。

不理想和可能涉及的一些信息损失。但它是一种选择!

基于你的评论 在这里,, 你的问题不是这样做的转换不正确;那就是你们进行连续转化价值观。换句话说,你们把结果的屏=>RGB=>赫尔辛基公共=>赫尔辛基公共=>RGB=>屏和使用,在随后的颜色操作。最简单的方法来维持精密的是要始终保持在原始RGB值和积累的变化赫尔辛基公共空间,你想申请。那样,你总是应用在赫尔辛基公共空间活动的原来的颜色和你不必担心反复处理的量化价值观。

有帮助吗?有很多有趣的链接在这个问题,也许工作的东西在你的情况下,太...

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top