Class: Spectrum::RGB
- Inherits:
-
Object
- Object
- Spectrum::RGB
- Defined in:
- lib/spectrum/rgb.rb,
lib/spectrum.rb,
lib/spectrum/rgb-colors.rb
Overview
– Color Colour management with Ruby rubyforge.org/projects/color
Version 1.4.1
Licensed under a MIT-style licence. See Licence.txt in the main distribution for full licensing information.
Copyright © 2005 - 2010 Austin Ziegler and Matt Lyon ++
Defined Under Namespace
Modules: Metallic
Constant Summary collapse
- PDF_FORMAT_STR =
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.
"%.3f %.3f %.3f %s"
- AliceBlue =
Spectrum::RGB.new(0xf0, 0xf8, 0xff)
- AntiqueWhite =
Spectrum::RGB.new(0xfa, 0xeb, 0xd7)
- Aqua =
Spectrum::RGB.new(0x00, 0xff, 0xff)
- Aquamarine =
Spectrum::RGB.new(0x7f, 0xff, 0xd4)
- Azure =
Spectrum::RGB.new(0xf0, 0xff, 0xff)
- Beige =
Spectrum::RGB.new(0xf5, 0xf5, 0xdc)
- Bisque =
Spectrum::RGB.new(0xff, 0xe4, 0xc4)
- Black =
Spectrum::RGB.new(0, 0, 0)
- BlanchedAlmond =
Spectrum::RGB.new(0xff, 0xeb, 0xcd)
- Blue =
Spectrum::RGB.new(0x00, 0x00, 0xff)
- BlueViolet =
Spectrum::RGB.new(0x8a, 0x2b, 0xe2)
- Brown =
Spectrum::RGB.new(0xa5, 0x2a, 0x2a)
- BurlyWood =
Spectrum::RGB.new(0xde, 0xb8, 0x87)
- Burlywood =
BurlyWood
- CadetBlue =
Spectrum::RGB.new(0x5f, 0x9e, 0xa0)
- Carnation =
Spectrum::RGB.new(0xff, 0x5e, 0xd0)
- Cayenne =
Spectrum::RGB.new(0x8d, 0x00, 0x00)
- Chartreuse =
Spectrum::RGB.new(0x7f, 0xff, 0x00)
- Chocolate =
Spectrum::RGB.new(0xd2, 0x69, 0x1e)
- Coral =
Spectrum::RGB.new(0xff, 0x7f, 0x50)
- CornflowerBlue =
Spectrum::RGB.new(0x64, 0x95, 0xed)
- Cornsilk =
Spectrum::RGB.new(0xff, 0xf8, 0xdc)
- Crimson =
Spectrum::RGB.new(0xdc, 0x14, 0x3c)
- Cyan =
Spectrum::RGB.new(0x00, 0xff, 0xff)
- DarkBlue =
Spectrum::RGB.new(0x00, 0x00, 0x8b)
- DarkCyan =
Spectrum::RGB.new(0x00, 0x8b, 0x8b)
- DarkGoldenRod =
Spectrum::RGB.new(0xb8, 0x86, 0x0b)
- DarkGoldenrod =
DarkGoldenRod
- DarkGray =
Spectrum::RGB.new(0xa9, 0xa9, 0xa9)
- DarkGreen =
Spectrum::RGB.new(0x00, 0x64, 0x00)
- DarkGrey =
DarkGray
- DarkKhaki =
Spectrum::RGB.new(0xbd, 0xb7, 0x6b)
- DarkMagenta =
Spectrum::RGB.new(0x8b, 0x00, 0x8b)
- DarkOliveGreen =
Spectrum::RGB.new(0x55, 0x6b, 0x2f)
- DarkOrange =
Spectrum::RGB.new(0xff, 0x8c, 0x00)
- DarkOrchid =
Spectrum::RGB.new(0x99, 0x32, 0xcc)
- DarkRed =
Spectrum::RGB.new(0x8b, 0x00, 0x00)
- DarkSalmon =
Spectrum::RGB.new(0xe9, 0x96, 0x7a)
- DarkSeaGreen =
Spectrum::RGB.new(0x8f, 0xbc, 0x8f)
- DarkSlateBlue =
Spectrum::RGB.new(0x48, 0x3d, 0x8b)
- DarkSlateGray =
Spectrum::RGB.new(0x2f, 0x4f, 0x4f)
- DarkSlateGrey =
DarkSlateGray
- DarkTurquoise =
Spectrum::RGB.new(0x00, 0xce, 0xd1)
- DarkViolet =
Spectrum::RGB.new(0x94, 0x00, 0xd3)
- DarkoliveGreen =
DarkOliveGreen
- Darkorange =
Spectrum::RGB.new(0xff, 0x8c, 0x00)
- Darksalmon =
DarkSalmon
- DeepPink =
Spectrum::RGB.new(0xff, 0x14, 0x93)
- DeepSkyBlue =
Spectrum::RGB.new(0x00, 0xbf, 0xbf)
- DimGray =
Spectrum::RGB.new(0x69, 0x69, 0x69)
- DimGrey =
DimGray
- DodgerBlue =
Spectrum::RGB.new(0x1e, 0x90, 0xff)
- Feldspar =
Spectrum::RGB.new(0xd1, 0x92, 0x75)
- FireBrick =
Spectrum::RGB.new(0xb2, 0x22, 0x22)
- Firebrick =
FireBrick
- FloralWhite =
Spectrum::RGB.new(0xff, 0xfa, 0xf0)
- ForestGreen =
Spectrum::RGB.new(0x22, 0x8b, 0x22)
- Fuchsia =
Spectrum::RGB.new(0xff, 0x00, 0xff)
- Gainsboro =
Spectrum::RGB.new(0xdc, 0xdc, 0xdc)
- GhostWhite =
Spectrum::RGB.new(0xf8, 0xf8, 0xff)
- Gold =
Spectrum::RGB.new(0xff, 0xd7, 0x00)
- GoldenRod =
Spectrum::RGB.new(0xda, 0xa5, 0x20)
- Goldenrod =
GoldenRod
- Gray =
Spectrum::RGB.new(0x80, 0x80, 0x80)
- Gray10 =
Spectrum::RGB.from_percentage(10, 10, 10)
- Gray20 =
Spectrum::RGB.from_percentage(20, 20, 20)
- Gray30 =
Spectrum::RGB.from_percentage(30, 30, 30)
- Gray40 =
Spectrum::RGB.from_percentage(40, 40, 40)
- Gray50 =
Spectrum::RGB.from_percentage(50, 50, 50)
- Gray60 =
Spectrum::RGB.from_percentage(60, 60, 60)
- Gray70 =
Spectrum::RGB.from_percentage(70, 70, 70)
- Gray80 =
Spectrum::RGB.from_percentage(80, 80, 80)
- Gray90 =
Spectrum::RGB.from_percentage(90, 90, 90)
- Green =
Spectrum::RGB.new(0x00, 0x80, 0x00)
- GreenYellow =
Spectrum::RGB.new(0xad, 0xff, 0x2f)
- Grey =
Gray
- Grey10 =
Gray10
- Grey20 =
Gray20
- Grey30 =
Gray30
- Grey40 =
Gray40
- Grey50 =
Gray50
- Grey60 =
Gray60
- Grey70 =
Gray70
- Grey80 =
Gray80
- Grey90 =
Gray90
- HoneyDew =
Spectrum::RGB.new(0xf0, 0xff, 0xf0)
- Honeydew =
HoneyDew
- HotPink =
Spectrum::RGB.new(0xff, 0x69, 0xb4)
- IndianRed =
Spectrum::RGB.new(0xcd, 0x5c, 0x5c)
- Indigo =
Spectrum::RGB.new(0x4b, 0x00, 0x82)
- Ivory =
Spectrum::RGB.new(0xff, 0xff, 0xf0)
- Khaki =
Spectrum::RGB.new(0xf0, 0xe6, 0x8c)
- Lavender =
Spectrum::RGB.new(0xe6, 0xe6, 0xfa)
- LavenderBlush =
Spectrum::RGB.new(0xff, 0xf0, 0xf5)
- LawnGreen =
Spectrum::RGB.new(0x7c, 0xfc, 0x00)
- LemonChiffon =
Spectrum::RGB.new(0xff, 0xfa, 0xcd)
- LightBlue =
Spectrum::RGB.new(0xad, 0xd8, 0xe6)
- LightCoral =
Spectrum::RGB.new(0xf0, 0x80, 0x80)
- LightCyan =
Spectrum::RGB.new(0xe0, 0xff, 0xff)
- LightGoldenRodYellow =
Spectrum::RGB.new(0xfa, 0xfa, 0xd2)
- LightGoldenrodYellow =
LightGoldenRodYellow
- LightGray =
Spectrum::RGB.new(0xd3, 0xd3, 0xd3)
- LightGreen =
Spectrum::RGB.new(0x90, 0xee, 0x90)
- LightGrey =
LightGray
- LightPink =
Spectrum::RGB.new(0xff, 0xb6, 0xc1)
- LightSalmon =
Spectrum::RGB.new(0xff, 0xa0, 0x7a)
- LightSeaGreen =
Spectrum::RGB.new(0x20, 0xb2, 0xaa)
- LightSkyBlue =
Spectrum::RGB.new(0x87, 0xce, 0xfa)
- LightSlateBlue =
Spectrum::RGB.new(0x84, 0x70, 0xff)
- LightSlateGray =
Spectrum::RGB.new(0x77, 0x88, 0x99)
- LightSlateGrey =
LightSlateGray
- LightSteelBlue =
Spectrum::RGB.new(0xb0, 0xc4, 0xde)
- LightYellow =
Spectrum::RGB.new(0xff, 0xff, 0xe0)
- Lightsalmon =
LightSalmon
- LightsteelBlue =
LightSteelBlue
- Lime =
Spectrum::RGB.new(0x00, 0xff, 0x00)
- LimeGreen =
Spectrum::RGB.new(0x32, 0xcd, 0x32)
- Linen =
Spectrum::RGB.new(0xfa, 0xf0, 0xe6)
- Magenta =
Spectrum::RGB.new(0xff, 0x00, 0xff)
- Maroon =
Spectrum::RGB.new(0x80, 0x00, 0x00)
- MediumAquaMarine =
Spectrum::RGB.new(0x66, 0xcd, 0xaa)
- MediumAquamarine =
MediumAquaMarine
- MediumBlue =
Spectrum::RGB.new(0x00, 0x00, 0xcd)
- MediumOrchid =
Spectrum::RGB.new(0xba, 0x55, 0xd3)
- MediumPurple =
Spectrum::RGB.new(0x93, 0x70, 0xdb)
- MediumSeaGreen =
Spectrum::RGB.new(0x3c, 0xb3, 0x71)
- MediumSlateBlue =
Spectrum::RGB.new(0x7b, 0x68, 0xee)
- MediumSpringGreen =
Spectrum::RGB.new(0x00, 0xfa, 0x9a)
- MediumTurquoise =
Spectrum::RGB.new(0x48, 0xd1, 0xcc)
- MediumVioletRed =
Spectrum::RGB.new(0xc7, 0x15, 0x85)
- MidnightBlue =
Spectrum::RGB.new(0x19, 0x19, 0x70)
- MintCream =
Spectrum::RGB.new(0xf5, 0xff, 0xfa)
- MistyRose =
Spectrum::RGB.new(0xff, 0xe4, 0xe1)
- Moccasin =
Spectrum::RGB.new(0xff, 0xe4, 0xb5)
Spectrum::RGB.new(0xff, 0xde, 0xad)
Spectrum::RGB.new(0x00, 0x00, 0x80)
- OldLace =
Spectrum::RGB.new(0xfd, 0xf5, 0xe6)
- Olive =
Spectrum::RGB.new(0x80, 0x80, 0x00)
- OliveDrab =
Spectrum::RGB.new(0x6b, 0x8e, 0x23)
- Olivedrab =
OliveDrab
- Orange =
Spectrum::RGB.new(0xff, 0xa5, 0x00)
- OrangeRed =
Spectrum::RGB.new(0xff, 0x45, 0x00)
- Orchid =
Spectrum::RGB.new(0xda, 0x70, 0xd6)
- PaleGoldenRod =
Spectrum::RGB.new(0xee, 0xe8, 0xaa)
- PaleGoldenrod =
PaleGoldenRod
- PaleGreen =
Spectrum::RGB.new(0x98, 0xfb, 0x98)
- PaleTurquoise =
Spectrum::RGB.new(0xaf, 0xee, 0xee)
- PaleVioletRed =
Spectrum::RGB.new(0xdb, 0x70, 0x93)
- PapayaWhip =
Spectrum::RGB.new(0xff, 0xef, 0xd5)
- PeachPuff =
Spectrum::RGB.new(0xff, 0xda, 0xb9)
- Peachpuff =
PeachPuff
- Peru =
Spectrum::RGB.new(0xcd, 0x85, 0x3f)
- Pink =
Spectrum::RGB.new(0xff, 0xc0, 0xcb)
- Plum =
Spectrum::RGB.new(0xdd, 0xa0, 0xdd)
- PowderBlue =
Spectrum::RGB.new(0xb0, 0xe0, 0xe6)
- Purple =
Spectrum::RGB.new(0x80, 0x00, 0x80)
- Red =
Spectrum::RGB.new(0xff, 0x00, 0x00)
- RosyBrown =
Spectrum::RGB.new(0xbc, 0x8f, 0x8f)
- RoyalBlue =
Spectrum::RGB.new(0x41, 0x69, 0xe1)
- SaddleBrown =
Spectrum::RGB.new(0x8b, 0x45, 0x13)
- Salmon =
Spectrum::RGB.new(0xfa, 0x80, 0x72)
- SandyBrown =
Spectrum::RGB.new(0xf4, 0xa4, 0x60)
- SeaGreen =
Spectrum::RGB.new(0x2e, 0x8b, 0x57)
- SeaShell =
Spectrum::RGB.new(0xff, 0xf5, 0xee)
- Seashell =
SeaShell
- Sienna =
Spectrum::RGB.new(0xa0, 0x52, 0x2d)
- Silver =
Spectrum::RGB.new(0xc0, 0xc0, 0xc0)
- SkyBlue =
Spectrum::RGB.new(0x87, 0xce, 0xeb)
- SlateBlue =
Spectrum::RGB.new(0x6a, 0x5a, 0xcd)
- SlateGray =
Spectrum::RGB.new(0x70, 0x80, 0x90)
- SlateGrey =
SlateGray
- Snow =
Spectrum::RGB.new(0xff, 0xfa, 0xfa)
- SpringGreen =
Spectrum::RGB.new(0x00, 0xff, 0x7f)
- SteelBlue =
Spectrum::RGB.new(0x46, 0x82, 0xb4)
- Tan =
Spectrum::RGB.new(0xd2, 0xb4, 0x8c)
- Teal =
Spectrum::RGB.new(0x00, 0x80, 0x80)
- Thistle =
Spectrum::RGB.new(0xd8, 0xbf, 0xd8)
- Tomato =
Spectrum::RGB.new(0xff, 0x63, 0x47)
- Turquoise =
Spectrum::RGB.new(0x40, 0xe0, 0xd0)
- Violet =
Spectrum::RGB.new(0xee, 0x82, 0xee)
- VioletRed =
Spectrum::RGB.new(0xd0, 0x20, 0x90)
- Wheat =
Spectrum::RGB.new(0xf5, 0xde, 0xb3)
- White =
Spectrum::RGB.new(0xff, 0xff, 0xff)
- WhiteSmoke =
Spectrum::RGB.new(0xf5, 0xf5, 0xf5)
- Yellow =
Spectrum::RGB.new(0xff, 0xff, 0x00)
- YellowGreen =
Spectrum::RGB.new(0x9a, 0xcd, 0x32)
Class Method Summary collapse
-
.from_fraction(r = 0.0, g = 0.0, b = 0.0) ⇒ Object
Creates an RGB colour object from fractional values 0..1.
-
.from_html(html_colour) ⇒ Object
Creates an RGB colour object from an HTML colour descriptor (e.g.,
"fed"
or"#cabbed;"
. -
.from_percentage(r = 0, g = 0, b = 0) ⇒ Object
Creates an RGB colour object from percentages 0..100.
Instance Method Summary collapse
-
#+(other) ⇒ Object
Adds another colour to the current colour.
-
#-(other) ⇒ Object
Subtracts another colour to the current colour.
-
#==(other) ⇒ Object
Compares the other colour to this one.
-
#adjust_brightness(percent) ⇒ Object
Returns a new colour with the brightness adjusted by the specified percentage.
-
#adjust_hue(percent) ⇒ Object
Returns a new colour with the hue adjusted by the specified percentage.
-
#adjust_saturation(percent) ⇒ Object
Returns a new colour with the saturation adjusted by the specified percentage.
-
#b ⇒ Object
Returns the blue component of the colour as a fraction in the range 0.0 ..
-
#b=(bb) ⇒ Object
Sets the blue component of the colour as a fraction in the range 0.0 ..
-
#blue ⇒ Object
Returns the blue component of the colour in the normal 0 ..
-
#blue=(bb) ⇒ Object
Sets the blue component of the colour in the normal 0 ..
-
#blue_p ⇒ Object
Returns the blue component of the colour as a percentage.
-
#blue_p=(bb) ⇒ Object
Sets the blue component of the colour as a percentage.
-
#brightness ⇒ Object
Returns the brightness value for a colour, a number between 0..1.
-
#css_hsl ⇒ Object
Present the colour as an HSL HTML/CSS colour string (e.g., “hsl(180, 25%, 35%)”).
-
#css_hsla ⇒ Object
Present the colour as an HSLA (with alpha) HTML/CSS colour string (e.g., “hsla(180, 25%, 35%, 1)”).
-
#css_rgb ⇒ Object
Present the colour as an RGB HTML/CSS colour string (e.g., “rgb(0%, 50%, 100%)”).
-
#css_rgba ⇒ Object
Present the colour as an RGBA (with alpha) HTML/CSS colour string (e.g., “rgb(0%, 50%, 100%, 1)”).
-
#darken_by(percent) ⇒ Object
Mix the RGB hue with Black so that the RGB hue is the specified percentage of the resulting colour.
-
#g ⇒ Object
Returns the green component of the colour as a fraction in the range 0.0 ..
-
#g=(gg) ⇒ Object
Sets the green component of the colour as a fraction in the range 0.0 ..
-
#green ⇒ Object
Returns the green component of the colour in the normal 0 ..
-
#green=(gg) ⇒ Object
Sets the green component of the colour in the normal 0 ..
-
#green_p ⇒ Object
Returns the green component of the colour as a percentage.
-
#green_p=(gg) ⇒ Object
Sets the green component of the colour as a percentage.
-
#html ⇒ Object
Present the colour as an HTML/CSS colour string.
-
#initialize(r = 0, g = 0, b = 0) ⇒ RGB
constructor
Creates an RGB colour object from the standard range 0..255.
- #inspect ⇒ Object
-
#lighten_by(percent) ⇒ Object
Mix the RGB hue with White so that the RGB hue is the specified percentage of the resulting colour.
-
#max_rgb_as_grayscale ⇒ Object
(also: #max_rgb_as_greyscale)
Retrieve the maxmum RGB value from the current colour as a GrayScale colour.
-
#mix_with(mask, opacity) ⇒ Object
Mix the mask colour (which must be an RGB object) with the current colour at the stated opacity percentage (0..100).
-
#pdf_fill ⇒ Object
Present the colour as a DeviceRGB fill colour string for PDF.
-
#pdf_stroke ⇒ Object
Present the colour as a DeviceRGB stroke colour string for PDF.
-
#r ⇒ Object
Returns the red component of the colour as a fraction in the range 0.0 ..
-
#r=(rr) ⇒ Object
Sets the red component of the colour as a fraction in the range 0.0 ..
-
#red ⇒ Object
Returns the red component of the colour in the normal 0 ..
-
#red=(rr) ⇒ Object
Sets the red component of the colour in the normal 0 ..
-
#red_p ⇒ Object
Returns the red component of the colour as a percentage.
-
#red_p=(rr) ⇒ Object
Sets the red component of the colour as a percentage.
-
#to_cmyk ⇒ Object
Converts the RGB colour to CMYK.
-
#to_grayscale ⇒ Object
(also: #to_greyscale)
Convert to grayscale.
-
#to_hsl ⇒ Object
Returns the HSL colour encoding of the RGB value.
- #to_rgb(ignored = nil) ⇒ Object
-
#to_yiq ⇒ Object
Returns the YIQ (NTSC) colour encoding of the RGB value.
Constructor Details
#initialize(r = 0, g = 0, b = 0) ⇒ RGB
80 81 82 83 84 |
# File 'lib/spectrum/rgb.rb', line 80 def initialize(r = 0, g = 0, b = 0) @r = r / 255.0 @g = g / 255.0 @b = b / 255.0 end |
Class Method Details
.from_fraction(r = 0.0, g = 0.0, b = 0.0) ⇒ Object
Creates an RGB colour object from fractional values 0..1.
Spectrum::RGB.from_fraction(.3, .2, .1)
31 32 33 34 35 36 37 |
# File 'lib/spectrum/rgb.rb', line 31 def from_fraction(r = 0.0, g = 0.0, b = 0.0) colour = Spectrum::RGB.new colour.r = r colour.g = g colour.b = b colour end |
.from_html(html_colour) ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/spectrum/rgb.rb', line 46 def from_html(html_colour) html_colour = html_colour.gsub(%r{[#;]}, '') case html_colour.size when 3 colours = html_colour.scan(%r{[0-9A-Fa-f]}).map { |el| (el * 2).to_i(16) } when 6 colours = html_colour.scan(%r<[0-9A-Fa-f]{2}>).map { |el| el.to_i(16) } else raise ArgumentError end Spectrum::RGB.new(*colours) end |
.from_percentage(r = 0, g = 0, b = 0) ⇒ Object
Creates an RGB colour object from percentages 0..100.
Spectrum::RGB.from_percentage(10, 20 30)
24 25 26 |
# File 'lib/spectrum/rgb.rb', line 24 def from_percentage(r = 0, g = 0, b = 0) from_fraction(r / 100.0, g / 100.0, b / 100.0) end |
Instance Method Details
#+(other) ⇒ Object
Adds another colour to the current colour. The other colour will be converted to RGB before addition. This conversion depends upon a #to_rgb method on the other colour.
The addition is done using the RGB Accessor methods to ensure a valid colour in the result.
413 414 415 416 417 418 419 420 421 422 |
# File 'lib/spectrum/rgb.rb', line 413 def +(other) other = other.to_rgb rgb = self.dup rgb.r += other.r rgb.g += other.g rgb.b += other.b rgb end |
#-(other) ⇒ Object
Subtracts another colour to the current colour. The other colour will be converted to RGB before subtraction. This conversion depends upon a #to_rgb method on the other colour.
The subtraction is done using the RGB Accessor methods to ensure a valid colour in the result.
430 431 432 433 434 435 436 437 438 439 |
# File 'lib/spectrum/rgb.rb', line 430 def -(other) other = other.to_rgb rgb = self.dup rgb.r -= other.r rgb.g -= other.g rgb.b -= other.b rgb end |
#==(other) ⇒ Object
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 COLOR_TOLERANCE of each other.
68 69 70 71 72 73 74 |
# File 'lib/spectrum/rgb.rb', line 68 def ==(other) other = other.to_rgb other.kind_of?(Spectrum::RGB) and ((@r - other.r).abs <= Spectrum::COLOR_TOLERANCE) and ((@g - other.g).abs <= Spectrum::COLOR_TOLERANCE) and ((@b - other.b).abs <= Spectrum::COLOR_TOLERANCE) end |
#adjust_brightness(percent) ⇒ Object
281 282 283 284 285 286 287 288 289 290 |
# File 'lib/spectrum/rgb.rb', line 281 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 |
#adjust_hue(percent) ⇒ Object
315 316 317 318 319 320 321 322 323 324 |
# File 'lib/spectrum/rgb.rb', line 315 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 |
#adjust_saturation(percent) ⇒ Object
298 299 300 301 302 303 304 305 306 307 |
# File 'lib/spectrum/rgb.rb', line 298 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 |
#b ⇒ Object
Returns the blue component of the colour as a fraction in the range 0.0 .. 1.0.
390 391 392 |
# File 'lib/spectrum/rgb.rb', line 390 def b @b end |
#b=(bb) ⇒ Object
Sets the blue component of the colour as a fraction in the range 0.0 .. 1.0.
403 404 405 |
# File 'lib/spectrum/rgb.rb', line 403 def b=(bb) @b = Spectrum.normalize(bb) end |
#blue ⇒ Object
Returns the blue component of the colour in the normal 0 .. 255 range.
381 382 383 |
# File 'lib/spectrum/rgb.rb', line 381 def blue @b * 255.0 end |
#blue=(bb) ⇒ Object
Sets the blue component of the colour in the normal 0 .. 255 range.
394 395 396 |
# File 'lib/spectrum/rgb.rb', line 394 def blue=(bb) @b = Spectrum.normalize(bb / 255.0) end |
#blue_p ⇒ Object
Returns the blue component of the colour as a percentage.
385 386 387 |
# File 'lib/spectrum/rgb.rb', line 385 def blue_p @b * 100.0 end |
#blue_p=(bb) ⇒ Object
Sets the blue component of the colour as a percentage.
398 399 400 |
# File 'lib/spectrum/rgb.rb', line 398 def blue_p=(bb) @b = Spectrum.normalize(bb / 100.0) end |
#brightness ⇒ Object
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.
266 267 268 |
# File 'lib/spectrum/rgb.rb', line 266 def brightness to_yiq.y end |
#css_hsl ⇒ Object
Present the colour as an HSL HTML/CSS colour string (e.g., “hsl(180, 25%, 35%)”). Note that this will perform a #to_hsl operation using the default conversion formula.
129 130 131 |
# File 'lib/spectrum/rgb.rb', line 129 def css_hsl to_hsl.css_hsl end |
#css_hsla ⇒ Object
Present the colour as an HSLA (with alpha) HTML/CSS colour string (e.g., “hsla(180, 25%, 35%, 1)”). Note that this will perform a #to_hsl operation using the default conversion formula.
136 137 138 |
# File 'lib/spectrum/rgb.rb', line 136 def css_hsla to_hsl.css_hsla end |
#css_rgb ⇒ Object
Present the colour as an RGB HTML/CSS colour string (e.g., “rgb(0%, 50%, 100%)”). Note that this will perform a #to_rgb operation using the default conversion formula.
115 116 117 |
# File 'lib/spectrum/rgb.rb', line 115 def css_rgb "rgb(%3.2f%%, %3.2f%%, %3.2f%%)" % [ red_p, green_p, blue_p ] end |
#css_rgba ⇒ Object
Present the colour as an RGBA (with alpha) HTML/CSS colour string (e.g., “rgb(0%, 50%, 100%, 1)”). Note that this will perform a #to_rgb operation using the default conversion formula.
122 123 124 |
# File 'lib/spectrum/rgb.rb', line 122 def css_rgba "rgba(%3.2f%%, %3.2f%%, %3.2f%%, %3.2f)" % [ red_p, green_p, blue_p, 1 ] end |
#darken_by(percent) ⇒ Object
Mix the RGB hue with Black so that the RGB hue is the specified percentage of the resulting colour. Strictly speaking, this isn’t a darken_by operation.
243 244 245 |
# File 'lib/spectrum/rgb.rb', line 243 def darken_by(percent) mix_with(Black, percent) end |
#g ⇒ Object
Returns the green component of the colour as a fraction in the range 0.0 .. 1.0.
363 364 365 |
# File 'lib/spectrum/rgb.rb', line 363 def g @g end |
#g=(gg) ⇒ Object
Sets the green component of the colour as a fraction in the range 0.0 .. 1.0.
376 377 378 |
# File 'lib/spectrum/rgb.rb', line 376 def g=(gg) @g = Spectrum.normalize(gg) end |
#green ⇒ Object
Returns the green component of the colour in the normal 0 .. 255 range.
354 355 356 |
# File 'lib/spectrum/rgb.rb', line 354 def green @g * 255.0 end |
#green=(gg) ⇒ Object
Sets the green component of the colour in the normal 0 .. 255 range.
367 368 369 |
# File 'lib/spectrum/rgb.rb', line 367 def green=(gg) @g = Spectrum.normalize(gg / 255.0) end |
#green_p ⇒ Object
Returns the green component of the colour as a percentage.
358 359 360 |
# File 'lib/spectrum/rgb.rb', line 358 def green_p @g * 100.0 end |
#green_p=(gg) ⇒ Object
Sets the green component of the colour as a percentage.
371 372 373 |
# File 'lib/spectrum/rgb.rb', line 371 def green_p=(gg) @g = Spectrum.normalize(gg / 100.0) end |
#html ⇒ Object
Present the colour as an HTML/CSS colour string.
99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/spectrum/rgb.rb', line 99 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 |
#inspect ⇒ Object
448 449 450 |
# File 'lib/spectrum/rgb.rb', line 448 def inspect "RGB [#{html}]" end |
#lighten_by(percent) ⇒ Object
Mix the RGB hue with White so that the RGB hue is the specified percentage of the resulting colour. Strictly speaking, this isn’t a darken_by operation.
236 237 238 |
# File 'lib/spectrum/rgb.rb', line 236 def lighten_by(percent) mix_with(White, percent) end |
#max_rgb_as_grayscale ⇒ Object Also known as: max_rgb_as_greyscale
Retrieve the maxmum RGB value from the current colour as a GrayScale colour
443 444 445 |
# File 'lib/spectrum/rgb.rb', line 443 def max_rgb_as_grayscale Spectrum::GrayScale.from_fraction([@r, @g, @b].max) end |
#mix_with(mask, opacity) ⇒ Object
Mix the mask colour (which must be an RGB object) with the current colour at the stated opacity percentage (0..100).
249 250 251 252 253 254 255 256 257 258 |
# File 'lib/spectrum/rgb.rb', line 249 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 |
#pdf_fill ⇒ Object
Present the colour as a DeviceRGB fill colour string for PDF. This will be removed from the default package in color-tools 2.0.
88 89 90 |
# File 'lib/spectrum/rgb.rb', line 88 def pdf_fill PDF_FORMAT_STR % [ @r, @g, @b, "rg" ] end |
#pdf_stroke ⇒ Object
Present the colour as a DeviceRGB stroke colour string for PDF. This will be removed from the default package in color-tools 2.0.
94 95 96 |
# File 'lib/spectrum/rgb.rb', line 94 def pdf_stroke PDF_FORMAT_STR % [ @r, @g, @b, "RG" ] end |
#r ⇒ Object
Returns the red component of the colour as a fraction in the range 0.0 .. 1.0.
336 337 338 |
# File 'lib/spectrum/rgb.rb', line 336 def r @r end |
#r=(rr) ⇒ Object
Sets the red component of the colour as a fraction in the range 0.0 .. 1.0.
349 350 351 |
# File 'lib/spectrum/rgb.rb', line 349 def r=(rr) @r = Spectrum.normalize(rr) end |
#red ⇒ Object
Returns the red component of the colour in the normal 0 .. 255 range.
327 328 329 |
# File 'lib/spectrum/rgb.rb', line 327 def red @r * 255.0 end |
#red=(rr) ⇒ Object
Sets the red component of the colour in the normal 0 .. 255 range.
340 341 342 |
# File 'lib/spectrum/rgb.rb', line 340 def red=(rr) @r = Spectrum.normalize(rr / 255.0) end |
#red_p ⇒ Object
Returns the red component of the colour as a percentage.
331 332 333 |
# File 'lib/spectrum/rgb.rb', line 331 def red_p @r * 100.0 end |
#red_p=(rr) ⇒ Object
Sets the red component of the colour as a percentage.
344 345 346 |
# File 'lib/spectrum/rgb.rb', line 344 def red_p=(rr) @r = Spectrum.normalize(rr / 100.0) end |
#to_cmyk ⇒ Object
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.
166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 |
# File 'lib/spectrum/rgb.rb', line 166 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 Spectrum::CMYK.from_fraction(c, m, y, k) end |
#to_grayscale ⇒ Object Also known as: to_greyscale
Convert to grayscale.
270 271 272 |
# File 'lib/spectrum/rgb.rb', line 270 def to_grayscale Spectrum::GrayScale.from_fraction(to_hsl.l) end |
#to_hsl ⇒ Object
Returns the HSL colour encoding of the RGB value. The conversions here are based on forumlas from www.easyrgb.com/math.php and elsewhere.
197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 |
# File 'lib/spectrum/rgb.rb', line 197 def to_hsl min = [ @r, @g, @b ].min max = [ @r, @g, @b ].max delta = (max - min).to_f lum = (max + min) / 2.0 if Spectrum.near_zero?(delta) # close to 0.0, so it's a grey hue = 0 sat = 0 else if Spectrum.near_zero_or_less?(lum - 0.5) sat = delta / (max + min).to_f else sat = delta / (2 - max - min).to_f end # This is based on the conversion algorithm from # http://en.wikipedia.org/wiki/HSV_color_space#Conversion_from_RGB_to_HSL_or_HSV # Contributed by Adam Johnson sixth = 1 / 6.0 if @r == max # Spectrum.near_zero_or_less?(@r - max) hue = (sixth * ((@g - @b) / delta)) hue += 1.0 if @g < @b elsif @g == max # Spectrum.near_zero_or_less(@g - max) hue = (sixth * ((@b - @r) / delta)) + (1.0 / 3.0) elsif @b == max # Spectrum.near_zero_or_less?(@b - max) hue = (sixth * ((@r - @g) / delta)) + (2.0 / 3.0) end hue += 1 if hue < 0 hue -= 1 if hue > 1 end Spectrum::HSL.from_fraction(hue, sat, lum) end |
#to_rgb(ignored = nil) ⇒ Object
182 183 184 |
# File 'lib/spectrum/rgb.rb', line 182 def to_rgb(ignored = nil) self end |
#to_yiq ⇒ Object
Returns the YIQ (NTSC) colour encoding of the RGB value.
187 188 189 190 191 192 |
# File 'lib/spectrum/rgb.rb', line 187 def to_yiq y = (@r * 0.299) + (@g * 0.587) + (@b * 0.114) i = (@r * 0.596) + (@g * -0.275) + (@b * -0.321) q = (@r * 0.212) + (@g * -0.523) + (@b * 0.311) Spectrum::YIQ.from_fraction(y, i, q) end |