Class: Color::Palette::Gimp
- Includes:
- Enumerable
- Defined in:
- lib/atome/utilities/color_helper/color/palette/gimp.rb
Overview
A class that can read a GIMP (GNU Image Manipulation Program) palette file and provide a Hash-like interface to the contents. GIMP colour palettes are RGB values only.
Because two or more entries in a GIMP palette may have the same name, all named entries are returned as an array.
pal = Color::Palette::Gimp.from_file(my_gimp_palette)
pal[0] => Color::RGB<...>
pal["white"] => [ Color::RGB<...> ]
pal["unknown"] => [ Color::RGB<...>, Color::RGB<...>, ... ]
GIMP Palettes are always indexable by insertion order (an integer key).
Instance Attribute Summary collapse
-
#name ⇒ Object
readonly
Returns the value of attribute name.
Class Method Summary collapse
-
.from_file(filename) ⇒ Object
Create a GIMP palette object from the named file.
-
.from_io(io) ⇒ Object
Create a GIMP palette object from the provided IO.
Instance Method Summary collapse
-
#[](key) ⇒ Object
If a Numeric
key
is provided, the single colour value at that position will be returned. -
#each ⇒ Object
Loops through each colour.
-
#each_name ⇒ Object
Loops through each named colour set.
-
#initialize(palette) ⇒ Gimp
constructor
Create a new GIMP palette from the palette file as a string.
- #size ⇒ Object
-
#valid? ⇒ Boolean
Returns true if this is believed to be a valid GIMP palette.
-
#values_at(*selectors) ⇒ Object
Provides the colour or colours at the provided selectors.
Constructor Details
#initialize(palette) ⇒ Gimp
Create a new GIMP palette from the palette file as a string.
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/atome/utilities/color_helper/color/palette/gimp.rb', line 32 def initialize(palette) @colors = [] @names = {} @valid = false @name = "(unnamed)" palette.split($/).each do |line| line.chomp! line.gsub!(/\s*#.*\Z/, '') next if line.empty? if line =~ /\AGIMP Palette\Z/ @valid = true next end info = /(\w+):\s(.*$)/.match(line) if info @name = info.captures[1] if info.captures[0] =~ /name/i next end line.gsub!(/^\s+/, '') data = line.split(/\s+/, 4) name = data.pop.strip data.map! { |el| el.to_i } color = Color::RGB.new(*data) @colors << color @names[name] ||= [] @names[name] << color end end |
Instance Attribute Details
#name ⇒ Object (readonly)
Returns the value of attribute name.
103 104 105 |
# File 'lib/atome/utilities/color_helper/color/palette/gimp.rb', line 103 def name @name end |
Class Method Details
Instance Method Details
#[](key) ⇒ Object
If a Numeric key
is provided, the single colour value at that position will be returned. If a String key
is provided, the colour set (an array) for that colour name will be returned.
76 77 78 79 80 81 82 |
# File 'lib/atome/utilities/color_helper/color/palette/gimp.rb', line 76 def [](key) if key.kind_of?(Numeric) @colors[key] else @names[key] end end |
#each ⇒ Object
Loops through each colour.
85 86 87 |
# File 'lib/atome/utilities/color_helper/color/palette/gimp.rb', line 85 def each @colors.each { |el| yield el } end |
#each_name ⇒ Object
Loops through each named colour set.
90 91 92 |
# File 'lib/atome/utilities/color_helper/color/palette/gimp.rb', line 90 def each_name #:yields color_name, color_set:# @names.each { |color_name, color_set| yield color_name, color_set } end |
#size ⇒ Object
99 100 101 |
# File 'lib/atome/utilities/color_helper/color/palette/gimp.rb', line 99 def size @colors.size end |
#valid? ⇒ Boolean
Returns true if this is believed to be a valid GIMP palette.
95 96 97 |
# File 'lib/atome/utilities/color_helper/color/palette/gimp.rb', line 95 def valid? @valid end |
#values_at(*selectors) ⇒ Object
Provides the colour or colours at the provided selectors.
69 70 71 |
# File 'lib/atome/utilities/color_helper/color/palette/gimp.rb', line 69 def values_at(*selectors) @colors.values_at(*selectors) end |