blob: f9c0202215c3440feb414b07956abe8459f28188 [file] [log] [blame]
cristydcca3fa2010-12-29 21:50:07 +00001<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
2 "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
cristy2bd2a982011-02-15 00:52:58 +00003<html version="-//W3C//DTD XHTML 1.1//EN"
4 xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
5 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
6 xsi:schemaLocation="http://www.w3.org/1999/xhtml
7 http://www.w3.org/MarkUp/SCHEMA/xhtml11.xsd">
cristy3eaa0ef2010-03-06 20:35:26 +00008<head>
cristy3c98a4f2010-08-13 20:09:41 +00009 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
10 <meta name="verify-v1" content="g222frIIxcQTrvDR3NBRUSKP3AnMNoqxOkIniCEkV7U="/>
cristyffb69ed2010-12-25 00:06:48 +000011 <title>ImageMagick: MagickCore, C API for ImageMagick: Reduce the Number of Unique Colors in an Image</title>
cristy3ed852e2009-09-05 21:47:34 +000012 <meta http-equiv="Content-Language" content="en-US"/>
13 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
14 <meta http-equiv="Reply-to" content="magick-users@imagemagick.org"/>
cristy3c98a4f2010-08-13 20:09:41 +000015 <meta name="Application-name" content="ImageMagick"/>
cristyaf8d6652011-02-04 21:57:45 +000016 <meta name="Description" content="Use ImageMagick to convert, edit, or compose bitmap images in a variety of formats. In addition resize, rotate, shear, distort and transform images."/>
cristy3c98a4f2010-08-13 20:09:41 +000017 <meta name="Application-url" content="http://www.imagemagick.org"/>
cristy3ed852e2009-09-05 21:47:34 +000018 <meta name="Generator" content="PHP"/>
19 <meta name="Keywords" content="magickcore, c, api, for, imagemagick:, reduce, the, number, of, unique, colors, in, an, image, ImageMagick, ImageMagic, MagickCore, MagickWand, PerlMagick, Magick++, RMagick, PythonMagick, JMagick, TclMagick, Image, Magick, Magic, Wand, ImageMagickObject, Swiss, Army, Knife, Image, Processing"/>
cristy3ed852e2009-09-05 21:47:34 +000020 <meta name="Rating" content="GENERAL"/>
21 <meta name="Robots" content="INDEX, FOLLOW"/>
22 <meta name="Generator" content="ImageMagick Studio LLC"/>
23 <meta name="Author" content="ImageMagick Studio LLC"/>
24 <meta name="Revisit-after" content="2 DAYS"/>
25 <meta name="Resource-type" content="document"/>
cristy4103d562010-12-10 01:38:54 +000026 <meta name="Copyright" content="Copyright (c) 1999-2011 ImageMagick Studio LLC"/>
cristy3ed852e2009-09-05 21:47:34 +000027 <meta name="Distribution" content="Global"/>
cristydcca3fa2010-12-29 21:50:07 +000028 <link rel="icon" href="../../images/wand.png"/>
cristy3c98a4f2010-08-13 20:09:41 +000029 <link rel="shortcut icon" href="../../images/wand.ico" type="images/x-icon"/>
30 <link rel="meta" type="application/rdf+xml" title="ICI" href="http://imagemagick.org/ici.rdf"/>
cristy7a40ba82011-01-08 20:31:18 +000031 <link rel="stylesheet" href="http://www.google.com/cse/style/look/default.css" type="text/css" />
cristy3c98a4f2010-08-13 20:09:41 +000032 <style type="text/css" media="all">
33 @import url("../../www/magick.css");
34 </style>
cristydcca3fa2010-12-29 21:50:07 +000035 <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
cristy361f4662010-12-31 23:02:52 +000036 <script type="text/javascript" src="../fancybox/jquery.fancybox-1.3.4.pack.js"></script>
37 <link rel="stylesheet" type="text/css" href="../fancybox/jquery.fancybox-1.3.4.css" media="screen" />
38 <script type="text/javascript">
39 $(document).ready(function() {
40 $("a[href$=.jpg],a[href$=.png],a[href$=.gif]").fancybox({
41 'transitionIn' : 'elastic',
42 'transitionOut' : 'elastic',
43 'overlayShow' : false,
44 'opacity' : true
45 });
46 });
47 </script>
cristy3eaa0ef2010-03-06 20:35:26 +000048</head>
49
50<body id="www-imagemagick-org">
51<div class="titlebar">
52<a href="../../index.html">
53 <img src="../../images/script.png" alt="[ImageMagick]"
54 style="width: 350px; height: 60px; margin: 28px auto; float: left;" /></a>
55<a href="http://www.networkredux.com">
56 <img src="../../images/networkredux.png" alt="[sponsor]"
cristy52923442011-01-15 22:54:31 +000057 style="margin-top: 42px; border: 0px; float: left;" /></a>
cristy3eaa0ef2010-03-06 20:35:26 +000058<a href="http://www.imagemagick.org/discourse-server/">
cristyaf8d6652011-02-04 21:57:45 +000059 <img src="../../images/logo.jpg"
60 alt="ImageMagick Logo"
cristy178edaf2011-01-23 03:42:39 +000061 style="width: 123px; height: 118px; border: 0px; float: right;" /></a>
cristy3eaa0ef2010-03-06 20:35:26 +000062<a href="../../index.html">
cristyaf8d6652011-02-04 21:57:45 +000063 <img src="../../images/sprite.jpg"
64 alt="ImageMagick Sprite"
cristy3eaa0ef2010-03-06 20:35:26 +000065 style="width: 114px; height: 118px; border: 0px; float: right;" /></a>
66</div>
67
cristyce69bb02010-07-27 19:49:46 +000068<div class="westbar">
cristy3eaa0ef2010-03-06 20:35:26 +000069
cristy3ed852e2009-09-05 21:47:34 +000070<div class="menu">
cristy83a272e2010-05-07 20:40:35 +000071 <a title="About ImageMagick" href="../../index.html">About ImageMagick</a>
cristy3ed852e2009-09-05 21:47:34 +000072</div>
cristy3eaa0ef2010-03-06 20:35:26 +000073<div class="sep"></div>
cristy3ed852e2009-09-05 21:47:34 +000074<div class="menu">
cristybb503372010-05-27 20:51:26 +000075 <a title="Binary Releases" href="../../www/binary-releases.html">Binary Releases</a>
76</div>
77<div class="sub">
78 <a title="Binary Release: Unix" href="../../www/binary-releases.html#unix">Unix</a>
79</div>
80<div class="sub">
81 <a title="Binary Release: MacOS X" href="../../www/binary-releases.html#macosx">Mac OS X</a>
82</div>
83<div class="sub">
84 <a title="Binary Release: Windows" href="../../www/binary-releases.html#windows">Windows</a>
85</div>
86<div class="sep"></div>
87<div class="menu">
cristy83a272e2010-05-07 20:40:35 +000088 <a title="Command-line Tools" href="../../www/command-line-tools.html">Command-line Tools</a>
cristy3ed852e2009-09-05 21:47:34 +000089</div>
90<div class="sub">
cristy83a272e2010-05-07 20:40:35 +000091 <a title="Command-line Tools: Processing" href="../../www/command-line-processing.html">Processing</a>
cristy3ed852e2009-09-05 21:47:34 +000092</div>
93<div class="sub">
cristy83a272e2010-05-07 20:40:35 +000094 <a title="Command-line Tools: Options" href="../../www/command-line-options.html">Options</a>
cristy3ed852e2009-09-05 21:47:34 +000095</div>
96<div class="sub">
cristy83a272e2010-05-07 20:40:35 +000097 <a title="Command-line Tools: Usage" href="http://www.imagemagick.org/Usage/">Usage</a>
cristy3ed852e2009-09-05 21:47:34 +000098</div>
99<div class="menu">
cristy83a272e2010-05-07 20:40:35 +0000100 <a title="Program Interfaces" href="../../www/api.html">Program Interfaces</a>
cristy3ed852e2009-09-05 21:47:34 +0000101</div>
102<div class="sub">
cristy83a272e2010-05-07 20:40:35 +0000103 <a title="Program Interface: MagickWand" href="../../www/magick-wand.html">MagickWand</a>
cristy3ed852e2009-09-05 21:47:34 +0000104</div>
105<div class="sub">
cristy83a272e2010-05-07 20:40:35 +0000106 <a title="Program Interface: MagickCore" href="../../www/magick-core.html">MagickCore</a>
cristy3ed852e2009-09-05 21:47:34 +0000107</div>
108<div class="sub">
cristy83a272e2010-05-07 20:40:35 +0000109 <a title="Program Interface: PerlMagick" href="../../www/perl-magick.html">PerlMagick</a>
cristy3ed852e2009-09-05 21:47:34 +0000110</div>
111<div class="sub">
cristydcca3fa2010-12-29 21:50:07 +0000112 <a title="Program Interface: Magick++" href="../../www/magick++.html">Magick++</a>
cristy3ed852e2009-09-05 21:47:34 +0000113</div>
cristy3eaa0ef2010-03-06 20:35:26 +0000114<div class="sep"></div>
cristy3ed852e2009-09-05 21:47:34 +0000115<div class="menu">
cristy83a272e2010-05-07 20:40:35 +0000116 <a title="Install from Source" href="../../www/install-source.html">Install from Source</a>
cristy3ed852e2009-09-05 21:47:34 +0000117</div>
118<div class="sub">
cristy83a272e2010-05-07 20:40:35 +0000119 <a title="Install from Source: Unix" href="../../www/install-source.html#unix">Unix</a>
cristy3ed852e2009-09-05 21:47:34 +0000120</div>
121<div class="sub">
cristy83a272e2010-05-07 20:40:35 +0000122 <a title="Install from Source: Windows" href="../../www/install-source.html#windows">Windows</a>
cristy3ed852e2009-09-05 21:47:34 +0000123 </div>
124<div class="menu">
cristy83a272e2010-05-07 20:40:35 +0000125 <a title="Resources" href="../../www/resources.html">Resources</a>
cristy3ed852e2009-09-05 21:47:34 +0000126</div>
cristybb503372010-05-27 20:51:26 +0000127<div class="menu">
128 <a title="Architecture" href="../../www/architecture.html">Architecture</a>
129</div>
cristy3ed852e2009-09-05 21:47:34 +0000130<div class="menu">
cristy83a272e2010-05-07 20:40:35 +0000131 <a title="Download" href="../../www/download.html">Download</a>
cristy3ed852e2009-09-05 21:47:34 +0000132</div>
cristy3eaa0ef2010-03-06 20:35:26 +0000133<div class="sep"></div>
cristy3ed852e2009-09-05 21:47:34 +0000134<div class="menu">
cristy52923442011-01-15 22:54:31 +0000135 <a title="Search" href="../../www/search.html">Search</a>
cristy3ed852e2009-09-05 21:47:34 +0000136</div>
cristy3eaa0ef2010-03-06 20:35:26 +0000137<div class="sep"></div>
cristy3ed852e2009-09-05 21:47:34 +0000138<div class="menu">
cristyffb69ed2010-12-25 00:06:48 +0000139 <a title="Site Map" href="../../www/sitemap.html">Site Map</a>
cristy3ed852e2009-09-05 21:47:34 +0000140</div>
141<div class="sub">
cristyffb69ed2010-12-25 00:06:48 +0000142 <a title="Site Map: Links" href="../../www/links.html">Links</a>
cristy3ed852e2009-09-05 21:47:34 +0000143</div>
cristy3eaa0ef2010-03-06 20:35:26 +0000144<div class="sep"></div>
cristy3ed852e2009-09-05 21:47:34 +0000145<div class="menu">
cristy83a272e2010-05-07 20:40:35 +0000146 <a title="Sponsors" href="../../www/sponsors.html">Sponsors:</a>
cristy3ed852e2009-09-05 21:47:34 +0000147
148<div class="sponsbox">
cristy178edaf2011-01-23 03:42:39 +0000149<div class="sponsor">
cristyaf8d6652011-02-04 21:57:45 +0000150 <a title="Sponsor: Best Web Hosting" href="http://webhostinggeeks.com">Best Web Hosting</a><!-- 201110010720 -->
151</div>
152<div class="sponsor">
153 <a title="Sponsor: Web Hosting Ratings" href="http://webhostingrating.com">Web Hosting Ratings</a><!-- 201110010720 -->
154</div>
155<div class="sponsor">
cristy2bd2a982011-02-15 00:52:58 +0000156 <a title="Sponsor: Druckerei" href="http://www.allesdruck.de">Druckerei</a><!-- 201107010240 r.leo -->
cristy178edaf2011-01-23 03:42:39 +0000157</div>
cristyec6b4752011-01-08 03:16:23 +0000158<div class="sponsor">
cristy52923442011-01-15 22:54:31 +0000159 <a title="Sponsor: Web Hosting" href="http://www.bodhost.com/hosting.shtml">Web Hosting</a><!-- 201104010090 -->
cristy5c4585b2010-11-11 00:13:57 +0000160</div>
161<div class="sponsor">
cristyc5baf4f2010-08-31 15:05:33 +0000162 <a title="Sponsor: Image Converter" href="http://www.batchphoto.com">Image Converter</a><!-- 201103010900 Bits Coffee-->
163</div>
164<div class="sponsor">
cristy851dbce2010-08-06 21:40:00 +0000165 <a title="Sponsor: Flyer drucken" href="http://www.online-druck.biz">Flyer drucken</a><!-- 201109010900 Floeter-->
166</div>
cristyec6b4752011-01-08 03:16:23 +0000167<div class="sponsor">
cristy178edaf2011-01-23 03:42:39 +0000168 <a title="Sponsor: Druckerei" href="http://print24.com/de/">Druckerei</a><!-- 201110010720 -->
169</div>
170<div class="sponsor">
cristy6f77f692011-02-15 15:31:39 +0000171 <a title="Sponsor: Webdesign" href="http://www.renehornig.com/">Webdesign</a><!-- 20111001000240 -->
cristyec6b4752011-01-08 03:16:23 +0000172</div>
cristy3ed852e2009-09-05 21:47:34 +0000173</div>
174</div>
cristyce69bb02010-07-27 19:49:46 +0000175</div>
cristy3eaa0ef2010-03-06 20:35:26 +0000176
cristyce69bb02010-07-27 19:49:46 +0000177<div class="eastbar">
178 <script type="text/javascript">
179 <!--
180 google_ad_client = "pub-3129977114552745";
cristyce69bb02010-07-27 19:49:46 +0000181 google_ad_slot = "0574824969";
182 google_ad_width = 160;
183 google_ad_height = 600;
184 //-->
185 </script>
186 <script type="text/javascript"
187 src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
188 </script>
cristy3eaa0ef2010-03-06 20:35:26 +0000189</div>
190
191<div class="main">
192
cristy6f77f692011-02-15 15:31:39 +0000193<h1>Module quantize
194 Methods</h1>
195<p class="navigation-index">[<a href="#QuantizeImage">QuantizeImage</a> &bull; <a href="#AcquireQuantizeInfo">AcquireQuantizeInfo</a> &bull; <a href="#CloneQuantizeInfo">CloneQuantizeInfo</a> &bull; <a href="#CompressImageColormap">CompressImageColormap</a> &bull; <a href="#DestroyQuantizeInfo">DestroyQuantizeInfo</a> &bull; <a href="#GetImageQuantizeError">GetImageQuantizeError</a> &bull; <a href="#GetQuantizeInfo">GetQuantizeInfo</a> &bull; <a href="#PosterizeImage">PosterizeImage</a> &bull; <a href="#QuantizeImage">QuantizeImage</a> &bull; <a href="#QuantizeImages">QuantizeImages</a> &bull; <a href="#RemapImage">RemapImage</a> &bull; <a href="#RemapImages">RemapImages</a> &bull; <a href="#SetGrayscaleImage">SetGrayscaleImage</a>]</p>
cristy3ed852e2009-09-05 21:47:34 +0000196
cristy6f77f692011-02-15 15:31:39 +0000197<h2><a href="http://www.imagemagick.org/api/MagickCore/quantize
198_8c.html" id="QuantizeImage">QuantizeImage</a></h2>
199<div class="doc-section">
200
201<p>QuantizeImage() takes a standard RGB or monochrome images and quantizes them down to some fixed number of colors.</p>
202
203<p>For purposes of color allocation, an image is a set of n pixels, where each pixel is a point in RGB space. RGB space is a 3-dimensional vector space, and each pixel, Pi, is defined by an ordered triple of red, green, and blue coordinates, (Ri, Gi, Bi).</p>
204
205<p>Each primary color component (red, green, or blue) represents an intensity which varies linearly from 0 to a maximum value, Cmax, which corresponds to full saturation of that color. Color allocation is defined over a domain consisting of the cube in RGB space with opposite vertices at (0,0,0) and (Cmax, Cmax, Cmax). QUANTIZE requires Cmax = 255.</p>
206
207<p>The algorithm maps this domain onto a tree in which each node represents a cube within that domain. In the following discussion these cubes are defined by the coordinate of two opposite vertices:</p>
208
209<pre class="text">
210 the origin.
211</pre>
212
213<p>The tree's root node represents the entire domain, (0,0,0) through (Cmax,Cmax,Cmax). Each lower level in the tree is generated by subdividing one node's cube into eight smaller cubes of equal size. This corresponds to bisecting the parent cube with planes passing through the midpoints of each edge.</p>
214
215<p>The basic algorithm operates in three phases: Classification, Reduction, and Assignment. Classification builds a color description tree for the image. Reduction collapses the tree until the number it represents, at most, the number of colors desired in the output image. Assignment defines the output image's color map and sets each pixel's color by restorage_class in the reduced tree. Our goal is to minimize the numerical discrepancies between the original colors and quantized colors (quantization error).</p>
216
217<p>Classification begins by initializing a color description tree of sufficient depth to represent each possible input color in a leaf. However, it is impractical to generate a fully-formed color description tree in the storage_class phase for realistic values of Cmax. If colors components in the input image are quantized to k-bit precision, so that Cmax= 2k-1, the tree would need k levels below the root node to allow representing each possible input color in a leaf. This becomes prohibitive because the tree's total number of nodes is 1 + sum(i=1, k, 8k).</p>
218
219<p>A complete tree would require 19,173,961 nodes for k = 8, Cmax = 255.</p>
220<h5>avoid building a fully populated tree, QUANTIZE</h5>
221<p>(1) Initializes data structures for nodes only as they are needed; (2) Chooses a maximum depth for the tree as a function of the desired number of colors in the output image (currently log2(colormap size)).</p>
222
223<p>For each pixel in the input image, storage_class scans downward from the root of the color description tree. At each level of the tree it identifies the single node which represents a cube in RGB space containing the pixel's color. It updates the following data for each such node:</p>
224
225<pre class="text">
226 n1: Number of pixels whose color is contained in the RGB cube which
227 this node represents;
228</pre>
229
230<p>n2: Number of pixels whose color is not represented in a node at lower depth in the tree; initially, n2 = 0 for all nodes except leaves of the tree.</p>
231
232<p>Sr, Sg, Sb: Sums of the red, green, and blue component values for all pixels not classified at a lower depth. The combination of these sums and n2 will ultimately characterize the mean color of a set of pixels represented by this node.</p>
233
234<p>E: the distance squared in RGB space between each pixel contained within a node and the nodes' center. This represents the quantization error for a node.</p>
235
236<p>Reduction repeatedly prunes the tree until the number of nodes with n2 > 0 is less than or equal to the maximum number of colors allowed in the output image. On any given iteration over the tree, it selects those nodes whose E count is minimal for pruning and merges their color statistics upward. It uses a pruning threshold, Ep, to govern node selection as follows:</p>
237
238<p>Ep = 0 while number of nodes with (n2 > 0) > required maximum number of colors prune all nodes such that E <= Ep Set Ep to minimum E in remaining nodes</p>
239
240<p>This has the effect of minimizing any quantization error when merging two nodes together.</p>
241
242<p>When a node to be pruned has offspring, the pruning procedure invokes itself recursively in order to prune the tree from the leaves upward. n2, Sr, Sg, and Sb in a node being pruned are always added to the corresponding data in that node's parent. This retains the pruned node's color characteristics for later averaging.</p>
243
244<p>For each node, n2 pixels exist for which that node represents the smallest volume in RGB space containing those pixel's colors. When n2 > 0 the node will uniquely define a color in the output image. At the beginning of reduction, n2 = 0 for all nodes except a the leaves of the tree which represent colors present in the input image.</p>
245
246<p>The other pixel count, n1, indicates the total number of colors within the cubic volume which the node represents. This includes n1 - n2 pixels whose colors should be defined by nodes at a lower level in the tree.</p>
247
248<p>Assignment generates the output image from the pruned tree. The output</p>
249<h5>parts</h5>
250<p>(1) A color map, which is an array of color descriptions (RGB triples) for each color present in the output image; (2) A pixel array, which represents each pixel as an index into the color map array.</p>
251
252<p>First, the assignment phase makes one pass over the pruned color description tree to establish the image's color map. For each node with n2 > 0, it divides Sr, Sg, and Sb by n2 . This produces the mean color of all pixels that classify no lower than this node. Each of these colors becomes an entry in the color map.</p>
253
254<p>Finally, the assignment phase reclassifies each pixel in the pruned tree to identify the deepest node containing the pixel's color. The pixel's value in the pixel array becomes the index of this node's mean color in the color map.</p>
255
256<p>This method is based on a similar algorithm written by Paul Raveling.</p>
257
258 </div>
259<h2><a href="http://www.imagemagick.org/api/MagickCore/quantize
260_8c.html" id="AcquireQuantizeInfo">AcquireQuantizeInfo</a></h2>
261<div class="doc-section">
262
263<p>AcquireQuantizeInfo() allocates the QuantizeInfo structure.</p>
264
265<p>The format of the AcquireQuantizeInfo method is:</p>
266
267<pre class="code">
268 QuantizeInfo *AcquireQuantizeInfo(const ImageInfo *image_info)
269</pre>
270
271<p>A description of each parameter follows:</p>
272
273<h5>image_info</h5>
274<p>the image info.</p>
275
276 </div>
277<h2><a href="http://www.imagemagick.org/api/MagickCore/quantize
278_8c.html" id="CloneQuantizeInfo">CloneQuantizeInfo</a></h2>
279<div class="doc-section">
280
281<p>CloneQuantizeInfo() makes a duplicate of the given quantize info structure, or if quantize info is NULL, a new one.</p>
282
283<p>The format of the CloneQuantizeInfo method is:</p>
284
285<pre class="code">
286 QuantizeInfo *CloneQuantizeInfo(const QuantizeInfo *quantize_info)
287</pre>
288
289<p>A description of each parameter follows:</p>
290
291<h5>clone_info</h5>
292<p>Method CloneQuantizeInfo returns a duplicate of the given quantize info, or if image info is NULL a new one.</p>
293
294<h5>quantize_info</h5>
295<p>a structure of type info.</p>
296
297 </div>
298<h2><a href="http://www.imagemagick.org/api/MagickCore/quantize
299_8c.html" id="CompressImageColormap">CompressImageColormap</a></h2>
300<div class="doc-section">
301
302<p>CompressImageColormap() compresses an image colormap by removing any duplicate or unused color entries.</p>
303
304<p>The format of the CompressImageColormap method is:</p>
305
306<pre class="code">
307 MagickBooleanType CompressImageColormap(Image *image)
308</pre>
309
310<p>A description of each parameter follows:</p>
311
312<h5>image</h5>
313<p>the image.</p>
314
315 </div>
316<h2><a href="http://www.imagemagick.org/api/MagickCore/quantize
317_8c.html" id="DestroyQuantizeInfo">DestroyQuantizeInfo</a></h2>
318<div class="doc-section">
319
320<p>DestroyQuantizeInfo() deallocates memory associated with an QuantizeInfo structure.</p>
321
322<p>The format of the DestroyQuantizeInfo method is:</p>
323
324<pre class="code">
325 QuantizeInfo *DestroyQuantizeInfo(QuantizeInfo *quantize_info)
326</pre>
327
328<p>A description of each parameter follows:</p>
329
330<h5>quantize_info</h5>
331<p>Specifies a pointer to an QuantizeInfo structure.</p>
332
333 </div>
334<h2><a href="http://www.imagemagick.org/api/MagickCore/quantize
335_8c.html" id="GetImageQuantizeError">GetImageQuantizeError</a></h2>
336<div class="doc-section">
337
338<p>GetImageQuantizeError() measures the difference between the original and quantized images. This difference is the total quantization error. The error is computed by summing over all pixels in an image the distance squared in RGB space between each reference pixel value and its quantized value. These values are computed:</p>
339
340<pre class="text">
341 o mean_error_per_pixel: This value is the mean error for any single
342 pixel in the image.
343</pre>
344
345<h5>normalized_mean_square_error</h5>
346<p>This value is the normalized mean quantization error for any single pixel in the image. This distance measure is normalized to a range between 0 and 1. It is independent of the range of red, green, and blue values in the image.</p>
347
348<h5>normalized_maximum_square_error</h5>
349<p>Thsi value is the normalized maximum quantization error for any single pixel in the image. This distance measure is normalized to a range between 0 and 1. It is independent of the range of red, green, and blue values in your image.</p>
350
351<p>The format of the GetImageQuantizeError method is:</p>
352
353<pre class="code">
354 MagickBooleanType GetImageQuantizeError(Image *image)
355</pre>
356
357<p>A description of each parameter follows.</p>
358
359<h5>image</h5>
360<p>the image.</p>
361
362 </div>
363<h2><a href="http://www.imagemagick.org/api/MagickCore/quantize
364_8c.html" id="GetQuantizeInfo">GetQuantizeInfo</a></h2>
365<div class="doc-section">
366
367<p>GetQuantizeInfo() initializes the QuantizeInfo structure.</p>
368
369<p>The format of the GetQuantizeInfo method is:</p>
370
371<pre class="code">
372 GetQuantizeInfo(QuantizeInfo *quantize_info)
373</pre>
374
375<p>A description of each parameter follows:</p>
376
377<h5>quantize_info</h5>
378<p>Specifies a pointer to a QuantizeInfo structure.</p>
379
380 </div>
381<h2><a href="http://www.imagemagick.org/api/MagickCore/quantize
382_8c.html" id="PosterizeImage">PosterizeImage</a></h2>
383<div class="doc-section">
384
385<p>PosterizeImage() reduces the image to a limited number of colors for a "poster" effect.</p>
386
387<p>The format of the PosterizeImage method is:</p>
388
389<pre class="code">
390 MagickBooleanType PosterizeImage(Image *image,const size_t levels,
391 const MagickBooleanType dither)
392 MagickBooleanType PosterizeImageChannel(Image *image,
393 const ChannelType channel,const size_t levels,
394 const MagickBooleanType dither)
395</pre>
396
397<p>A description of each parameter follows:</p>
398
399<h5>image</h5>
400<p>Specifies a pointer to an Image structure.</p>
401
402<h5>levels</h5>
403<p>Number of color levels allowed in each channel. Very low values (2, 3, or 4) have the most visible effect.</p>
404
405<h5>dither</h5>
406<p>Set this integer value to something other than zero to dither the mapped image.</p>
407
408 </div>
409<h2><a href="http://www.imagemagick.org/api/MagickCore/quantize
410_8c.html" id="QuantizeImage">QuantizeImage</a></h2>
411<div class="doc-section">
412
413<p>QuantizeImage() analyzes the colors within a reference image and chooses a fixed number of colors to represent the image. The goal of the algorithm is to minimize the color difference between the input and output image while minimizing the processing time.</p>
414
415<p>The format of the QuantizeImage method is:</p>
416
417<pre class="code">
418 MagickBooleanType QuantizeImage(const QuantizeInfo *quantize_info,
419 Image *image)
420</pre>
421
422<p>A description of each parameter follows:</p>
423
424<h5>quantize_info</h5>
425<p>Specifies a pointer to an QuantizeInfo structure.</p>
426
427<h5>image</h5>
428<p>the image.</p>
429
430 </div>
431<h2><a href="http://www.imagemagick.org/api/MagickCore/quantize
432_8c.html" id="QuantizeImages">QuantizeImages</a></h2>
433<div class="doc-section">
434
435<p>QuantizeImages() analyzes the colors within a set of reference images and chooses a fixed number of colors to represent the set. The goal of the algorithm is to minimize the color difference between the input and output images while minimizing the processing time.</p>
436
437<p>The format of the QuantizeImages method is:</p>
438
439<pre class="code">
440 MagickBooleanType QuantizeImages(const QuantizeInfo *quantize_info,
441 Image *images)
442</pre>
443
444<p>A description of each parameter follows:</p>
445
446<h5>quantize_info</h5>
447<p>Specifies a pointer to an QuantizeInfo structure.</p>
448
449<h5>images</h5>
450<p>Specifies a pointer to a list of Image structures.</p>
451
452 </div>
453<h2><a href="http://www.imagemagick.org/api/MagickCore/quantize
454_8c.html" id="RemapImage">RemapImage</a></h2>
455<div class="doc-section">
456
457<p>RemapImage() replaces the colors of an image with the closest color from a reference image.</p>
458
459<p>The format of the RemapImage method is:</p>
460
461<pre class="code">
462 MagickBooleanType RemapImage(const QuantizeInfo *quantize_info,
463 Image *image,const Image *remap_image)
464</pre>
465
466<p>A description of each parameter follows:</p>
467
468<h5>quantize_info</h5>
469<p>Specifies a pointer to an QuantizeInfo structure.</p>
470
471<h5>image</h5>
472<p>the image.</p>
473
474<h5>remap_image</h5>
475<p>the reference image.</p>
476
477 </div>
478<h2><a href="http://www.imagemagick.org/api/MagickCore/quantize
479_8c.html" id="RemapImages">RemapImages</a></h2>
480<div class="doc-section">
481
482<p>RemapImages() replaces the colors of a sequence of images with the closest color from a reference image.</p>
483
484<p>The format of the RemapImage method is:</p>
485
486<pre class="code">
487 MagickBooleanType RemapImages(const QuantizeInfo *quantize_info,
488 Image *images,Image *remap_image)
489</pre>
490
491<p>A description of each parameter follows:</p>
492
493<h5>quantize_info</h5>
494<p>Specifies a pointer to an QuantizeInfo structure.</p>
495
496<h5>images</h5>
497<p>the image sequence.</p>
498
499<h5>remap_image</h5>
500<p>the reference image.</p>
501
502 </div>
503<h2><a href="http://www.imagemagick.org/api/MagickCore/quantize
504_8c.html" id="SetGrayscaleImage">SetGrayscaleImage</a></h2>
505<div class="doc-section">
506
507<p>SetGrayscaleImage() converts an image to a PseudoClass grayscale image.</p>
508
509<p>The format of the SetGrayscaleImage method is:</p>
510
511<pre class="code">
512 MagickBooleanType SetGrayscaleImage(Image *image)
513</pre>
514
515<p>A description of each parameter follows:</p>
516
517<h5>image</h5>
518<p>The image.</p>
519
520 </div>
cristy3eaa0ef2010-03-06 20:35:26 +0000521
522</div>
523
524<div id="linkbar">
cristyce69bb02010-07-27 19:49:46 +0000525 <span id="linkbar-west">&nbsp;</span>
cristy3eaa0ef2010-03-06 20:35:26 +0000526 <span id="linkbar-center">
527 <a href="http://www.imagemagick.org/discourse-server/">Discourse Server</a> &bull;
cristya8902942010-07-30 00:49:52 +0000528 <a href="http://www.imagemagick.org/MagickStudio/scripts/MagickStudio.cgi">Studio</a>
cristy3eaa0ef2010-03-06 20:35:26 +0000529 </span>
530 <span id="linkbar-east">&nbsp;</span>
531 </div>
532 <div class="footer">
cristy4103d562010-12-10 01:38:54 +0000533 <span id="footer-west">&copy; 1999-2011 ImageMagick Studio LLC</span>
cristy3eaa0ef2010-03-06 20:35:26 +0000534 <span id="footer-east"> <a href="../http://www.imagemagick.org/script/contact.php">Contact the Wizards</a></span>
535 </div>
536 <div style="clear: both; margin: 0; width: 100%; "></div>
cristya8902942010-07-30 00:49:52 +0000537 <script type="text/javascript">
538 var _gaq = _gaq || [];
539 _gaq.push(['_setAccount', 'UA-17690367-1']);
540 _gaq.push(['_trackPageview']);
541
542 (function() {
543 var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
544 ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
545 var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
546 })();
547 </script>
cristy3eaa0ef2010-03-06 20:35:26 +0000548</body>
549</html>