---
name: "Graphics::Toolkit::Color::Manual::Constructor"
section: "3pm"
platform: "linux"
package: "perl-graphics-toolkit-color"
version: "2.22-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/Graphics::Toolkit::Color::Manual::Constructor"
---

# Graphics::Toolkit::Color::Manual::Constructor(3pm)

GTC object creation reference

## NAME

Graphics::Toolkit::Color::Manual::Constructor - GTC object creation reference

## SYNOPSIS

This manual page contains the most detailed description about all the ways a GTC object can be created. This is, as to be expected, the method "new", but also the "color" routine  and implicitly the arguments color and to. They too might trigger an error.

## OPTIONS

### new

The GTC philosophy tells that the API is optimized to be memorable and convenient and consistent.  For that reason there is only one constructor method and all the necessary complexity is in the arguments, which are mostly optional and combinable.  And there are only 4: `"color"`, `"range"`, `"raw"` and `"in"` which are seldom needed. In most cases it is enough to use `"color"` as the only positional argument, which is also the only required argument.

color expects a  color definition in one of many acceptable  formats. This multitude is one source of perceived complexity, but it is really just an offer to serve convenience. Users can select the preferred format and forget about the rest or use this ability to convert between formats (and spaces at once).  Independent of that, there is the complexity of supporting many color  spaces, which means there are many color space names and axis names. Again, these are a major  source of usefulness one just has to look up the needed ones. Last not least there is great convenience in using  color names, especially the ones from the default scheme.

```
    my $red = Graphics::Toolkit::Color->new( r => 255, g => 0, b => 0 );
    my $red = Graphics::Toolkit::Color->new({r => 255, g => 0, b => 0}); # works too
                          ... ->new( Red => 255, Green => 0, Blue => 0); # also fine
              ... ->new( Hue => 0, Saturation => 100, Lightness => 50 ); # same color
                  ... ->new( Hue => 0, whiteness => 0, blackness => 0 ); # still the same

    my $red = Graphics::Toolkit::Color->new(          255, 0, 0 );
    my $red = Graphics::Toolkit::Color->new(         [255, 0, 0]);       # does the same
    my $red = Graphics::Toolkit::Color->new( 'RGB',   255, 0, 0 );       # named list syntax
    my $red = Graphics::Toolkit::Color->new(  RGB =>  255, 0, 0 );       # with fat comma
    my $red = Graphics::Toolkit::Color->new([ RGB =>  255, 0, 0]);       # named ARRAY
    my $red = Graphics::Toolkit::Color->new(  RGB => [255, 0, 0]);       # separate name and values
    my $red = Graphics::Toolkit::Color->new([ RGB => [255, 0, 0]]);      # even inside an ARRAY
    my $red = Graphics::Toolkit::Color->new(  YUV => .299,-0.168736, .5);# same color in YUV
    my $red = Graphics::Toolkit::Color->new(  'rgb(255 0 0)' );         # comma optional
    my $blue = Graphics::Toolkit::Color->new( 'hsv(240, 100%, 100%)' );
    my $blue = Graphics::Toolkit::Color->new( 'hsv(240, 100, 100)' );   # works too
    my $red = Graphics::Toolkit::Color->new(  'rgb: 255, 0, 0' );
    my $blue = Graphics::Toolkit::Color->new( 'HSV: 240, 100, 100' );
    my $color = Graphics::Toolkit::Color->new('#FF0000');
    my $color = Graphics::Toolkit::Color->new('#f00');    # short version
    my $color = Graphics::Toolkit::Color->new('Emerald');
    my $color = Graphics::Toolkit::Color->new('SVG:green');
```

range expects a range definition, that alters the acceptable minimum and maximum values on each color space axis. If you got for instance some *AppleRGB* colors encoded as RGB32  (three 32-bit integers). In order to read them you need to write:

```
    my $color = Graphics::Toolkit::Color->new(
                 color => [AppleRGB => [1438, 374, 8285]], range => 2**32-1
    );
```

raw expects a pseudo boolean that defaults to false (0). If true (1) the color definition will be read as is, but if false (0) the values will be clamped into range. This is either  the default range of the color space, the color is defined in or the  given `"range"`. If you want to read an out of gamut color to maybe convert it later into a wide gamut space, where it is in range you have to use:

```
    my $color = Graphics::Toolkit::Color->new(
                 color => {r => 0, g => 0, b => 256}, raw => 1
    );
```

in expects a  color space name that serves only for disambiguation, since most color definitions already contain the name of the chosen color space. But formats like in the following example *hash* can be highly ambiguous. Please note also that the values in *AppleRGB* space are normal (0..1).

```
    my $color = Graphics::Toolkit::Color->new(
                 color => {r => 0, g => 0, b => 1}, in => 'AppleRGB'    # or:
    );
    Graphics::Toolkit::Color->new( color => [0,0,1], in => 'AppleRGB' );
```

### color

The regular constructor

```
    Graphics::Toolkit::Color->new( ...);
```

is rather bulky and requires much typing and space, which might become inconvenient. In that case you might import the subroutine `"color"`, which works exactly like the color argument of the constructor. You cannot use the arguments `"range"` and `"raw"`  here but all the color definition formats the constructor "new" accepts, including *list*, which cannot work for the constructor argument `"color"`, that has to take scalar values.

```
    use Graphics::Toolkit::Color qw/color/;
    my $green = color('green');
    my $darkblue = color(20, 20, 250);         # list format
    my $darkblue = color([20, 20, 250]);       # array format
```

### is\_in\_gamut

The routine is\_in\_gamut takes color definitions like a constructor, but with  raw turned on and returning just a pseudo bool.

### arguments

The argument to  works the same way as color,  which is used by: distance,  mix,  analogous and gradient. The only difference is, `"to"` accepts also GTC objects. These arguments are also a convenience service preventing unnecessary constructor calls.

## AUTHOR

Herbert Breunung, \<lichtkind@cpan.org\>

## COPYRIGHT

Copyright 2026 Herbert Breunung.

## LICENSE

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
