1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 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 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 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 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383
|
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta content="en" name="language">
<title>Magick::Color Class</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link media="screen" href="../docutils-articles.css" type="text/css" rel="stylesheet">
</head>
<body>
<div class="banner">
<img src="../images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
<input type="hidden" name="domains" value="www.graphicsmagick.org" />
<input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
<li><a href="../index.html">Home</a></li>
<li><a href="../project.html">Project</a></li>
<li><a href="../download.html">Download</a></li>
<li><a href="../README.html">Install</a></li>
<li><a href="../Hg.html">Source</a></li>
<li><a href="../NEWS.html">News</a> </li>
<li><a href="../utilities.html">Utilities</a></li>
<li><a href="../programming.html">Programming</a></li>
<li><a href="../reference.html">Reference</a></li>
</ul>
</div>
<main id="magick-color-class">
<h1 class="title">Magick::Color Class</h1>
<!-- -*- mode: rst -*- -->
<!-- This text is in reStucturedText format, so it may look a bit odd. -->
<!-- See http://docutils.sourceforge.net/rst.html for details. -->
<p>Color is the base color class in Magick++. It is a simple container
class for the pixel red, green, blue, and alpha values scaled to fit
GraphicsMagick's Quantum (number of bits in a color component value)
size. Normally users will instantiate a class derived from Color which
supports the color model that fits the needs of the application. The
Color class may be constructed directly from an X11-style color
string. As a perhaps odd design decision, the value transparent black
is considered to represent an unset value (invalid color) in many
cases. This choice was made since it avoided using more memory. The
default Color constructor constructs an invalid color
(i.e. transparent black) and may be used as a parameter in order to
remove a color setting.</p>
<section id="quantum">
<h1>Quantum</h1>
<p>The base type used to represent color samples in GraphicsMagick is the
Quantum type. Pixels are represented by a structure of Quantum
values. For example, an RGB pixel contains red, green, and blue
quantums, while an RGBA pixel contains red, green, blue, and opacity
quantums. The maximum value that a Quantum can attain is specified by
a constant value represented by the MaxRGB define, which is itself
determined by the number of bits in a Quantum. The QuantumDepth build
option determines the number of bits in a Quantum.</p>
</section>
<section id="pixelpacket">
<h1>PixelPacket</h1>
<p>PixelPacket is the internal representation of a pixel in
GraphicsMagick. GraphicsMagick may be compiled to support 32, 64, or
128 bit pixels of type PixelPacket. This is controlled by the value of
the QuantumDepth define. The default is 32 bit pixels
(QuantumDepth=8), which provides the best performance and the least
resource consumption. If additional color precision or range is
desired, then GraphicsMagick may be compiled with QuantumDepth=16 or
QuantumDepth=32. The following table shows the relationship between
QuantumDepth, the type of Quantum, and the overall PixelPacket size:</p>
<table>
<caption>Effect Of QuantumDepth Values</caption>
<colgroup>
<col style="width: 28%" />
<col style="width: 35%" />
<col style="width: 37%" />
</colgroup>
<thead>
<tr><th class="head"><p>QuantumDepth</p></th>
<th class="head"><p>Quantum Typedef</p></th>
<th class="head"><p>PixelPacket Size</p></th>
</tr>
</thead>
<tbody>
<tr><td><p>8</p></td>
<td><p>unsigned char</p></td>
<td><p>32 bits</p></td>
</tr>
<tr><td><p>16</p></td>
<td><p>unsigned short</p></td>
<td><p>64 bits</p></td>
</tr>
<tr><td><p>32</p></td>
<td><p>unsigned int</p></td>
<td><p>128 bits</p></td>
</tr>
</tbody>
</table>
</section>
<section id="color-class">
<h1>Color Class</h1>
<p>The Color base class is not intended to be used directly. Normally a
user will construct a derived class or inherit from this class. Color
arguments are must be scaled to fit the Quantum size according to the
range of MaxRGB. The Color class contains a pointer to a PixelPacket,
which may be allocated by the Color class, or may refer to an existing
pixel in an image.</p>
<p>An alternate way to construct the class is via an X11-compatible color
specification string (e.g. Color(“red”) or Color (“#FF0000”)). Since
the class may be constructed from a string, convenient strings may be
passed in place of an explicit Color object in methods which accept a
reference to Color. Color may also be converted to a std::string for
convenience in user interfaces, and for saving settings to a text
file.</p>
<p>The following is the definition of the Color class:</p>
<pre class="literal-block">// Compare two Color objects regardless of LHS/RHS
int MagickDLLDecl operator == ( const Magick::Color& left_, const Magick::Color& right_ );
int MagickDLLDecl operator != ( const Magick::Color& left_, const Magick::Color& right_ );
int MagickDLLDecl operator > ( const Magick::Color& left_, const Magick::Color& right_ );
int MagickDLLDecl operator < ( const Magick::Color& left_, const Magick::Color& right_ );
int MagickDLLDecl operator >= ( const Magick::Color& left_, const Magick::Color& right_ );
int MagickDLLDecl operator <= ( const Magick::Color& left_, const Magick::Color& right_ );
// Base color class stores RGB components scaled to fit Quantum
class MagickDLLDecl Color
{
public:
Color ( Quantum red_,
Quantum green_,
Quantum blue_ );
Color ( Quantum red_,
Quantum green_,
Quantum blue_,
Quantum alpha_ );
Color ( const std::string &x11color_ );
Color ( const char * x11color_ );
Color ( void );
virtual ~Color ( void );
Color ( const Color & color_ );
// Red color (range 0 to MaxRGB)
void redQuantum ( Quantum red_ );
Quantum redQuantum ( void ) const;
// Green color (range 0 to MaxRGB)
void greenQuantum ( Quantum green_ );
Quantum greenQuantum ( void ) const;
// Blue color (range 0 to MaxRGB)
void blueQuantum ( Quantum blue_ );
Quantum blueQuantum ( void ) const;
// Alpha level (range OpaqueOpacity=0 to TransparentOpacity=MaxRGB)
void alphaQuantum ( Quantum alpha_ );
Quantum alphaQuantum ( void ) const;
// Scaled (to 1.0) version of alpha for use in sub-classes
// (range opaque=0 to transparent=1.0)
void alpha ( double alpha_ );
double alpha ( void ) const;
// Does object contain valid color?
void isValid ( bool valid_ );
bool isValid ( void ) const;
// Set color via X11 color specification string
const Color& operator= ( const std::string &x11color_ );
const Color& operator= ( const char * x11color_ );
// Assignment operator
Color& operator= ( const Color& color_ );
// Return X11 color specification string
/* virtual */ operator std::string() const;
// Return ImageMagick PixelPacket
operator PixelPacket() const;
// Construct color via ImageMagick PixelPacket
Color ( const PixelPacket &color_ );
// Set color via ImageMagick PixelPacket
const Color& operator= ( const PixelPacket &color_ );
};</pre>
</section>
<section id="color-derived-classes">
<h1>Color Derived Classes</h1>
<p>Available derived color specification classes are shown in the following table:</p>
<table>
<caption>Color Derived Classes</caption>
<colgroup>
<col style="width: 14%" />
<col style="width: 86%" />
</colgroup>
<thead>
<tr><th class="head"><p>Class</p></th>
<th class="head"><p>Description</p></th>
</tr>
</thead>
<tbody>
<tr><td><p><a class="reference internal" href="#colorrgb">ColorRGB</a></p></td>
<td><p>Representation of RGB color with red, green, and blue specified
as ratios (0 to 1)</p></td>
</tr>
<tr><td><p><a class="reference internal" href="#colorgray">ColorGray</a></p></td>
<td><p>Representation of grayscale RGB color (equal parts red, green,
and blue) specified as a ratio (0 to 1)</p></td>
</tr>
<tr><td><p><a class="reference internal" href="#colormono">ColorMono</a></p></td>
<td><p>Representation of a black/white color (true/false)</p></td>
</tr>
<tr><td><p><a class="reference internal" href="#colorhsl">ColorHSL</a></p></td>
<td><p>Representation of a color in Hue/Saturation/Luminosity (HSL)
colorspace</p></td>
</tr>
<tr><td><p><a class="reference internal" href="#coloryuv">ColorYUV</a></p></td>
<td><p>Representation of a color in the YUV colorspace</p></td>
</tr>
</tbody>
</table>
</section>
<section id="colorrgb">
<h1>ColorRGB</h1>
<p>Representation of an RGB color in floating point. All color arguments
have a valid range of 0.0 - 1.0. Note that floating point alpha may be
set via the alpha() method in the Color base class:</p>
<pre class="literal-block">class ColorRGB : public Color
{
public:
ColorRGB ( double red_, double green_, double blue_ );
ColorRGB ( void );
ColorRGB ( const Color & color_ );
/* virtual */ ~ColorRGB ( void );
void red ( double red_ );
double red ( void ) const;
void green ( double green_ );
double green ( void ) const;
void blue ( double blue_ );
double blue ( void ) const;
// Assignment operator from base class
ColorRGB& operator= ( const Color& color_ );
protected:
// Constructor to construct with PixelPacket*
ColorRGB ( PixelPacket* rep_, PixelType pixelType_ );
};</pre>
</section>
<section id="colorgray">
<h1>ColorGray</h1>
<p>Representation of a floating point grayscale color (in RGB
colorspace). Grayscale is simply RGB with equal parts of red, green,
and blue. All double arguments have a valid range of 0.0 - 1.0:</p>
<pre class="literal-block">class ColorGray : public Color
{
public:
ColorGray ( double shade_ );
ColorGray ( void );
ColorGray ( const Color & color_ );
/* virtual */ ~ColorGray ();
void shade ( double shade_ );
double shade ( void ) const;
// Assignment operator from base class
ColorGray& operator= ( const Color& color_ );
};</pre>
</section>
<section id="colormono">
<h1>ColorMono</h1>
<p>Representation of a black/white pixel (in RGB colorspace). Color
arguments are constrained to 'false' (black pixel) and 'true' (white
pixel):</p>
<pre class="literal-block">class ColorMono : public Color
{
public:
ColorMono ( bool mono_ );
ColorMono ( void );
ColorMono ( const Color & color_ );
/* virtual */ ~ColorMono ();
void mono ( bool mono_ );
bool mono ( void ) const;
// Assignment operator from base class
ColorMono& operator= ( const Color& color_ );
};</pre>
</section>
<section id="colorhsl">
<h1>ColorHSL</h1>
<p>Representation of a color in Hue/Saturation/Luminosity (HSL) colorspace:</p>
<pre class="literal-block">class MagickDLLDecl ColorHSL : public Color
{
public:
ColorHSL ( double hue_, double saturation_, double luminosity_ );
ColorHSL ( void );
ColorHSL ( const Color & color_ );
/* virtual */ ~ColorHSL ( );
void hue ( double hue_ );
double hue ( void ) const;
void saturation ( double saturation_ );
double saturation ( void ) const;
void luminosity ( double luminosity_ );
double luminosity ( void ) const;
// Assignment operator from base class
ColorHSL& operator= ( const Color& color_ );
};</pre>
</section>
<section id="coloryuv">
<h1>ColorYUV</h1>
<p>Representation of a color in YUV colorspace (used to encode color for
television transmission). Argument ranges are</p>
<blockquote>
<table>
<colgroup>
<col style="width: 11%" />
<col style="width: 89%" />
</colgroup>
<tbody>
<tr><td><p>Y</p></td>
<td><p>0.0 through 1.0</p></td>
</tr>
<tr><td><p>U</p></td>
<td><p>-0.5 through 0.5</p></td>
</tr>
<tr><td><p>V</p></td>
<td><p>-0.5 through 0.5</p></td>
</tr>
</tbody>
</table>
</blockquote>
<pre class="literal-block">class ColorYUV : public Color
{
public:
ColorYUV ( double y_, double u_, double v_ );
ColorYUV ( void );
ColorYUV ( const Color & color_ );
/* virtual */ ~ColorYUV ( void );
void u ( double u_ );
double u ( void ) const;
void v ( double v_ );
double v ( void ) const;
void y ( double y_ );
double y ( void ) const;
// Assignment operator from base class
ColorYUV& operator= ( const Color& color_ );
};</pre>
<p>Copyright © Bob Friesenhahn 1999 - 2022</p>
</section>
</main>
<hr class="docutils">
<div class="document">
<p><a href="../Copyright.html">Copyright</a> © GraphicsMagick Group 2002-2025<!--SPONSOR_LOGO--></p>
</div>
</main>
</body>
</html>
|