redgreenblue 0.7.0 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/redgreenblue.rb +20 -14
- data/lib/redgreenblue/24bit.rb +26 -0
- data/lib/redgreenblue/base.rb +45 -13
- data/lib/redgreenblue/bgr24bit.rb +5 -5
- data/lib/redgreenblue/cie_1931.rb +51 -0
- data/lib/redgreenblue/cie_1976.rb +105 -0
- data/lib/redgreenblue/gamma.rb +44 -0
- data/lib/redgreenblue/gpl.rb +91 -0
- data/lib/redgreenblue/hex.rb +46 -15
- data/lib/redgreenblue/hsb.rb +61 -0
- data/lib/redgreenblue/hsl.rb +96 -0
- data/lib/redgreenblue/hsv.rb +96 -0
- data/lib/redgreenblue/hsx_shared.rb +94 -0
- data/lib/redgreenblue/inspect.rb +73 -0
- data/lib/redgreenblue/int.rb +22 -0
- data/lib/redgreenblue/lazy.rb +15 -0
- data/lib/redgreenblue/math.rb +9 -0
- data/lib/redgreenblue/misc.rb +32 -40
- data/lib/redgreenblue/mix.rb +65 -0
- data/lib/redgreenblue/name.rb +13 -0
- data/lib/redgreenblue/opt/philipshue.rb +22 -3
- data/lib/redgreenblue/os/mac.rb +13 -3
- data/lib/redgreenblue/ostwald.rb +45 -0
- data/lib/redgreenblue/palettes/css.gpl +164 -0
- data/lib/redgreenblue/random.rb +5 -0
- data/lib/redgreenblue/rgb565.rb +0 -5
- data/lib/redgreenblue/terminal.rb +19 -0
- data/lib/redgreenblue/version.rb +9 -1
- data/lib/redgreenblue/view.rb +34 -0
- data/lib/redgreenblue/web.rb +65 -0
- metadata +26 -7
- data/lib/redgreenblue/hsl_hsv.rb +0 -59
- data/lib/redgreenblue/nice.rb +0 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 28b5f73bd443540e199b93625df5c7447491b502573abe5aa14089f895fd2700
|
4
|
+
data.tar.gz: c0a3c77946d5a4d0e6c43d5769385a6c5b72df52c9f7a4cfb52d09bdc50a5153
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 20b4959b4e82fdf67b48dbff3a0c82713a960c56a5bed7e32a78782cab40f1fb9d0f71c2d2fe93cef887a3c97a2590133a85d68b8d57912d7ec0bc4a0817febe
|
7
|
+
data.tar.gz: bdc13584341d62b90586cf768cd114079e223e64424e0e9e6c24e4398ae74746f2530ed7e2c7540071cf99a4df4afe3a2e7bdadd7c2d0d3dbc6e5d595047d7f7
|
data/lib/redgreenblue.rb
CHANGED
@@ -1,24 +1,30 @@
|
|
1
1
|
class RGB
|
2
2
|
end
|
3
3
|
|
4
|
-
|
4
|
+
%w(
|
5
5
|
|
6
|
-
|
6
|
+
version
|
7
7
|
|
8
|
-
|
9
|
-
require 'redgreenblue/48bit'
|
10
|
-
require 'redgreenblue/hex'
|
8
|
+
base
|
11
9
|
|
12
|
-
|
10
|
+
24bit 48bit hex int
|
13
11
|
|
14
|
-
|
15
|
-
require 'redgreenblue/nice'
|
12
|
+
hsl hsv hsb
|
16
13
|
|
17
|
-
|
18
|
-
require 'redgreenblue/bgr24bit'
|
19
|
-
require 'redgreenblue/gif'
|
14
|
+
ostwald
|
20
15
|
|
21
|
-
|
22
|
-
require 'redgreenblue/random'
|
16
|
+
gamma
|
23
17
|
|
24
|
-
|
18
|
+
cie_1931 cie_1976
|
19
|
+
|
20
|
+
name
|
21
|
+
|
22
|
+
inspect view lazy
|
23
|
+
|
24
|
+
rgb565 bgr24bit gif terminal web gpl
|
25
|
+
|
26
|
+
mix misc random
|
27
|
+
|
28
|
+
os
|
29
|
+
|
30
|
+
).each { |m| require "redgreenblue/#{m}" }
|
data/lib/redgreenblue/24bit.rb
CHANGED
@@ -51,4 +51,30 @@ class RGB
|
|
51
51
|
c
|
52
52
|
end
|
53
53
|
|
54
|
+
# Sets the red, green, and blue values to those of the nearest 24-bit color.
|
55
|
+
def snap!
|
56
|
+
self.rgb = rgb
|
57
|
+
self
|
58
|
+
end
|
59
|
+
|
60
|
+
# Creates a new RGB object containing the nearest 24-bit color.
|
61
|
+
def snap
|
62
|
+
RGB.rgb rgb
|
63
|
+
end
|
64
|
+
|
65
|
+
# Calls the given block for each 24-bit RGB color (from black to white), passing the color as an RGB object.
|
66
|
+
#
|
67
|
+
# Returns the number of iterations.
|
68
|
+
def self.each_24bit_color
|
69
|
+
range = 0..255
|
70
|
+
range.each do |r|
|
71
|
+
range.each do |g|
|
72
|
+
range.each do |b|
|
73
|
+
yield self.rgb(r,g,b)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
range.size ** 3
|
78
|
+
end
|
79
|
+
|
54
80
|
end
|
data/lib/redgreenblue/base.rb
CHANGED
@@ -1,41 +1,73 @@
|
|
1
1
|
class RGB
|
2
2
|
|
3
|
-
attr_reader :red, :green, :blue
|
4
|
-
|
5
3
|
def initialize(*a)
|
6
4
|
self.values = a.any? ? a : [ 0.5, 0.5, 0.5 ]
|
7
5
|
end
|
8
6
|
|
9
|
-
|
10
|
-
|
7
|
+
# Returns the color space.
|
8
|
+
#
|
9
|
+
# Currently always 'sRGB'.
|
10
|
+
def color_space
|
11
|
+
'sRGB'
|
12
|
+
end
|
13
|
+
|
14
|
+
# Returns the red component as a value between 0 and 1.
|
15
|
+
def red
|
16
|
+
@red
|
17
|
+
end
|
18
|
+
|
19
|
+
# Returns the green component as a value between 0 and 1.
|
20
|
+
def green
|
21
|
+
@green
|
22
|
+
end
|
23
|
+
|
24
|
+
# Returns the blue component as a value between 0 and 1.
|
25
|
+
def blue
|
26
|
+
@blue
|
27
|
+
end
|
28
|
+
|
29
|
+
# Sets the red component to a value between 0 and 1.
|
30
|
+
#
|
31
|
+
# Values outside the range 0..1 will be clipped.
|
32
|
+
def red=(value)
|
33
|
+
@red = limit(value)
|
11
34
|
end
|
12
35
|
|
13
|
-
|
14
|
-
|
36
|
+
# Sets the green component to a value between 0 and 1.
|
37
|
+
#
|
38
|
+
# Values outside the range 0..1 will be clipped.
|
39
|
+
def green=(value)
|
40
|
+
@green = limit(value)
|
15
41
|
end
|
16
42
|
|
17
|
-
|
18
|
-
|
43
|
+
# Sets the blue component to a value between 0 and 1.
|
44
|
+
#
|
45
|
+
# Values outside the range 0..1 will be clipped.
|
46
|
+
def blue=(value)
|
47
|
+
@blue = limit(value)
|
19
48
|
end
|
20
49
|
|
50
|
+
# Returns the red, green, and blue components as three values between 0 and 1.
|
21
51
|
def values
|
22
52
|
[ red, green, blue ]
|
23
53
|
end
|
24
54
|
|
25
55
|
alias to_a values
|
26
56
|
|
57
|
+
# Sets the red, green, and blue components using three values between 0 and 1.
|
58
|
+
#
|
59
|
+
# Values outside the range 0..1 will be clipped.
|
27
60
|
def values=(*a)
|
28
61
|
self.red, self.green, self.blue = a.flatten
|
29
62
|
end
|
30
63
|
|
31
|
-
# Returns true if this object and
|
64
|
+
# Returns true if this object and another object represent exactly the same color. Otherwise returns false.
|
32
65
|
def ==(other)
|
33
66
|
( self.class == other.class ) && ( self.values == other.values )
|
34
67
|
end
|
35
68
|
|
36
|
-
# Returns a sorted hash of 3 key/value pairs
|
37
|
-
#
|
38
|
-
# sorted in order of decreasing value
|
69
|
+
# Returns a sorted hash of 3 key/value pairs for red, green, and blue,
|
70
|
+
# sorted in order of decreasing value.
|
39
71
|
def to_h
|
40
72
|
([:red, :green, :blue].zip values).sort_by {
|
41
73
|
|k,v| [-v,[:red, :green, :blue].index(k)]
|
@@ -44,7 +76,7 @@ class RGB
|
|
44
76
|
|
45
77
|
private
|
46
78
|
|
47
|
-
#
|
79
|
+
# limits to range 0..1
|
48
80
|
def limit(n)
|
49
81
|
n <= 0 ? 0.0 : n >= 1 ? 1.0 : n
|
50
82
|
end
|
@@ -1,16 +1,16 @@
|
|
1
1
|
class RGB
|
2
2
|
|
3
|
-
#
|
4
|
-
|
3
|
+
# Returns a 3-byte string containing the object's color in BGR24 format.
|
5
4
|
def bgr24
|
6
5
|
[b, g, r].pack('C3')
|
7
6
|
end
|
8
7
|
|
9
|
-
|
10
|
-
|
8
|
+
# Sets red, green, and blue using BGR24 data (a 3-byte string).
|
9
|
+
def bgr24=(bgr_string)
|
10
|
+
self.b, self.g, self.r = bgr_string.unpack('C3')
|
11
11
|
end
|
12
12
|
|
13
|
-
#
|
13
|
+
# Creates a new RGB object from BGR24 data (a 3-byte string).
|
14
14
|
def self.bgr24(bgr)
|
15
15
|
c = self.new
|
16
16
|
c.bgr24 = bgr
|
@@ -0,0 +1,51 @@
|
|
1
|
+
class RGB
|
2
|
+
|
3
|
+
# Returns CIE 1931 XYZ values for the RGB object.
|
4
|
+
#
|
5
|
+
# Based on:
|
6
|
+
# - http://www.brucelindbloom.com/index.html?Eqn_RGB_to_XYZ.html
|
7
|
+
# - https://en.wikipedia.org/wiki/CIE_1931_color_space
|
8
|
+
# sRGB to XYZ matrix for D65 reference white calculated with Javascript by Bruce Lindbloom:
|
9
|
+
# - http://www.brucelindbloom.com/ColorCalculator.html
|
10
|
+
def cie_xyz(round: true)
|
11
|
+
r, g, b = linear_values
|
12
|
+
|
13
|
+
[
|
14
|
+
|
15
|
+
r * 0.4124_5643_9090 + g * 0.3575_7607_7644 + b * 0.1804_3748_3266,
|
16
|
+
r * 0.2126_7285_1406 + g * 0.7151_5215_5288 + b * 0.0721_7499_3307,
|
17
|
+
r * 0.0193_3389_5582 + g * 0.1191_9202_5881 + b * 0.9503_0407_8536
|
18
|
+
|
19
|
+
].map { |v| round ? v.round(8) : v }
|
20
|
+
end
|
21
|
+
|
22
|
+
alias xyz cie_xyz
|
23
|
+
|
24
|
+
# Returns CIE 1931 xyY values for the RGB object.
|
25
|
+
#
|
26
|
+
# Based on:
|
27
|
+
# - https://en.wikipedia.org/wiki/CIE_1931_color_space
|
28
|
+
# - http://www.brucelindbloom.com/index.html?Eqn_XYZ_to_xyY.html
|
29
|
+
# - https://ninedegreesbelow.com/photography/xyz-rgb.html
|
30
|
+
def cie_xyy
|
31
|
+
x, y, z = cie_xyz(round: false)
|
32
|
+
|
33
|
+
[
|
34
|
+
|
35
|
+
x / ( x + y + z ),
|
36
|
+
y / ( x + y + z ),
|
37
|
+
y
|
38
|
+
|
39
|
+
].map { |v| v.round(8) }
|
40
|
+
end
|
41
|
+
|
42
|
+
alias xyy cie_xyy
|
43
|
+
|
44
|
+
# Returns CIE 1931 xy values for the RGB object.
|
45
|
+
def cie_xy
|
46
|
+
cie_xyy[0..1]
|
47
|
+
end
|
48
|
+
|
49
|
+
alias xy cie_xy
|
50
|
+
|
51
|
+
end
|
@@ -0,0 +1,105 @@
|
|
1
|
+
class RGB
|
2
|
+
|
3
|
+
# Returns CIE 1976 L*a*b* (CIELAB) values for the RGB object.
|
4
|
+
def cie_lab(round: true)
|
5
|
+
cie_lab_luv(round: round, type: :lab)
|
6
|
+
end
|
7
|
+
|
8
|
+
alias lab cie_lab
|
9
|
+
|
10
|
+
# Returns CIE 1976 LCHab values for the RGB object, derived from L*a*b* (CIELAB).
|
11
|
+
#
|
12
|
+
# When C is 0, H is nil.
|
13
|
+
def cie_lch_ab
|
14
|
+
cie_lch_ab_uv(type: :lab)
|
15
|
+
end
|
16
|
+
|
17
|
+
# Returns CIE 1976 L*u*v* (CIELUV) values for the RGB object.
|
18
|
+
def cie_luv(round: true)
|
19
|
+
cie_lab_luv(round: round, type: :luv)
|
20
|
+
end
|
21
|
+
|
22
|
+
alias luv cie_luv
|
23
|
+
|
24
|
+
# Returns CIE 1976 LCHuv values for the RGB object, derived from L*u*v* (CIELUV).
|
25
|
+
#
|
26
|
+
# When C is 0, H is nil.
|
27
|
+
def cie_lch_uv
|
28
|
+
cie_lch_ab_uv(type: :luv)
|
29
|
+
end
|
30
|
+
|
31
|
+
# Returns the object's color distance from another RGB object, according to the CIE 1976 delta E formula.
|
32
|
+
#
|
33
|
+
# Based on:
|
34
|
+
# - http://www.brucelindbloom.com/Eqn_DeltaE_CIE76.html
|
35
|
+
# - https://en.wikipedia.org/wiki/Color_difference
|
36
|
+
def delta_e_cie_1976(another)
|
37
|
+
l , a , b = cie_lab(round: false)
|
38
|
+
l2, a2, b2 = another.cie_lab(round: false)
|
39
|
+
|
40
|
+
Math.sqrt( (l - l2) ** 2 + (a - a2) ** 2 + (b - b2) ** 2 ).round(8)
|
41
|
+
end
|
42
|
+
|
43
|
+
alias de76 delta_e_cie_1976
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
# Returns either CIE 1976 L*a*b* (CIELAB) or CIE 1976 L*u*v* (CIELUV) values for the RGB object.
|
48
|
+
#
|
49
|
+
# L*a*b* formula based on:
|
50
|
+
# - http://www.brucelindbloom.com/Eqn_XYZ_to_Lab.html
|
51
|
+
# - https://en.wikipedia.org/wiki/CIELAB_color_space
|
52
|
+
# With peeking at:
|
53
|
+
# - https://github.com/halostatue/color/blob/master/lib/color/rgb.rb
|
54
|
+
#
|
55
|
+
# L*u*v* formula based on:
|
56
|
+
# - http://www.brucelindbloom.com/Eqn_XYZ_to_Luv.html
|
57
|
+
# - https://en.wikipedia.org/wiki/CIELUV
|
58
|
+
def cie_lab_luv(round: true, type: :lab)
|
59
|
+
x , y , z = cie_xyz(round: false)
|
60
|
+
xr, yr, zr = RGB.white.cie_xyz(round: false)
|
61
|
+
|
62
|
+
f = [ x / xr, y / yr, z / zr ].map { |v|
|
63
|
+
if v > ( 216.0 / 24389 )
|
64
|
+
v ** ( 1.0 / 3 ) # cube root
|
65
|
+
else
|
66
|
+
( 24389.0 / 27 * v + 16 ) / 116.0
|
67
|
+
end
|
68
|
+
}
|
69
|
+
|
70
|
+
if type == :luv
|
71
|
+
[
|
72
|
+
l = 116 * f[1] - 16,
|
73
|
+
13 * l * ( ( 4 * x ) / ( x + 15 * y + 3 * z ) - ( 4 * xr ) / ( xr + 15 * yr + 3 * zr ) ),
|
74
|
+
13 * l * ( ( 9 * y ) / ( x + 15 * y + 3 * z ) - ( 9 * yr ) / ( xr + 15 * yr + 3 * zr ) )
|
75
|
+
]
|
76
|
+
else
|
77
|
+
[
|
78
|
+
116 * f[1] - 16,
|
79
|
+
500 * (f[0] - f[1]),
|
80
|
+
200 * (f[1] - f[2])
|
81
|
+
]
|
82
|
+
end.map { |v| v.nan? ? 0.0 : ( round ? v.round(8) : v ) }
|
83
|
+
end
|
84
|
+
|
85
|
+
# Returns either CIE 1976 LCHab or CIE 1976 LCHuv values for the RGB object.
|
86
|
+
#
|
87
|
+
# Based on:
|
88
|
+
# - http://www.brucelindbloom.com/Eqn_Lab_to_LCH.html
|
89
|
+
# - http://www.brucelindbloom.com/Eqn_Luv_to_LCH.html
|
90
|
+
# - https://en.wikipedia.org/wiki/CIELAB_color_space
|
91
|
+
def cie_lch_ab_uv(type: :lab)
|
92
|
+
if type == :luv
|
93
|
+
l, v1, v2 = cie_luv(round: false)
|
94
|
+
else
|
95
|
+
l, v1, v2 = cie_lab(round: false)
|
96
|
+
end
|
97
|
+
|
98
|
+
[
|
99
|
+
l.round(8),
|
100
|
+
c = ( ( v1 ** 2 + v2 ** 2) ** ( 1.0 / 2 ) ).round(8),
|
101
|
+
c == 0 ? nil : ( Math.atan2(v2, v1) * 180.0 / Math::PI ).modulo(360).round(8)
|
102
|
+
]
|
103
|
+
end
|
104
|
+
|
105
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
class RGB
|
2
|
+
|
3
|
+
# Returns gamma-expanded (inverse-companded) RGB values for the object (three values between 0 and 1).
|
4
|
+
#
|
5
|
+
# Based on:
|
6
|
+
# - https://en.wikipedia.org/wiki/SRGB
|
7
|
+
# - http://www.brucelindbloom.com/Eqn_RGB_to_XYZ.html
|
8
|
+
# - https://entropymine.com/imageworsener/srgbformula/
|
9
|
+
def linear_values
|
10
|
+
if color_space == 'sRGB'
|
11
|
+
values.map { |v|
|
12
|
+
if v <= 0.04045
|
13
|
+
v / 12.92
|
14
|
+
else
|
15
|
+
( ( v + 0.055 ) / 1.055 ) ** 2.4
|
16
|
+
end
|
17
|
+
}
|
18
|
+
else
|
19
|
+
raise "can not compute gamma for color space '#{color_space}'"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
# Sets the object's RGB values using three linear RGB values, each between 0 and 1.
|
24
|
+
# Linear values will be converted to the object's gamma (gamma-companded).
|
25
|
+
#
|
26
|
+
# Based on:
|
27
|
+
# - https://en.wikipedia.org/wiki/SRGB
|
28
|
+
# - http://www.brucelindbloom.com/Eqn_XYZ_to_RGB.html
|
29
|
+
# - https://entropymine.com/imageworsener/srgbformula/
|
30
|
+
def linear_values=(*a)
|
31
|
+
if color_space == 'sRGB'
|
32
|
+
self.values = a.flatten.map { |v|
|
33
|
+
if v <= 0.0031308
|
34
|
+
v * 12.92
|
35
|
+
else
|
36
|
+
1.055 * ( v ** ( 1/2.4 ) ) - 0.055
|
37
|
+
end
|
38
|
+
}.map { |v| v.round(9) }
|
39
|
+
else
|
40
|
+
raise "can not compute gamma for color space '#{color_space}'"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
class RGB
|
2
|
+
|
3
|
+
#----------------------------------------------------------------------#
|
4
|
+
# Class Methods #
|
5
|
+
#----------------------------------------------------------------------#
|
6
|
+
|
7
|
+
class << self
|
8
|
+
|
9
|
+
# Creates a new RGB object from a line of gpl (Gimp color palette) input. Returns nil if not successful.
|
10
|
+
#
|
11
|
+
# @example
|
12
|
+
# RGB.gpl "255 153 204\tpink"
|
13
|
+
def gpl(line)
|
14
|
+
if line.chomp.match( /^\s*(?<r>\d{1,3})\s+(?<g>\d{1,3})\s+(?<b>\d{1,3})(\s+(?<name>.*))?/ )
|
15
|
+
color = RGB.rgb $~[:r].to_i, $~[:g].to_i, $~[:b].to_i
|
16
|
+
color.name = $~[:name] if $~[:name]
|
17
|
+
color
|
18
|
+
else
|
19
|
+
nil
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
# Loads a gpl (Gimp color palette) source and returns an array of RGB objects.
|
24
|
+
#
|
25
|
+
# Options:
|
26
|
+
# - file: Path to a .gpl file to be loaded.
|
27
|
+
# - url: URL for a .gpl source to be loaded.
|
28
|
+
# - compact: Defaults to true. If set to false, returns nil for each line that can not be parsed to an RGB color.
|
29
|
+
# - freeze: Defaults to false. If set to true, returns a frozen array of frozen objects.
|
30
|
+
#
|
31
|
+
# @example String
|
32
|
+
# RGB.load_gpl "255 0 0\tred\n255 153 204\tpink\n"
|
33
|
+
# @example File
|
34
|
+
# RGB.load_gpl file: '/path/to/palette.gpl'
|
35
|
+
# RGB.load_gpl file: '/path/to/palette.gpl', compact: false
|
36
|
+
# @example URL
|
37
|
+
# RGB.load_gpl url: 'https://lospec.com/palette-list/yuko-tomita-time.gpl'
|
38
|
+
def load_gpl(source=nil, file: nil, url: nil, compact: true, freeze: false)
|
39
|
+
|
40
|
+
if ! source
|
41
|
+
if file
|
42
|
+
source = File.open file
|
43
|
+
elsif url
|
44
|
+
require 'open-uri'
|
45
|
+
source = URI.open url
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
if source.respond_to? :each_line
|
50
|
+
list = source.each_line.map { |line| RGB.gpl(line) }
|
51
|
+
|
52
|
+
if compact
|
53
|
+
list.compact!
|
54
|
+
end
|
55
|
+
|
56
|
+
if freeze
|
57
|
+
list.freeze
|
58
|
+
list.each &:freeze
|
59
|
+
end
|
60
|
+
|
61
|
+
list
|
62
|
+
else
|
63
|
+
raise ArgumentError, 'Not a valid source'
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
private
|
68
|
+
|
69
|
+
# Reverse-engineered from:
|
70
|
+
# - https://github.com/GNOME/gimp/blob/5d79fba8238a27b8691556489898d33b3fa0dda0/app/core/gimppalette-load.c
|
71
|
+
def gpl_header(name, columns=nil)
|
72
|
+
"GIMP Palette\n" +
|
73
|
+
"Name: #{name}\n" +
|
74
|
+
( columns ? "Columns: #{columns}\n" : '' )
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
|
79
|
+
#----------------------------------------------------------------------#
|
80
|
+
# Instance Methods #
|
81
|
+
#----------------------------------------------------------------------#
|
82
|
+
|
83
|
+
# Returns the color in the format used in .gpl files (Gimp color palettes), including its name (if present).
|
84
|
+
#
|
85
|
+
# You can optionally supply a name as argument.
|
86
|
+
def gpl(gpl_name=name)
|
87
|
+
( "%3d %3d %3d" % rgb ) +
|
88
|
+
( gpl_name.to_s.size != 0 ? "\t#{gpl_name}" : '' )
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|