def op op, c=nil
      # XXX what to do with alpha?
      max = 2**depth-1
      if c
        c = c.to_depth(depth)
        Color.new(
          @r.send(op, c.r) & max,
          @g.send(op, c.g) & max,
          @b.send(op, c.b) & max,
          :depth => self.depth
        )
      else
        Color.new(
          @r.send(op) & max,
          @g.send(op) & max,
          @b.send(op) & max,
          :depth => self.depth
        )
      end
    end
def op op, c=nil
      # XXX what to do with alpha?
      max = 2**depth-1
      if c
        c = c.to_depth(depth)
        Color.new(
          @r.send(op, c.r) & max,
          @g.send(op, c.g) & max,
          @b.send(op, c.b) & max,
          :depth => self.depth
        )
      else
        Color.new(
          @r.send(op) & max,
          @g.send(op) & max,
          @b.send(op) & max,
          :depth => self.depth
        )
      end
    end
Op! op! op! Op!! Oppan Gangnam Style!!