Object
An RGB colour object.
The format of a DeviceRGB colour for PDF. In color-tools 2.0 this will be removed from this package and added back as a modification by the PDF::Writer package.
Creates an RGB colour object from fractional values 0..1.
Color::RGB.from_fraction(.3, .2, .1)
# File lib/color/rgb.rb, line 30 def from_fraction(r = 0.0, g = 0.0, b = 0.0) colour = Color::RGB.new colour.r = r colour.g = g colour.b = b colour end
Creates an RGB colour object from an HTML colour descriptor (e.g., "fed" or "#cabbed;".
Color::RGB.from_html("fed") Color::RGB.from_html("#fed") Color::RGB.from_html("#cabbed") Color::RGB.from_html("cabbed")
# File lib/color/rgb.rb, line 45 def from_html(html_colour) html_colour = html_colour.gsub(%{[#;]}, '') case html_colour.size when 3 colours = html_colour.scan(%{[0-9A-Fa-f]}).map { |el| (el * 2).to_i(16) } when 6 colours = html_colour.scan(%<[0-9A-Fa-f]{2}>).map { |el| el.to_i(16) } else raise ArgumentError end Color::RGB.new(*colours) end
Creates an RGB colour object from percentages 0..100.
Color::RGB.from_percentage(10, 20 30)
# File lib/color/rgb.rb, line 23 def from_percentage(r = 0, g = 0, b = 0) from_fraction(r / 100.0, g / 100.0, b / 100.0) end
Creates an RGB colour object from the standard range 0..255.
Color::RGB.new(32, 64, 128) Color::RGB.new(0x20, 0x40, 0x80)
# File lib/color/rgb.rb, line 79 def initialize(r = 0, g = 0, b = 0) @r = r / 255.0 @g = g / 255.0 @b = b / 255.0 end
Compares the other colour to this one. The other colour will be converted to RGB before comparison, so the comparison between a RGB colour and a non-RGB colour will be approximate and based on the other colour's default to_rgb conversion. If there is no to_rgb conversion, this will raise an exception. This will report that two RGB colours are equivalent if all component values are within 1e-4 (0.0001) of each other.
# File lib/color/rgb.rb, line 67 def ==(other) other = other.to_rgb other.kind_of?(Color::RGB) and ((@r - other.r).abs <= 1e-4) and ((@g - other.g).abs <= 1e-4) and ((@b - other.b).abs <= 1e-4) end
Returns a new colour with the brightness adjusted by the specified percentage. Negative percentages will darken the colour; positive percentages will brighten the colour.
Color::RGB::DarkBlue.adjust_brightness(10) Color::RGB::DarkBlue.adjust_brightness(-10)
# File lib/color/rgb.rb, line 247 def adjust_brightness(percent) percent /= 100.0 percent += 1.0 percent = [ percent, 2.0 ].min percent = [ 0.0, percent ].max hsl = to_hsl hsl.l *= percent hsl.to_rgb end
Returns a new colour with the hue adjusted by the specified percentage. Negative percentages will reduce the hue; positive percentages will increase the hue.
Color::RGB::DarkBlue.adjust_hue(10) Color::RGB::DarkBlue.adjust_hue(-10)
# File lib/color/rgb.rb, line 281 def adjust_hue(percent) percent /= 100.0 percent += 1.0 percent = [ percent, 2.0 ].min percent = [ 0.0, percent ].max hsl = to_hsl hsl.h *= percent hsl.to_rgb end
Returns a new colour with the saturation adjusted by the specified percentage. Negative percentages will reduce the saturation; positive percentages will increase the saturation.
Color::RGB::DarkBlue.adjust_saturation(10) Color::RGB::DarkBlue.adjust_saturation(-10)
# File lib/color/rgb.rb, line 264 def adjust_saturation(percent) percent /= 100.0 percent += 1.0 percent = [ percent, 2.0 ].min percent = [ 0.0, percent ].max hsl = to_hsl hsl.s *= percent hsl.to_rgb end
Returns the brightness value for a colour, a number between 0..1. Based on the Y value of YIQ encoding, representing luminosity, or perceived brightness.
This may be modified in a future version of color-tools to use the luminosity value of HSL.
# File lib/color/rgb.rb, line 232 def brightness to_yiq.y end
Present the colour as an HTML/CSS colour string.
# File lib/color/rgb.rb, line 98 def html r = (@r * 255).round r = 255 if r > 255 g = (@g * 255).round g = 255 if g > 255 b = (@b * 255).round b = 255 if b > 255 "#%02x%02x%02x" % [ r, g, b ] end
Mix the mask colour (which must be an RGB object) with the current colour at the stated opacity percentage (0..100).
# File lib/color/rgb.rb, line 215 def mix_with(mask, opacity) opacity /= 100.0 rgb = self.dup rgb.r = (@r * opacity) + (mask.r * (1 - opacity)) rgb.g = (@g * opacity) + (mask.g * (1 - opacity)) rgb.b = (@b * opacity) + (mask.b * (1 - opacity)) rgb end
Present the colour as a DeviceRGB fill colour string for PDF. This will be removed from the default package in color-tools 2.0.
# File lib/color/rgb.rb, line 87 def pdf_fill PDF_FORMAT_STR % [ @r, @g, @b, "rg" ] end
Present the colour as a DeviceRGB stroke colour string for PDF. This will be removed from the default package in color-tools 2.0.
# File lib/color/rgb.rb, line 93 def pdf_stroke PDF_FORMAT_STR % [ @r, @g, @b, "RG" ] end
Converts the RGB colour to CMYK. Most colour experts strongly suggest that this is not a good idea (some even suggesting that it's a very bad idea). CMYK represents additive percentages of inks on white paper, whereas RGB represents mixed colour intensities on a black screen.
However, the colour conversion can be done. The basic method is multi-step:
Convert the R, G, and B components to C, M, and Y components.
c = 1.0 – r m = 1.0 – g y = 1.0 – b
Compute the minimum amount of black (K) required to smooth the colour in inks.
k = min(c, m, y)
Perform undercolour removal on the C, M, and Y components of the colours because less of each colour is needed for each bit of black. Also, regenerate the black (K) based on the undercolour removal so that the colour is more accurately represented in ink.
c = min(1.0, max(0.0, c – UCR(k))) m = min(1.0, max(0.0, m – UCR(k))) y = min(1.0, max(0.0, y – UCR(k))) k = min(1.0, max(0.0, BG(k)))
The undercolour removal function and the black generation functions return a value based on the brightness of the RGB colour.
# File lib/color/rgb.rb, line 138 def to_cmyk c = 1.0 - @r.to_f m = 1.0 - @g.to_f y = 1.0 - @b.to_f k = [c, m, y].min k = k - (k * brightness) c = [1.0, [0.0, c - k].max].min m = [1.0, [0.0, m - k].max].min y = [1.0, [0.0, y - k].max].min k = [1.0, [0.0, k].max].min Color::CMYK.from_fraction(c, m, y, k) end
# File lib/color/rgb.rb, line 235 def to_grayscale Color::GrayScale.from_fraction(to_hsl.l) end
Returns the HSL colour encoding of the RGB value.
# File lib/color/rgb.rb, line 167 def to_hsl min = [ @r, @g, @b ].min max = [ @r, @g, @b ].max delta = (max - min).to_f lum = (max + min) / 2.0 if delta <= 1e-5 # close to 0.0, so it's a grey hue = 0 sat = 0 else if (lum - 0.5) <= 1e-5 sat = delta / (max + min).to_f else sat = delta / (2 - max - min).to_f end if @r == max hue = (@g - @b) / delta.to_f elsif @g == max hue = (2.0 + @b - @r) / delta.to_f elsif (@b - max) <= 1e-5 hue = (4.0 + @r - @g) / delta.to_f end hue /= 6.0 hue += 1 if hue < 0 hue -= 1 if hue > 1 end Color::HSL.from_fraction(hue, sat, lum) end
# File lib/color/rgb.rb, line 154 def to_rgb(ignored = nil) self end
Generated with the Darkfish Rdoc Generator 2.