# File lib/png.rb, line 377
    def to_hsv # errors = 54230 out of 255^3 are off by about 1 on r, g, or b
      rgb = self.rgb
      r, g, b = rgb
      h, s, v = 0, 0, rgb.max

      return h, s, v if v == 0

      range = v - rgb.min
      s = 255 * range / v

      return h, s, v if s == 0

      h = case v
          when r then
            0x00 + 43 * (g - b) / range # 43 = 1/4 of 360 scaled to 255
          when g then
            0x55 + 43 * (b - r) / range
          else
            0xAA + 43 * (r - g) / range
          end

      return h.round, s.round, v.round
    end