| Color-Rgb documentation | Contained in the Color-Rgb distribution. |
Color::Rgb - Simple rgb.txt parsing class
$Revision: 1.4 $
use Color::Rgb;
$rgb = new Color::Rgb(rgb_txt=>'/usr/X11R6/lib/X11/rgb.txt');
@rgb = $rgb->rgb('red'); # returns 255, 0, 0
$red = $rgb->rgb('red', ','); # returns the above rgb list as
# comma separated string
$red_hex=$rgb->hex('red'); # returns 'FF0000'
$red_hex=$rgb->hex('red', '#'); # returns '#FF0000'
$my_hex = $rgb->rgb2hex(255,0,0); # returns 'FF0000'
$my_rgb = $rgb->hex2rgb('#FF0000'); # returns list of 255,0,0
Color::Rgb - simple rgb.txt parsing class.
new([rgb_txt=$rgb_file])> - constructor. Returns a Color::Rgb object.
Optionally accepts a path to the rgb.txt file. If you omit the file, it
will use the path in the $Color::Rgb::RGB_TXT variable, which defaults to
'/usr/X11R6/lib/X11/rgb.txt'. It means, instead of using rgb_txt=>''
option, you could also set the value of the $Color::Rgb::RGB_TXT variable
to the correct path before you call the new() constructor (but definitely
after you load the Color::Rgb class with use or require).
name2rgb($name [,$delimiter]) - returns list of numeric Red, Green and Blue
values for a $name delimited (optionally) by a $delimiter . $name is
name of the color in the English language (Ex., 'black', 'red', 'purple' etc.).
my ($r, $g, $b) = $rgb->rgb('blue'); # returns list: 00, 00, 255
my $string = $rgb->rgb('blue', ','); # returns string: '00,00,255'
name2hex($name [,$prefix]) - similar to rgb($name) method, but returns
hexadecimal string representing red, green and blue colors, prefixed
(optionally) with $prefix. If $name does not exist in the rgb.txt file
it will return undef. hex($name, [,$delimiter]) - alias to name2hex() rgb($name, [,$delimiter]) - alias to name2rgb() rgb2hex($r, $g, $b [,$prefix]) - converts rgb value to hexadecimal string.
This method has nothing to do with the rgb.txt file, so none of the arguments
need to exist in the file.
@rgb = (128, 128, 128); # RGB representation of grey
$hex_grey = $rgb->rgb2hex(@rgb); # returns string 'C0C0C0'
$hex_grey = $rgb->rgb2hex(@rgb, '#'); # returns string '#C0C0C0'
hex2rgb('hex' [,$delim]) - the opposite of rgb2hex(): takes a
hexadecimal representation of a color and returns a numeric list of Red,
Green and Blue. If optional $delim delimiter is present, it returns the
string of RGB colors delimited by the $delimiter. Characters like '#' and
'0x' in the beginning of the hexadecimal value will be ignored. Examples:
$hex = '#00FF00'; # represents blue
@rgb = $rgb->hex2rgb($hex); #returns list of 0, 255, 0
$rgb_string = $rgb->hex2rgb($hex,','); #returns string '0,255,0'
names([$pattern] - returns a list of all the names in the rgb.txt file.
If $pattern is given as the first argument, it will return only the names
matching the pattern. Example:
@colors = $rgb->names; # returns all the names
@gray_colors = $rgb->names('gray'); # returns list of all the names
# matching the word 'gray'
=back
| Color-Rgb documentation | Contained in the Color-Rgb distribution. |
package Color::Rgb; # $Id: Rgb.pm,v 1.4 2002/10/23 20:30:46 sherzodr Exp $ require 5.003; use strict; use Carp 'croak'; use Fcntl qw(:DEFAULT :flock); use vars qw($RGB_TXT $VERSION); ########################################################################### ################ Color::Rgb - simple rgb.txt parser ####################### ########################################################################### # # # Copyright (c) 2002 Sherzod Ruzmetov. All rights reserved # # You can modify and redistribute the following library under the same # # terms as Perl itself. # # # # The library is written with usefulness in mind, but neither explicit # # nor implied guarantee to a particular purpose made. # ########################################################################### $RGB_TXT = '/usr/X11R6/lib/X11/rgb.txt'; ($VERSION) = '$Revision: 1.4 $' =~ m/Revision:\s*(\S+)/; # new(): constructor # Usage: CLASS->new(rgb_txt=>'/path/to/rgb.txt') # RETURN VALUE: Color::Rgb object sub new { my $class = shift; $class = ref($class) || $class; my $self = { rgb_txt => $RGB_TXT, _rgb_map=> {}, @_, }; unless (sysopen (RGB, $self->{rgb_txt}, O_RDONLY) ) { croak "$self->{rgb_txt}: $!"; } unless ( flock(RGB, LOCK_SH) ) { croak "Couldn't acquire LOCK_SH on $self->{rgb_txt}: $!"; } while ( <RGB> ) { /^(\n|!|\#)/ and next; # empty lines and comments chomp(); my ($r, $g, $b, $name) = $_ =~ /^\s*(\d+)\s+(\d+)\s+(\d+)\s+(.+)$/; $self->{_rgb_map}->{ lc($name) } = [$r, $g, $b]; } close (RGB) or croak "$self->{rgb_txt}: $!"; return bless $self => $class; } # rgb(): reruns RGB value for an name # Usage: CLASS->rgb('red' [, ',']) # RETURN VALUE either list or string sub rgb { my ($self, $name, $delim) = @_; unless ( $name ) { croak "Color::Rgb->rgb(): usage: rgb(\$name [,\$delim]"; } my $rgb = $self->{_rgb_map}->{lc($name) }; unless ( defined $rgb ) { croak "$name doesn't exist"; } my @rgb = @{ $rgb }; defined $delim and return join ($delim, @rgb); return @rgb; } sub name2rgb { my $self = shift; $self->rgb(@_); } # hex(): returns a hex value for an name # Usage: CLASS->hex('red' [,'#']) # RETURN VALUE: hex string sub hex { my ($self, $name, $pound) = @_; unless ( $name ) { croak "Color::Rgb->hex(): usage: hex(\$name [,\$prefix]"; } # Using rgb() method to get the RGB list my ($r, $g, $b) = $self->rgb(lc($name)) or return; return sprintf("$pound%02lx%02lx%02lx", $r, $g, $b); } sub name2hex { my $self= shift; $self->hex(@_); } # hex2rgb(): takes a hex string, and returns an rgb list or string # depending if $delim was given or not # Usage: CLASS->hex2rgb('#000000' [,',']); # RETURN VALUE: list or string sub hex2rgb { my ($self, $hex, $delim) = @_; unless ( $hex ) { croak "Color::Rgb->hex2rgb(): Usage: hex2rgb(\$hex [,\$delim]"; } $hex =~ s/^(\#|Ox)//; $_ = $hex; my ($r, $g, $b) = m/(\w{2})(\w{2})(\w{2})/; my @rgb = (); $rgb[0] = CORE::hex($r); $rgb[1] = CORE::hex($g); $rgb[2] = CORE::hex($b); defined $delim and return join ($delim, @rgb); return @rgb; } # rgb2hex(): opposite of hex2rgb(). # Usage: CLASS->rgb2hex($r, $g, $b [,'#']) # RETURN VALUE: hex string sub rgb2hex { my ($self, $r, $g, $b, $pound) = @_; unless ( defined $b ) { croak "Color::Rgb->rgb2hex(): Usage: rgb2hex(\$red, \$green, \$blue [,\$prefix]"; } return sprintf("$pound%02lx%02lx%02lx", $r, $g, $b); } # names(): returns a list of names # Usage: CLASS->names(['gray']) # RETURN VALUE: list sub names { my ($self, $pat) = @_; my @names = (); while ( my ($name, $rgb) = each %{$self->{_rgb_map}} ) { if ( defined $pat ) { $name =~ m/$pat/ and push (@names, $name); next; } push @names, $name; } return @names; } 1; ########################################################################### ################ Color::Rgb manual follows ################################ ###########################################################################