|
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
|
|
<head>
|
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
|
<title>Magick++ API: Working with Pixels </title>
|
|
|
<link rel="stylesheet" href="magick.css" type="text/css" />
|
|
|
</head>
|
|
|
<body>
|
|
|
<div class="doc-section">
|
|
|
<h1 align="center">Magick::Pixels</h1>
|
|
|
<p>The <i>Pixels</i> class provides efficient access to raw image
|
|
|
pixels. Image pixels (of type <a href="Quantum.html"><i>Quantum</i></a>)
|
|
|
may be accessed directly via the <i>Image Pixel Cache</i>. The image
|
|
|
pixel cache is a rectangular window (a view) into the actual image
|
|
|
pixels (which may be in memory, memory-mapped from a disk file, or
|
|
|
entirely on disk). Obtain existing image pixels via <i>get()</i>.
|
|
|
Create a new pixel region using <i>set().</i> </p>
|
|
|
<p>Depending on the capabilities of the operating system, and the
|
|
|
relationship of the window to the image, the pixel cache may be a copy
|
|
|
of the pixels in the selected window, or it may be the actual image
|
|
|
pixels. In any case calling <i>sync()</i> insures that the base image
|
|
|
is updated with the contents of the modified pixel cache. The method <i>decode()</i>supports
|
|
|
copying foreign pixel data formats into the pixel cache according to
|
|
|
the <i>QuantumTypes</i>. The method <i>encode()</i> supports copying
|
|
|
the pixels in the cache to a foreign pixel representation according to
|
|
|
the format specified by <i>QuantumTypes</i>. </p>
|
|
|
<p>Setting a view using the Pixels class does not cause the number of
|
|
|
references to the underlying image to be reduced to one. Therefore, in
|
|
|
order to ensure that only the current generation of the image is
|
|
|
modified, the Image's <a href="Image++.html#modifyImage">modifyImage()</a>
|
|
|
method should be invoked to reduce the reference count on the underlying
|
|
|
image to one. If this is not done, then it is possible for a previous
|
|
|
generation of the image to be modified due to the use of reference
|
|
|
counting when copying or constructing an Image. </p>
|
|
|
<p>The <i>Quantum</i>* returned by the <i>set</i> and <i>get</i>
|
|
|
methods, and the <i>void</i>* returned by the <i>indexes</i>
|
|
|
method point to pixel data managed by the <i>Pixels</i> class. The <i>Pixels</i>
|
|
|
class is responsible for releasing resources associated with the pixel
|
|
|
view. This means that the pointer should never be passed to delete() or
|
|
|
free(). </p>
|
|
|
<p style="margin-bottom: 0cm;">The pixel view is a small image in which
|
|
|
the pixels may be accessed, addressed, and updated, as shown in the
|
|
|
following example, which produces an image similar to the one on the
|
|
|
right (minus lines and text): </p>
|
|
|
<p class="image"><img class="icon" src="Cache.png" name="Graphic1" align="bottom" width="254" border="0" /></p>
|
|
|
<div class="viewport">
|
|
|
#include <Magick++.h>
|
|
|
#include <iostream>
|
|
|
|
|
|
using namespace std;
|
|
|
using namespace Magick;
|
|
|
int main(int argc,char **argv)
|
|
|
{
|
|
|
InitializeMagick(*argv);
|
|
|
|
|
|
// Create base image
|
|
|
Image image(Geometry(254,218), "white");
|
|
|
|
|
|
|
|
|
// Set the image type to TrueColor DirectClass representation.
|
|
|
image.type(TrueColorType);
|
|
|
// Ensure that there is only one reference to underlying image
|
|
|
// If this is not done, then image pixels will not be modified.
|
|
|
image.modifyImage();
|
|
|
|
|
|
// Allocate pixel view
|
|
|
Pixels view(image);
|
|
|
|
|
|
// Set all pixels in region anchored at 38x36, with size 160x230 to green.
|
|
|
size_t columns = 196; size_t rows = 162;
|
|
|
Color green("green");
|
|
|
Quantum *pixels = view.get(38,36,columns,rows);
|
|
|
for ( ssize_t row = 0; row < rows ; ++row )
|
|
|
for ( ssize_t column = 0; column < columns ; ++column )
|
|
|
{
|
|
|
*pixels++=QuantumRange*green.quantumRed();
|
|
|
*pixels++=QuantumRange*green.quantumGreen();
|
|
|
*pixels++=QuantumRange*green.quantumBlue();
|
|
|
}
|
|
|
|
|
|
// Save changes to image.
|
|
|
view.sync();
|
|
|
|
|
|
// Set all pixels in region anchored at 86x72, with size 108x67 to yellow.
|
|
|
columns = 108; rows = 67;
|
|
|
Color yellow("yellow");
|
|
|
pixels = view.get(86,72,columns,rows);
|
|
|
for ( ssize_t row = 0; row < rows ; ++row )
|
|
|
for ( ssize_t column = 0; column < columns ; ++column )
|
|
|
{
|
|
|
*pixels++=QuantumRange*yellow.quantumRed();
|
|
|
*pixels++=QuantumRange*yellow.quantumGreen();
|
|
|
*pixels++=QuantumRange*yellow.quantumBlue();
|
|
|
}
|
|
|
view.sync();
|
|
|
|
|
|
// Set pixel at position 108,94 to red
|
|
|
Color red("red");
|
|
|
pixels = view.get(108,94,1,1);
|
|
|
*pixels++=QuantumRange*red.quantumRed();
|
|
|
*pixels++=QuantumRange*red.quantumGreen();
|
|
|
*pixels++=QuantumRange*red.quantumBlue();
|
|
|
|
|
|
// Save changes to image.
|
|
|
view.sync();
|
|
|
image.write( "logo.png" );
|
|
|
}
|
|
|
</div>
|
|
|
<p style="margin-bottom: 0cm;"><i>Pixels</i> supports the following
|
|
|
methods: </p>
|
|
|
<p align="center" style="margin-bottom: 0cm;"><b>Pixel Cache Methods</b></p>
|
|
|
<table width="100%" border="1" cellpadding="2" cellspacing="2">
|
|
|
<tbody>
|
|
|
<tr>
|
|
|
<td>
|
|
|
<p align="center"><b>Method</b></p>
|
|
|
</td>
|
|
|
<td>
|
|
|
<p align="center"><b>Returns</b></p>
|
|
|
</td>
|
|
|
<td>
|
|
|
<p align="center"><b>Signature</b></p>
|
|
|
</td>
|
|
|
<td>
|
|
|
<p align="center"><b>Description</b></p>
|
|
|
</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td>
|
|
|
<p align="center"><a name="get"></a><font size="2">get</font></p>
|
|
|
</td>
|
|
|
<td>
|
|
|
<p><font size="2"><a href="Quantum.html">Quantum</a>*</font></p>
|
|
|
</td>
|
|
|
<td>
|
|
|
<p><font size="2">const ssize_t x_, const ssize_t y_, const size_t
|
|
|
columns_, const size_t rows_</font></p>
|
|
|
</td>
|
|
|
<td>
|
|
|
<p><font size="2">Transfers read-write pixels from the image to
|
|
|
the pixel cache as defined by the specified rectangular region.
|
|
|
Modified pixels may be subsequently transferred back to the image
|
|
|
via <i>sync</i>. The value returned is intended for pixel access
|
|
|
only. It should never be deallocated.</font></p>
|
|
|
</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td>
|
|
|
<p align="center"><a name="getConst"></a><font size="2">getConst</font></p>
|
|
|
</td>
|
|
|
<td>
|
|
|
<p><font size="2">const <a href="Quantum.html">Quantum</a>*</font></p>
|
|
|
</td>
|
|
|
<td>
|
|
|
<p><font size="2">const ssize_t x_, const ssize_t y_, const size_t
|
|
|
columns_, const size_t rows_</font></p>
|
|
|
</td>
|
|
|
<td>
|
|
|
<p><font size="2">Transfers read-only pixels from the image to
|
|
|
the pixel cache as defined by the specified rectangular region.</font></p>
|
|
|
</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td>
|
|
|
<p align="center"><a name="set"></a><font size="2">set</font></p>
|
|
|
</td>
|
|
|
<td>
|
|
|
<p><font size="2"><a href="Quantum.html">Quantum</a>*</font></p>
|
|
|
</td>
|
|
|
<td>
|
|
|
<p><font size="2">const ssize_t x_, const ssize_t y_, const size_t
|
|
|
columns_, const size_t rows_</font></p>
|
|
|
</td>
|
|
|
<td>
|
|
|
<p><font size="2">Allocates a pixel cache region to store image
|
|
|
pixels as defined by the region rectangle. This area is
|
|
|
subsequently transferred from the pixel cache to the image via <i>sync</i>.
|
|
|
The value returned is intended for pixel access only. It should
|
|
|
never be deallocated.</font></p>
|
|
|
</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td>
|
|
|
<p align="center"><a name="sync"></a><font size="2">sync</font></p>
|
|
|
</td>
|
|
|
<td>
|
|
|
<p><font size="2">void</font></p>
|
|
|
</td>
|
|
|
<td>
|
|
|
<p><font size="2">void</font></p>
|
|
|
</td>
|
|
|
<td>
|
|
|
<p><font size="2">Transfers the image cache pixels to the image.</font></p>
|
|
|
</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td>
|
|
|
<p align="center"><a name="indexes"></a><font size="2">indexes</font></p>
|
|
|
</td>
|
|
|
<td>
|
|
|
<p><font size="2">void*</font></p>
|
|
|
</td>
|
|
|
<td>
|
|
|
<p><font size="2">void</font></p>
|
|
|
</td>
|
|
|
<td>
|
|
|
<p><font size="2">Returns the PsuedoColor pixel indexes
|
|
|
corresponding to the pixel region defined by the last <a href="Pixels.html#get">get</a>
|
|
|
, <a href="Pixels.html#getConst">getConst</a>, or <a href="Pixels.html#set">set</a>
|
|
|
call. Only valid for PseudoColor and CMYKA images. The pixel
|
|
|
indexes (an array of type <i>void</i>, which is typedef <i>Quantum</i>,
|
|
|
which is itself typedef <i>unsigned char</i>, or <i>unsigned short</i>,
|
|
|
depending on the value of the <i>QuantumDepth </i>define) provide
|
|
|
the <span lang="en-US">colormap</span> index (see <a
|
|
|
href="Image++.html#colorMap">colorMap</a>) for each pixel in the
|
|
|
image. For CMYKA images, the indexes represent the black
|
|
|
channel. The value returned is intended for pixel access only. It
|
|
|
should never be deallocated.</font></p>
|
|
|
</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td>
|
|
|
<p align="center"><a name="x"></a><font size="2">x</font></p>
|
|
|
</td>
|
|
|
<td>
|
|
|
<p><font size="2">int</font></p>
|
|
|
</td>
|
|
|
<td>
|
|
|
<p><font size="2">void</font></p>
|
|
|
</td>
|
|
|
<td>
|
|
|
<p><font size="2">Left ordinate of view</font></p>
|
|
|
</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td>
|
|
|
<p align="center"><a name="y"></a><font size="2">y</font></p>
|
|
|
</td>
|
|
|
<td>
|
|
|
<p><font size="2">int</font></p>
|
|
|
</td>
|
|
|
<td>
|
|
|
<p><font size="2">void</font></p>
|
|
|
</td>
|
|
|
<td>
|
|
|
<p><font size="2">Top ordinate of view</font></p>
|
|
|
</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td>
|
|
|
<p align="center"><a name="columns"></a><font size="2">columns</font></p>
|
|
|
</td>
|
|
|
<td>
|
|
|
<p><font size="2">size_t</font></p>
|
|
|
</td>
|
|
|
<td>
|
|
|
<p><font size="2">void</font></p>
|
|
|
</td>
|
|
|
<td>
|
|
|
<p><font size="2">Width of view</font></p>
|
|
|
</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td>
|
|
|
<p align="center"><a name="rows"></a><font size="2">rows</font></p>
|
|
|
</td>
|
|
|
<td>
|
|
|
<p><font size="2">size_t</font></p>
|
|
|
</td>
|
|
|
<td>
|
|
|
<p><font size="2">void</font></p>
|
|
|
</td>
|
|
|
<td>
|
|
|
<p><font size="2">Height of view</font></p>
|
|
|
</td>
|
|
|
</tr>
|
|
|
</tbody>
|
|
|
</table>
|
|
|
</div>
|
|
|
</body>
|
|
|
</html>
|