Sha256: 82a57f2032ac3d08938dfaca92d028631666ad5330504e0495857f9a66f5159a

Contents?: true

Size: 1.89 KB

Versions: 5

Compression:

Stored size: 1.89 KB

Contents

# Encoding: UTF-8

module Hue
  module Colors
    class ColorTemperature < Color

      MEGA = 1e6
      KELVIN_MIN = 2000
      KELVIN_MAX = 6500
      MIRED_MIN = 153
      MIRED_MAX = 500

      public

      def initialize(temperature)
        if scale = Hue.percent_to_unit_interval(temperature)
          self.mired = unit_to_mired_interval(scale)
        else
          # Assume an integer value
          temperature = temperature.to_i
          if temperature >= KELVIN_MIN
            self.kelvin = temperature
          else
            self.mired = temperature
          end
        end
      end

      def mired
        @mired.floor
      end

      def mired=(t)
        @mired = ranged(MIRED_MIN, t.to_f, MIRED_MAX)
      end

      def kelvin
        ranged(KELVIN_MIN, MEGA / @mired, KELVIN_MAX).round
      end

      def kelvin=(t)
        self.mired = (MEGA / ranged(KELVIN_MIN, t.to_f, KELVIN_MAX))
      end

      def to_hash
        {ct: mired}
      end

      def to_s
        "Temperature=#{self.kelvin.to_i}°K (#{self.mired} mired)"
      end

      def to_rgb
        # using method described at
        # http://www.tannerhelland.com/4435/convert-temperature-rgb-algorithm-code/
        temp = kelvin / 100

        red = temp <= 66 ? 255 : 329.698727446 * ((temp - 60) ** -0.1332047592)

        green = if temp <= 66
                  99.4708025861 * Math.log(temp) - 161.1195681661
                else
                  288.1221695283 * ((temp - 60) ** -0.0755148492)
                end

        blue = if temp >= 66
                 255
               elsif temp <= 19
                 0
               else
                 138.5177312231 * Math.log(temp - 10) - 305.0447927307
               end

        RGB.new(red, green, blue)
      end

      private

      def unit_to_mired_interval(unit_interval)
        unit_interval * (MIRED_MAX - MIRED_MIN) + MIRED_MIN
      end

    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
hue-lib-0.7.4 lib/hue/colors/color_temperature.rb
hue-lib-0.7.3 lib/hue/colors/color_temperature.rb
hue-lib-0.7.2 lib/hue/colors/color_temperature.rb
hue-lib-0.7.1 lib/hue/colors/color_temperature.rb
hue-lib-0.7.0 lib/hue/colors/color_temperature.rb