Class: Chroma::Converters::HslConverter

Inherits:
Base
  • Object
show all
Defined in:
lib/chroma/converters/hsl_converter.rb

Overview

Class to convert a color mode to Chroma::ColorModes::Hsl.

Instance Method Summary collapse

Methods inherited from Base

convert_hsl, convert_hsv, convert_rgb, #initialize

Methods included from Helpers::Bounders

#bound01, #bound_alpha, #clamp01, #to_percentage

Constructor Details

This class inherits a constructor from Chroma::Converters::Base

Instance Method Details

#convert_hslColorModes::Hsl

Returns @input because it's the same color mode.

Returns:


43
44
45
# File 'lib/chroma/converters/hsl_converter.rb', line 43

def convert_hsl
  @input
end

#convert_hsvColorModes::Hsl

Convert hsv to hsl.

Returns:


49
50
51
# File 'lib/chroma/converters/hsl_converter.rb', line 49

def convert_hsv
  HsvConverter.convert_rgb(RgbConverter.convert_hsl(@input))
end

#convert_rgbColorModes::Hsl

Convert rgb to hsl.

Returns:


7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/chroma/converters/hsl_converter.rb', line 7

def convert_rgb
  r = bound01(@input.r, 255)
  g = bound01(@input.g, 255)
  b = bound01(@input.b, 255)

  rgb_array = [r, g, b]

  max = rgb_array.max
  min = rgb_array.min
  l = (max + min) * 0.5

  if max == min
    h = s = 0
  else
    d = (max - min).to_f

    s = if l > 0.5
          d / (2 - max - min)
        else
          d / (max + min)
        end

    h = case max
        when r then (g - b) / d + (g < b ? 6 : 0)
        when g then (b - r) / d + 2
        when b then (r - g) / d + 4
        end

    h /= 6.0
  end

  ColorModes::Hsl.new(h * 360, s, l, @input.a)
end