# File lib/png.rb, line 342
    def self.from_hsv h, s, v
      r = g = b = v # gray
      unless s == 0.0 then
        h += 255 if h < 0
        h  = h / 255.0 * 6.0
        s  = s / 255.0
        v  = v / 255.0
        i  = h.floor
        f  = h - i
        p = v * (1 - (s))
        q = v * (1 - (s * (f)))
        w = v * (1 - (s * (1-f)))
        r, g, b = case i
                  when 0,6 then
                    [ v, w, p ]
                  when 1 then
                    [ q, v, p ]
                  when 2 then
                    [ p, v, w ]
                  when 3 then
                    [ p, q, v ]
                  when 4 then
                    [ w, p, v ]
                  when 5 then
                    [ v, p, q ]
                  else
                    raise [h, s, v, i, f, p, q, w].inspect
                  end
      end
      self.new((r * 255).round, (g * 255).round, (b * 255).round)
    end