English 中文(简体)
理解HSL至RGB色空间换算算法
原标题:understanding HSL to RGB color space conversion algorithm
问题回答

第一部分<代码>if(S=0)是指无饱和状态,是指其灰尘。 你确定卢米斯,将欧洲-欧洲-欧洲-欧洲-欧洲-欧洲-欧洲-欧洲-欧洲-欧洲-欧洲-欧洲-欧洲-欧洲-欧洲-地中海-欧洲-欧洲-欧洲-地中海-欧洲-欧洲-地中海-欧洲-地中海-欧洲-地中海-欧洲-地中海-欧洲-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海-地中海

如果情况并非如此,那么我们需要发挥trick的作用:

我们将使用<代码>var_1和var_2作为临时数值,只有使该代码更加可读。

So, if Luminance is smaller then 0.5 (50%) then var_2 = Luminance x (1.0 + Saturation. If Luminance is equal or larger then 0.5 (50%) then var_2 = Luminance + Saturation – Luminance x Saturation. That s the else part of:

if ( L < 0.5 ) var_2 = L * ( 1 + S )
else           var_2 = ( L + S ) - ( S * L )

然后我们做:

var1 = 2 x Luminance – var_2

稍后将是有益的。

现在,我们需要每个彩色频道另外三个临时变量,直到瓦伊被征服为止。 就红而言,我们增加了0.333(H + (1/3) in Code),对于绿色我们没有做任何事,就蓝而言,我们从中减去0.333(H + (1/3))。 这一中值称为vH(数值重),载于Hue_2_RGB()

现在,每个彩色频道将单独处理,因此,这三项功能都要求。 有四种公式可适用于一个肤色渠道。 每个彩色频道只能“使用”一种公式。

什么? 它取决于Hue的价值(vH)。

页: 1 H必须实现正常化,这样,如果其负数为1,或者如果它超过1,我们就会从中分出1,这样,H[0,1]就存在。

  1. If 6 x vH is smaller then 1, Color channel = var_1 + (var_2 – var_1) x 6 x vH
  2. If 2 x vH is smaller then 1, Color channel = var_2
  3. If 3 x vH is smaller then 2, Color channel = var_1 + (var_2 – var_1) x (0.666 – vH) x 6
  4. Else, Color channel = var_1

R = 255 * Hue_2_RGB(var_1, var_2, H + ( 1 / 3 ) ,《科罗通》是《守则》中称为的“红色”。

如果任何人希望采用一种非常简化的版本,使用8个轨道分类,而不是浮标,并且使用最高彩色强度(L =0.5,S = 1;含义=0.0,v2 = 1.0),则可能有助于解释情况。

  • For the 1st sixth of hue, brightness of either RGB is increased from zero to max
  • For the next third of hue, brightness of either RGB is max
  • For the next sixth of hue, brightness of either RGB is decreased to zero
  • For the remainder third, brightness of either RGB is zero
  • RGB are offset from each other by a third
void huetoRGB (const uint8_t hue, uint8_t *RGB) {
  RGB[0] = hueconv(hue + 85);   // R
  RGB[1] = hueconv(hue);        // G
  RGB[2] = hueconv(hue - 85);   // B
}

// 0 <= vH <= 255
uint8_t hueconv(int vH) {
  if (vH < 0) vH += 256;
  if (vH > 255) vH -= 256;
  if (vH <= 42) return 6 * vH;
  if (vH <= 127) return 255;
  if (vH <= 170) return (170 - vH) * 6;
  return 0;
}




相关问题
How to add/merge several Big O s into one

If I have an algorithm which is comprised of (let s say) three sub-algorithms, all with different O() characteristics, e.g.: algorithm A: O(n) algorithm B: O(log(n)) algorithm C: O(n log(n)) How do ...

Grokking Timsort

There s a (relatively) new sort on the block called Timsort. It s been used as Python s list.sort, and is now going to be the new Array.sort in Java 7. There s some documentation and a tiny Wikipedia ...

Manually implementing high performance algorithms in .NET

As a learning experience I recently tried implementing Quicksort with 3 way partitioning in C#. Apart from needing to add an extra range check on the left/right variables before the recursive call, ...

Print possible strings created from a Number

Given a 10 digit Telephone Number, we have to print all possible strings created from that. The mapping of the numbers is the one as exactly on a phone s keypad. i.e. for 1,0-> No Letter for 2->...

Enumerating All Minimal Directed Cycles Of A Directed Graph

I have a directed graph and my problem is to enumerate all the minimal (cycles that cannot be constructed as the union of other cycles) directed cycles of this graph. This is different from what the ...

Quick padding of a string in Delphi

I was trying to speed up a certain routine in an application, and my profiler, AQTime, identified one method in particular as a bottleneck. The method has been with us for years, and is part of a "...

热门标签