pixel.c revision db070957cf6bf959df9283a482377e8854c3d4d2
13ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/*
23ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
33ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
43ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
53ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
63ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                      PPPP   IIIII  X   X  EEEEE  L                          %
73ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                      P   P    I     X X   E      L                          %
83ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                      PPPP     I      X    EEE    L                          %
93ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                      P        I     X X   E      L                          %
103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                      P      IIIII  X   X  EEEEE  LLLLL                      %
113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                  MagickCore Methods to Import/Export Pixels                 %
133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                             Software Design                                 %
153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                               John Cristy                                   %
163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                               October 1998                                  %
173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
191454be7db7a897f42cd40e4165f945d77196a6f8cristy%  Copyright 1999-2012 ImageMagick Studio LLC, a non-profit organization      %
203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  dedicated to making software imaging solutions freely available.           %
213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  You may not use this file except in compliance with the License.  You may  %
233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  obtain a copy of the License at                                            %
243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%    http://www.imagemagick.org/script/license.php                            %
263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  Unless required by applicable law or agreed to in writing, software        %
283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  distributed under the License is distributed on an "AS IS" BASIS,          %
293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   %
303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  See the License for the specific language governing permissions and        %
313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  limitations under the License.                                             %
323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/
373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/*
393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  Include declarations.
403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/
414c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/studio.h"
424c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/property.h"
434c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/blob.h"
444c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/blob-private.h"
45322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy#include "MagickCore/cache-private.h"
464c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/color-private.h"
474c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/draw.h"
484c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/exception.h"
494c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/exception-private.h"
504c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/cache.h"
514c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/constitute.h"
524c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/delegate.h"
534c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/geometry.h"
544c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/image-private.h"
554c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/list.h"
564c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/magick.h"
574c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/memory_.h"
584c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/monitor.h"
594c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/option.h"
604c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/pixel.h"
614c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/pixel-accessor.h"
624c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/quantum.h"
634c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/quantum-private.h"
644c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/resource_.h"
654c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/semaphore.h"
664c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/statistic.h"
674c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/stream.h"
684c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/string_.h"
694c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/transform.h"
704c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/utility.h"
714c08aed51c5899665ade97263692328eea4af106cristy
72146a62b25d7466cceec79975894ce812e11f4625cristy#define LogPixelChannels(image) \
73146a62b25d7466cceec79975894ce812e11f4625cristy{ \
74146a62b25d7466cceec79975894ce812e11f4625cristy  register ssize_t \
75146a62b25d7466cceec79975894ce812e11f4625cristy    i; \
76146a62b25d7466cceec79975894ce812e11f4625cristy \
77146a62b25d7466cceec79975894ce812e11f4625cristy  (void) LogMagickEvent(PixelEvent,GetMagickModule(),"%s[%.20g]", \
78146a62b25d7466cceec79975894ce812e11f4625cristy    image->filename,(double) image->number_channels); \
79146a62b25d7466cceec79975894ce812e11f4625cristy  for (i=0; i < (ssize_t) image->number_channels; i++) \
80146a62b25d7466cceec79975894ce812e11f4625cristy  { \
81146a62b25d7466cceec79975894ce812e11f4625cristy    char \
82146a62b25d7466cceec79975894ce812e11f4625cristy      traits[MaxTextExtent]; \
83146a62b25d7466cceec79975894ce812e11f4625cristy \
84146a62b25d7466cceec79975894ce812e11f4625cristy    const char \
854679572011210c29de1840060a4bf942afe8d29ecristy      *name; \
864679572011210c29de1840060a4bf942afe8d29ecristy \
874679572011210c29de1840060a4bf942afe8d29ecristy    PixelChannel \
884679572011210c29de1840060a4bf942afe8d29ecristy      channel; \
89146a62b25d7466cceec79975894ce812e11f4625cristy \
90e2a912b6c9086c98ec838baa0824cd8deca55538cristy    switch (GetPixelChannelMapChannel(image,i)) \
91146a62b25d7466cceec79975894ce812e11f4625cristy    { \
92146a62b25d7466cceec79975894ce812e11f4625cristy      case RedPixelChannel: \
93146a62b25d7466cceec79975894ce812e11f4625cristy      { \
944679572011210c29de1840060a4bf942afe8d29ecristy        name="red"; \
95146a62b25d7466cceec79975894ce812e11f4625cristy        if (image->colorspace == CMYKColorspace) \
964679572011210c29de1840060a4bf942afe8d29ecristy          name="cyan"; \
97146a62b25d7466cceec79975894ce812e11f4625cristy        if (image->colorspace == GRAYColorspace) \
984679572011210c29de1840060a4bf942afe8d29ecristy          name="gray"; \
99146a62b25d7466cceec79975894ce812e11f4625cristy        break; \
100146a62b25d7466cceec79975894ce812e11f4625cristy      } \
101146a62b25d7466cceec79975894ce812e11f4625cristy      case GreenPixelChannel: \
102146a62b25d7466cceec79975894ce812e11f4625cristy      { \
1034679572011210c29de1840060a4bf942afe8d29ecristy        name="green"; \
104146a62b25d7466cceec79975894ce812e11f4625cristy        if (image->colorspace == CMYKColorspace) \
1054679572011210c29de1840060a4bf942afe8d29ecristy          name="magenta"; \
106146a62b25d7466cceec79975894ce812e11f4625cristy        break; \
107146a62b25d7466cceec79975894ce812e11f4625cristy      } \
108146a62b25d7466cceec79975894ce812e11f4625cristy      case BluePixelChannel: \
109146a62b25d7466cceec79975894ce812e11f4625cristy      { \
1104679572011210c29de1840060a4bf942afe8d29ecristy        name="blue"; \
111146a62b25d7466cceec79975894ce812e11f4625cristy        if (image->colorspace == CMYKColorspace) \
1124679572011210c29de1840060a4bf942afe8d29ecristy          name="yellow"; \
113146a62b25d7466cceec79975894ce812e11f4625cristy        break; \
114146a62b25d7466cceec79975894ce812e11f4625cristy      } \
115146a62b25d7466cceec79975894ce812e11f4625cristy      case BlackPixelChannel: \
116146a62b25d7466cceec79975894ce812e11f4625cristy      { \
1174679572011210c29de1840060a4bf942afe8d29ecristy        name="black"; \
118146a62b25d7466cceec79975894ce812e11f4625cristy        if (image->storage_class == PseudoClass) \
1194679572011210c29de1840060a4bf942afe8d29ecristy          name="index"; \
120146a62b25d7466cceec79975894ce812e11f4625cristy        break; \
121146a62b25d7466cceec79975894ce812e11f4625cristy      } \
122e2a912b6c9086c98ec838baa0824cd8deca55538cristy      case IndexPixelChannel: \
123e2a912b6c9086c98ec838baa0824cd8deca55538cristy      { \
1244679572011210c29de1840060a4bf942afe8d29ecristy        name="index"; \
125e2a912b6c9086c98ec838baa0824cd8deca55538cristy        break; \
126e2a912b6c9086c98ec838baa0824cd8deca55538cristy      } \
127146a62b25d7466cceec79975894ce812e11f4625cristy      case AlphaPixelChannel: \
128146a62b25d7466cceec79975894ce812e11f4625cristy      { \
1294679572011210c29de1840060a4bf942afe8d29ecristy        name="alpha"; \
130146a62b25d7466cceec79975894ce812e11f4625cristy        break; \
131146a62b25d7466cceec79975894ce812e11f4625cristy      } \
132146a62b25d7466cceec79975894ce812e11f4625cristy      case MaskPixelChannel: \
133146a62b25d7466cceec79975894ce812e11f4625cristy      { \
1344679572011210c29de1840060a4bf942afe8d29ecristy        name="mask"; \
135146a62b25d7466cceec79975894ce812e11f4625cristy        break; \
136146a62b25d7466cceec79975894ce812e11f4625cristy      } \
137e2a912b6c9086c98ec838baa0824cd8deca55538cristy      case MetaPixelChannel: \
138146a62b25d7466cceec79975894ce812e11f4625cristy      { \
1394679572011210c29de1840060a4bf942afe8d29ecristy        name="meta"; \
140e2a912b6c9086c98ec838baa0824cd8deca55538cristy        break; \
141146a62b25d7466cceec79975894ce812e11f4625cristy      } \
142e2a912b6c9086c98ec838baa0824cd8deca55538cristy      default: \
1434679572011210c29de1840060a4bf942afe8d29ecristy        name="undefined"; \
144146a62b25d7466cceec79975894ce812e11f4625cristy    } \
1454679572011210c29de1840060a4bf942afe8d29ecristy    channel=GetPixelChannelMapChannel(image,i); \
146146a62b25d7466cceec79975894ce812e11f4625cristy    *traits='\0'; \
1474679572011210c29de1840060a4bf942afe8d29ecristy    if ((GetPixelChannelMapTraits(image,channel) & UpdatePixelTrait) != 0) \
148146a62b25d7466cceec79975894ce812e11f4625cristy      (void) ConcatenateMagickString(traits,"update,",MaxTextExtent); \
1494679572011210c29de1840060a4bf942afe8d29ecristy    if ((GetPixelChannelMapTraits(image,channel) & BlendPixelTrait) != 0) \
150146a62b25d7466cceec79975894ce812e11f4625cristy      (void) ConcatenateMagickString(traits,"blend,",MaxTextExtent); \
1514679572011210c29de1840060a4bf942afe8d29ecristy    if ((GetPixelChannelMapTraits(image,channel) & CopyPixelTrait) != 0) \
152146a62b25d7466cceec79975894ce812e11f4625cristy      (void) ConcatenateMagickString(traits,"copy,",MaxTextExtent); \
153146a62b25d7466cceec79975894ce812e11f4625cristy    if (*traits == '\0') \
154146a62b25d7466cceec79975894ce812e11f4625cristy      (void) ConcatenateMagickString(traits,"undefined,",MaxTextExtent); \
155146a62b25d7466cceec79975894ce812e11f4625cristy    traits[strlen(traits)-1]='\0'; \
156146a62b25d7466cceec79975894ce812e11f4625cristy    (void) LogMagickEvent(PixelEvent,GetMagickModule(),"  %.20g: %s (%s)", \
1574679572011210c29de1840060a4bf942afe8d29ecristy      (double) i,name,traits); \
158146a62b25d7466cceec79975894ce812e11f4625cristy  } \
159146a62b25d7466cceec79975894ce812e11f4625cristy}
160146a62b25d7466cceec79975894ce812e11f4625cristy
161146a62b25d7466cceec79975894ce812e11f4625cristy/*
1624c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1634c08aed51c5899665ade97263692328eea4af106cristy%                                                                             %
1644c08aed51c5899665ade97263692328eea4af106cristy%                                                                             %
1654c08aed51c5899665ade97263692328eea4af106cristy%                                                                             %
166ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy+   A c q u i r e P i x e l C h a n n e l M a p                               %
1674c08aed51c5899665ade97263692328eea4af106cristy%                                                                             %
1684c08aed51c5899665ade97263692328eea4af106cristy%                                                                             %
1694c08aed51c5899665ade97263692328eea4af106cristy%                                                                             %
1704c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1714c08aed51c5899665ade97263692328eea4af106cristy%
172ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy%  AcquirePixelChannelMap() acquires a pixel component map.
1734c08aed51c5899665ade97263692328eea4af106cristy%
174ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy%  The format of the AcquirePixelChannelMap() method is:
1754c08aed51c5899665ade97263692328eea4af106cristy%
176bd5a96cd2b69f218f85a7adc306296a736f91a56cristy%      PixelChannelMap *AcquirePixelChannelMap(void)
1774c08aed51c5899665ade97263692328eea4af106cristy%
1784c08aed51c5899665ade97263692328eea4af106cristy*/
179bd5a96cd2b69f218f85a7adc306296a736f91a56cristyMagickExport PixelChannelMap *AcquirePixelChannelMap(void)
1804c08aed51c5899665ade97263692328eea4af106cristy{
181ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy  PixelChannelMap
182bd5a96cd2b69f218f85a7adc306296a736f91a56cristy    *channel_map;
1834c08aed51c5899665ade97263692328eea4af106cristy
1844c08aed51c5899665ade97263692328eea4af106cristy  register ssize_t
1854c08aed51c5899665ade97263692328eea4af106cristy    i;
1864c08aed51c5899665ade97263692328eea4af106cristy
187bd5a96cd2b69f218f85a7adc306296a736f91a56cristy  channel_map=(PixelChannelMap *) AcquireQuantumMemory(MaxPixelChannels,
188bd5a96cd2b69f218f85a7adc306296a736f91a56cristy    sizeof(*channel_map));
189bd5a96cd2b69f218f85a7adc306296a736f91a56cristy  if (channel_map == (PixelChannelMap *) NULL)
1904c08aed51c5899665ade97263692328eea4af106cristy    ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed");
191bd5a96cd2b69f218f85a7adc306296a736f91a56cristy  (void) ResetMagickMemory(channel_map,0,MaxPixelChannels*sizeof(*channel_map));
192bd5a96cd2b69f218f85a7adc306296a736f91a56cristy  for (i=0; i < MaxPixelChannels; i++)
193bd5a96cd2b69f218f85a7adc306296a736f91a56cristy    channel_map[i].channel=(PixelChannel) i;
194ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy  return(channel_map);
1954c08aed51c5899665ade97263692328eea4af106cristy}
1964c08aed51c5899665ade97263692328eea4af106cristy
1974c08aed51c5899665ade97263692328eea4af106cristy/*
1984c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1994c08aed51c5899665ade97263692328eea4af106cristy%                                                                             %
2004c08aed51c5899665ade97263692328eea4af106cristy%                                                                             %
2014c08aed51c5899665ade97263692328eea4af106cristy%                                                                             %
202ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy+   C l o n e P i x e l C h a n n e l M a p                                   %
2034c08aed51c5899665ade97263692328eea4af106cristy%                                                                             %
2044c08aed51c5899665ade97263692328eea4af106cristy%                                                                             %
2054c08aed51c5899665ade97263692328eea4af106cristy%                                                                             %
2064c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2074c08aed51c5899665ade97263692328eea4af106cristy%
208ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy%  ClonePixelChannelMap() clones a pixel component map.
2094c08aed51c5899665ade97263692328eea4af106cristy%
210ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy%  The format of the ClonePixelChannelMap() method is:
2114c08aed51c5899665ade97263692328eea4af106cristy%
212bd5a96cd2b69f218f85a7adc306296a736f91a56cristy%      PixelChannelMap *ClonePixelChannelMap(PixelChannelMap *channel_map)
2134c08aed51c5899665ade97263692328eea4af106cristy%
2144c08aed51c5899665ade97263692328eea4af106cristy%  A description of each parameter follows:
2154c08aed51c5899665ade97263692328eea4af106cristy%
216ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy%    o channel_map: the pixel component map.
2174c08aed51c5899665ade97263692328eea4af106cristy%
2184c08aed51c5899665ade97263692328eea4af106cristy*/
219bd5a96cd2b69f218f85a7adc306296a736f91a56cristyMagickExport PixelChannelMap *ClonePixelChannelMap(PixelChannelMap *channel_map)
2204c08aed51c5899665ade97263692328eea4af106cristy{
221ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy  PixelChannelMap
222bd5a96cd2b69f218f85a7adc306296a736f91a56cristy    *clone_map;
2234c08aed51c5899665ade97263692328eea4af106cristy
224bd5a96cd2b69f218f85a7adc306296a736f91a56cristy  assert(channel_map != (PixelChannelMap *) NULL);
225ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy  clone_map=AcquirePixelChannelMap();
226bd5a96cd2b69f218f85a7adc306296a736f91a56cristy  if (clone_map == (PixelChannelMap *) NULL)
227bd5a96cd2b69f218f85a7adc306296a736f91a56cristy    return((PixelChannelMap *) NULL);
228bd5a96cd2b69f218f85a7adc306296a736f91a56cristy  (void) CopyMagickMemory(clone_map,channel_map,MaxPixelChannels*
229bd5a96cd2b69f218f85a7adc306296a736f91a56cristy    sizeof(*channel_map));
2304c08aed51c5899665ade97263692328eea4af106cristy  return(clone_map);
2314c08aed51c5899665ade97263692328eea4af106cristy}
2324c08aed51c5899665ade97263692328eea4af106cristy
2334c08aed51c5899665ade97263692328eea4af106cristy/*
2344c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2354c08aed51c5899665ade97263692328eea4af106cristy%                                                                             %
2364c08aed51c5899665ade97263692328eea4af106cristy%                                                                             %
2374c08aed51c5899665ade97263692328eea4af106cristy%                                                                             %
2384c08aed51c5899665ade97263692328eea4af106cristy+   C l o n e P i x e l I n f o                                               %
2394c08aed51c5899665ade97263692328eea4af106cristy%                                                                             %
2404c08aed51c5899665ade97263692328eea4af106cristy%                                                                             %
2414c08aed51c5899665ade97263692328eea4af106cristy%                                                                             %
2424c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2434c08aed51c5899665ade97263692328eea4af106cristy%
2444c08aed51c5899665ade97263692328eea4af106cristy%  ClonePixelInfo() makes a duplicate of the given pixel info structure, or if
2454c08aed51c5899665ade97263692328eea4af106cristy%  pixel info is NULL, a new one.
2464c08aed51c5899665ade97263692328eea4af106cristy%
2474c08aed51c5899665ade97263692328eea4af106cristy%  The format of the ClonePixelInfo method is:
2484c08aed51c5899665ade97263692328eea4af106cristy%
2494c08aed51c5899665ade97263692328eea4af106cristy%      PixelInfo *ClonePixelInfo(const PixelInfo *pixel_info)
2504c08aed51c5899665ade97263692328eea4af106cristy%
2514c08aed51c5899665ade97263692328eea4af106cristy%  A description of each parameter follows:
2524c08aed51c5899665ade97263692328eea4af106cristy%
2534c08aed51c5899665ade97263692328eea4af106cristy%    o pixel_info: the pixel info.
2544c08aed51c5899665ade97263692328eea4af106cristy%
2554c08aed51c5899665ade97263692328eea4af106cristy*/
2564c08aed51c5899665ade97263692328eea4af106cristyMagickExport PixelInfo *ClonePixelInfo(const PixelInfo *pixel)
2574c08aed51c5899665ade97263692328eea4af106cristy{
2584c08aed51c5899665ade97263692328eea4af106cristy  PixelInfo
2594c08aed51c5899665ade97263692328eea4af106cristy    *pixel_info;
2604c08aed51c5899665ade97263692328eea4af106cristy
261a64b85d7873d5e540fe6e2941aa98ec7653a4e2dcristy  pixel_info=(PixelInfo *) AcquireQuantumMemory(1,sizeof(*pixel_info));
2624c08aed51c5899665ade97263692328eea4af106cristy  if (pixel_info == (PixelInfo *) NULL)
2634c08aed51c5899665ade97263692328eea4af106cristy    ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed");
2644c08aed51c5899665ade97263692328eea4af106cristy  *pixel_info=(*pixel);
2654c08aed51c5899665ade97263692328eea4af106cristy  return(pixel_info);
2664c08aed51c5899665ade97263692328eea4af106cristy}
2674c08aed51c5899665ade97263692328eea4af106cristy
2684c08aed51c5899665ade97263692328eea4af106cristy/*
2694c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2704c08aed51c5899665ade97263692328eea4af106cristy%                                                                             %
2714c08aed51c5899665ade97263692328eea4af106cristy%                                                                             %
2724c08aed51c5899665ade97263692328eea4af106cristy%                                                                             %
273ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy+   D e s t r o y P i x e l C h a n n e l M a p                               %
2744c08aed51c5899665ade97263692328eea4af106cristy%                                                                             %
2754c08aed51c5899665ade97263692328eea4af106cristy%                                                                             %
2764c08aed51c5899665ade97263692328eea4af106cristy%                                                                             %
2774c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2784c08aed51c5899665ade97263692328eea4af106cristy%
279ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy%  DestroyPixelChannelMap() deallocates memory associated with the pixel
280ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy%  channel map.
2814c08aed51c5899665ade97263692328eea4af106cristy%
282ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy%  The format of the DestroyPixelChannelMap() method is:
2834c08aed51c5899665ade97263692328eea4af106cristy%
284bd5a96cd2b69f218f85a7adc306296a736f91a56cristy%      PixelChannelMap *DestroyPixelChannelMap(PixelChannelMap *channel_map)
2854c08aed51c5899665ade97263692328eea4af106cristy%
2864c08aed51c5899665ade97263692328eea4af106cristy%  A description of each parameter follows:
2874c08aed51c5899665ade97263692328eea4af106cristy%
288ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy%    o channel_map: the pixel component map.
2894c08aed51c5899665ade97263692328eea4af106cristy%
2904c08aed51c5899665ade97263692328eea4af106cristy*/
291bd5a96cd2b69f218f85a7adc306296a736f91a56cristyMagickExport PixelChannelMap *DestroyPixelChannelMap(
292bd5a96cd2b69f218f85a7adc306296a736f91a56cristy  PixelChannelMap *channel_map)
2934c08aed51c5899665ade97263692328eea4af106cristy{
294bd5a96cd2b69f218f85a7adc306296a736f91a56cristy  assert(channel_map != (PixelChannelMap *) NULL);
295bd5a96cd2b69f218f85a7adc306296a736f91a56cristy  channel_map=(PixelChannelMap *) RelinquishMagickMemory(channel_map);
296bd5a96cd2b69f218f85a7adc306296a736f91a56cristy  return((PixelChannelMap *) RelinquishMagickMemory(channel_map));
2974c08aed51c5899665ade97263692328eea4af106cristy}
2983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
2993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/*
3003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
3023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
3033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
3043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%   E x p o r t I m a g e P i x e l s                                         %
3053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
3063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
3073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
3083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
3103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  ExportImagePixels() extracts pixel data from an image and returns it to you.
3113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  The method returns MagickTrue on success otherwise MagickFalse if an error is
312b5a45a37a6faa8a3725c814b51a1a86daa4ff21fcristy%  encountered.  The data is returned as char, short int, Quantum, unsigned int,
313cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy%  unsigned long long, float, or double in the order specified by map.
3143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
3153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  Suppose you want to extract the first scanline of a 640x480 image as
3163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  character data in red-green-blue order:
3173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
3183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%      ExportImagePixels(image,0,0,640,1,"RGB",CharPixel,pixels,exception);
3193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
3203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  The format of the ExportImagePixels method is:
3213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
322cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy%      MagickBooleanType ExportImagePixels(const Image *image,const ssize_t x,
323cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy%        const ssize_t y,const size_t width,const size_t height,
324cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy%        const char *map,const StorageType type,void *pixels,
32546f4be29828ab7588745336d46ab11611c847933cristy%        ExceptionInfo *exception)
3263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
3273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  A description of each parameter follows:
3283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
3293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%    o image: the image.
3303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
331cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy%    o x,y,width,height:  These values define the perimeter
3323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%      of a region of pixels you want to extract.
3333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
3343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%    o map:  This string reflects the expected ordering of the pixel array.
3353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%      It can be any combination or order of R = red, G = green, B = blue,
3363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%      A = alpha (0 is transparent), O = opacity (0 is opaque), C = cyan,
3373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%      Y = yellow, M = magenta, K = black, I = intensity (for grayscale),
3383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%      P = pad.
3393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
3403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%    o type: Define the data type of the pixels.  Float and double types are
3413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%      normalized to [0..1] otherwise [0..QuantumRange].  Choose from these
3426c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy%      types: CharPixel (char *), DoublePixel (double *), FloatPixel (float *),
343ff6834e270b99c2747ad5b2f4edeecf862aaf825cristy%      LongPixel (unsigned int *), LongLongPixel (unsigned long long *),
3446c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy%      QuantumPixel (Quantum *), or ShortPixel (unsigned short *).
3453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
3463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%    o pixels: This array of values contain the pixel components as defined by
3473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%      map and type.  You must preallocate this array where the expected
3483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%      length varies depending on the values of width, height, map, and type.
3493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
3503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%    o exception: return any errors or warnings in this structure.
3513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
3523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/
353e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
354cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ExportCharPixel(const Image *image,const RectangleInfo *roi,
35546f4be29828ab7588745336d46ab11611c847933cristy  const char *restrict map,const QuantumType *quantum_map,void *pixels,
35646f4be29828ab7588745336d46ab11611c847933cristy  ExceptionInfo *exception)
3573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{
358e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  register const Quantum
359e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    *restrict p;
3603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
361bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy  register ssize_t
3623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    x;
3633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
364e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  register unsigned char
3653fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy    *restrict q;
3663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
3679d314ff2c17a77996c05413c2013880387e50f0ecristy  ssize_t
3689d314ff2c17a77996c05413c2013880387e50f0ecristy    y;
3699d314ff2c17a77996c05413c2013880387e50f0ecristy
37046f4be29828ab7588745336d46ab11611c847933cristy  q=(unsigned char *) pixels;
371e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"BGR") == 0)
3723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
373cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
3743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
375cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
376e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (p == (const Quantum *) NULL)
3773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
378cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
379e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
380e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=ScaleQuantumToChar(GetPixelBlue(image,p));
381e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=ScaleQuantumToChar(GetPixelGreen(image,p));
382e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=ScaleQuantumToChar(GetPixelRed(image,p));
383e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p+=GetPixelChannels(image);
384e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
3853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
386e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
387e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
388e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"BGRA") == 0)
389e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
390cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
3913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
392cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
393e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (p == (const Quantum *) NULL)
3943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
395cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
396e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
397e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=ScaleQuantumToChar(GetPixelBlue(image,p));
398e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=ScaleQuantumToChar(GetPixelGreen(image,p));
399e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=ScaleQuantumToChar(GetPixelRed(image,p));
400e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=ScaleQuantumToChar(GetPixelAlpha(image,p));
401e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p+=GetPixelChannels(image);
402e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
4033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
404e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
405e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
406e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"BGRP") == 0)
407e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
408cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
4093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
410cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
411e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (p == (const Quantum *) NULL)
4123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
413cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
414e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
415e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=ScaleQuantumToChar(GetPixelBlue(image,p));
416e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=ScaleQuantumToChar(GetPixelGreen(image,p));
417e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=ScaleQuantumToChar(GetPixelRed(image,p));
418e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=ScaleQuantumToChar((Quantum) 0);
419e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p+=GetPixelChannels(image);
420e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
4213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
422e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
423e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
424e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"I") == 0)
425e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
426cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
4273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
428cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
429e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (p == (const Quantum *) NULL)
430e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
431cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
432e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
433e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=ScaleQuantumToChar(GetPixelIntensity(image,p));
434e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p+=GetPixelChannels(image);
435e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
4363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
437e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
438e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
439e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"RGB") == 0)
440e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
441cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
4423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
443cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
444e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (p == (const Quantum *) NULL)
445e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
446cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
447e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
448e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=ScaleQuantumToChar(GetPixelRed(image,p));
449e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=ScaleQuantumToChar(GetPixelGreen(image,p));
450e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=ScaleQuantumToChar(GetPixelBlue(image,p));
451e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p+=GetPixelChannels(image);
452e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
4533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
454e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
455e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
456e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"RGBA") == 0)
457e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
458cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
4593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
460cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
461e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (p == (const Quantum *) NULL)
4623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
463cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
464e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
465e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=ScaleQuantumToChar(GetPixelRed(image,p));
466e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=ScaleQuantumToChar(GetPixelGreen(image,p));
467e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=ScaleQuantumToChar(GetPixelBlue(image,p));
468e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=ScaleQuantumToChar(GetPixelAlpha(image,p));
469e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p+=GetPixelChannels(image);
470e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
4713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
472e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
473e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
474e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"RGBP") == 0)
475e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
476cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
4773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
478cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
479e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (p == (const Quantum *) NULL)
480e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
481cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
482e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
483e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=ScaleQuantumToChar(GetPixelRed(image,p));
484e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=ScaleQuantumToChar(GetPixelGreen(image,p));
485e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=ScaleQuantumToChar(GetPixelBlue(image,p));
486e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=ScaleQuantumToChar((Quantum) 0);
487e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p+=GetPixelChannels(image);
488e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
4893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
490e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
4913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
492cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy  for (y=0; y < (ssize_t) roi->height; y++)
4933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  {
494cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy    p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
495e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    if (p == (const Quantum *) NULL)
496e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      break;
497cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy    for (x=0; x < (ssize_t) roi->width; x++)
4983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
499e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      register ssize_t
500e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        i;
5013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
502e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      for (i=0; i < (ssize_t) strlen(map); i++)
503e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
504e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        *q=0;
505e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        switch (quantum_map[i])
5063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
507e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case RedQuantum:
508e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case CyanQuantum:
5093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
510e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            *q=ScaleQuantumToChar(GetPixelRed(image,p));
511e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
5123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
513e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case GreenQuantum:
514e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case MagentaQuantum:
5153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
516e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            *q=ScaleQuantumToChar(GetPixelGreen(image,p));
517e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
5183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
519e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case BlueQuantum:
520e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case YellowQuantum:
5213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
522e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            *q=ScaleQuantumToChar(GetPixelBlue(image,p));
523e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
5243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
525e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case AlphaQuantum:
5263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
527e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            *q=ScaleQuantumToChar(GetPixelAlpha(image,p));
528e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
5293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
530e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case OpacityQuantum:
5313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
532e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            *q=ScaleQuantumToChar(GetPixelAlpha(image,p));
533e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
5343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
535e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case BlackQuantum:
5363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
537e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            if (image->colorspace == CMYKColorspace)
538e5370944fabb7afa477ab1325d400731b1e5d5e8cristy              *q=ScaleQuantumToChar(GetPixelBlack(image,p));
539e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
5403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
541e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case IndexQuantum:
5423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
543e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            *q=ScaleQuantumToChar(GetPixelIntensity(image,p));
544e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
5453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
546e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          default:
547e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
5483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
549e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        q++;
550e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
551e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      p+=GetPixelChannels(image);
552e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
553e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  }
554e5370944fabb7afa477ab1325d400731b1e5d5e8cristy}
555e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
556cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ExportDoublePixel(const Image *image,const RectangleInfo *roi,
55746f4be29828ab7588745336d46ab11611c847933cristy  const char *restrict map,const QuantumType *quantum_map,void *pixels,
55846f4be29828ab7588745336d46ab11611c847933cristy  ExceptionInfo *exception)
559e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{
560e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  register const Quantum
561e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    *restrict p;
562e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
563e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  register double
5643fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy    *restrict q;
565e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
566e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  register ssize_t
567e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    x;
568e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
569e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  ssize_t
570e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    y;
571e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
572e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  q=(double *) pixels;
573e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"BGR") == 0)
574e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
575cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
5763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
577cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
5784c08aed51c5899665ade97263692328eea4af106cristy        if (p == (const Quantum *) NULL)
5793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
580cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
5813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
582e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(double) (QuantumScale*GetPixelBlue(image,p));
583e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(double) (QuantumScale*GetPixelGreen(image,p));
584e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(double) (QuantumScale*GetPixelRed(image,p));
585ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy          p+=GetPixelChannels(image);
5863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
5873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
588e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
5893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
590e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"BGRA") == 0)
5913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
592cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
593e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
594cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
595e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (p == (const Quantum *) NULL)
5963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
597cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
5983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
599e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(double) (QuantumScale*GetPixelBlue(image,p));
600e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(double) (QuantumScale*GetPixelGreen(image,p));
601e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(double) (QuantumScale*GetPixelRed(image,p));
602e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(double) (QuantumScale*GetPixelAlpha(image,p));
603e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p+=GetPixelChannels(image);
6043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
605e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
606e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
607e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
608e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"BGRP") == 0)
609e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
610cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
6113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
612cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
6134c08aed51c5899665ade97263692328eea4af106cristy        if (p == (const Quantum *) NULL)
6143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
615cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
6163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
617e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(double) (QuantumScale*GetPixelBlue(image,p));
618e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(double) (QuantumScale*GetPixelGreen(image,p));
619e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(double) (QuantumScale*GetPixelRed(image,p));
620e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=0.0;
621ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy          p+=GetPixelChannels(image);
6223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
6233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
624e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
6253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
626e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"I") == 0)
6273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
628cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
629e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
630cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
631e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (p == (const Quantum *) NULL)
6323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
633cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
6343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
635e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(double) (QuantumScale*GetPixelIntensity(image,p));
636e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p+=GetPixelChannels(image);
6373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
638e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
639e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
640e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
641e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"RGB") == 0)
642e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
643cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
644e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
645cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
646e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (p == (const Quantum *) NULL)
6473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
648cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
6493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
650e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(double) (QuantumScale*GetPixelRed(image,p));
651e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(double) (QuantumScale*GetPixelGreen(image,p));
652e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(double) (QuantumScale*GetPixelBlue(image,p));
653e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p+=GetPixelChannels(image);
6543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
655e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
656e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
657e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
658e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"RGBA") == 0)
659e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
660cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
661e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
662cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
663e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (p == (const Quantum *) NULL)
6643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
665cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
6663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
667e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(double) (QuantumScale*GetPixelRed(image,p));
668e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(double) (QuantumScale*GetPixelGreen(image,p));
669e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(double) (QuantumScale*GetPixelBlue(image,p));
670e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(double) (QuantumScale*GetPixelAlpha(image,p));
671e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p+=GetPixelChannels(image);
6723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
673e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
674e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
675e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
676e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"RGBP") == 0)
677e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
678cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
6793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
680cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
6814c08aed51c5899665ade97263692328eea4af106cristy        if (p == (const Quantum *) NULL)
6823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
683cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
6843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
685e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(double) (QuantumScale*GetPixelRed(image,p));
686e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(double) (QuantumScale*GetPixelGreen(image,p));
687e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(double) (QuantumScale*GetPixelBlue(image,p));
688e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=0.0;
689ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy          p+=GetPixelChannels(image);
6903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
6913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
692e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
6933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
694cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy  for (y=0; y < (ssize_t) roi->height; y++)
695e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  {
696cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy    p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
697e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    if (p == (const Quantum *) NULL)
698e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      break;
699cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy    for (x=0; x < (ssize_t) roi->width; x++)
7003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
701e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      register ssize_t
702e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        i;
7033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
704e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      for (i=0; i < (ssize_t) strlen(map); i++)
705e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
706e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        *q=0;
707e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        switch (quantum_map[i])
7083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
709e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case RedQuantum:
710e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case CyanQuantum:
7113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
712e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            *q=(double) (QuantumScale*GetPixelRed(image,p));
713e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
7143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
715e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case GreenQuantum:
716e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case MagentaQuantum:
7173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
718e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            *q=(double) (QuantumScale*GetPixelGreen(image,p));
719e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
7203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
721e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case BlueQuantum:
722e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case YellowQuantum:
7233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
724e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            *q=(double) (QuantumScale*GetPixelBlue(image,p));
725e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
7263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
727e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case AlphaQuantum:
7283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
729e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            *q=(double) (QuantumScale*GetPixelAlpha(image,p));
730e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
7313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
732e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case OpacityQuantum:
7333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
734e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            *q=(double) (QuantumScale*GetPixelAlpha(image,p));
735e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
7363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
737e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case BlackQuantum:
7383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
739e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            if (image->colorspace == CMYKColorspace)
740e5370944fabb7afa477ab1325d400731b1e5d5e8cristy              *q=(double) (QuantumScale*
741e5370944fabb7afa477ab1325d400731b1e5d5e8cristy                GetPixelBlack(image,p));
742e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
7433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
744e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case IndexQuantum:
7453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
746e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            *q=(double) (QuantumScale*GetPixelIntensity(image,p));
747e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
7483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
749e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          default:
750e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            *q=0;
7513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
752e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        q++;
753e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
754e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      p+=GetPixelChannels(image);
755e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
756e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  }
757e5370944fabb7afa477ab1325d400731b1e5d5e8cristy}
758e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
759cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ExportFloatPixel(const Image *image,const RectangleInfo *roi,
76046f4be29828ab7588745336d46ab11611c847933cristy  const char *restrict map,const QuantumType *quantum_map,void *pixels,
76146f4be29828ab7588745336d46ab11611c847933cristy  ExceptionInfo *exception)
762e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{
763e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  register const Quantum
764e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    *restrict p;
765e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
766e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  register float
7673fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy    *restrict q;
768e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
769e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  register ssize_t
770e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    x;
771e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
772e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  ssize_t
773e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    y;
774e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
775e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  q=(float *) pixels;
776e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"BGR") == 0)
777e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
778cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
7793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
780cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
7814c08aed51c5899665ade97263692328eea4af106cristy        if (p == (const Quantum *) NULL)
7823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
783cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
7843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
785e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(float) (QuantumScale*GetPixelBlue(image,p));
786e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(float) (QuantumScale*GetPixelGreen(image,p));
787e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(float) (QuantumScale*GetPixelRed(image,p));
788ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy          p+=GetPixelChannels(image);
7893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
7903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
791e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
7923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
793e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"BGRA") == 0)
7943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
795cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
796e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
797cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
798e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (p == (const Quantum *) NULL)
7993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
800cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
8013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
802e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(float) (QuantumScale*GetPixelBlue(image,p));
803e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(float) (QuantumScale*GetPixelGreen(image,p));
804e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(float) (QuantumScale*GetPixelRed(image,p));
805e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(float) (QuantumScale*GetPixelAlpha(image,p));
806e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p+=GetPixelChannels(image);
8073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
808e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
809e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
810e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
811e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"BGRP") == 0)
812e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
813cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
8143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
815cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
8164c08aed51c5899665ade97263692328eea4af106cristy        if (p == (const Quantum *) NULL)
8173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
818cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
8193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
820e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(float) (QuantumScale*GetPixelBlue(image,p));
821e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(float) (QuantumScale*GetPixelGreen(image,p));
822e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(float) (QuantumScale*GetPixelRed(image,p));
823e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=0.0;
824ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy          p+=GetPixelChannels(image);
8253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
8263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
827e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
8283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
829e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"I") == 0)
8303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
831cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
832e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
833cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
834e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (p == (const Quantum *) NULL)
8353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
836cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
8373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
838e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(float) (QuantumScale*GetPixelIntensity(image,p));
839e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p+=GetPixelChannels(image);
8403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
841e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
842e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
843e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
844e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"RGB") == 0)
845e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
846cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
847e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
848cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
849e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (p == (const Quantum *) NULL)
8503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
851cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
8523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
853e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(float) (QuantumScale*GetPixelRed(image,p));
854e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(float) (QuantumScale*GetPixelGreen(image,p));
855e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(float) (QuantumScale*GetPixelBlue(image,p));
856e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p+=GetPixelChannels(image);
8573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
858e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
859e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
860e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
861e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"RGBA") == 0)
862e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
863cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
864e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
865cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
866e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (p == (const Quantum *) NULL)
8673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
868cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
8693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
870e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(float) (QuantumScale*GetPixelRed(image,p));
871e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(float) (QuantumScale*GetPixelGreen(image,p));
872e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(float) (QuantumScale*GetPixelBlue(image,p));
873e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(float) (QuantumScale*GetPixelAlpha(image,p));
874e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p+=GetPixelChannels(image);
8753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
876e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
877e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
878e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
879e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"RGBP") == 0)
880e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
881cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
8823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
883cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
8844c08aed51c5899665ade97263692328eea4af106cristy        if (p == (const Quantum *) NULL)
8853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
886cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
8873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
888e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(float) (QuantumScale*GetPixelRed(image,p));
889e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(float) (QuantumScale*GetPixelGreen(image,p));
890e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(float) (QuantumScale*GetPixelBlue(image,p));
891e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=0.0;
892ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy          p+=GetPixelChannels(image);
8933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
8943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
895e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
8963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
897cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy  for (y=0; y < (ssize_t) roi->height; y++)
898e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  {
899cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy    p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
900e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    if (p == (const Quantum *) NULL)
901e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      break;
902cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy    for (x=0; x < (ssize_t) roi->width; x++)
9033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
904e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      register ssize_t
905e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        i;
9063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
907e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      for (i=0; i < (ssize_t) strlen(map); i++)
908e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
909e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        *q=0;
910e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        switch (quantum_map[i])
9113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
912e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case RedQuantum:
913e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case CyanQuantum:
9143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
915e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            *q=(float) (QuantumScale*GetPixelRed(image,p));
916e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
9173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
918e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case GreenQuantum:
919e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case MagentaQuantum:
9203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
921e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            *q=(float) (QuantumScale*GetPixelGreen(image,p));
922e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
9233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
924e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case BlueQuantum:
925e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case YellowQuantum:
9263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
927e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            *q=(float) (QuantumScale*GetPixelBlue(image,p));
928e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
9293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
930e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case AlphaQuantum:
9313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
932e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            *q=(float) (QuantumScale*((Quantum) (GetPixelAlpha(image,p))));
933e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
9343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
935e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case OpacityQuantum:
9363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
937e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            *q=(float) (QuantumScale*GetPixelAlpha(image,p));
938e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
9393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
940e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case BlackQuantum:
9413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
942e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            if (image->colorspace == CMYKColorspace)
943e5370944fabb7afa477ab1325d400731b1e5d5e8cristy              *q=(float) (QuantumScale* GetPixelBlack(image,p));
944e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
9453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
946e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case IndexQuantum:
9473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
948e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            *q=(float) (QuantumScale*GetPixelIntensity(image,p));
949e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
9503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
951e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          default:
952e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            *q=0;
9533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
954e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        q++;
955e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
956e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      p+=GetPixelChannels(image);
957e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
958e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  }
959e5370944fabb7afa477ab1325d400731b1e5d5e8cristy}
960e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
961cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ExportLongPixel(const Image *image,const RectangleInfo *roi,
96246f4be29828ab7588745336d46ab11611c847933cristy  const char *restrict map,const QuantumType *quantum_map,void *pixels,
96346f4be29828ab7588745336d46ab11611c847933cristy  ExceptionInfo *exception)
964e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{
965e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  register const Quantum
966e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    *restrict p;
967e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
968e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  register ssize_t
969e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    x;
970e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
971e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  register unsigned int
9723fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy    *restrict q;
973e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
974e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  ssize_t
975e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    y;
976e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
977e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  q=(unsigned int *) pixels;
978e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"BGR") == 0)
979e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
980cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
9813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
982cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
9834c08aed51c5899665ade97263692328eea4af106cristy        if (p == (const Quantum *) NULL)
9843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
985cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
9863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
9876c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy          *q++=ScaleQuantumToLong(GetPixelBlue(image,p));
9886c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy          *q++=ScaleQuantumToLong(GetPixelGreen(image,p));
9896c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy          *q++=ScaleQuantumToLong(GetPixelRed(image,p));
990ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy          p+=GetPixelChannels(image);
9913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
9923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
993e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
9943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
995e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"BGRA") == 0)
9963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
997cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
998e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
999cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1000e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (p == (const Quantum *) NULL)
1001e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
1002cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
1003e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
10046c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy          *q++=ScaleQuantumToLong(GetPixelBlue(image,p));
10056c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy          *q++=ScaleQuantumToLong(GetPixelGreen(image,p));
10066c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy          *q++=ScaleQuantumToLong(GetPixelRed(image,p));
10076c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy          *q++=ScaleQuantumToLong(GetPixelAlpha(image,p));
1008e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p+=GetPixelChannels(image);
1009e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
1010e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
1011e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
1012e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
1013e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"BGRP") == 0)
1014e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
1015cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
1016e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
1017cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1018e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (p == (const Quantum *) NULL)
1019e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
1020cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
1021e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
10226c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy          *q++=ScaleQuantumToLong(GetPixelBlue(image,p));
10236c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy          *q++=ScaleQuantumToLong(GetPixelGreen(image,p));
10246c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy          *q++=ScaleQuantumToLong(GetPixelRed(image,p));
10256c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy          *q++=0;
1026e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p+=GetPixelChannels(image);
1027e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
1028e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
1029e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
1030e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
1031e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"I") == 0)
1032e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
1033cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
1034e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
1035cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1036e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (p == (const Quantum *) NULL)
1037e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
1038cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
1039e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
10406c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy          *q++=ScaleQuantumToLong(GetPixelIntensity(image,p));
1041e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p+=GetPixelChannels(image);
1042e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
1043e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
1044e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
1045e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
1046e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"RGB") == 0)
1047e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
1048cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
1049e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
1050cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1051e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (p == (const Quantum *) NULL)
1052e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
1053cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
1054e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
10556c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy          *q++=ScaleQuantumToLong(GetPixelRed(image,p));
10566c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy          *q++=ScaleQuantumToLong(GetPixelGreen(image,p));
10576c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy          *q++=ScaleQuantumToLong(GetPixelBlue(image,p));
1058e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p+=GetPixelChannels(image);
1059e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
1060e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
1061e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
1062e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
1063e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"RGBA") == 0)
1064e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
1065cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
1066e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
1067cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1068e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (p == (const Quantum *) NULL)
1069e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
1070cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
1071e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
10726c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy          *q++=ScaleQuantumToLong(GetPixelRed(image,p));
10736c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy          *q++=ScaleQuantumToLong(GetPixelGreen(image,p));
10746c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy          *q++=ScaleQuantumToLong(GetPixelBlue(image,p));
10756c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy          *q++=ScaleQuantumToLong(GetPixelAlpha(image,p));
1076e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p+=GetPixelChannels(image);
1077e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
1078e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
1079e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
1080e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
1081e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"RGBP") == 0)
1082e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
1083cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
1084e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
1085cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1086e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (p == (const Quantum *) NULL)
1087e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
1088cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
1089e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
10906c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy          *q++=ScaleQuantumToLong(GetPixelRed(image,p));
10916c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy          *q++=ScaleQuantumToLong(GetPixelGreen(image,p));
10926c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy          *q++=ScaleQuantumToLong(GetPixelBlue(image,p));
10936c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy          *q++=0;
1094e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p+=GetPixelChannels(image);
1095e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
1096e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
1097e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
1098e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
1099cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy  for (y=0; y < (ssize_t) roi->height; y++)
1100e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  {
1101cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy    p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1102e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    if (p == (const Quantum *) NULL)
1103e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      break;
1104cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy    for (x=0; x < (ssize_t) roi->width; x++)
1105e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
1106e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      register ssize_t
1107e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        i;
1108e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
1109e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      for (i=0; i < (ssize_t) strlen(map); i++)
1110e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
1111e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        *q=0;
1112e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        switch (quantum_map[i])
1113e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
1114e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case RedQuantum:
1115e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case CyanQuantum:
1116e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
11176c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy            *q=ScaleQuantumToLong(GetPixelRed(image,p));
1118e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
1119e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
1120e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case GreenQuantum:
1121e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case MagentaQuantum:
1122e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
11236c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy            *q=ScaleQuantumToLong(GetPixelGreen(image,p));
1124e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
1125e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
1126e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case BlueQuantum:
1127e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case YellowQuantum:
1128e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
11296c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy            *q=ScaleQuantumToLong(GetPixelBlue(image,p));
1130e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
1131e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
1132e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case AlphaQuantum:
1133e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
11346c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy            *q=ScaleQuantumToLong(GetPixelAlpha(image,p));
1135e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
1136e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
1137e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case OpacityQuantum:
1138e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
11396c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy            *q=ScaleQuantumToLong(GetPixelAlpha(image,p));
1140e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
1141e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
1142e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case BlackQuantum:
1143e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
1144e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            if (image->colorspace == CMYKColorspace)
11456c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy              *q=ScaleQuantumToLong(GetPixelBlack(image,p));
1146e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
1147e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
1148e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case IndexQuantum:
1149e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
11506c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy            *q=ScaleQuantumToLong(GetPixelIntensity(image,p));
1151e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
1152e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
1153e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          default:
11546c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy            break;
1155e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
1156e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        q++;
1157e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
1158e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      p+=GetPixelChannels(image);
1159e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
1160e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  }
1161e5370944fabb7afa477ab1325d400731b1e5d5e8cristy}
1162e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
1163cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ExportLongLongPixel(const Image *image,const RectangleInfo *roi,
116446f4be29828ab7588745336d46ab11611c847933cristy  const char *restrict map,const QuantumType *quantum_map,void *pixels,
116546f4be29828ab7588745336d46ab11611c847933cristy  ExceptionInfo *exception)
1166e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{
1167e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  register const Quantum
1168e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    *restrict p;
1169e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
1170e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  register ssize_t
1171e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    x;
1172e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
1173b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy  register MagickSizeType
11743fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy    *restrict q;
1175e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
1176e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  ssize_t
1177e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    y;
1178e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
1179b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy  q=(MagickSizeType *) pixels;
1180e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"BGR") == 0)
1181e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
1182cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
1183e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
1184cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1185e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (p == (const Quantum *) NULL)
1186e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
1187cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
1188e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
1189b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy          *q++=ScaleQuantumToLongLong(GetPixelBlue(image,p));
1190b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy          *q++=ScaleQuantumToLongLong(GetPixelGreen(image,p));
1191b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy          *q++=ScaleQuantumToLongLong(GetPixelRed(image,p));
1192e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p+=GetPixelChannels(image);
1193e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
1194e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
1195e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
1196e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
1197e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"BGRA") == 0)
1198e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
1199cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
1200e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
1201cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1202e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (p == (const Quantum *) NULL)
1203e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
1204cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
1205e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
1206b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy          *q++=ScaleQuantumToLongLong(GetPixelBlue(image,p));
1207b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy          *q++=ScaleQuantumToLongLong(GetPixelGreen(image,p));
1208b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy          *q++=ScaleQuantumToLongLong(GetPixelRed(image,p));
1209b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy          *q++=ScaleQuantumToLongLong(GetPixelAlpha(image,p));
1210e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p+=GetPixelChannels(image);
1211e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
1212e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
1213e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
1214e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
1215e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"BGRP") == 0)
1216e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
1217cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
1218e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
1219cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1220e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (p == (const Quantum *) NULL)
1221e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
1222cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
1223e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
1224b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy          *q++=ScaleQuantumToLongLong(GetPixelBlue(image,p));
1225b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy          *q++=ScaleQuantumToLongLong(GetPixelGreen(image,p));
1226b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy          *q++=ScaleQuantumToLongLong(GetPixelRed(image,p));
1227e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=0;
1228e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p+=GetPixelChannels(image);
1229e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
1230e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
1231e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
1232e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
1233e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"I") == 0)
1234e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
1235cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
1236e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
1237cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1238e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (p == (const Quantum *) NULL)
1239e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
1240cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
1241e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
1242b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy          *q++=ScaleQuantumToLongLong(GetPixelIntensity(image,p));
1243e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p+=GetPixelChannels(image);
1244e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
1245e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
1246e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
1247e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
1248e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"RGB") == 0)
1249e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
1250cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
1251e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
1252cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1253e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (p == (const Quantum *) NULL)
1254e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
1255cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
1256e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
1257b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy          *q++=ScaleQuantumToLongLong(GetPixelRed(image,p));
1258b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy          *q++=ScaleQuantumToLongLong(GetPixelGreen(image,p));
1259b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy          *q++=ScaleQuantumToLongLong(GetPixelBlue(image,p));
1260e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p+=GetPixelChannels(image);
1261e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
1262e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
1263e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
1264e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
1265e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"RGBA") == 0)
1266e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
1267cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
1268e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
1269cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1270e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (p == (const Quantum *) NULL)
1271e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
1272cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
1273e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
1274b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy          *q++=ScaleQuantumToLongLong(GetPixelRed(image,p));
1275b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy          *q++=ScaleQuantumToLongLong(GetPixelGreen(image,p));
1276b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy          *q++=ScaleQuantumToLongLong(GetPixelBlue(image,p));
1277b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy          *q++=ScaleQuantumToLongLong(GetPixelAlpha(image,p));
1278e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p+=GetPixelChannels(image);
1279e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
1280e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
1281e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
1282e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
1283e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"RGBP") == 0)
1284e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
1285cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
1286e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
1287cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1288e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (p == (const Quantum *) NULL)
1289e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
1290cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
1291e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
1292b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy          *q++=ScaleQuantumToLongLong(GetPixelRed(image,p));
1293b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy          *q++=ScaleQuantumToLongLong(GetPixelGreen(image,p));
1294b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy          *q++=ScaleQuantumToLongLong(GetPixelBlue(image,p));
1295e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=0;
1296e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p+=GetPixelChannels(image);
1297e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
1298e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
1299e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
1300e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
1301cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy  for (y=0; y < (ssize_t) roi->height; y++)
1302e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  {
1303cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy    p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1304e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    if (p == (const Quantum *) NULL)
1305e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      break;
1306cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy    for (x=0; x < (ssize_t) roi->width; x++)
1307e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
1308e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      register ssize_t
1309e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        i;
1310e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
1311e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      for (i=0; i < (ssize_t) strlen(map); i++)
1312e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
1313e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        *q=0;
1314e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        switch (quantum_map[i])
1315e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
1316e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case RedQuantum:
1317e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case CyanQuantum:
1318e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
1319b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy            *q=ScaleQuantumToLongLong(GetPixelRed(image,p));
1320e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
1321e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
1322e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case GreenQuantum:
1323e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case MagentaQuantum:
1324e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
1325b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy            *q=ScaleQuantumToLongLong(GetPixelGreen(image,p));
1326e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
1327e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
1328e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case BlueQuantum:
1329e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case YellowQuantum:
1330e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
1331b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy            *q=ScaleQuantumToLongLong(GetPixelBlue(image,p));
1332e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
1333e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
1334e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case AlphaQuantum:
1335e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
1336b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy            *q=ScaleQuantumToLongLong(GetPixelAlpha(image,p));
1337e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
1338e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
1339e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case OpacityQuantum:
1340e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
1341b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy            *q=ScaleQuantumToLongLong(GetPixelAlpha(image,p));
1342e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
1343e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
1344e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case BlackQuantum:
1345e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
1346e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            if (image->colorspace == CMYKColorspace)
1347b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy              *q=ScaleQuantumToLongLong(GetPixelBlack(image,p));
1348e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
1349e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
1350e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case IndexQuantum:
1351e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
1352b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy            *q=ScaleQuantumToLongLong(GetPixelIntensity(image,p));
1353e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
1354e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
1355e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          default:
1356e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
1357e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
1358e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        q++;
1359e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
1360e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      p+=GetPixelChannels(image);
1361e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
1362e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  }
1363e5370944fabb7afa477ab1325d400731b1e5d5e8cristy}
1364e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
1365cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ExportQuantumPixel(const Image *image,const RectangleInfo *roi,
136646f4be29828ab7588745336d46ab11611c847933cristy  const char *restrict map,const QuantumType *quantum_map,void *pixels,
136746f4be29828ab7588745336d46ab11611c847933cristy  ExceptionInfo *exception)
1368e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{
1369e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  register const Quantum
1370e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    *restrict p;
1371e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
1372e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  register Quantum
13733fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy    *restrict q;
1374e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
1375e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  register ssize_t
1376e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    x;
1377e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
1378e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  ssize_t
1379e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    y;
1380e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
1381e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  q=(Quantum *) pixels;
1382e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"BGR") == 0)
1383e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
1384cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
1385e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
1386cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1387e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (p == (const Quantum *) NULL)
1388e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
1389cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
1390e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
1391e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=GetPixelBlue(image,p);
1392e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=GetPixelGreen(image,p);
1393e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=GetPixelRed(image,p);
1394e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p+=GetPixelChannels(image);
1395e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
1396e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
1397e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
1398e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
1399e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"BGRA") == 0)
1400e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
1401cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
1402e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
1403cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1404e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (p == (const Quantum *) NULL)
1405e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
1406cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
1407e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
1408e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=GetPixelBlue(image,p);
1409e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=GetPixelGreen(image,p);
1410e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=GetPixelRed(image,p);
1411e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(Quantum) (GetPixelAlpha(image,p));
1412e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p+=GetPixelChannels(image);
1413e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
1414e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
1415e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
1416e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
1417e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"BGRP") == 0)
1418e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
1419cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
1420e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
1421cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1422e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (p == (const Quantum *) NULL)
1423e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
1424cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
1425e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
1426e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=GetPixelBlue(image,p);
1427e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=GetPixelGreen(image,p);
1428e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=GetPixelRed(image,p);
1429e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(Quantum) 0;
1430e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p+=GetPixelChannels(image);
1431e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
1432e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
1433e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
1434e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
1435e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"I") == 0)
1436e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
1437cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
1438e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
1439cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1440e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (p == (const Quantum *) NULL)
1441e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
1442cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
1443e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
1444e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=GetPixelIntensity(image,p);
1445e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p+=GetPixelChannels(image);
1446e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
1447e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
1448e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
1449e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
1450e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"RGB") == 0)
1451e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
1452cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
1453e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
1454cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1455e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (p == (const Quantum *) NULL)
1456e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
1457cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
1458e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
1459e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=GetPixelRed(image,p);
1460e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=GetPixelGreen(image,p);
1461e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=GetPixelBlue(image,p);
1462e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p+=GetPixelChannels(image);
1463e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
1464e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
1465e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
1466e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
1467e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"RGBA") == 0)
1468e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
1469cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
1470e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
1471cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1472e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (p == (const Quantum *) NULL)
1473e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
1474cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
1475e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
1476e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=GetPixelRed(image,p);
1477e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=GetPixelGreen(image,p);
1478e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=GetPixelBlue(image,p);
1479e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(Quantum) (GetPixelAlpha(image,p));
1480e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p+=GetPixelChannels(image);
1481e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
1482e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
1483e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
1484e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
1485e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"RGBP") == 0)
1486e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
1487cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
1488e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
1489cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1490e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (p == (const Quantum *) NULL)
1491e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
1492cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
1493e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
1494e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=GetPixelRed(image,p);
1495e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=GetPixelGreen(image,p);
1496e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=GetPixelBlue(image,p);
1497e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=(Quantum) 0;
1498e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p+=GetPixelChannels(image);
1499e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
1500e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
1501e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
1502e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
1503cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy  for (y=0; y < (ssize_t) roi->height; y++)
1504e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  {
1505cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy    p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1506e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    if (p == (const Quantum *) NULL)
1507e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      break;
1508cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy    for (x=0; x < (ssize_t) roi->width; x++)
1509e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
1510e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      register ssize_t
1511e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        i;
1512e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
1513e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      for (i=0; i < (ssize_t) strlen(map); i++)
1514e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
1515e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        *q=(Quantum) 0;
1516e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        switch (quantum_map[i])
1517e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
1518e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case RedQuantum:
1519e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case CyanQuantum:
1520e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
1521e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            *q=GetPixelRed(image,p);
1522e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
1523e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
1524e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case GreenQuantum:
1525e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case MagentaQuantum:
1526e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
1527e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            *q=GetPixelGreen(image,p);
1528e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
1529e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
1530e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case BlueQuantum:
1531e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case YellowQuantum:
1532e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
1533e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            *q=GetPixelBlue(image,p);
1534e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
1535e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
1536e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case AlphaQuantum:
1537e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
1538e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            *q=GetPixelAlpha(image,p);
1539e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
1540e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
1541e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case OpacityQuantum:
1542e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
1543e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            *q=GetPixelAlpha(image,p);
1544e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
1545e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
1546e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case BlackQuantum:
1547e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
1548e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            if (image->colorspace == CMYKColorspace)
1549e5370944fabb7afa477ab1325d400731b1e5d5e8cristy              *q=GetPixelBlack(image,p);
1550e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
1551e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
1552e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case IndexQuantum:
1553e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
1554e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            *q=(GetPixelIntensity(image,p));
1555e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
1556e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
1557e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          default:
1558e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
1559e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            *q=(Quantum) 0;
1560e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
1561e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
1562e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
1563e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        q++;
1564e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
1565e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      p+=GetPixelChannels(image);
1566e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
1567e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  }
1568e5370944fabb7afa477ab1325d400731b1e5d5e8cristy}
1569e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
1570cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ExportShortPixel(const Image *image,const RectangleInfo *roi,
157146f4be29828ab7588745336d46ab11611c847933cristy  const char *restrict map,const QuantumType *quantum_map,void *pixels,
157246f4be29828ab7588745336d46ab11611c847933cristy  ExceptionInfo *exception)
1573e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{
1574e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  register const Quantum
1575e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    *restrict p;
1576e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
1577e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  register ssize_t
1578e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    x;
1579e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
1580e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  ssize_t
1581e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    y;
1582e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
1583e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  register unsigned short
15843fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy    *restrict q;
1585e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
1586e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  q=(unsigned short *) pixels;
1587e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"BGR") == 0)
1588e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
1589cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
1590e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
1591cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1592e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (p == (const Quantum *) NULL)
1593e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
1594cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
1595e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
1596e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=ScaleQuantumToShort(GetPixelBlue(image,p));
1597e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=ScaleQuantumToShort(GetPixelGreen(image,p));
1598e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=ScaleQuantumToShort(GetPixelRed(image,p));
1599e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p+=GetPixelChannels(image);
1600e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
1601e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
1602e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
1603e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
1604e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"BGRA") == 0)
1605e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
1606cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
1607e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
1608cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1609e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (p == (const Quantum *) NULL)
1610e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
1611cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
1612e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
1613e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=ScaleQuantumToShort(GetPixelBlue(image,p));
1614e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=ScaleQuantumToShort(GetPixelGreen(image,p));
1615e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=ScaleQuantumToShort(GetPixelRed(image,p));
1616e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=ScaleQuantumToShort(GetPixelAlpha(image,p));
1617e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p+=GetPixelChannels(image);
1618e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
1619e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
1620e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
1621e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
1622e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"BGRP") == 0)
1623e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
1624cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
1625e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
1626cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1627e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (p == (const Quantum *) NULL)
1628e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
1629cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
1630e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
1631e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=ScaleQuantumToShort(GetPixelBlue(image,p));
1632e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=ScaleQuantumToShort(GetPixelGreen(image,p));
1633e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=ScaleQuantumToShort(GetPixelRed(image,p));
1634e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=0;
1635e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p+=GetPixelChannels(image);
1636e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
1637e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
1638e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
1639e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
1640e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"I") == 0)
1641e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
1642cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
1643e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
1644cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1645e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (p == (const Quantum *) NULL)
1646e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
1647cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
1648e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
1649e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=ScaleQuantumToShort(GetPixelIntensity(image,p));
1650e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p+=GetPixelChannels(image);
1651e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
1652e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
1653e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
1654e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
1655e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"RGB") == 0)
1656e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
1657cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
1658e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
1659cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1660e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (p == (const Quantum *) NULL)
1661e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
1662cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
1663e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
1664e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=ScaleQuantumToShort(GetPixelRed(image,p));
1665e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=ScaleQuantumToShort(GetPixelGreen(image,p));
1666e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=ScaleQuantumToShort(GetPixelBlue(image,p));
1667e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p+=GetPixelChannels(image);
1668e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
1669e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
1670e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
1671e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
1672e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"RGBA") == 0)
1673e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
1674cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
1675e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
1676cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1677e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (p == (const Quantum *) NULL)
1678e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
1679cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
1680e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
1681e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=ScaleQuantumToShort(GetPixelRed(image,p));
1682e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=ScaleQuantumToShort(GetPixelGreen(image,p));
1683e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=ScaleQuantumToShort(GetPixelBlue(image,p));
1684e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=ScaleQuantumToShort(GetPixelAlpha(image,p));
1685e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p+=GetPixelChannels(image);
1686e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
1687e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
1688e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
1689e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
1690e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"RGBP") == 0)
1691e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
1692cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
1693e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
1694cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1695e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (p == (const Quantum *) NULL)
1696e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
1697cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
1698e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
1699e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=ScaleQuantumToShort(GetPixelRed(image,p));
1700e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=ScaleQuantumToShort(GetPixelGreen(image,p));
1701e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=ScaleQuantumToShort(GetPixelBlue(image,p));
1702e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          *q++=0;
1703e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p+=GetPixelChannels(image);
1704e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
1705e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
1706e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
1707e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
1708cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy  for (y=0; y < (ssize_t) roi->height; y++)
1709e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  {
1710cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy    p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception);
1711e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    if (p == (const Quantum *) NULL)
1712e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      break;
1713cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy    for (x=0; x < (ssize_t) roi->width; x++)
1714e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
1715e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      register ssize_t
1716e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        i;
1717e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
1718e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      for (i=0; i < (ssize_t) strlen(map); i++)
1719e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
1720e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        *q=0;
1721e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        switch (quantum_map[i])
1722e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
1723e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case RedQuantum:
1724e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case CyanQuantum:
1725e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
1726e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            *q=ScaleQuantumToShort(GetPixelRed(image,p));
1727e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
1728e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
1729e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case GreenQuantum:
1730e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case MagentaQuantum:
1731e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
1732e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            *q=ScaleQuantumToShort(GetPixelGreen(image,p));
1733e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
1734e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
1735e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case BlueQuantum:
1736e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case YellowQuantum:
1737e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
1738e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            *q=ScaleQuantumToShort(GetPixelBlue(image,p));
1739e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
1740e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
1741e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case AlphaQuantum:
1742e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
1743e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            *q=ScaleQuantumToShort(GetPixelAlpha(image,p));
1744e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
1745e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
1746e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case OpacityQuantum:
1747e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
1748e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            *q=ScaleQuantumToShort(GetPixelAlpha(image,p));
1749e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
1750e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
1751e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case BlackQuantum:
1752e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
1753e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            if (image->colorspace == CMYKColorspace)
1754e5370944fabb7afa477ab1325d400731b1e5d5e8cristy              *q=ScaleQuantumToShort(GetPixelBlack(image,p));
1755e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
1756e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
1757e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case IndexQuantum:
1758e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
1759e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            *q=ScaleQuantumToShort(GetPixelIntensity(image,p));
1760e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
1761e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
1762e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          default:
1763e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
1764e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
1765e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        q++;
1766e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
1767e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      p+=GetPixelChannels(image);
1768e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
1769e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  }
1770e5370944fabb7afa477ab1325d400731b1e5d5e8cristy}
1771e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
1772e5370944fabb7afa477ab1325d400731b1e5d5e8cristyMagickExport MagickBooleanType ExportImagePixels(const Image *image,
1773cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy  const ssize_t x,const ssize_t y,const size_t width,const size_t height,
1774cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy  const char *map,const StorageType type,void *pixels,ExceptionInfo *exception)
1775e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{
1776e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  QuantumType
1777e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    *quantum_map;
1778e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
1779cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy  RectangleInfo
1780cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy    roi;
1781cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy
1782e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  register ssize_t
1783e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    i;
1784e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
1785e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  assert(image != (Image *) NULL);
1786e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  assert(image->signature == MagickSignature);
1787e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (image->debug != MagickFalse)
1788e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
1789e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  quantum_map=(QuantumType *) AcquireQuantumMemory(strlen(map),
1790e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    sizeof(*quantum_map));
1791e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (quantum_map == (QuantumType *) NULL)
1792e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
1793e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      (void) ThrowMagickException(exception,GetMagickModule(),
1794e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        ResourceLimitError,"MemoryAllocationFailed","`%s'",image->filename);
1795e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return(MagickFalse);
1796e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
1797e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  for (i=0; i < (ssize_t) strlen(map); i++)
1798e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  {
1799e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    switch (map[i])
1800e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
1801e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      case 'A':
1802e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      case 'a':
1803e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
1804e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        quantum_map[i]=AlphaQuantum;
1805e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        break;
1806e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
1807e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      case 'B':
1808e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      case 'b':
1809e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
1810e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        quantum_map[i]=BlueQuantum;
1811e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        break;
1812e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
1813e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      case 'C':
1814e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      case 'c':
1815e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
1816e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        quantum_map[i]=CyanQuantum;
1817e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (image->colorspace == CMYKColorspace)
1818e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
1819e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
1820e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1821e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          "ColorSeparatedImageRequired","`%s'",map);
1822e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        return(MagickFalse);
1823e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
1824e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      case 'g':
1825e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      case 'G':
1826e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
1827e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        quantum_map[i]=GreenQuantum;
1828e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        break;
1829e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
1830e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      case 'I':
1831e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      case 'i':
1832e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
1833e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        quantum_map[i]=IndexQuantum;
1834e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        break;
1835e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
1836e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      case 'K':
1837e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      case 'k':
1838e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
1839e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        quantum_map[i]=BlackQuantum;
1840e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (image->colorspace == CMYKColorspace)
1841e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
1842e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
1843e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1844e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          "ColorSeparatedImageRequired","`%s'",map);
1845e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        return(MagickFalse);
1846e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
1847e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      case 'M':
1848e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      case 'm':
1849e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
1850e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        quantum_map[i]=MagentaQuantum;
1851e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (image->colorspace == CMYKColorspace)
1852e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
1853e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
1854e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1855e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          "ColorSeparatedImageRequired","`%s'",map);
1856e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        return(MagickFalse);
1857e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
1858e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      case 'o':
1859e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      case 'O':
1860e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
1861e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        quantum_map[i]=OpacityQuantum;
1862e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        break;
1863e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
1864e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      case 'P':
1865e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      case 'p':
1866e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
1867e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        quantum_map[i]=UndefinedQuantum;
1868e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        break;
1869e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
1870e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      case 'R':
1871e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      case 'r':
1872e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
1873e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        quantum_map[i]=RedQuantum;
1874e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        break;
1875e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
1876e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      case 'Y':
1877e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      case 'y':
1878e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
1879e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        quantum_map[i]=YellowQuantum;
1880e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (image->colorspace == CMYKColorspace)
1881e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
1882e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
1883e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1884e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          "ColorSeparatedImageRequired","`%s'",map);
1885e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        return(MagickFalse);
1886e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
1887e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      default:
1888e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
1889e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
1890e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        (void) ThrowMagickException(exception,GetMagickModule(),OptionError,
1891e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          "UnrecognizedPixelMap","`%s'",map);
1892e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        return(MagickFalse);
1893e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
1894e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
1895e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  }
1896cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy  roi.width=width;
1897cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy  roi.height=height;
1898cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy  roi.x=x;
1899cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy  roi.y=y;
1900e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  switch (type)
1901e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  {
1902e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    case CharPixel:
1903e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
1904cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      ExportCharPixel(image,&roi,map,quantum_map,pixels,exception);
1905e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      break;
1906e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
1907e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    case DoublePixel:
1908e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
1909cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      ExportDoublePixel(image,&roi,map,quantum_map,pixels,exception);
1910e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      break;
1911e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
1912e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    case FloatPixel:
1913e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
1914cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      ExportFloatPixel(image,&roi,map,quantum_map,pixels,exception);
1915e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      break;
1916e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
19176c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy    case LongPixel:
1918e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
1919cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      ExportLongPixel(image,&roi,map,quantum_map,pixels,exception);
1920e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      break;
1921e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
19226c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy    case LongLongPixel:
1923e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
1924cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      ExportLongLongPixel(image,&roi,map,quantum_map,pixels,exception);
1925e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      break;
1926e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
1927e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    case QuantumPixel:
1928e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
1929cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      ExportQuantumPixel(image,&roi,map,quantum_map,pixels,exception);
1930e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      break;
1931e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
1932e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    case ShortPixel:
1933e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
1934cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      ExportShortPixel(image,&roi,map,quantum_map,pixels,exception);
1935e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      break;
1936e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
1937e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    default:
1938e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
1939e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
1940e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      (void) ThrowMagickException(exception,GetMagickModule(),OptionError,
19413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        "UnrecognizedPixelMap","`%s'",map);
19423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      break;
19433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
19443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  }
1945e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
1946e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  return(MagickTrue);
1947e5370944fabb7afa477ab1325d400731b1e5d5e8cristy}
1948e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
1949e5370944fabb7afa477ab1325d400731b1e5d5e8cristy/*
1950e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1951e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%                                                                             %
1952e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%                                                                             %
1953e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%                                                                             %
1954e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%   G e t P i x e l I n f o                                                   %
1955e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%                                                                             %
1956e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%                                                                             %
1957e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%                                                                             %
1958e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1959e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%
1960e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%  GetPixelInfo() initializes the PixelInfo structure.
1961e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%
1962e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%  The format of the GetPixelInfo method is:
1963e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%
1964e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%      GetPixelInfo(const Image *image,PixelInfo *pixel)
1965e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%
1966e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%  A description of each parameter follows:
1967e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%
1968e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%    o image: the image.
1969e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%
1970e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%    o pixel: Specifies a pointer to a PixelInfo structure.
1971e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%
1972e5370944fabb7afa477ab1325d400731b1e5d5e8cristy*/
1973e5370944fabb7afa477ab1325d400731b1e5d5e8cristyMagickExport void GetPixelInfo(const Image *image,PixelInfo *pixel)
1974e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{
1975e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  pixel->storage_class=DirectClass;
19767020ae6594690c03a4f73784fd41a7131a5b22c6cristy  pixel->colorspace=sRGBColorspace;
1977e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  pixel->matte=MagickFalse;
1978e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  pixel->fuzz=0.0;
1979e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  pixel->depth=MAGICKCORE_QUANTUM_DEPTH;
1980e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  pixel->red=0.0;
1981e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  pixel->green=0.0;
1982e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  pixel->blue=0.0;
1983e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  pixel->black=0.0;
1984e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  pixel->alpha=(MagickRealType) OpaqueAlpha;
1985e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  pixel->index=0.0;
1986e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (image == (const Image *) NULL)
1987e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    return;
1988e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  pixel->storage_class=image->storage_class;
1989e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  pixel->colorspace=image->colorspace;
1990e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  pixel->matte=image->matte;
1991e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  pixel->depth=image->depth;
1992e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  pixel->fuzz=image->fuzz;
1993e5370944fabb7afa477ab1325d400731b1e5d5e8cristy}
1994e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
1995e5370944fabb7afa477ab1325d400731b1e5d5e8cristy/*
1996e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1997e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%                                                                             %
1998e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%                                                                             %
1999e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%                                                                             %
2000e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%   I m p o r t I m a g e P i x e l s                                         %
2001e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%                                                                             %
2002e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%                                                                             %
2003e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%                                                                             %
2004e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2005e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%
2006e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%  ImportImagePixels() accepts pixel data and stores in the image at the
2007e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%  location you specify.  The method returns MagickTrue on success otherwise
2008e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%  MagickFalse if an error is encountered.  The pixel data can be either char,
2009b5a45a37a6faa8a3725c814b51a1a86daa4ff21fcristy%  Quantum, short int, unsigned int, unsigned long long, float, or double in
2010b5a45a37a6faa8a3725c814b51a1a86daa4ff21fcristy%  the order specified by map.
2011e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%
2012e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%  Suppose your want to upload the first scanline of a 640x480 image from
2013e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%  character data in red-green-blue order:
2014e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%
2015e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%      ImportImagePixels(image,0,0,640,1,"RGB",CharPixel,pixels);
2016e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%
2017e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%  The format of the ImportImagePixels method is:
2018e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%
2019cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy%      MagickBooleanType ImportImagePixels(Image *image,const ssize_t x,
2020cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy%        const ssize_t y,const size_t width,const size_t height,
2021cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy%        const char *map,const StorageType type,const void *pixels,
2022cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy%        ExceptionInfo *exception)
2023e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%
2024e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%  A description of each parameter follows:
2025e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%
2026e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%    o image: the image.
2027e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%
2028cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy%    o x,y,width,height:  These values define the perimeter
2029e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%      of a region of pixels you want to define.
2030e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%
2031e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%    o map:  This string reflects the expected ordering of the pixel array.
2032e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%      It can be any combination or order of R = red, G = green, B = blue,
2033e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%      A = alpha (0 is transparent), O = opacity (0 is opaque), C = cyan,
2034e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%      Y = yellow, M = magenta, K = black, I = intensity (for grayscale),
2035e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%      P = pad.
2036e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%
2037e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%    o type: Define the data type of the pixels.  Float and double types are
2038e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%      normalized to [0..1] otherwise [0..QuantumRange].  Choose from these
20396c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy%      types: CharPixel (char *), DoublePixel (double *), FloatPixel (float *),
2040ff6834e270b99c2747ad5b2f4edeecf862aaf825cristy%      LongPixel (unsigned int *), LongLongPixel (unsigned long long *),
20416c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy%      QuantumPixel (Quantum *), or ShortPixel (unsigned short *).
2042e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%
2043e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%    o pixels: This array of values contain the pixel components as defined by
2044e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%      map and type.  You must preallocate this array where the expected
2045e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%      length varies depending on the values of width, height, map, and type.
2046e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%
2047e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%    o exception: return any errors or warnings in this structure.
2048e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%
2049e5370944fabb7afa477ab1325d400731b1e5d5e8cristy*/
2050e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
2051cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ImportCharPixel(Image *image,const RectangleInfo *roi,
205246f4be29828ab7588745336d46ab11611c847933cristy  const char *restrict map,const QuantumType *quantum_map,const void *pixels,
205346f4be29828ab7588745336d46ab11611c847933cristy  ExceptionInfo *exception)
2054e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{
2055e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  register const unsigned char
2056e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    *restrict p;
2057e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
2058e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  register Quantum
20593fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy    *restrict q;
2060e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
2061e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  register ssize_t
2062e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    x;
2063e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
2064e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  ssize_t
2065e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    y;
2066e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
2067e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  p=(const unsigned char *) pixels;
2068e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"BGR") == 0)
2069e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
2070cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
2071e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
2072cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2073e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
2074e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2075cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
2076e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
2077e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelBlue(image,ScaleCharToQuantum(*p++),q);
2078e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelGreen(image,ScaleCharToQuantum(*p++),q);
2079e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelRed(image,ScaleCharToQuantum(*p++),q);
2080e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
2081e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
2082e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
2083e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2084e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
2085e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
2086e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
2087e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"BGRA") == 0)
2088e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
2089cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
2090e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
2091cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2092e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
2093e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2094cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
2095e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
2096e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelBlue(image,ScaleCharToQuantum(*p++),q);
2097e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelGreen(image,ScaleCharToQuantum(*p++),q);
2098e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelRed(image,ScaleCharToQuantum(*p++),q);
2099e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelAlpha(image,ScaleCharToQuantum(*p++),q);
2100e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
2101e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
2102e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
2103e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2104e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
2105e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
2106e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
2107e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"BGRO") == 0)
2108e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
2109cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
2110e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
2111cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2112e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
2113e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2114cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
2115e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
2116e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelBlue(image,ScaleCharToQuantum(*p++),q);
2117e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelGreen(image,ScaleCharToQuantum(*p++),q);
2118e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelRed(image,ScaleCharToQuantum(*p++),q);
2119e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelAlpha(image,ScaleCharToQuantum(*p++),q);
2120e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
2121e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
2122e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
2123e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2124e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
2125e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
2126e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
2127e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"BGRP") == 0)
2128e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
2129cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
2130e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
2131cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2132e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
2133e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2134cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
2135e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
2136e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelBlue(image,ScaleCharToQuantum(*p++),q);
2137e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelGreen(image,ScaleCharToQuantum(*p++),q);
2138e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelRed(image,ScaleCharToQuantum(*p++),q);
2139e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2140e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
2141e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
2142e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
2143e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2144e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
2145e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
2146e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
2147e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"I") == 0)
2148e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
2149cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
2150e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
2151cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2152e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
2153e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2154cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
2155e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
2156e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelGray(image,ScaleCharToQuantum(*p++),q);
2157e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
2158e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
2159e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
2160e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2161e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
2162e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
2163e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
2164e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"RGB") == 0)
2165e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
2166cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
2167e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
2168cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2169e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
2170e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2171cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
2172e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
2173e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelRed(image,ScaleCharToQuantum(*p++),q);
2174e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelGreen(image,ScaleCharToQuantum(*p++),q);
2175e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelBlue(image,ScaleCharToQuantum(*p++),q);
2176e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
2177e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
2178e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
2179e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2180e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
2181e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
2182e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
2183e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"RGBA") == 0)
2184e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
2185cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
2186e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
2187cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2188e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
2189e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2190cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
2191e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
2192e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelRed(image,ScaleCharToQuantum(*p++),q);
2193e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelGreen(image,ScaleCharToQuantum(*p++),q);
2194e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelBlue(image,ScaleCharToQuantum(*p++),q);
2195e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelAlpha(image,ScaleCharToQuantum(*p++),q);
2196e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
2197e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
2198e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
2199e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2200e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
2201e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
2202e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
2203e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"RGBO") == 0)
2204e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
2205cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
2206e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
2207cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2208e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
2209e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2210cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
2211e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
2212e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelRed(image,ScaleCharToQuantum(*p++),q);
2213e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelGreen(image,ScaleCharToQuantum(*p++),q);
2214e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelBlue(image,ScaleCharToQuantum(*p++),q);
2215e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelAlpha(image,ScaleCharToQuantum(*p++),q);
2216e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
2217e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
2218e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
2219e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2220e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
2221e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
2222e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
2223e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"RGBP") == 0)
2224e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
2225cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
2226e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
2227cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2228e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
2229e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2230cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
2231e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
2232e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelRed(image,ScaleCharToQuantum(*p++),q);
2233e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelGreen(image,ScaleCharToQuantum(*p++),q);
2234e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelBlue(image,ScaleCharToQuantum(*p++),q);
2235e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2236e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
2237e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
2238e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
2239e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2240e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
2241e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
2242e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
2243cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy  for (y=0; y < (ssize_t) roi->height; y++)
2244e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  {
2245cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy    q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2246e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    if (q == (Quantum *) NULL)
2247e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      break;
2248cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy    for (x=0; x < (ssize_t) roi->width; x++)
2249e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
2250e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      register ssize_t
2251e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        i;
2252e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
2253e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      for (i=0; i < (ssize_t) strlen(map); i++)
2254e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
2255e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        switch (quantum_map[i])
2256e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
2257e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case RedQuantum:
2258e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case CyanQuantum:
2259e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
2260e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            SetPixelRed(image,ScaleCharToQuantum(*p),q);
2261e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
2262e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
2263e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case GreenQuantum:
2264e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case MagentaQuantum:
2265e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
2266e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            SetPixelGreen(image,ScaleCharToQuantum(*p),q);
2267e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
2268e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
2269e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case BlueQuantum:
2270e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case YellowQuantum:
2271e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
2272e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            SetPixelBlue(image,ScaleCharToQuantum(*p),q);
2273e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
2274e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
2275e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case AlphaQuantum:
2276e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
2277e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            SetPixelAlpha(image,ScaleCharToQuantum(*p),q);
2278e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
2279e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
2280e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case OpacityQuantum:
2281e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
2282e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            SetPixelAlpha(image,ScaleCharToQuantum(*p),q);
2283e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
2284e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
2285e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case BlackQuantum:
2286e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
2287e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            SetPixelBlack(image,ScaleCharToQuantum(*p),q);
2288e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
2289e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
2290e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case IndexQuantum:
2291e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
2292e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            SetPixelGray(image,ScaleCharToQuantum(*p),q);
2293e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
2294e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
2295e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          default:
2296e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
2297e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
2298e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        p++;
2299e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
2300e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      q+=GetPixelChannels(image);
2301e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
2302e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    if (SyncAuthenticPixels(image,exception) == MagickFalse)
2303e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      break;
2304e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  }
2305e5370944fabb7afa477ab1325d400731b1e5d5e8cristy}
2306e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
2307cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ImportDoublePixel(Image *image,const RectangleInfo *roi,
230846f4be29828ab7588745336d46ab11611c847933cristy  const char *restrict map,const QuantumType *quantum_map,const void *pixels,
230946f4be29828ab7588745336d46ab11611c847933cristy  ExceptionInfo *exception)
2310e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{
2311e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  register const double
2312e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    *restrict p;
2313e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
2314e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  register Quantum
23153fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy    *restrict q;
2316e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
2317e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  register ssize_t
2318e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    x;
2319e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
2320e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  ssize_t
2321e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    y;
2322e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
2323e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  p=(const double *) pixels;
2324e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"BGR") == 0)
2325e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
2326cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
2327e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
2328cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2329e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
2330e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2331cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
2332e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
2333e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
2334e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            (*p)),q);
2335e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2336e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
2337e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            (*p)),q);
2338e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2339e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
2340e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            (*p)),q);
2341e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2342e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
2343e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
2344e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
2345e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2346e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
2347e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
2348e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
2349e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"BGRA") == 0)
2350e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
2351cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
2352e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
2353cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2354e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
2355e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2356cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
2357e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
2358e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
2359e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            (*p)),q);
2360e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2361e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
2362e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            (*p)),q);
2363e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2364e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
2365e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            (*p)),q);
2366e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2367e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelAlpha(image,ClampToQuantum((MagickRealType) QuantumRange*
2368e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            (*p)),q);
2369e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2370e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
2371e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
2372e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
2373e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2374e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
2375e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
2376e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
2377e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"BGRP") == 0)
2378e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
2379cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
2380e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
2381cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2382e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
2383e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2384cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
2385e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
2386e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
2387e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            (*p)),q);
2388e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2389e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
2390e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            (*p)),q);
2391e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2392e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
2393e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            (*p)),q);
2394e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2395e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2396e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
2397e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
2398e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
2399e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2400e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
2401e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
2402e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
2403e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"I") == 0)
2404e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
2405cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
2406e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
2407cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2408e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
2409e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2410cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
2411e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
2412e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelGray(image,ClampToQuantum((MagickRealType) QuantumRange*
2413e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            (*p)),q);
2414e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2415e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
2416e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
2417e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
2418e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2419e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
2420e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
2421e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
2422e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"RGB") == 0)
2423e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
2424cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
2425e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
2426cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2427e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
2428e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2429cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
2430e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
2431e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
2432e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            (*p)),q);
2433e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2434e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
2435e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            (*p)),q);
2436e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2437e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
2438e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            (*p)),q);
2439e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2440e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
2441e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
2442e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
2443e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2444e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
2445e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
2446e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
2447e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"RGBA") == 0)
2448e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
2449cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
2450e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
2451cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2452e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
2453e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2454cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
2455e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
2456e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
2457e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            (*p)),q);
2458e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2459e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
2460e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            (*p)),q);
2461e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2462e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
2463e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            (*p)),q);
2464e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2465e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelAlpha(image,ClampToQuantum((MagickRealType) QuantumRange*
2466e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            (*p)),q);
2467e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2468e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
2469e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
2470e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
2471e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2472e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
2473e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
2474e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
2475e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"RGBP") == 0)
2476e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
2477cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
2478e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
2479cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2480e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
2481e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2482cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
2483e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
2484e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
2485e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            (*p)),q);
2486e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2487e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
2488e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            (*p)),q);
2489e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2490e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
2491e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            (*p)),q);
2492e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2493e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
2494e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
2495e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
2496e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2497e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
2498e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
2499e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
2500cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy  for (y=0; y < (ssize_t) roi->height; y++)
2501e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  {
2502cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy    q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2503e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    if (q == (Quantum *) NULL)
2504e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      break;
2505cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy    for (x=0; x < (ssize_t) roi->width; x++)
2506e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
2507e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      register ssize_t
2508e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        i;
2509e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
2510e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      for (i=0; i < (ssize_t) strlen(map); i++)
2511e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
2512e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        switch (quantum_map[i])
2513e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
2514e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case RedQuantum:
2515e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case CyanQuantum:
2516e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
2517e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            SetPixelRed(image,ClampToQuantum((MagickRealType)
2518e5370944fabb7afa477ab1325d400731b1e5d5e8cristy              QuantumRange*(*p)),q);
2519e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
2520e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
2521e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case GreenQuantum:
2522e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case MagentaQuantum:
2523e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
2524e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            SetPixelGreen(image,ClampToQuantum((MagickRealType)
2525e5370944fabb7afa477ab1325d400731b1e5d5e8cristy              QuantumRange*(*p)),q);
2526e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
2527e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
2528e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case BlueQuantum:
2529e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case YellowQuantum:
2530e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
2531e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            SetPixelBlue(image,ClampToQuantum((MagickRealType)
2532e5370944fabb7afa477ab1325d400731b1e5d5e8cristy              QuantumRange*(*p)),q);
2533e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
2534e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
2535e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case AlphaQuantum:
2536e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
2537e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            SetPixelAlpha(image,ClampToQuantum((MagickRealType)
2538e5370944fabb7afa477ab1325d400731b1e5d5e8cristy              QuantumRange*(*p)),q);
2539e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
2540e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
2541e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case OpacityQuantum:
2542e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
2543e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            SetPixelAlpha(image,ClampToQuantum((MagickRealType)
2544e5370944fabb7afa477ab1325d400731b1e5d5e8cristy              QuantumRange*(*p)),q);
2545e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
2546e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
2547e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case BlackQuantum:
2548e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
2549e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            SetPixelBlack(image,ClampToQuantum((MagickRealType)
2550e5370944fabb7afa477ab1325d400731b1e5d5e8cristy              QuantumRange*(*p)),q);
2551e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
2552e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
2553e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case IndexQuantum:
2554e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
2555e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            SetPixelGray(image,ClampToQuantum((MagickRealType)
2556e5370944fabb7afa477ab1325d400731b1e5d5e8cristy              QuantumRange*(*p)),q);
2557e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
2558e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
2559e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          default:
2560e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
2561e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
2562e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        p++;
2563e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
2564e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      q+=GetPixelChannels(image);
2565e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
2566e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    if (SyncAuthenticPixels(image,exception) == MagickFalse)
2567e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      break;
2568e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  }
25693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy}
2570e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
2571cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ImportFloatPixel(Image *image,const RectangleInfo *roi,
257246f4be29828ab7588745336d46ab11611c847933cristy  const char *restrict map,const QuantumType *quantum_map,const void *pixels,
257346f4be29828ab7588745336d46ab11611c847933cristy  ExceptionInfo *exception)
25743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{
2575e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  register const float
2576e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    *restrict p;
2577e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
2578e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  register Quantum
25793fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy    *restrict q;
2580e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
2581e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  register ssize_t
2582e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    x;
2583e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
2584e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  ssize_t
2585e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    y;
2586e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
2587e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  p=(const float *) pixels;
2588e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"BGR") == 0)
2589e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
2590cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
2591e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
2592cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2593e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
2594e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2595cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
2596e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
2597e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
2598e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            (*p)),q);
2599e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2600e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
2601e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            (*p)),q);
2602e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2603e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
2604e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            (*p)),q);
2605e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2606e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
2607e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
2608e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
2609e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2610e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
2611e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
2612e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
2613e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"BGRA") == 0)
2614e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
2615cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
2616e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
2617cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2618e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
2619e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2620cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
2621e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
2622e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
2623e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            (*p)),q);
2624e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2625e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
2626e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            (*p)),q);
2627e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2628e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
2629e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            (*p)),q);
2630e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2631e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelAlpha(image,ClampToQuantum((MagickRealType) QuantumRange*
2632e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            (*p)),q);
2633e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2634e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
2635e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
2636e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
2637e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2638e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
2639e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
2640e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
2641e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"BGRP") == 0)
2642e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
2643cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
2644e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
2645cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2646e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
2647e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2648cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
2649e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
2650e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
2651e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            (*p)),q);
2652e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2653e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
2654e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            (*p)),q);
2655e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2656e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
2657e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            (*p)),q);
2658e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2659e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2660e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
2661e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
2662e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
2663e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2664e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
2665e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
2666e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
2667e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"I") == 0)
2668e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
2669cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
2670e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
2671cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2672e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
2673e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2674cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
2675e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
2676e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelGray(image,ClampToQuantum((MagickRealType) QuantumRange*
2677e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            (*p)),q);
2678e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2679e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
2680e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
2681e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
2682e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2683e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
2684e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
2685e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
2686e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"RGB") == 0)
2687e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
2688cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
2689e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
2690cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2691e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
2692e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2693cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
2694e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
2695e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
2696e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            (*p)),q);
2697e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2698e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
2699e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            (*p)),q);
2700e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2701e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
2702e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            (*p)),q);
2703e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2704e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
2705e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
2706e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
2707e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2708e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
2709e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
2710e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
2711e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"RGBA") == 0)
2712e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
2713cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
2714e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
2715cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2716e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
2717e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2718cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
2719e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
2720e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelRed(image,ClampToQuantum((MagickRealType)
2721e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            QuantumRange*(*p)),q);
2722e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2723e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
2724e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            (*p)),q);
2725e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2726e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
2727e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            (*p)),q);
2728e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2729e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelAlpha(image,ClampToQuantum((MagickRealType) QuantumRange*
2730e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            (*p)),q);
2731e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2732e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
2733e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
2734e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
2735e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2736e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
2737e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
2738e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
2739e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"RGBP") == 0)
2740e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
2741cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
2742e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
2743cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2744e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
2745e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2746cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
2747e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
2748e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*
2749e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            (*p)),q);
2750e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2751e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*
2752e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            (*p)),q);
2753e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2754e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*
2755e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            (*p)),q);
2756e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2757e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
2758e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
2759e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
2760e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2761e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
2762e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
2763e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
2764cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy  for (y=0; y < (ssize_t) roi->height; y++)
2765e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  {
2766cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy    q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2767e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    if (q == (Quantum *) NULL)
2768e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      break;
2769cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy    for (x=0; x < (ssize_t) roi->width; x++)
2770e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
2771e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      register ssize_t
2772e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        i;
2773e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
2774e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      for (i=0; i < (ssize_t) strlen(map); i++)
2775e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
2776e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        switch (quantum_map[i])
2777e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
2778e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case RedQuantum:
2779e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case CyanQuantum:
2780e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
2781e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            SetPixelRed(image,ClampToQuantum((MagickRealType)
2782e5370944fabb7afa477ab1325d400731b1e5d5e8cristy              QuantumRange*(*p)),q);
2783e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
2784e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
2785e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case GreenQuantum:
2786e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case MagentaQuantum:
2787e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
2788e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            SetPixelGreen(image,ClampToQuantum((MagickRealType)
2789e5370944fabb7afa477ab1325d400731b1e5d5e8cristy              QuantumRange*(*p)),q);
2790e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
2791e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
2792e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case BlueQuantum:
2793e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case YellowQuantum:
2794e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
2795e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            SetPixelBlue(image,ClampToQuantum((MagickRealType)
2796e5370944fabb7afa477ab1325d400731b1e5d5e8cristy              QuantumRange*(*p)),q);
2797e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
2798e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
2799e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case AlphaQuantum:
2800e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
2801e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            SetPixelAlpha(image,ClampToQuantum((MagickRealType)
2802e5370944fabb7afa477ab1325d400731b1e5d5e8cristy              QuantumRange*(*p)),q);
2803e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
2804e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
2805e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case OpacityQuantum:
2806e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
2807e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            SetPixelAlpha(image,ClampToQuantum((MagickRealType)
2808e5370944fabb7afa477ab1325d400731b1e5d5e8cristy              QuantumRange*(*p)),q);
2809e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
2810e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
2811e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case BlackQuantum:
2812e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
2813e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            SetPixelBlack(image,ClampToQuantum((MagickRealType)
2814e5370944fabb7afa477ab1325d400731b1e5d5e8cristy              QuantumRange*(*p)),q);
2815e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
2816e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
2817e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case IndexQuantum:
2818e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
2819e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            SetPixelGray(image,ClampToQuantum((MagickRealType)
2820e5370944fabb7afa477ab1325d400731b1e5d5e8cristy              QuantumRange*(*p)),q);
2821e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
2822e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
2823e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          default:
2824e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
2825e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
2826e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        p++;
2827e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
2828e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      q+=GetPixelChannels(image);
2829e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
2830e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    if (SyncAuthenticPixels(image,exception) == MagickFalse)
2831e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      break;
2832e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  }
2833e5370944fabb7afa477ab1325d400731b1e5d5e8cristy}
2834e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
2835cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ImportLongPixel(Image *image,const RectangleInfo *roi,
283646f4be29828ab7588745336d46ab11611c847933cristy  const char *restrict map,const QuantumType *quantum_map,const void *pixels,
283746f4be29828ab7588745336d46ab11611c847933cristy  ExceptionInfo *exception)
28383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{
2839e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  register const unsigned int
2840e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    *restrict p;
28413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
28424c08aed51c5899665ade97263692328eea4af106cristy  register Quantum
28433fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy    *restrict q;
28443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
2845bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy  register ssize_t
28463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    x;
28473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
28489d314ff2c17a77996c05413c2013880387e50f0ecristy  ssize_t
28499d314ff2c17a77996c05413c2013880387e50f0ecristy    y;
28509d314ff2c17a77996c05413c2013880387e50f0ecristy
2851e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  p=(const unsigned int *) pixels;
2852e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"BGR") == 0)
28533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
2854cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
28553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
2856cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2857e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
2858e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2859cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
2860e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
2861e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelBlue(image,ScaleLongToQuantum(*p++),q);
2862e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelGreen(image,ScaleLongToQuantum(*p++),q);
2863e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelRed(image,ScaleLongToQuantum(*p++),q);
2864e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
2865e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
2866e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
2867e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
28683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
2869e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
2870e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
2871e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"BGRA") == 0)
2872e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
2873cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
28743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
2875cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2876e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
2877e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2878cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
2879e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
2880e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelBlue(image,ScaleLongToQuantum(*p++),q);
2881e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelGreen(image,ScaleLongToQuantum(*p++),q);
2882e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelRed(image,ScaleLongToQuantum(*p++),q);
2883e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelAlpha(image,ScaleLongToQuantum(*p++),q);
2884e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
2885e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
2886e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
2887e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
28883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
2889e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
2890e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
2891e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"BGRP") == 0)
2892e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
2893cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
28943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
2895cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2896e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
2897e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2898cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
2899e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
2900e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelBlue(image,ScaleLongToQuantum(*p++),q);
2901e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelGreen(image,ScaleLongToQuantum(*p++),q);
2902e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelRed(image,ScaleLongToQuantum(*p++),q);
2903e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2904e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
2905e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
2906e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
2907e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
29083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
2909e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
2910e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
2911e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"I") == 0)
2912e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
2913cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
29143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
2915cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2916e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
2917e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2918cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
2919e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
2920e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelGray(image,ScaleLongToQuantum(*p++),q);
2921e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
2922e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
2923e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
2924e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
29253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
2926e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
2927e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
2928e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"RGB") == 0)
2929e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
2930cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
29313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
2932cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2933e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
2934e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2935cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
2936e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
2937e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelRed(image,ScaleLongToQuantum(*p++),q);
2938e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelGreen(image,ScaleLongToQuantum(*p++),q);
2939e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelBlue(image,ScaleLongToQuantum(*p++),q);
2940e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
2941e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
2942e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
2943e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
29443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
2945e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
2946e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
2947e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"RGBA") == 0)
2948e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
2949cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
29503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
2951cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2952e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
2953e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2954cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
2955e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
2956e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelRed(image,ScaleLongToQuantum(*p++),q);
2957e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelGreen(image,ScaleLongToQuantum(*p++),q);
2958e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelBlue(image,ScaleLongToQuantum(*p++),q);
2959e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelAlpha(image,ScaleLongToQuantum(*p++),q);
2960e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
2961e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
2962e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
2963e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
29643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
2965e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
2966e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
2967e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"RGBP") == 0)
2968e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
2969cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
29703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
2971cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2972e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
2973e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
2974cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
2975e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
2976e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelRed(image,ScaleLongToQuantum(*p++),q);
2977e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelGreen(image,ScaleLongToQuantum(*p++),q);
2978e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelBlue(image,ScaleLongToQuantum(*p++),q);
2979e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
2980e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
2981e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
2982e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
2983e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
29843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
2985e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
2986e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
2987cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy  for (y=0; y < (ssize_t) roi->height; y++)
2988e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  {
2989cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy    q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
2990e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    if (q == (Quantum *) NULL)
2991e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      break;
2992cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy    for (x=0; x < (ssize_t) roi->width; x++)
2993e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
2994e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      register ssize_t
2995e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        i;
2996e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
2997e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      for (i=0; i < (ssize_t) strlen(map); i++)
29983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
2999e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        switch (quantum_map[i])
3000e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
3001e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case RedQuantum:
3002e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case CyanQuantum:
3003e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
3004e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            SetPixelRed(image,ScaleLongToQuantum(*p),q);
3005e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
3006e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
3007e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case GreenQuantum:
3008e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case MagentaQuantum:
3009e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
3010e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            SetPixelGreen(image,ScaleLongToQuantum(*p),q);
3011e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
3012e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
3013e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case BlueQuantum:
3014e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case YellowQuantum:
3015e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
3016e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            SetPixelBlue(image,ScaleLongToQuantum(*p),q);
3017e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
3018e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
3019e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case AlphaQuantum:
3020e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
3021e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            SetPixelAlpha(image,ScaleLongToQuantum(*p),q);
3022e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
3023e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
3024e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case OpacityQuantum:
3025e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
3026e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            SetPixelAlpha(image,ScaleLongToQuantum(*p),q);
3027e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
3028e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
3029e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case BlackQuantum:
3030e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
3031e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            SetPixelBlack(image,ScaleLongToQuantum(*p),q);
3032e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
3033e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
3034e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case IndexQuantum:
3035e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          {
3036e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            SetPixelGray(image,ScaleLongToQuantum(*p),q);
3037e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
3038e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          }
3039e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          default:
3040e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
3041e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
3042e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        p++;
3043e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
3044e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      q+=GetPixelChannels(image);
3045e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
3046e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    if (SyncAuthenticPixels(image,exception) == MagickFalse)
3047e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      break;
3048e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  }
3049e5370944fabb7afa477ab1325d400731b1e5d5e8cristy}
3050e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
3051cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ImportLongLongPixel(Image *image,const RectangleInfo *roi,
305246f4be29828ab7588745336d46ab11611c847933cristy  const char *restrict map,const QuantumType *quantum_map,const void *pixels,
305346f4be29828ab7588745336d46ab11611c847933cristy  ExceptionInfo *exception)
3054e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{
3055b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy  register const MagickSizeType
3056e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    *restrict p;
3057e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
3058e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  register Quantum
30593fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy    *restrict q;
3060e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
3061e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  register ssize_t
3062e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    x;
3063e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
3064e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  ssize_t
3065e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    y;
3066e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
3067b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy  p=(const MagickSizeType *) pixels;
3068e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"BGR") == 0)
3069e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
3070cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
3071e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
3072cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3073e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
3074e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
3075cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
3076e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
3077b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy          SetPixelBlue(image,ScaleLongLongToQuantum(*p++),q);
3078b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy          SetPixelGreen(image,ScaleLongLongToQuantum(*p++),q);
3079b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy          SetPixelRed(image,ScaleLongLongToQuantum(*p++),q);
3080e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
3081e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
3082e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
3083e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
3084e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
3085e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
3086e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
3087e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"BGRA") == 0)
3088e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
3089cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
3090e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
3091cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3092e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
3093e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
3094cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
3095e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
3096b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy          SetPixelBlue(image,ScaleLongLongToQuantum(*p++),q);
3097b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy          SetPixelGreen(image,ScaleLongLongToQuantum(*p++),q);
3098b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy          SetPixelRed(image,ScaleLongLongToQuantum(*p++),q);
3099b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy          SetPixelAlpha(image,ScaleLongLongToQuantum(*p++),q);
3100e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
3101e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
3102e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
3103e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
3104e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
3105e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
3106e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
3107e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"BGRP") == 0)
3108e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
3109cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
3110e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
3111cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3112e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
3113e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
3114cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
3115e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
3116b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy          SetPixelBlue(image,ScaleLongLongToQuantum(*p++),q);
3117b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy          SetPixelGreen(image,ScaleLongLongToQuantum(*p++),q);
3118b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy          SetPixelRed(image,ScaleLongLongToQuantum(*p++),q);
3119e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
3120e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
3121e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
3122e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
3123e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
31243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
3125e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
3126e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
3127e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"I") == 0)
3128e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
3129cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
31303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
3131cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3132e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
3133e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
3134cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
3135e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
3136b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy          SetPixelGray(image,ScaleLongLongToQuantum(*p++),q);
3137e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
3138e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
3139e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
3140e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
31413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
3142e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
3143e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
3144e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"RGB") == 0)
3145e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
3146cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
31473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
3148cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3149e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
3150e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
3151cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
3152e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
3153b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy          SetPixelRed(image,ScaleLongLongToQuantum(*p++),q);
3154b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy          SetPixelGreen(image,ScaleLongLongToQuantum(*p++),q);
3155b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy          SetPixelBlue(image,ScaleLongLongToQuantum(*p++),q);
3156e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
3157e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
3158e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
3159e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
31603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
3161e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
3162e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
3163e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"RGBA") == 0)
3164e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
3165cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
31663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
3167cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3168e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
3169e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
3170cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
3171e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
3172b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy          SetPixelRed(image,ScaleLongLongToQuantum(*p++),q);
3173b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy          SetPixelGreen(image,ScaleLongLongToQuantum(*p++),q);
3174b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy          SetPixelBlue(image,ScaleLongLongToQuantum(*p++),q);
3175b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy          SetPixelAlpha(image,ScaleLongLongToQuantum(*p++),q);
3176e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
3177e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
3178e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
3179e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
31803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
3181e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
3182e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
3183e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"RGBP") == 0)
3184e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
3185cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
31863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
3187cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3188e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
3189e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
3190cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
3191e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
3192b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy          SetPixelRed(image,ScaleLongLongToQuantum(*p++),q);
3193b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy          SetPixelGreen(image,ScaleLongLongToQuantum(*p++),q);
3194b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy          SetPixelBlue(image,ScaleLongLongToQuantum(*p++),q);
3195e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
3196e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
3197e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
3198e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
3199e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
32003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
3201e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
32023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
3203cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy  for (y=0; y < (ssize_t) roi->height; y++)
32043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  {
3205cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy    q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3206e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    if (q == (Quantum *) NULL)
3207e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      break;
3208cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy    for (x=0; x < (ssize_t) roi->width; x++)
32093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
3210e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      register ssize_t
3211e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        i;
32123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
3213e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      for (i=0; i < (ssize_t) strlen(map); i++)
3214e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
3215e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        switch (quantum_map[i])
32163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
3217e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case RedQuantum:
3218e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case CyanQuantum:
32193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
3220b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy            SetPixelRed(image,ScaleLongLongToQuantum(*p),q);
3221e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
32223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
3223e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case GreenQuantum:
3224e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case MagentaQuantum:
32253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
3226b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy            SetPixelGreen(image,ScaleLongLongToQuantum(*p),q);
3227e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
32283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
3229e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case BlueQuantum:
3230e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case YellowQuantum:
32313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
3232b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy            SetPixelBlue(image,ScaleLongLongToQuantum(*p),q);
3233e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
32343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
3235e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case AlphaQuantum:
32363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
3237b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy            SetPixelAlpha(image,ScaleLongLongToQuantum(*p),q);
3238e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
32393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
3240e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case OpacityQuantum:
32413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
3242b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy            SetPixelAlpha(image,ScaleLongLongToQuantum(*p),q);
3243e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
32443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
3245e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case BlackQuantum:
32463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
3247b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy            SetPixelBlack(image,ScaleLongLongToQuantum(*p),q);
3248e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
32493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
3250e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case IndexQuantum:
32513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
3252b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy            SetPixelGray(image,ScaleLongLongToQuantum(*p),q);
3253e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
32543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
3255e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          default:
3256e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
32573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
3258e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        p++;
3259e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
3260e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      q+=GetPixelChannels(image);
3261e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
3262e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    if (SyncAuthenticPixels(image,exception) == MagickFalse)
3263e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      break;
3264e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  }
3265e5370944fabb7afa477ab1325d400731b1e5d5e8cristy}
3266e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
3267cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ImportQuantumPixel(Image *image,const RectangleInfo *roi,
326846f4be29828ab7588745336d46ab11611c847933cristy  const char *restrict map,const QuantumType *quantum_map,const void *pixels,
326946f4be29828ab7588745336d46ab11611c847933cristy  ExceptionInfo *exception)
3270e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{
3271e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  register const Quantum
3272e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    *restrict p;
3273e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
3274e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  register Quantum
32753fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy    *restrict q;
3276e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
3277e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  register ssize_t
3278e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    x;
3279e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
3280e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  ssize_t
3281e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    y;
3282e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
3283e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  p=(const Quantum *) pixels;
3284e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"BGR") == 0)
3285e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
3286cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
3287e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
3288cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3289e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
32903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
3291cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
32923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
3293e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelBlue(image,*p++,q);
3294e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelGreen(image,*p++,q);
3295e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelRed(image,*p++,q);
3296e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
3297e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        }
3298e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
3299e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
3300e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
3301e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
3302e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
3303e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"BGRA") == 0)
3304e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
3305cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
3306e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
3307cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3308e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
33093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
3310cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
3311e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
3312e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelBlue(image,*p++,q);
3313e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelGreen(image,*p++,q);
3314e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelRed(image,*p++,q);
3315e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelAlpha(image,*p++,q);
3316e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
33173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
3318e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
3319e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
3320e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
3321e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
3322e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
3323e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"BGRP") == 0)
3324e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
3325cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
33263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
3327cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
33284c08aed51c5899665ade97263692328eea4af106cristy        if (q == (Quantum *) NULL)
33293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
3330cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
33313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
3332e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelBlue(image,*p++,q);
3333e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelGreen(image,*p++,q);
3334e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelRed(image,*p++,q);
3335e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
3336ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy          q+=GetPixelChannels(image);
33373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
33383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
33393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
33403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
3341e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
33423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
3343e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"I") == 0)
33443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
3345cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
3346e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
3347cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3348e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
33493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
3350cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
3351e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
3352e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelGray(image,*p++,q);
3353e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
33543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
3355e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
3356e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
3357e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
3358e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
3359e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
3360e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"RGB") == 0)
3361e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
3362cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
33633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
3364cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
33654c08aed51c5899665ade97263692328eea4af106cristy        if (q == (Quantum *) NULL)
33663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
3367cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
33683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
3369e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelRed(image,*p++,q);
3370e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelGreen(image,*p++,q);
3371e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelBlue(image,*p++,q);
3372ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy          q+=GetPixelChannels(image);
33733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
33743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
33753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
33763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
3377e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
33783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
3379e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"RGBA") == 0)
33803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
3381cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
3382e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
3383cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3384e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
33853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
3386cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
3387e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
3388e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelRed(image,*p++,q);
3389e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelGreen(image,*p++,q);
3390e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelBlue(image,*p++,q);
3391e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelAlpha(image,*p++,q);
3392e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
33933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
3394e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
3395e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
3396e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
3397e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
3398e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
3399e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"RGBP") == 0)
3400e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
3401cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
34023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
3403cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
34044c08aed51c5899665ade97263692328eea4af106cristy        if (q == (Quantum *) NULL)
34053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
3406cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
34073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
3408e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelRed(image,*p++,q);
3409e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelGreen(image,*p++,q);
3410e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelBlue(image,*p++,q);
3411e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
3412ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy          q+=GetPixelChannels(image);
34133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
34143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
34153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
34163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
3417e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
34183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
3419cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy  for (y=0; y < (ssize_t) roi->height; y++)
3420e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  {
3421cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy    q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3422e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    if (q == (Quantum *) NULL)
3423e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      break;
3424cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy    for (x=0; x < (ssize_t) roi->width; x++)
34253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
3426e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      register ssize_t
3427e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        i;
34283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
3429e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      for (i=0; i < (ssize_t) strlen(map); i++)
3430e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
3431e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        switch (quantum_map[i])
34323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
3433e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case RedQuantum:
3434e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case CyanQuantum:
34353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
3436e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            SetPixelRed(image,*p,q);
3437e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
34383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
3439e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case GreenQuantum:
3440e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case MagentaQuantum:
34413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
3442e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            SetPixelGreen(image,*p,q);
3443e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
34443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
3445e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case BlueQuantum:
3446e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case YellowQuantum:
34473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
3448e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            SetPixelBlue(image,*p,q);
3449e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
34503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
3451e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case AlphaQuantum:
34523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
3453e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            SetPixelAlpha(image,*p,q);
3454e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
34553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
3456e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case OpacityQuantum:
34573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
3458e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            SetPixelAlpha(image,*p,q);
3459e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
34603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
3461e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case BlackQuantum:
34623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
3463e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            SetPixelBlack(image,*p,q);
3464e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
34653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
3466e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case IndexQuantum:
34673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
3468e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            SetPixelGray(image,*p,q);
3469e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
34703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
3471e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          default:
3472e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
34733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
3474e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        p++;
3475e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
3476e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      q+=GetPixelChannels(image);
3477e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
3478e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    if (SyncAuthenticPixels(image,exception) == MagickFalse)
3479e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      break;
3480e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  }
3481e5370944fabb7afa477ab1325d400731b1e5d5e8cristy}
3482e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
3483cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ImportShortPixel(Image *image,const RectangleInfo *roi,
348446f4be29828ab7588745336d46ab11611c847933cristy  const char *restrict map,const QuantumType *quantum_map,const void *pixels,
348546f4be29828ab7588745336d46ab11611c847933cristy  ExceptionInfo *exception)
3486e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{
3487e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  register const unsigned short
3488e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    *restrict p;
3489e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
3490e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  register Quantum
34913fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy    *restrict q;
3492e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
3493e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  register ssize_t
3494e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    x;
3495e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
3496e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  ssize_t
3497e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    y;
3498e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
3499e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  p=(const unsigned short *) pixels;
3500e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"BGR") == 0)
3501e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
3502cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
35033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
3504cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
35054c08aed51c5899665ade97263692328eea4af106cristy        if (q == (Quantum *) NULL)
35063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
3507cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
35083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
3509e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelBlue(image,ScaleShortToQuantum(*p++),q);
3510e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelGreen(image,ScaleShortToQuantum(*p++),q);
3511e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelRed(image,ScaleShortToQuantum(*p++),q);
3512ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy          q+=GetPixelChannels(image);
35133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
35143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
35153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
35163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
3517e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
35183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
3519e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"BGRA") == 0)
35203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
3521cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
3522e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
3523cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3524e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
35253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
3526cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
35273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
3528e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelBlue(image,ScaleShortToQuantum(*p++),q);
3529e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelGreen(image,ScaleShortToQuantum(*p++),q);
3530e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelRed(image,ScaleShortToQuantum(*p++),q);
3531e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelAlpha(image,ScaleShortToQuantum(*p++),q);
3532e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
35333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
3534e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
35353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
3536e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
3537e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
3538e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
3539e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"BGRP") == 0)
3540e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
3541cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
35423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
3543cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
35444c08aed51c5899665ade97263692328eea4af106cristy        if (q == (Quantum *) NULL)
35453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
3546cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
35473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
3548e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelBlue(image,ScaleShortToQuantum(*p++),q);
3549e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelGreen(image,ScaleShortToQuantum(*p++),q);
3550e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelRed(image,ScaleShortToQuantum(*p++),q);
3551e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
3552ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy          q+=GetPixelChannels(image);
35533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
35543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
35553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
35563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
3557e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
35583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
3559e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"I") == 0)
35603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
3561cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
3562e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
3563cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3564e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
35653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
3566cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
35673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
3568e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelGray(image,ScaleShortToQuantum(*p++),q);
3569e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
35703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
3571e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
35723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
3573e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
3574e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
3575e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
3576e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"RGB") == 0)
3577e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
3578cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
3579e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
3580cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3581e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
35823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
3583cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
35843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
3585e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelRed(image,ScaleShortToQuantum(*p++),q);
3586e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelGreen(image,ScaleShortToQuantum(*p++),q);
3587e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelBlue(image,ScaleShortToQuantum(*p++),q);
3588e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
35893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
3590e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
35913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
3592e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
3593e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
3594e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
3595e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"RGBA") == 0)
3596e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
3597cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
3598e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
3599cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3600e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (q == (Quantum *) NULL)
36013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
3602cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
3603e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        {
3604e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelRed(image,ScaleShortToQuantum(*p++),q);
3605e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelGreen(image,ScaleShortToQuantum(*p++),q);
3606e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelBlue(image,ScaleShortToQuantum(*p++),q);
3607e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelAlpha(image,ScaleShortToQuantum(*p++),q);
3608e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          q+=GetPixelChannels(image);
36093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
3610e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
3611e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          break;
3612e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
3613e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
3614e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
3615e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (LocaleCompare(map,"RGBP") == 0)
3616e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
3617cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      for (y=0; y < (ssize_t) roi->height; y++)
36183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
3619cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
36204c08aed51c5899665ade97263692328eea4af106cristy        if (q == (Quantum *) NULL)
36213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
3622cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy        for (x=0; x < (ssize_t) roi->width; x++)
36233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
3624e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelRed(image,ScaleShortToQuantum(*p++),q);
3625e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelGreen(image,ScaleShortToQuantum(*p++),q);
3626e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          SetPixelBlue(image,ScaleShortToQuantum(*p++),q);
3627e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          p++;
3628ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy          q+=GetPixelChannels(image);
36293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
36303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (SyncAuthenticPixels(image,exception) == MagickFalse)
36313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
36323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
3633e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      return;
36343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
3635cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy  for (y=0; y < (ssize_t) roi->height; y++)
3636e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  {
3637cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy    q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception);
3638e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    if (q == (Quantum *) NULL)
3639e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      break;
3640cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy    for (x=0; x < (ssize_t) roi->width; x++)
36413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
3642e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      register ssize_t
3643e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        i;
36443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
3645e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      for (i=0; i < (ssize_t) strlen(map); i++)
3646e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
3647e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        switch (quantum_map[i])
36483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
3649e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case RedQuantum:
3650e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case CyanQuantum:
36513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
3652e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            SetPixelRed(image,ScaleShortToQuantum(*p),q);
3653e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
36543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
3655e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case GreenQuantum:
3656e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case MagentaQuantum:
36573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
3658e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            SetPixelGreen(image,ScaleShortToQuantum(*p),q);
3659e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
36603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
3661e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case BlueQuantum:
3662e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case YellowQuantum:
36633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
3664e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            SetPixelBlue(image,ScaleShortToQuantum(*p),q);
3665e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
36663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
3667e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case AlphaQuantum:
36683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
3669e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            SetPixelAlpha(image,ScaleShortToQuantum(*p),q);
3670e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
36713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
3672e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case OpacityQuantum:
36733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
3674e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            SetPixelAlpha(image,ScaleShortToQuantum(*p),q);
3675e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
36763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
3677e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case BlackQuantum:
36783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
3679e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            SetPixelBlack(image,ScaleShortToQuantum(*p),q);
3680e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
36813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
3682e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          case IndexQuantum:
36833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
3684e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            SetPixelGray(image,ScaleShortToQuantum(*p),q);
3685e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
36863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
3687e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          default:
3688e5370944fabb7afa477ab1325d400731b1e5d5e8cristy            break;
36893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
3690e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        p++;
3691e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
3692e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      q+=GetPixelChannels(image);
3693e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
3694e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    if (SyncAuthenticPixels(image,exception) == MagickFalse)
3695e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      break;
3696e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  }
3697e5370944fabb7afa477ab1325d400731b1e5d5e8cristy}
3698e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
3699cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristyMagickExport MagickBooleanType ImportImagePixels(Image *image,const ssize_t x,
3700cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy  const ssize_t y,const size_t width,const size_t height,const char *map,
3701cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy  const StorageType type,const void *pixels,ExceptionInfo *exception)
3702e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{
3703e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  QuantumType
3704e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    *quantum_map;
3705e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
3706cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy  RectangleInfo
3707cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy    roi;
3708cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy
3709e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  register ssize_t
3710e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    i;
3711e5370944fabb7afa477ab1325d400731b1e5d5e8cristy
3712e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  /*
3713e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    Allocate image structure.
3714e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  */
3715e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  assert(image != (Image *) NULL);
3716e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  assert(image->signature == MagickSignature);
3717e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (image->debug != MagickFalse)
3718e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
3719e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  quantum_map=(QuantumType *) AcquireQuantumMemory(strlen(map),
3720e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    sizeof(*quantum_map));
3721e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (quantum_map == (QuantumType *) NULL)
3722e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    ThrowBinaryException(ResourceLimitError,"MemoryAllocationFailed",
3723e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      image->filename);
3724e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  for (i=0; i < (ssize_t) strlen(map); i++)
3725e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  {
3726e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    switch (map[i])
3727e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
3728e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      case 'a':
3729e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      case 'A':
37303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
3731e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        quantum_map[i]=AlphaQuantum;
3732e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        image->matte=MagickTrue;
3733e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        break;
3734e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
3735e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      case 'B':
3736e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      case 'b':
3737e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
3738e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        quantum_map[i]=BlueQuantum;
3739e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        break;
3740e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
3741e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      case 'C':
3742e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      case 'c':
3743e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
3744e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        quantum_map[i]=CyanQuantum;
3745e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        (void) SetImageColorspace(image,CMYKColorspace,exception);
3746e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        break;
3747e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
3748e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      case 'g':
3749e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      case 'G':
3750e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
3751e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        quantum_map[i]=GreenQuantum;
3752e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        break;
3753e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
3754e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      case 'K':
3755e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      case 'k':
3756e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
3757e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        quantum_map[i]=BlackQuantum;
3758e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        (void) SetImageColorspace(image,CMYKColorspace,exception);
3759e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        break;
3760e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
3761e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      case 'I':
3762e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      case 'i':
3763e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
3764e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        quantum_map[i]=IndexQuantum;
3765e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        break;
3766e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
3767e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      case 'm':
3768e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      case 'M':
3769e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
3770e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        quantum_map[i]=MagentaQuantum;
3771e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        (void) SetImageColorspace(image,CMYKColorspace,exception);
3772e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        break;
3773e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
3774e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      case 'O':
3775e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      case 'o':
3776e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
3777e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        quantum_map[i]=OpacityQuantum;
3778e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        image->matte=MagickTrue;
3779e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        break;
3780e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
3781e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      case 'P':
3782e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      case 'p':
3783e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
3784e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        quantum_map[i]=UndefinedQuantum;
3785e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        break;
3786e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
3787e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      case 'R':
3788e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      case 'r':
3789e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
3790e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        quantum_map[i]=RedQuantum;
3791e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        break;
37923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
3793e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      case 'Y':
3794e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      case 'y':
3795e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
3796e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        quantum_map[i]=YellowQuantum;
3797e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        (void) SetImageColorspace(image,CMYKColorspace,exception);
3798e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        break;
3799e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
3800e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      default:
3801e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      {
3802e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
3803e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        (void) ThrowMagickException(exception,GetMagickModule(),OptionError,
3804e5370944fabb7afa477ab1325d400731b1e5d5e8cristy          "UnrecognizedPixelMap","`%s'",map);
3805e5370944fabb7afa477ab1325d400731b1e5d5e8cristy        return(MagickFalse);
3806e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      }
3807e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
3808e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  }
3809e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  if (SetImageStorageClass(image,DirectClass,exception) == MagickFalse)
3810e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    return(MagickFalse);
3811e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  /*
3812e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    Transfer the pixels from the pixel data to the image.
3813e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  */
3814cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy  roi.width=width;
3815cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy  roi.height=height;
3816cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy  roi.x=x;
3817cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy  roi.y=y;
3818e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  switch (type)
3819e5370944fabb7afa477ab1325d400731b1e5d5e8cristy  {
3820e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    case CharPixel:
3821e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
3822cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      ImportCharPixel(image,&roi,map,quantum_map,pixels,exception);
3823e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      break;
3824e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
3825e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    case DoublePixel:
3826e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
3827cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      ImportDoublePixel(image,&roi,map,quantum_map,pixels,exception);
3828e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      break;
3829e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
3830e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    case FloatPixel:
3831e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
3832cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      ImportFloatPixel(image,&roi,map,quantum_map,pixels,exception);
3833e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      break;
3834e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
38356c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy    case LongPixel:
3836e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
3837cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      ImportLongPixel(image,&roi,map,quantum_map,pixels,exception);
3838e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      break;
3839e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
38406c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy    case LongLongPixel:
3841e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
3842cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      ImportLongLongPixel(image,&roi,map,quantum_map,pixels,exception);
3843e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      break;
3844e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
3845e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    case QuantumPixel:
3846e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
3847cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      ImportQuantumPixel(image,&roi,map,quantum_map,pixels,exception);
3848e5370944fabb7afa477ab1325d400731b1e5d5e8cristy      break;
3849e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    }
3850e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    case ShortPixel:
3851e5370944fabb7afa477ab1325d400731b1e5d5e8cristy    {
3852cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy      ImportShortPixel(image,&roi,map,quantum_map,pixels,exception);
38533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      break;
38543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
38553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    default:
38563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
38573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
3858c82a27bb8e3138ff9bbf0f696663bdf3e704cedecristy      (void) ThrowMagickException(exception,GetMagickModule(),OptionError,
3859c82a27bb8e3138ff9bbf0f696663bdf3e704cedecristy        "UnrecognizedPixelMap","`%s'",map);
38603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      break;
38613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
38623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  }
38633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
38643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  return(MagickTrue);
38653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy}
3866d76c51ed30cf4084f4434ba08925d16001d1e340cristy
3867d76c51ed30cf4084f4434ba08925d16001d1e340cristy/*
3868d76c51ed30cf4084f4434ba08925d16001d1e340cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3869a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy%                                                                             %
3870a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy%                                                                             %
3871a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy%                                                                             %
3872bd5a96cd2b69f218f85a7adc306296a736f91a56cristy+   I n i t i a l i z e P i x e l C h a n n e l M a p                         %
3873bd5a96cd2b69f218f85a7adc306296a736f91a56cristy%                                                                             %
3874bd5a96cd2b69f218f85a7adc306296a736f91a56cristy%                                                                             %
3875bd5a96cd2b69f218f85a7adc306296a736f91a56cristy%                                                                             %
3876bd5a96cd2b69f218f85a7adc306296a736f91a56cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3877bd5a96cd2b69f218f85a7adc306296a736f91a56cristy%
3878bd5a96cd2b69f218f85a7adc306296a736f91a56cristy%  InitializePixelChannelMap() defines the standard pixel component map.
3879bd5a96cd2b69f218f85a7adc306296a736f91a56cristy%
3880bd5a96cd2b69f218f85a7adc306296a736f91a56cristy%  The format of the InitializePixelChannelMap() method is:
3881bd5a96cd2b69f218f85a7adc306296a736f91a56cristy%
3882bd5a96cd2b69f218f85a7adc306296a736f91a56cristy%      void InitializePixelChannelMap(Image *image)
3883bd5a96cd2b69f218f85a7adc306296a736f91a56cristy%
3884bd5a96cd2b69f218f85a7adc306296a736f91a56cristy%  A description of each parameter follows:
3885bd5a96cd2b69f218f85a7adc306296a736f91a56cristy%
3886bd5a96cd2b69f218f85a7adc306296a736f91a56cristy%    o image: the image.
3887bd5a96cd2b69f218f85a7adc306296a736f91a56cristy%
3888bd5a96cd2b69f218f85a7adc306296a736f91a56cristy*/
3889e2a912b6c9086c98ec838baa0824cd8deca55538cristyMagickExport void InitializePixelChannelMap(Image *image)
389077c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy{
3891e2a912b6c9086c98ec838baa0824cd8deca55538cristy  PixelTrait
3892e2a912b6c9086c98ec838baa0824cd8deca55538cristy    trait;
3893e2a912b6c9086c98ec838baa0824cd8deca55538cristy
389477c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy  register ssize_t
389577c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy    i;
389677c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy
3897d26338ffb761a86f047d7bbb9a596800f53c8649cristy  ssize_t
389877c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy    n;
389977c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy
390077c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy  assert(image != (Image *) NULL);
390177c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy  assert(image->signature == MagickSignature);
3902e2a912b6c9086c98ec838baa0824cd8deca55538cristy  (void) ResetMagickMemory(image->channel_map,0,MaxPixelChannels*
3903e2a912b6c9086c98ec838baa0824cd8deca55538cristy    sizeof(*image->channel_map));
3904e2a912b6c9086c98ec838baa0824cd8deca55538cristy  trait=UpdatePixelTrait;
3905e2a912b6c9086c98ec838baa0824cd8deca55538cristy  if (image->matte != MagickFalse)
390661f18adcc41fdd05d57e50544cdb9d321bb18953cristy    trait=(PixelTrait) (trait | BlendPixelTrait);
390777c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy  n=0;
3908c06c58036e12a41593f1c7a984f1fdb4e9cc434bcristy  if (image->colorspace == GRAYColorspace)
390977c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy    {
39103c3162882db2814a5b709072cd03b8d18c80d6afcristy      SetPixelChannelMap(image,BluePixelChannel,trait,n);
3911e2a912b6c9086c98ec838baa0824cd8deca55538cristy      SetPixelChannelMap(image,GreenPixelChannel,trait,n);
39123c3162882db2814a5b709072cd03b8d18c80d6afcristy      SetPixelChannelMap(image,RedPixelChannel,trait,n++);
39133c3162882db2814a5b709072cd03b8d18c80d6afcristy    }
39143c3162882db2814a5b709072cd03b8d18c80d6afcristy  else
39153c3162882db2814a5b709072cd03b8d18c80d6afcristy    {
39163c3162882db2814a5b709072cd03b8d18c80d6afcristy      SetPixelChannelMap(image,RedPixelChannel,trait,n++);
39173c3162882db2814a5b709072cd03b8d18c80d6afcristy      SetPixelChannelMap(image,GreenPixelChannel,trait,n++);
3918e2a912b6c9086c98ec838baa0824cd8deca55538cristy      SetPixelChannelMap(image,BluePixelChannel,trait,n++);
391977c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy    }
392077c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy  if (image->colorspace == CMYKColorspace)
3921e2a912b6c9086c98ec838baa0824cd8deca55538cristy    SetPixelChannelMap(image,BlackPixelChannel,trait,n++);
392277c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy  if (image->matte != MagickFalse)
3923e2a912b6c9086c98ec838baa0824cd8deca55538cristy    SetPixelChannelMap(image,AlphaPixelChannel,CopyPixelTrait,n++);
3924bd5a96cd2b69f218f85a7adc306296a736f91a56cristy  if (image->storage_class == PseudoClass)
3925e2a912b6c9086c98ec838baa0824cd8deca55538cristy    SetPixelChannelMap(image,IndexPixelChannel,CopyPixelTrait,n++);
3926183a5c7d1c8a9a747766ff9a2ef067853a7066e9cristy  if (image->mask != MagickFalse)
392710a6c61544fb48d72f29ec8f9573bdcd52abf1b7cristy    SetPixelChannelMap(image,MaskPixelChannel,CopyPixelTrait,n++);
3928e2a912b6c9086c98ec838baa0824cd8deca55538cristy  assert((n+image->number_meta_channels) < MaxPixelChannels);
3929e2a912b6c9086c98ec838baa0824cd8deca55538cristy  for (i=0; i < (ssize_t) image->number_meta_channels; i++)
393061f18adcc41fdd05d57e50544cdb9d321bb18953cristy    SetPixelChannelMap(image,(PixelChannel) (MetaPixelChannel+i),CopyPixelTrait,
3931e2a912b6c9086c98ec838baa0824cd8deca55538cristy      n++);
3932d26338ffb761a86f047d7bbb9a596800f53c8649cristy  image->number_channels=(size_t) n;
39336dcb9b8f58179c62fb386bf2bc02c8ba901dfb15cristy  if (image->debug != MagickFalse)
39346dcb9b8f58179c62fb386bf2bc02c8ba901dfb15cristy    LogPixelChannels(image);
3935480f49ff5341726eb0212f2f1f22cfdefac392c4cristy  (void) SetPixelChannelMask(image,image->channel_mask);
3936bd5a96cd2b69f218f85a7adc306296a736f91a56cristy}
3937bd5a96cd2b69f218f85a7adc306296a736f91a56cristy
3938bd5a96cd2b69f218f85a7adc306296a736f91a56cristy/*
3939bd5a96cd2b69f218f85a7adc306296a736f91a56cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3940bd5a96cd2b69f218f85a7adc306296a736f91a56cristy%                                                                             %
3941bd5a96cd2b69f218f85a7adc306296a736f91a56cristy%                                                                             %
3942bd5a96cd2b69f218f85a7adc306296a736f91a56cristy%                                                                             %
3943a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy%   I n t e r p o l a t e P i x e l C h a n n e l                             %
3944a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy%                                                                             %
3945a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy%                                                                             %
3946a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy%                                                                             %
3947a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3948a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy%
3949884f600898ca6935a7981b4d56bf3d2c4ec17011cristy%  InterpolatePixelChannel() applies a pixel interpolation method between a
3950884f600898ca6935a7981b4d56bf3d2c4ec17011cristy%  floating point coordinate and the pixels surrounding that coordinate.  No
3951884f600898ca6935a7981b4d56bf3d2c4ec17011cristy%  pixel area resampling, or scaling of the result is performed.
3952a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy%
3953a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy%  The format of the InterpolatePixelChannel method is:
3954a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy%
3955a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy%      MagickBooleanType InterpolatePixelChannel(const Image *image,
3956444eda6285b2191e662c3d375c86770da70a83b0cristy%        const CacheView *image_view,const PixelChannel channel,
39575c4e2586d27d4299a742d170d41105de1689aa46cristy%        const PixelInterpolateMethod method,const double x,const double y,
3958a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy%        double *pixel,ExceptionInfo *exception)
3959a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy%
3960a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy%  A description of each parameter follows:
3961a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy%
3962a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy%    o image: the image.
3963a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy%
3964a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy%    o image_view: the image view.
3965a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy%
3966a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy%    o channel: the pixel channel to interpolate.
3967a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy%
3968a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy%    o method: the pixel color interpolation method.
3969a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy%
3970a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy%    o x,y: A double representing the current (x,y) position of the pixel.
3971a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy%
3972a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy%    o pixel: return the interpolated pixel here.
3973a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy%
3974a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy%    o exception: return any errors or warnings in this structure.
3975a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy%
3976a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy*/
397794ea1636709395774d7118ef56162d211904cfd2cristy
3978884f600898ca6935a7981b4d56bf3d2c4ec17011cristystatic inline double MagickMax(const MagickRealType x,const MagickRealType y)
3979884f600898ca6935a7981b4d56bf3d2c4ec17011cristy{
3980884f600898ca6935a7981b4d56bf3d2c4ec17011cristy  if (x > y)
3981884f600898ca6935a7981b4d56bf3d2c4ec17011cristy    return(x);
3982884f600898ca6935a7981b4d56bf3d2c4ec17011cristy  return(y);
3983884f600898ca6935a7981b4d56bf3d2c4ec17011cristy}
3984884f600898ca6935a7981b4d56bf3d2c4ec17011cristy
3985884f600898ca6935a7981b4d56bf3d2c4ec17011cristystatic inline MagickRealType CubicWeightingFunction(const MagickRealType x)
3986884f600898ca6935a7981b4d56bf3d2c4ec17011cristy{
3987884f600898ca6935a7981b4d56bf3d2c4ec17011cristy  MagickRealType
3988884f600898ca6935a7981b4d56bf3d2c4ec17011cristy    alpha,
3989884f600898ca6935a7981b4d56bf3d2c4ec17011cristy    gamma;
3990884f600898ca6935a7981b4d56bf3d2c4ec17011cristy
3991884f600898ca6935a7981b4d56bf3d2c4ec17011cristy  alpha=MagickMax(x+2.0,0.0);
3992884f600898ca6935a7981b4d56bf3d2c4ec17011cristy  gamma=1.0*alpha*alpha*alpha;
3993884f600898ca6935a7981b4d56bf3d2c4ec17011cristy  alpha=MagickMax(x+1.0,0.0);
3994884f600898ca6935a7981b4d56bf3d2c4ec17011cristy  gamma-=4.0*alpha*alpha*alpha;
3995884f600898ca6935a7981b4d56bf3d2c4ec17011cristy  alpha=MagickMax(x+0.0,0.0);
3996884f600898ca6935a7981b4d56bf3d2c4ec17011cristy  gamma+=6.0*alpha*alpha*alpha;
3997884f600898ca6935a7981b4d56bf3d2c4ec17011cristy  alpha=MagickMax(x-1.0,0.0);
3998884f600898ca6935a7981b4d56bf3d2c4ec17011cristy  gamma-=4.0*alpha*alpha*alpha;
3999884f600898ca6935a7981b4d56bf3d2c4ec17011cristy  return(gamma/6.0);
4000884f600898ca6935a7981b4d56bf3d2c4ec17011cristy}
4001884f600898ca6935a7981b4d56bf3d2c4ec17011cristy
400294ea1636709395774d7118ef56162d211904cfd2cristystatic inline double MeshInterpolate(const PointInfo *delta,const double p,
400394ea1636709395774d7118ef56162d211904cfd2cristy  const double x,const double y)
400494ea1636709395774d7118ef56162d211904cfd2cristy{
400594ea1636709395774d7118ef56162d211904cfd2cristy  return(delta->x*x+delta->y*y+(1.0-delta->x-delta->y)*p);
400694ea1636709395774d7118ef56162d211904cfd2cristy}
400794ea1636709395774d7118ef56162d211904cfd2cristy
4008884f600898ca6935a7981b4d56bf3d2c4ec17011cristystatic inline ssize_t NearestNeighbor(const MagickRealType x)
4009884f600898ca6935a7981b4d56bf3d2c4ec17011cristy{
4010884f600898ca6935a7981b4d56bf3d2c4ec17011cristy  if (x >= 0.0)
4011884f600898ca6935a7981b4d56bf3d2c4ec17011cristy    return((ssize_t) (x+0.5));
4012884f600898ca6935a7981b4d56bf3d2c4ec17011cristy  return((ssize_t) (x-0.5));
4013884f600898ca6935a7981b4d56bf3d2c4ec17011cristy}
4014884f600898ca6935a7981b4d56bf3d2c4ec17011cristy
4015a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristyMagickExport MagickBooleanType InterpolatePixelChannel(const Image *image,
4016a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy  const CacheView *image_view,const PixelChannel channel,
40175c4e2586d27d4299a742d170d41105de1689aa46cristy  const PixelInterpolateMethod method,const double x,const double y,
4018a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy  double *pixel,ExceptionInfo *exception)
4019a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy{
4020a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy  MagickBooleanType
4021a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy    status;
4022a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy
402394ea1636709395774d7118ef56162d211904cfd2cristy  MagickRealType
402494ea1636709395774d7118ef56162d211904cfd2cristy    alpha[16],
4025884f600898ca6935a7981b4d56bf3d2c4ec17011cristy    gamma,
4026884f600898ca6935a7981b4d56bf3d2c4ec17011cristy    pixels[16];
402794ea1636709395774d7118ef56162d211904cfd2cristy
402894ea1636709395774d7118ef56162d211904cfd2cristy  PixelTrait
402994ea1636709395774d7118ef56162d211904cfd2cristy    traits;
403094ea1636709395774d7118ef56162d211904cfd2cristy
403194ea1636709395774d7118ef56162d211904cfd2cristy  register const Quantum
403294ea1636709395774d7118ef56162d211904cfd2cristy    *p;
403394ea1636709395774d7118ef56162d211904cfd2cristy
403494ea1636709395774d7118ef56162d211904cfd2cristy  register ssize_t
403594ea1636709395774d7118ef56162d211904cfd2cristy    i;
403694ea1636709395774d7118ef56162d211904cfd2cristy
4037a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy  ssize_t
4038a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy    x_offset,
4039a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy    y_offset;
4040a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy
4041a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy  assert(image != (Image *) NULL);
4042a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy  assert(image != (Image *) NULL);
4043a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy  assert(image->signature == MagickSignature);
4044a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy  assert(image_view != (CacheView *) NULL);
4045a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy  status=MagickTrue;
4046884f600898ca6935a7981b4d56bf3d2c4ec17011cristy  *pixel=0.0;
404794ea1636709395774d7118ef56162d211904cfd2cristy  traits=GetPixelChannelMapTraits(image,channel);
4048a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy  x_offset=(ssize_t) floor(x);
4049a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy  y_offset=(ssize_t) floor(y);
4050a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy  switch (method == UndefinedInterpolatePixel ? image->interpolate : method)
4051a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy  {
4052884f600898ca6935a7981b4d56bf3d2c4ec17011cristy    case AverageInterpolatePixel:
4053884f600898ca6935a7981b4d56bf3d2c4ec17011cristy    {
4054884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      p=GetCacheViewVirtualPixels(image_view,x_offset-1,y_offset-1,4,4,
4055884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        exception);
4056884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      if (p == (const Quantum *) NULL)
4057884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        {
4058884f600898ca6935a7981b4d56bf3d2c4ec17011cristy          status=MagickFalse;
4059884f600898ca6935a7981b4d56bf3d2c4ec17011cristy          break;
4060884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        }
4061222b19c8e5e5ee5287e41d33fea54f2b651741b6cristy      if ((traits & BlendPixelTrait) == 0)
4062884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        for (i=0; i < 16; i++)
4063884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        {
4064884f600898ca6935a7981b4d56bf3d2c4ec17011cristy          alpha[i]=1.0;
4065884f600898ca6935a7981b4d56bf3d2c4ec17011cristy          pixels[i]=(MagickRealType) p[i*GetPixelChannels(image)+channel];
4066884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        }
4067884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      else
4068884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        for (i=0; i < 16; i++)
4069884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        {
4070884f600898ca6935a7981b4d56bf3d2c4ec17011cristy          alpha[i]=QuantumScale*GetPixelAlpha(image,p+i*
4071884f600898ca6935a7981b4d56bf3d2c4ec17011cristy            GetPixelChannels(image));
4072884f600898ca6935a7981b4d56bf3d2c4ec17011cristy          pixels[i]=alpha[i]*p[i*GetPixelChannels(image)+channel];
4073884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        }
4074884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      for (i=0; i < 16; i++)
4075884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      {
4076884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        gamma=1.0/(fabs((double) alpha[i]) <= MagickEpsilon ? 1.0 : alpha[i]);
4077884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        *pixel+=gamma*0.0625*pixels[i];
4078884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      }
4079884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      break;
4080884f600898ca6935a7981b4d56bf3d2c4ec17011cristy    }
4081884f600898ca6935a7981b4d56bf3d2c4ec17011cristy    case BicubicInterpolatePixel:
4082884f600898ca6935a7981b4d56bf3d2c4ec17011cristy    {
4083884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      MagickRealType
4084884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        u[4],
4085884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        v[4];
4086884f600898ca6935a7981b4d56bf3d2c4ec17011cristy
4087884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      PointInfo
4088884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        delta;
4089884f600898ca6935a7981b4d56bf3d2c4ec17011cristy
4090884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      p=GetCacheViewVirtualPixels(image_view,x_offset-1,y_offset-1,4,4,
4091884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        exception);
4092884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      if (p == (const Quantum *) NULL)
4093884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        {
4094884f600898ca6935a7981b4d56bf3d2c4ec17011cristy          status=MagickFalse;
4095884f600898ca6935a7981b4d56bf3d2c4ec17011cristy          break;
4096884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        }
4097222b19c8e5e5ee5287e41d33fea54f2b651741b6cristy      if ((traits & BlendPixelTrait) == 0)
4098884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        for (i=0; i < 16; i++)
4099884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        {
4100884f600898ca6935a7981b4d56bf3d2c4ec17011cristy          alpha[i]=1.0;
4101884f600898ca6935a7981b4d56bf3d2c4ec17011cristy          pixels[i]=(MagickRealType) p[i*GetPixelChannels(image)+channel];
4102884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        }
4103884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      else
4104884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        for (i=0; i < 16; i++)
4105884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        {
4106884f600898ca6935a7981b4d56bf3d2c4ec17011cristy          alpha[i]=QuantumScale*GetPixelAlpha(image,p+i*
4107884f600898ca6935a7981b4d56bf3d2c4ec17011cristy            GetPixelChannels(image));
4108884f600898ca6935a7981b4d56bf3d2c4ec17011cristy          pixels[i]=alpha[i]*p[i*GetPixelChannels(image)+channel];
4109884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        }
4110884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      delta.x=x-x_offset;
4111884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      delta.y=y-y_offset;
4112884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      for (i=0; i < 4; i++)
4113884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      {
4114884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        u[0]=(pixels[4*i+3]-pixels[4*i+2])-(pixels[4*i+0]-pixels[4*i+1]);
4115884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        u[1]=(pixels[4*i+0]-pixels[4*i+1])-u[0];
4116884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        u[2]=pixels[4*i+2]-pixels[4*i+0];
4117884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        u[3]=pixels[4*i+1];
4118884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        v[i]=(delta.x*delta.x*delta.x*u[0])+(delta.x*delta.x*u[1])+(delta.x*
4119884f600898ca6935a7981b4d56bf3d2c4ec17011cristy          u[2])+u[3];
4120884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      }
4121884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      u[0]=(v[3]-v[2])-(v[0]-v[1]);
4122884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      u[1]=(v[0]-v[1])-u[0];
4123884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      u[2]=v[2]-v[0];
4124884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      u[3]=v[1];
4125884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      *pixel=(delta.y*delta.y*delta.y*u[0])+(delta.y*delta.y*u[1])+(delta.y*
4126884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        u[2])+u[3];
4127884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      break;
4128884f600898ca6935a7981b4d56bf3d2c4ec17011cristy    }
4129884f600898ca6935a7981b4d56bf3d2c4ec17011cristy    case BilinearInterpolatePixel:
413094ea1636709395774d7118ef56162d211904cfd2cristy    default:
4131a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy    {
413294ea1636709395774d7118ef56162d211904cfd2cristy      PointInfo
413394ea1636709395774d7118ef56162d211904cfd2cristy        delta,
4134884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        epsilon;
413594ea1636709395774d7118ef56162d211904cfd2cristy
413694ea1636709395774d7118ef56162d211904cfd2cristy      p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,2,2,exception);
413794ea1636709395774d7118ef56162d211904cfd2cristy      if (p == (const Quantum *) NULL)
413894ea1636709395774d7118ef56162d211904cfd2cristy        {
413994ea1636709395774d7118ef56162d211904cfd2cristy          status=MagickFalse;
414094ea1636709395774d7118ef56162d211904cfd2cristy          break;
414194ea1636709395774d7118ef56162d211904cfd2cristy        }
4142222b19c8e5e5ee5287e41d33fea54f2b651741b6cristy      if ((traits & BlendPixelTrait) == 0)
4143884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        for (i=0; i < 4; i++)
4144884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        {
4145884f600898ca6935a7981b4d56bf3d2c4ec17011cristy          alpha[i]=1.0;
4146884f600898ca6935a7981b4d56bf3d2c4ec17011cristy          pixels[i]=(MagickRealType) p[i*GetPixelChannels(image)+channel];
4147884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        }
4148884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      else
4149884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        for (i=0; i < 4; i++)
4150884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        {
4151884f600898ca6935a7981b4d56bf3d2c4ec17011cristy          alpha[i]=QuantumScale*GetPixelAlpha(image,p+i*
4152884f600898ca6935a7981b4d56bf3d2c4ec17011cristy            GetPixelChannels(image));
4153884f600898ca6935a7981b4d56bf3d2c4ec17011cristy          pixels[i]=alpha[i]*p[i*GetPixelChannels(image)+channel];
4154884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        }
415594ea1636709395774d7118ef56162d211904cfd2cristy      delta.x=x-x_offset;
415694ea1636709395774d7118ef56162d211904cfd2cristy      delta.y=y-y_offset;
4157884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      epsilon.x=1.0-delta.x;
4158884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      epsilon.y=1.0-delta.y;
4159884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      gamma=((epsilon.y*(epsilon.x*alpha[0]+delta.x*alpha[1])+delta.y*
4160884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        (epsilon.x*alpha[2]+delta.x*alpha[3])));
4161884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
4162884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      *pixel=gamma*(epsilon.y*(epsilon.x*pixels[0]+delta.x*pixels[1])+delta.y*
4163884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        (epsilon.x*pixels[2]+delta.x*pixels[3]));
4164884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      break;
4165884f600898ca6935a7981b4d56bf3d2c4ec17011cristy    }
4166884f600898ca6935a7981b4d56bf3d2c4ec17011cristy    case FilterInterpolatePixel:
4167884f600898ca6935a7981b4d56bf3d2c4ec17011cristy    {
4168884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      CacheView
4169884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        *filter_view;
4170884f600898ca6935a7981b4d56bf3d2c4ec17011cristy
4171884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      Image
4172884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        *excerpt_image,
4173884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        *filter_image;
4174884f600898ca6935a7981b4d56bf3d2c4ec17011cristy
4175884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      RectangleInfo
4176884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        geometry;
4177884f600898ca6935a7981b4d56bf3d2c4ec17011cristy
4178884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      geometry.width=4L;
4179884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      geometry.height=4L;
4180884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      geometry.x=x_offset-1;
4181884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      geometry.y=y_offset-1;
4182884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      excerpt_image=ExcerptImage(image,&geometry,exception);
4183884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      if (excerpt_image == (Image *) NULL)
4184884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        {
4185884f600898ca6935a7981b4d56bf3d2c4ec17011cristy          status=MagickFalse;
4186884f600898ca6935a7981b4d56bf3d2c4ec17011cristy          break;
4187884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        }
4188aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy      filter_image=ResizeImage(excerpt_image,1,1,image->filter,exception);
4189884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      excerpt_image=DestroyImage(excerpt_image);
4190884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      if (filter_image == (Image *) NULL)
4191884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        break;
4192db070957cf6bf959df9283a482377e8854c3d4d2cristy      filter_view=AcquireVirtualCacheView(filter_image,exception);
4193884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      p=GetCacheViewVirtualPixels(filter_view,0,0,1,1,exception);
4194884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      if (p == (const Quantum *) NULL)
4195884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        status=MagickFalse;
4196884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      else
41970beccfa61f43782de2d6ee7edc1ec8301a3bbeeccristy        *pixel=(double) GetPixelChannel(image,channel,p);
4198884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      filter_view=DestroyCacheView(filter_view);
4199884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      filter_image=DestroyImage(filter_image);
4200884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      break;
4201884f600898ca6935a7981b4d56bf3d2c4ec17011cristy    }
4202884f600898ca6935a7981b4d56bf3d2c4ec17011cristy    case IntegerInterpolatePixel:
4203884f600898ca6935a7981b4d56bf3d2c4ec17011cristy    {
4204884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,1,1,exception);
4205884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      if (p == (const Quantum *) NULL)
4206884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        {
4207884f600898ca6935a7981b4d56bf3d2c4ec17011cristy          status=MagickFalse;
4208884f600898ca6935a7981b4d56bf3d2c4ec17011cristy          break;
4209884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        }
42100beccfa61f43782de2d6ee7edc1ec8301a3bbeeccristy      *pixel=(double) GetPixelChannel(image,channel,p);
4211884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      break;
4212884f600898ca6935a7981b4d56bf3d2c4ec17011cristy    }
4213884f600898ca6935a7981b4d56bf3d2c4ec17011cristy    case NearestNeighborInterpolatePixel:
4214884f600898ca6935a7981b4d56bf3d2c4ec17011cristy    {
4215884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      p=GetCacheViewVirtualPixels(image_view,NearestNeighbor(x),
4216884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        NearestNeighbor(y),1,1,exception);
4217884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      if (p == (const Quantum *) NULL)
4218884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        {
4219884f600898ca6935a7981b4d56bf3d2c4ec17011cristy          status=MagickFalse;
4220884f600898ca6935a7981b4d56bf3d2c4ec17011cristy          break;
4221884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        }
42220beccfa61f43782de2d6ee7edc1ec8301a3bbeeccristy      *pixel=(double) GetPixelChannel(image,channel,p);
4223884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      break;
4224884f600898ca6935a7981b4d56bf3d2c4ec17011cristy    }
4225884f600898ca6935a7981b4d56bf3d2c4ec17011cristy    case MeshInterpolatePixel:
4226884f600898ca6935a7981b4d56bf3d2c4ec17011cristy    {
4227884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      PointInfo
4228884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        delta,
4229884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        luminance;
4230884f600898ca6935a7981b4d56bf3d2c4ec17011cristy
4231884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,2,2,exception);
4232884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      if (p == (const Quantum *) NULL)
4233884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        {
4234884f600898ca6935a7981b4d56bf3d2c4ec17011cristy          status=MagickFalse;
4235884f600898ca6935a7981b4d56bf3d2c4ec17011cristy          break;
4236884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        }
4237222b19c8e5e5ee5287e41d33fea54f2b651741b6cristy      if ((traits & BlendPixelTrait) == 0)
423894ea1636709395774d7118ef56162d211904cfd2cristy        for (i=0; i < 4; i++)
423994ea1636709395774d7118ef56162d211904cfd2cristy        {
424094ea1636709395774d7118ef56162d211904cfd2cristy          alpha[i]=1.0;
4241884f600898ca6935a7981b4d56bf3d2c4ec17011cristy          pixels[i]=(MagickRealType) p[i*GetPixelChannels(image)+channel];
424294ea1636709395774d7118ef56162d211904cfd2cristy        }
424394ea1636709395774d7118ef56162d211904cfd2cristy      else
424494ea1636709395774d7118ef56162d211904cfd2cristy        for (i=0; i < 4; i++)
424594ea1636709395774d7118ef56162d211904cfd2cristy        {
424694ea1636709395774d7118ef56162d211904cfd2cristy          alpha[i]=QuantumScale*GetPixelAlpha(image,p+i*
424794ea1636709395774d7118ef56162d211904cfd2cristy            GetPixelChannels(image));
424894ea1636709395774d7118ef56162d211904cfd2cristy          pixels[i]=alpha[i]*p[i*GetPixelChannels(image)+channel];
424994ea1636709395774d7118ef56162d211904cfd2cristy        }
4250884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      delta.x=x-x_offset;
4251884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      delta.y=y-y_offset;
4252884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      luminance.x=GetPixelLuminance(image,p)-(double)
4253884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        GetPixelLuminance(image,p+3*GetPixelChannels(image));
425428474bfbda5ee2d4da2eb79f299cf1f692770b99cristy      luminance.y=GetPixelLuminance(image,p+GetPixelChannels(image))-(double)
4255884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        GetPixelLuminance(image,p+2*GetPixelChannels(image));
425694ea1636709395774d7118ef56162d211904cfd2cristy      if (fabs(luminance.x) < fabs(luminance.y))
425794ea1636709395774d7118ef56162d211904cfd2cristy        {
425894ea1636709395774d7118ef56162d211904cfd2cristy          /*
425994ea1636709395774d7118ef56162d211904cfd2cristy            Diagonal 0-3 NW-SE.
426094ea1636709395774d7118ef56162d211904cfd2cristy          */
426194ea1636709395774d7118ef56162d211904cfd2cristy          if (delta.x <= delta.y)
426294ea1636709395774d7118ef56162d211904cfd2cristy            {
426394ea1636709395774d7118ef56162d211904cfd2cristy              /*
426494ea1636709395774d7118ef56162d211904cfd2cristy                Bottom-left triangle (pixel: 2, diagonal: 0-3).
426594ea1636709395774d7118ef56162d211904cfd2cristy              */
426694ea1636709395774d7118ef56162d211904cfd2cristy              delta.y=1.0-delta.y;
426794ea1636709395774d7118ef56162d211904cfd2cristy              gamma=MeshInterpolate(&delta,alpha[2],alpha[3],alpha[0]);
426894ea1636709395774d7118ef56162d211904cfd2cristy              gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
426994ea1636709395774d7118ef56162d211904cfd2cristy              *pixel=gamma*MeshInterpolate(&delta,pixels[2],pixels[3],
427094ea1636709395774d7118ef56162d211904cfd2cristy                pixels[0]);
427194ea1636709395774d7118ef56162d211904cfd2cristy            }
427294ea1636709395774d7118ef56162d211904cfd2cristy          else
427394ea1636709395774d7118ef56162d211904cfd2cristy            {
427494ea1636709395774d7118ef56162d211904cfd2cristy              /*
427594ea1636709395774d7118ef56162d211904cfd2cristy                Top-right triangle (pixel: 1, diagonal: 0-3).
427694ea1636709395774d7118ef56162d211904cfd2cristy              */
427794ea1636709395774d7118ef56162d211904cfd2cristy              delta.x=1.0-delta.x;
427894ea1636709395774d7118ef56162d211904cfd2cristy              gamma=MeshInterpolate(&delta,alpha[1],alpha[0],alpha[3]);
427994ea1636709395774d7118ef56162d211904cfd2cristy              gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
428094ea1636709395774d7118ef56162d211904cfd2cristy              *pixel=gamma*MeshInterpolate(&delta,pixels[1],pixels[0],
428194ea1636709395774d7118ef56162d211904cfd2cristy                pixels[3]);
428294ea1636709395774d7118ef56162d211904cfd2cristy            }
428394ea1636709395774d7118ef56162d211904cfd2cristy        }
428494ea1636709395774d7118ef56162d211904cfd2cristy      else
428594ea1636709395774d7118ef56162d211904cfd2cristy        {
428694ea1636709395774d7118ef56162d211904cfd2cristy          /*
428794ea1636709395774d7118ef56162d211904cfd2cristy            Diagonal 1-2 NE-SW.
428894ea1636709395774d7118ef56162d211904cfd2cristy          */
428994ea1636709395774d7118ef56162d211904cfd2cristy          if (delta.x <= (1.0-delta.y))
429094ea1636709395774d7118ef56162d211904cfd2cristy            {
429194ea1636709395774d7118ef56162d211904cfd2cristy              /*
429294ea1636709395774d7118ef56162d211904cfd2cristy                Top-left triangle (pixel: 0, diagonal: 1-2).
429394ea1636709395774d7118ef56162d211904cfd2cristy              */
429494ea1636709395774d7118ef56162d211904cfd2cristy              gamma=MeshInterpolate(&delta,alpha[0],alpha[1],alpha[2]);
429594ea1636709395774d7118ef56162d211904cfd2cristy              gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
429694ea1636709395774d7118ef56162d211904cfd2cristy              *pixel=gamma*MeshInterpolate(&delta,pixels[0],pixels[1],
429794ea1636709395774d7118ef56162d211904cfd2cristy                pixels[2]);
429894ea1636709395774d7118ef56162d211904cfd2cristy            }
429994ea1636709395774d7118ef56162d211904cfd2cristy          else
430094ea1636709395774d7118ef56162d211904cfd2cristy            {
430194ea1636709395774d7118ef56162d211904cfd2cristy              /*
430294ea1636709395774d7118ef56162d211904cfd2cristy                Bottom-right triangle (pixel: 3, diagonal: 1-2).
430394ea1636709395774d7118ef56162d211904cfd2cristy              */
430494ea1636709395774d7118ef56162d211904cfd2cristy              delta.x=1.0-delta.x;
430594ea1636709395774d7118ef56162d211904cfd2cristy              delta.y=1.0-delta.y;
430694ea1636709395774d7118ef56162d211904cfd2cristy              gamma=MeshInterpolate(&delta,alpha[3],alpha[2],alpha[1]);
430794ea1636709395774d7118ef56162d211904cfd2cristy              gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
430894ea1636709395774d7118ef56162d211904cfd2cristy              *pixel=gamma*MeshInterpolate(&delta,pixels[3],pixels[2],
430994ea1636709395774d7118ef56162d211904cfd2cristy                pixels[1]);
431094ea1636709395774d7118ef56162d211904cfd2cristy            }
431194ea1636709395774d7118ef56162d211904cfd2cristy        }
4312a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy      break;
4313a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy    }
4314884f600898ca6935a7981b4d56bf3d2c4ec17011cristy    case SplineInterpolatePixel:
4315884f600898ca6935a7981b4d56bf3d2c4ec17011cristy    {
4316884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      MagickRealType
4317884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        dx,
4318884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        dy;
4319884f600898ca6935a7981b4d56bf3d2c4ec17011cristy
4320884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      PointInfo
4321884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        delta;
4322884f600898ca6935a7981b4d56bf3d2c4ec17011cristy
4323884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      ssize_t
4324884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        j,
4325884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        n;
4326884f600898ca6935a7981b4d56bf3d2c4ec17011cristy
4327884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      p=GetCacheViewVirtualPixels(image_view,x_offset-1,y_offset-1,4,4,
4328884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        exception);
4329884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      if (p == (const Quantum *) NULL)
4330884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        {
4331884f600898ca6935a7981b4d56bf3d2c4ec17011cristy          status=MagickFalse;
4332884f600898ca6935a7981b4d56bf3d2c4ec17011cristy          break;
4333884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        }
4334222b19c8e5e5ee5287e41d33fea54f2b651741b6cristy      if ((traits & BlendPixelTrait) == 0)
4335884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        for (i=0; i < 16; i++)
4336884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        {
4337884f600898ca6935a7981b4d56bf3d2c4ec17011cristy          alpha[i]=1.0;
4338884f600898ca6935a7981b4d56bf3d2c4ec17011cristy          pixels[i]=(MagickRealType) p[i*GetPixelChannels(image)+channel];
4339884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        }
4340884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      else
4341884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        for (i=0; i < 16; i++)
4342884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        {
4343884f600898ca6935a7981b4d56bf3d2c4ec17011cristy          alpha[i]=QuantumScale*GetPixelAlpha(image,p+i*
4344884f600898ca6935a7981b4d56bf3d2c4ec17011cristy            GetPixelChannels(image));
4345884f600898ca6935a7981b4d56bf3d2c4ec17011cristy          pixels[i]=alpha[i]*p[i*GetPixelChannels(image)+channel];
4346884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        }
4347884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      delta.x=x-x_offset;
4348884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      delta.y=y-y_offset;
4349884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      n=0;
4350884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      for (i=(-1); i < 3L; i++)
4351884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      {
4352884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        dy=CubicWeightingFunction((MagickRealType) i-delta.y);
4353884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        for (j=(-1); j < 3L; j++)
4354884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        {
4355884f600898ca6935a7981b4d56bf3d2c4ec17011cristy          dx=CubicWeightingFunction(delta.x-(MagickRealType) j);
4356884f600898ca6935a7981b4d56bf3d2c4ec17011cristy          gamma=1.0/(fabs((double) alpha[n]) <= MagickEpsilon ? 1.0 : alpha[n]);
4357884f600898ca6935a7981b4d56bf3d2c4ec17011cristy          *pixel+=gamma*dx*dy*pixels[n];
4358884f600898ca6935a7981b4d56bf3d2c4ec17011cristy          n++;
4359884f600898ca6935a7981b4d56bf3d2c4ec17011cristy        }
4360884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      }
4361884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      break;
4362884f600898ca6935a7981b4d56bf3d2c4ec17011cristy    }
4363a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy  }
4364a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy  return(status);
4365a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy}
4366a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy
4367a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy/*
4368a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4369d76c51ed30cf4084f4434ba08925d16001d1e340cristy%                                                                             %
4370d76c51ed30cf4084f4434ba08925d16001d1e340cristy%                                                                             %
4371d76c51ed30cf4084f4434ba08925d16001d1e340cristy%                                                                             %
43725c4e2586d27d4299a742d170d41105de1689aa46cristy%   I n t e r p o l a t e P i x e l C h a n n e l s                           %
43735c4e2586d27d4299a742d170d41105de1689aa46cristy%                                                                             %
43745c4e2586d27d4299a742d170d41105de1689aa46cristy%                                                                             %
43755c4e2586d27d4299a742d170d41105de1689aa46cristy%                                                                             %
43765c4e2586d27d4299a742d170d41105de1689aa46cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
43775c4e2586d27d4299a742d170d41105de1689aa46cristy%
43785c4e2586d27d4299a742d170d41105de1689aa46cristy%  InterpolatePixelChannels() applies a pixel interpolation method between a
43795c4e2586d27d4299a742d170d41105de1689aa46cristy%  floating point coordinate and the pixels surrounding that coordinate.  No
43805c4e2586d27d4299a742d170d41105de1689aa46cristy%  pixel area resampling, or scaling of the result is performed.
43815c4e2586d27d4299a742d170d41105de1689aa46cristy%
43825c4e2586d27d4299a742d170d41105de1689aa46cristy%  The format of the InterpolatePixelChannels method is:
43835c4e2586d27d4299a742d170d41105de1689aa46cristy%
43845c4e2586d27d4299a742d170d41105de1689aa46cristy%      MagickBooleanType InterpolatePixelChannels(const Image *source,
43855c4e2586d27d4299a742d170d41105de1689aa46cristy%        const CacheView *source_view,const Image *destination,
43865c4e2586d27d4299a742d170d41105de1689aa46cristy%        const PixelInterpolateMethod method,const double x,const double y,
43875c4e2586d27d4299a742d170d41105de1689aa46cristy%        Quantum *pixel,ExceptionInfo *exception)
43885c4e2586d27d4299a742d170d41105de1689aa46cristy%
43895c4e2586d27d4299a742d170d41105de1689aa46cristy%  A description of each parameter follows:
43905c4e2586d27d4299a742d170d41105de1689aa46cristy%
43915c4e2586d27d4299a742d170d41105de1689aa46cristy%    o source: the source.
43925c4e2586d27d4299a742d170d41105de1689aa46cristy%
43935c4e2586d27d4299a742d170d41105de1689aa46cristy%    o source_view: the source view.
43945c4e2586d27d4299a742d170d41105de1689aa46cristy%
43955c4e2586d27d4299a742d170d41105de1689aa46cristy%    o destination: the destination image.
43965c4e2586d27d4299a742d170d41105de1689aa46cristy%
43975c4e2586d27d4299a742d170d41105de1689aa46cristy%    o method: the pixel color interpolation method.
43985c4e2586d27d4299a742d170d41105de1689aa46cristy%
43995c4e2586d27d4299a742d170d41105de1689aa46cristy%    o x,y: A double representing the current (x,y) position of the pixel.
44005c4e2586d27d4299a742d170d41105de1689aa46cristy%
44015c4e2586d27d4299a742d170d41105de1689aa46cristy%    o pixel: return the interpolated pixel here.
44025c4e2586d27d4299a742d170d41105de1689aa46cristy%
44035c4e2586d27d4299a742d170d41105de1689aa46cristy%    o exception: return any errors or warnings in this structure.
44045c4e2586d27d4299a742d170d41105de1689aa46cristy%
44055c4e2586d27d4299a742d170d41105de1689aa46cristy*/
44065c4e2586d27d4299a742d170d41105de1689aa46cristyMagickExport MagickBooleanType InterpolatePixelChannels(const Image *source,
44075c4e2586d27d4299a742d170d41105de1689aa46cristy  const CacheView *source_view,const Image *destination,
44085c4e2586d27d4299a742d170d41105de1689aa46cristy  const PixelInterpolateMethod method,const double x,const double y,
44095c4e2586d27d4299a742d170d41105de1689aa46cristy  Quantum *pixel,ExceptionInfo *exception)
44105c4e2586d27d4299a742d170d41105de1689aa46cristy{
44115c4e2586d27d4299a742d170d41105de1689aa46cristy  MagickBooleanType
44125c4e2586d27d4299a742d170d41105de1689aa46cristy    status;
44135c4e2586d27d4299a742d170d41105de1689aa46cristy
44145c4e2586d27d4299a742d170d41105de1689aa46cristy  MagickRealType
44155c4e2586d27d4299a742d170d41105de1689aa46cristy    alpha[16],
44165c4e2586d27d4299a742d170d41105de1689aa46cristy    gamma,
44175c4e2586d27d4299a742d170d41105de1689aa46cristy    pixels[16];
44185c4e2586d27d4299a742d170d41105de1689aa46cristy
44195c4e2586d27d4299a742d170d41105de1689aa46cristy  PixelChannel
44205c4e2586d27d4299a742d170d41105de1689aa46cristy    channel;
44215c4e2586d27d4299a742d170d41105de1689aa46cristy
44225c4e2586d27d4299a742d170d41105de1689aa46cristy  PixelTrait
44235c4e2586d27d4299a742d170d41105de1689aa46cristy    destination_traits,
44245c4e2586d27d4299a742d170d41105de1689aa46cristy    traits;
44255c4e2586d27d4299a742d170d41105de1689aa46cristy
44265c4e2586d27d4299a742d170d41105de1689aa46cristy  register const Quantum
44275c4e2586d27d4299a742d170d41105de1689aa46cristy    *p;
44285c4e2586d27d4299a742d170d41105de1689aa46cristy
44295c4e2586d27d4299a742d170d41105de1689aa46cristy  register ssize_t
44305c4e2586d27d4299a742d170d41105de1689aa46cristy    i;
44315c4e2586d27d4299a742d170d41105de1689aa46cristy
44325c4e2586d27d4299a742d170d41105de1689aa46cristy  ssize_t
44335c4e2586d27d4299a742d170d41105de1689aa46cristy    x_offset,
44345c4e2586d27d4299a742d170d41105de1689aa46cristy    y_offset;
44355c4e2586d27d4299a742d170d41105de1689aa46cristy
44365c4e2586d27d4299a742d170d41105de1689aa46cristy  assert(source != (Image *) NULL);
44375c4e2586d27d4299a742d170d41105de1689aa46cristy  assert(source != (Image *) NULL);
44385c4e2586d27d4299a742d170d41105de1689aa46cristy  assert(source->signature == MagickSignature);
44395c4e2586d27d4299a742d170d41105de1689aa46cristy  assert(source_view != (CacheView *) NULL);
44405c4e2586d27d4299a742d170d41105de1689aa46cristy  status=MagickTrue;
44415c4e2586d27d4299a742d170d41105de1689aa46cristy  x_offset=(ssize_t) floor(x);
44425c4e2586d27d4299a742d170d41105de1689aa46cristy  y_offset=(ssize_t) floor(y);
44435c4e2586d27d4299a742d170d41105de1689aa46cristy  switch (method == UndefinedInterpolatePixel ? source->interpolate : method)
44445c4e2586d27d4299a742d170d41105de1689aa46cristy  {
44455c4e2586d27d4299a742d170d41105de1689aa46cristy    case AverageInterpolatePixel:
44465c4e2586d27d4299a742d170d41105de1689aa46cristy    {
44475c4e2586d27d4299a742d170d41105de1689aa46cristy      p=GetCacheViewVirtualPixels(source_view,x_offset-1,y_offset-1,4,4,
44485c4e2586d27d4299a742d170d41105de1689aa46cristy        exception);
44495c4e2586d27d4299a742d170d41105de1689aa46cristy      if (p == (const Quantum *) NULL)
44505c4e2586d27d4299a742d170d41105de1689aa46cristy        {
44515c4e2586d27d4299a742d170d41105de1689aa46cristy          status=MagickFalse;
44525c4e2586d27d4299a742d170d41105de1689aa46cristy          break;
44535c4e2586d27d4299a742d170d41105de1689aa46cristy        }
44545c4e2586d27d4299a742d170d41105de1689aa46cristy      for (i=0; i < (ssize_t) GetPixelChannels(source); i++)
44555c4e2586d27d4299a742d170d41105de1689aa46cristy      {
44565c4e2586d27d4299a742d170d41105de1689aa46cristy        double
44575c4e2586d27d4299a742d170d41105de1689aa46cristy          sum;
44585c4e2586d27d4299a742d170d41105de1689aa46cristy
44595c4e2586d27d4299a742d170d41105de1689aa46cristy        register ssize_t
44605c4e2586d27d4299a742d170d41105de1689aa46cristy          j;
44615c4e2586d27d4299a742d170d41105de1689aa46cristy
4462e2a912b6c9086c98ec838baa0824cd8deca55538cristy        channel=GetPixelChannelMapChannel(source,i);
4463abace416e67464ca6dac2324410667b05076a9c2cristy        traits=GetPixelChannelMapTraits(source,channel);
44645c4e2586d27d4299a742d170d41105de1689aa46cristy        destination_traits=GetPixelChannelMapTraits(destination,channel);
44655c4e2586d27d4299a742d170d41105de1689aa46cristy        if ((traits == UndefinedPixelTrait) ||
44665c4e2586d27d4299a742d170d41105de1689aa46cristy            (destination_traits == UndefinedPixelTrait))
44675c4e2586d27d4299a742d170d41105de1689aa46cristy          continue;
44685c4e2586d27d4299a742d170d41105de1689aa46cristy        for (j=0; j < 16; j++)
44695c4e2586d27d4299a742d170d41105de1689aa46cristy          pixels[j]=(MagickRealType) p[j*GetPixelChannels(source)+i];
44704a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy        sum=0.0;
44715c4e2586d27d4299a742d170d41105de1689aa46cristy        if ((traits & BlendPixelTrait) == 0)
44725c4e2586d27d4299a742d170d41105de1689aa46cristy          {
44735c4e2586d27d4299a742d170d41105de1689aa46cristy            for (j=0; j < 16; j++)
44744a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy              sum+=0.0625*pixels[j];
44754a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy            SetPixelChannel(destination,channel,ClampToQuantum(sum),pixel);
44765c4e2586d27d4299a742d170d41105de1689aa46cristy            continue;
44775c4e2586d27d4299a742d170d41105de1689aa46cristy          }
44785c4e2586d27d4299a742d170d41105de1689aa46cristy        for (j=0; j < 16; j++)
44795c4e2586d27d4299a742d170d41105de1689aa46cristy        {
44805c4e2586d27d4299a742d170d41105de1689aa46cristy          alpha[j]=QuantumScale*GetPixelAlpha(source,p+j*
44815c4e2586d27d4299a742d170d41105de1689aa46cristy            GetPixelChannels(source));
44825c4e2586d27d4299a742d170d41105de1689aa46cristy          pixels[j]*=alpha[j];
44835c4e2586d27d4299a742d170d41105de1689aa46cristy          gamma=1.0/(fabs((double) alpha[j]) <= MagickEpsilon ? 1.0 : alpha[j]);
44845c4e2586d27d4299a742d170d41105de1689aa46cristy          sum+=gamma*0.0625*pixels[j];
44855c4e2586d27d4299a742d170d41105de1689aa46cristy        }
44864a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy        SetPixelChannel(destination,channel,ClampToQuantum(sum),pixel);
44875c4e2586d27d4299a742d170d41105de1689aa46cristy      }
44885c4e2586d27d4299a742d170d41105de1689aa46cristy      break;
44895c4e2586d27d4299a742d170d41105de1689aa46cristy    }
44905c4e2586d27d4299a742d170d41105de1689aa46cristy    case BicubicInterpolatePixel:
44915c4e2586d27d4299a742d170d41105de1689aa46cristy    {
44925c4e2586d27d4299a742d170d41105de1689aa46cristy      MagickRealType
44935c4e2586d27d4299a742d170d41105de1689aa46cristy        u[4],
44945c4e2586d27d4299a742d170d41105de1689aa46cristy        v[4];
44955c4e2586d27d4299a742d170d41105de1689aa46cristy
44965c4e2586d27d4299a742d170d41105de1689aa46cristy      PointInfo
44975c4e2586d27d4299a742d170d41105de1689aa46cristy        delta;
44985c4e2586d27d4299a742d170d41105de1689aa46cristy
44995c4e2586d27d4299a742d170d41105de1689aa46cristy      p=GetCacheViewVirtualPixels(source_view,x_offset-1,y_offset-1,4,4,
45005c4e2586d27d4299a742d170d41105de1689aa46cristy        exception);
45015c4e2586d27d4299a742d170d41105de1689aa46cristy      if (p == (const Quantum *) NULL)
45025c4e2586d27d4299a742d170d41105de1689aa46cristy        {
45035c4e2586d27d4299a742d170d41105de1689aa46cristy          status=MagickFalse;
45045c4e2586d27d4299a742d170d41105de1689aa46cristy          break;
45055c4e2586d27d4299a742d170d41105de1689aa46cristy        }
45065c4e2586d27d4299a742d170d41105de1689aa46cristy      for (i=0; i < (ssize_t) GetPixelChannels(source); i++)
45075c4e2586d27d4299a742d170d41105de1689aa46cristy      {
45085c4e2586d27d4299a742d170d41105de1689aa46cristy        register ssize_t
45095c4e2586d27d4299a742d170d41105de1689aa46cristy          j;
45105c4e2586d27d4299a742d170d41105de1689aa46cristy
4511e2a912b6c9086c98ec838baa0824cd8deca55538cristy        channel=GetPixelChannelMapChannel(source,i);
4512abace416e67464ca6dac2324410667b05076a9c2cristy        traits=GetPixelChannelMapTraits(source,channel);
45135c4e2586d27d4299a742d170d41105de1689aa46cristy        destination_traits=GetPixelChannelMapTraits(destination,channel);
45145c4e2586d27d4299a742d170d41105de1689aa46cristy        if ((traits == UndefinedPixelTrait) ||
45155c4e2586d27d4299a742d170d41105de1689aa46cristy            (destination_traits == UndefinedPixelTrait))
45165c4e2586d27d4299a742d170d41105de1689aa46cristy          continue;
45175c4e2586d27d4299a742d170d41105de1689aa46cristy        if ((traits & BlendPixelTrait) == 0)
45185c4e2586d27d4299a742d170d41105de1689aa46cristy          for (j=0; j < 16; j++)
45195c4e2586d27d4299a742d170d41105de1689aa46cristy          {
45205c4e2586d27d4299a742d170d41105de1689aa46cristy            alpha[j]=1.0;
45215c4e2586d27d4299a742d170d41105de1689aa46cristy            pixels[j]=(MagickRealType) p[j*GetPixelChannels(source)+i];
45225c4e2586d27d4299a742d170d41105de1689aa46cristy          }
45235c4e2586d27d4299a742d170d41105de1689aa46cristy        else
45245c4e2586d27d4299a742d170d41105de1689aa46cristy          for (j=0; j < 16; j++)
45255c4e2586d27d4299a742d170d41105de1689aa46cristy          {
45265c4e2586d27d4299a742d170d41105de1689aa46cristy            alpha[j]=QuantumScale*GetPixelAlpha(source,p+j*
45275c4e2586d27d4299a742d170d41105de1689aa46cristy              GetPixelChannels(source));
45285c4e2586d27d4299a742d170d41105de1689aa46cristy            pixels[j]=alpha[j]*p[j*GetPixelChannels(source)+i];
45295c4e2586d27d4299a742d170d41105de1689aa46cristy          }
45305c4e2586d27d4299a742d170d41105de1689aa46cristy        delta.x=x-x_offset;
45315c4e2586d27d4299a742d170d41105de1689aa46cristy        delta.y=y-y_offset;
45325c4e2586d27d4299a742d170d41105de1689aa46cristy        for (j=0; j < 4; j++)
45335c4e2586d27d4299a742d170d41105de1689aa46cristy        {
45345c4e2586d27d4299a742d170d41105de1689aa46cristy          u[0]=(pixels[4*j+3]-pixels[4*j+2])-(pixels[4*j+0]-pixels[4*j+1]);
45355c4e2586d27d4299a742d170d41105de1689aa46cristy          u[1]=(pixels[4*j+0]-pixels[4*j+1])-u[0];
45365c4e2586d27d4299a742d170d41105de1689aa46cristy          u[2]=pixels[4*j+2]-pixels[4*j+0];
45375c4e2586d27d4299a742d170d41105de1689aa46cristy          u[3]=pixels[4*j+1];
45385c4e2586d27d4299a742d170d41105de1689aa46cristy          v[j]=(delta.x*delta.x*delta.x*u[0])+(delta.x*delta.x*u[1])+(delta.x*
45395c4e2586d27d4299a742d170d41105de1689aa46cristy            u[2])+u[3];
45405c4e2586d27d4299a742d170d41105de1689aa46cristy        }
45415c4e2586d27d4299a742d170d41105de1689aa46cristy        u[0]=(v[3]-v[2])-(v[0]-v[1]);
45425c4e2586d27d4299a742d170d41105de1689aa46cristy        u[1]=(v[0]-v[1])-u[0];
45435c4e2586d27d4299a742d170d41105de1689aa46cristy        u[2]=v[2]-v[0];
45445c4e2586d27d4299a742d170d41105de1689aa46cristy        u[3]=v[1];
45454a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy        SetPixelChannel(destination,channel,ClampToQuantum((delta.y*delta.y*
45464a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy          delta.y*u[0])+(delta.y*delta.y*u[1])+(delta.y*u[2])+u[3]),pixel);
45475c4e2586d27d4299a742d170d41105de1689aa46cristy      }
45485c4e2586d27d4299a742d170d41105de1689aa46cristy      break;
45495c4e2586d27d4299a742d170d41105de1689aa46cristy    }
45505c4e2586d27d4299a742d170d41105de1689aa46cristy    case BilinearInterpolatePixel:
45515c4e2586d27d4299a742d170d41105de1689aa46cristy    default:
45525c4e2586d27d4299a742d170d41105de1689aa46cristy    {
45535c4e2586d27d4299a742d170d41105de1689aa46cristy      p=GetCacheViewVirtualPixels(source_view,x_offset,y_offset,2,2,exception);
45545c4e2586d27d4299a742d170d41105de1689aa46cristy      if (p == (const Quantum *) NULL)
45555c4e2586d27d4299a742d170d41105de1689aa46cristy        {
45565c4e2586d27d4299a742d170d41105de1689aa46cristy          status=MagickFalse;
45575c4e2586d27d4299a742d170d41105de1689aa46cristy          break;
45585c4e2586d27d4299a742d170d41105de1689aa46cristy        }
45595c4e2586d27d4299a742d170d41105de1689aa46cristy      for (i=0; i < (ssize_t) GetPixelChannels(source); i++)
45605c4e2586d27d4299a742d170d41105de1689aa46cristy      {
45615c4e2586d27d4299a742d170d41105de1689aa46cristy        PointInfo
45625c4e2586d27d4299a742d170d41105de1689aa46cristy          delta,
45635c4e2586d27d4299a742d170d41105de1689aa46cristy          epsilon;
45645c4e2586d27d4299a742d170d41105de1689aa46cristy
4565e2a912b6c9086c98ec838baa0824cd8deca55538cristy        channel=GetPixelChannelMapChannel(source,i);
4566abace416e67464ca6dac2324410667b05076a9c2cristy        traits=GetPixelChannelMapTraits(source,channel);
45675c4e2586d27d4299a742d170d41105de1689aa46cristy        destination_traits=GetPixelChannelMapTraits(destination,channel);
45685c4e2586d27d4299a742d170d41105de1689aa46cristy        if ((traits == UndefinedPixelTrait) ||
45695c4e2586d27d4299a742d170d41105de1689aa46cristy            (destination_traits == UndefinedPixelTrait))
45705c4e2586d27d4299a742d170d41105de1689aa46cristy          continue;
45715c4e2586d27d4299a742d170d41105de1689aa46cristy        delta.x=x-x_offset;
45725c4e2586d27d4299a742d170d41105de1689aa46cristy        delta.y=y-y_offset;
45735c4e2586d27d4299a742d170d41105de1689aa46cristy        epsilon.x=1.0-delta.x;
45745c4e2586d27d4299a742d170d41105de1689aa46cristy        epsilon.y=1.0-delta.y;
457528474bfbda5ee2d4da2eb79f299cf1f692770b99cristy        pixels[0]=(MagickRealType) p[i];
457628474bfbda5ee2d4da2eb79f299cf1f692770b99cristy        pixels[1]=(MagickRealType) p[GetPixelChannels(source)+i];
45775c4e2586d27d4299a742d170d41105de1689aa46cristy        pixels[2]=(MagickRealType) p[2*GetPixelChannels(source)+i];
45785c4e2586d27d4299a742d170d41105de1689aa46cristy        pixels[3]=(MagickRealType) p[3*GetPixelChannels(source)+i];
45795c4e2586d27d4299a742d170d41105de1689aa46cristy        if ((traits & BlendPixelTrait) == 0)
45805c4e2586d27d4299a742d170d41105de1689aa46cristy          {
45815c4e2586d27d4299a742d170d41105de1689aa46cristy            gamma=((epsilon.y*(epsilon.x+delta.x)+delta.y*(epsilon.x+delta.x)));
45825c4e2586d27d4299a742d170d41105de1689aa46cristy            gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
45834a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy            SetPixelChannel(destination,channel,ClampToQuantum(gamma*(epsilon.y*
45844a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy              (epsilon.x*pixels[0]+delta.x*pixels[1])+delta.y*(epsilon.x*
45854a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy              pixels[2]+delta.x*pixels[3]))),pixel);
45865c4e2586d27d4299a742d170d41105de1689aa46cristy            continue;
45875c4e2586d27d4299a742d170d41105de1689aa46cristy          }
458828474bfbda5ee2d4da2eb79f299cf1f692770b99cristy        alpha[0]=QuantumScale*GetPixelAlpha(source,p);
458928474bfbda5ee2d4da2eb79f299cf1f692770b99cristy        alpha[1]=QuantumScale*GetPixelAlpha(source,p+GetPixelChannels(source));
45905c4e2586d27d4299a742d170d41105de1689aa46cristy        alpha[2]=QuantumScale*GetPixelAlpha(source,p+2*
45915c4e2586d27d4299a742d170d41105de1689aa46cristy          GetPixelChannels(source));
45925c4e2586d27d4299a742d170d41105de1689aa46cristy        alpha[3]=QuantumScale*GetPixelAlpha(source,p+3*
45935c4e2586d27d4299a742d170d41105de1689aa46cristy          GetPixelChannels(source));
45945c4e2586d27d4299a742d170d41105de1689aa46cristy        pixels[0]*=alpha[0];
45955c4e2586d27d4299a742d170d41105de1689aa46cristy        pixels[1]*=alpha[1];
45965c4e2586d27d4299a742d170d41105de1689aa46cristy        pixels[2]*=alpha[2];
45975c4e2586d27d4299a742d170d41105de1689aa46cristy        pixels[3]*=alpha[3];
45985c4e2586d27d4299a742d170d41105de1689aa46cristy        gamma=((epsilon.y*(epsilon.x*alpha[0]+delta.x*alpha[1])+delta.y*
45995c4e2586d27d4299a742d170d41105de1689aa46cristy          (epsilon.x*alpha[2]+delta.x*alpha[3])));
46005c4e2586d27d4299a742d170d41105de1689aa46cristy        gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
46014a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy        SetPixelChannel(destination,channel,ClampToQuantum(gamma*(epsilon.y*
46024a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy          (epsilon.x*pixels[0]+delta.x*pixels[1])+delta.y*(epsilon.x*pixels[2]+
46034a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy          delta.x*pixels[3]))),pixel);
46045c4e2586d27d4299a742d170d41105de1689aa46cristy      }
46055c4e2586d27d4299a742d170d41105de1689aa46cristy      break;
46065c4e2586d27d4299a742d170d41105de1689aa46cristy    }
46075c4e2586d27d4299a742d170d41105de1689aa46cristy    case FilterInterpolatePixel:
46085c4e2586d27d4299a742d170d41105de1689aa46cristy    {
46095c4e2586d27d4299a742d170d41105de1689aa46cristy      for (i=0; i < (ssize_t) GetPixelChannels(source); i++)
46105c4e2586d27d4299a742d170d41105de1689aa46cristy      {
46115c4e2586d27d4299a742d170d41105de1689aa46cristy        CacheView
46125c4e2586d27d4299a742d170d41105de1689aa46cristy          *filter_view;
46135c4e2586d27d4299a742d170d41105de1689aa46cristy
46145c4e2586d27d4299a742d170d41105de1689aa46cristy        Image
46155c4e2586d27d4299a742d170d41105de1689aa46cristy          *excerpt_source,
46165c4e2586d27d4299a742d170d41105de1689aa46cristy          *filter_source;
46175c4e2586d27d4299a742d170d41105de1689aa46cristy
46185c4e2586d27d4299a742d170d41105de1689aa46cristy        RectangleInfo
46195c4e2586d27d4299a742d170d41105de1689aa46cristy          geometry;
46205c4e2586d27d4299a742d170d41105de1689aa46cristy
4621e2a912b6c9086c98ec838baa0824cd8deca55538cristy        channel=GetPixelChannelMapChannel(source,i);
4622abace416e67464ca6dac2324410667b05076a9c2cristy        traits=GetPixelChannelMapTraits(source,channel);
46235c4e2586d27d4299a742d170d41105de1689aa46cristy        destination_traits=GetPixelChannelMapTraits(destination,channel);
46245c4e2586d27d4299a742d170d41105de1689aa46cristy        if ((traits == UndefinedPixelTrait) ||
46255c4e2586d27d4299a742d170d41105de1689aa46cristy            (destination_traits == UndefinedPixelTrait))
46265c4e2586d27d4299a742d170d41105de1689aa46cristy          continue;
46275c4e2586d27d4299a742d170d41105de1689aa46cristy        geometry.width=4L;
46285c4e2586d27d4299a742d170d41105de1689aa46cristy        geometry.height=4L;
46295c4e2586d27d4299a742d170d41105de1689aa46cristy        geometry.x=x_offset-1;
46305c4e2586d27d4299a742d170d41105de1689aa46cristy        geometry.y=y_offset-1;
46315c4e2586d27d4299a742d170d41105de1689aa46cristy        excerpt_source=ExcerptImage(source,&geometry,exception);
46325c4e2586d27d4299a742d170d41105de1689aa46cristy        if (excerpt_source == (Image *) NULL)
46335c4e2586d27d4299a742d170d41105de1689aa46cristy          {
46345c4e2586d27d4299a742d170d41105de1689aa46cristy            status=MagickFalse;
46355c4e2586d27d4299a742d170d41105de1689aa46cristy            continue;
46365c4e2586d27d4299a742d170d41105de1689aa46cristy          }
4637aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy        filter_source=ResizeImage(excerpt_source,1,1,source->filter,exception);
46385c4e2586d27d4299a742d170d41105de1689aa46cristy        excerpt_source=DestroyImage(excerpt_source);
46395c4e2586d27d4299a742d170d41105de1689aa46cristy        if (filter_source == (Image *) NULL)
46405c4e2586d27d4299a742d170d41105de1689aa46cristy          continue;
4641db070957cf6bf959df9283a482377e8854c3d4d2cristy        filter_view=AcquireVirtualCacheView(filter_source,exception);
46425c4e2586d27d4299a742d170d41105de1689aa46cristy        p=GetCacheViewVirtualPixels(filter_view,0,0,1,1,exception);
46435c4e2586d27d4299a742d170d41105de1689aa46cristy        if (p == (const Quantum *) NULL)
46445c4e2586d27d4299a742d170d41105de1689aa46cristy          status=MagickFalse;
46455c4e2586d27d4299a742d170d41105de1689aa46cristy        else
46461861c90c5c8c4ceb56885dd86377412aae0f4526cristy          {
46474a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy            SetPixelChannel(destination,channel,p[i],pixel);
46481861c90c5c8c4ceb56885dd86377412aae0f4526cristy          }
46495c4e2586d27d4299a742d170d41105de1689aa46cristy        filter_view=DestroyCacheView(filter_view);
46505c4e2586d27d4299a742d170d41105de1689aa46cristy        filter_source=DestroyImage(filter_source);
46515c4e2586d27d4299a742d170d41105de1689aa46cristy      }
46525c4e2586d27d4299a742d170d41105de1689aa46cristy      break;
46535c4e2586d27d4299a742d170d41105de1689aa46cristy    }
46545c4e2586d27d4299a742d170d41105de1689aa46cristy    case IntegerInterpolatePixel:
46555c4e2586d27d4299a742d170d41105de1689aa46cristy    {
46565c4e2586d27d4299a742d170d41105de1689aa46cristy      p=GetCacheViewVirtualPixels(source_view,x_offset,y_offset,1,1,exception);
46575c4e2586d27d4299a742d170d41105de1689aa46cristy      if (p == (const Quantum *) NULL)
46585c4e2586d27d4299a742d170d41105de1689aa46cristy        {
46595c4e2586d27d4299a742d170d41105de1689aa46cristy          status=MagickFalse;
46605c4e2586d27d4299a742d170d41105de1689aa46cristy          break;
46615c4e2586d27d4299a742d170d41105de1689aa46cristy        }
46625c4e2586d27d4299a742d170d41105de1689aa46cristy      for (i=0; i < (ssize_t) GetPixelChannels(source); i++)
46635c4e2586d27d4299a742d170d41105de1689aa46cristy      {
4664e2a912b6c9086c98ec838baa0824cd8deca55538cristy        channel=GetPixelChannelMapChannel(source,i);
4665abace416e67464ca6dac2324410667b05076a9c2cristy        traits=GetPixelChannelMapTraits(source,channel);
46665c4e2586d27d4299a742d170d41105de1689aa46cristy        destination_traits=GetPixelChannelMapTraits(destination,channel);
46675c4e2586d27d4299a742d170d41105de1689aa46cristy        if ((traits == UndefinedPixelTrait) ||
46685c4e2586d27d4299a742d170d41105de1689aa46cristy            (destination_traits == UndefinedPixelTrait))
46695c4e2586d27d4299a742d170d41105de1689aa46cristy          continue;
46704a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy        SetPixelChannel(destination,channel,p[i],pixel);
46715c4e2586d27d4299a742d170d41105de1689aa46cristy      }
46725c4e2586d27d4299a742d170d41105de1689aa46cristy      break;
46735c4e2586d27d4299a742d170d41105de1689aa46cristy    }
46745c4e2586d27d4299a742d170d41105de1689aa46cristy    case NearestNeighborInterpolatePixel:
46755c4e2586d27d4299a742d170d41105de1689aa46cristy    {
46765c4e2586d27d4299a742d170d41105de1689aa46cristy      p=GetCacheViewVirtualPixels(source_view,NearestNeighbor(x),
46775c4e2586d27d4299a742d170d41105de1689aa46cristy        NearestNeighbor(y),1,1,exception);
46785c4e2586d27d4299a742d170d41105de1689aa46cristy      if (p == (const Quantum *) NULL)
46795c4e2586d27d4299a742d170d41105de1689aa46cristy        {
46805c4e2586d27d4299a742d170d41105de1689aa46cristy          status=MagickFalse;
46815c4e2586d27d4299a742d170d41105de1689aa46cristy          break;
46825c4e2586d27d4299a742d170d41105de1689aa46cristy        }
46835c4e2586d27d4299a742d170d41105de1689aa46cristy      for (i=0; i < (ssize_t) GetPixelChannels(source); i++)
46845c4e2586d27d4299a742d170d41105de1689aa46cristy      {
4685e2a912b6c9086c98ec838baa0824cd8deca55538cristy        channel=GetPixelChannelMapChannel(source,i);
4686abace416e67464ca6dac2324410667b05076a9c2cristy        traits=GetPixelChannelMapTraits(source,channel);
46875c4e2586d27d4299a742d170d41105de1689aa46cristy        destination_traits=GetPixelChannelMapTraits(destination,channel);
46885c4e2586d27d4299a742d170d41105de1689aa46cristy        if ((traits == UndefinedPixelTrait) ||
46895c4e2586d27d4299a742d170d41105de1689aa46cristy            (destination_traits == UndefinedPixelTrait))
46905c4e2586d27d4299a742d170d41105de1689aa46cristy          continue;
46914a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy        SetPixelChannel(destination,channel,p[i],pixel);
46925c4e2586d27d4299a742d170d41105de1689aa46cristy      }
46935c4e2586d27d4299a742d170d41105de1689aa46cristy      break;
46945c4e2586d27d4299a742d170d41105de1689aa46cristy    }
46955c4e2586d27d4299a742d170d41105de1689aa46cristy    case MeshInterpolatePixel:
46965c4e2586d27d4299a742d170d41105de1689aa46cristy    {
46975c4e2586d27d4299a742d170d41105de1689aa46cristy      p=GetCacheViewVirtualPixels(source_view,x_offset,y_offset,2,2,exception);
46985c4e2586d27d4299a742d170d41105de1689aa46cristy      if (p == (const Quantum *) NULL)
46995c4e2586d27d4299a742d170d41105de1689aa46cristy        {
47005c4e2586d27d4299a742d170d41105de1689aa46cristy          status=MagickFalse;
47015c4e2586d27d4299a742d170d41105de1689aa46cristy          break;
47025c4e2586d27d4299a742d170d41105de1689aa46cristy        }
47035c4e2586d27d4299a742d170d41105de1689aa46cristy      for (i=0; i < (ssize_t) GetPixelChannels(source); i++)
47045c4e2586d27d4299a742d170d41105de1689aa46cristy      {
47055c4e2586d27d4299a742d170d41105de1689aa46cristy        PointInfo
47065c4e2586d27d4299a742d170d41105de1689aa46cristy          delta,
47075c4e2586d27d4299a742d170d41105de1689aa46cristy          luminance;
47085c4e2586d27d4299a742d170d41105de1689aa46cristy
4709e2a912b6c9086c98ec838baa0824cd8deca55538cristy        channel=GetPixelChannelMapChannel(source,i);
4710abace416e67464ca6dac2324410667b05076a9c2cristy        traits=GetPixelChannelMapTraits(source,channel);
47115c4e2586d27d4299a742d170d41105de1689aa46cristy        destination_traits=GetPixelChannelMapTraits(destination,channel);
47125c4e2586d27d4299a742d170d41105de1689aa46cristy        if ((traits == UndefinedPixelTrait) ||
47135c4e2586d27d4299a742d170d41105de1689aa46cristy            (destination_traits == UndefinedPixelTrait))
47145c4e2586d27d4299a742d170d41105de1689aa46cristy          continue;
47151861c90c5c8c4ceb56885dd86377412aae0f4526cristy        pixels[0]=(MagickRealType) p[i];
47161861c90c5c8c4ceb56885dd86377412aae0f4526cristy        pixels[1]=(MagickRealType) p[GetPixelChannels(source)+i];
47171861c90c5c8c4ceb56885dd86377412aae0f4526cristy        pixels[2]=(MagickRealType) p[2*GetPixelChannels(source)+i];
47181861c90c5c8c4ceb56885dd86377412aae0f4526cristy        pixels[3]=(MagickRealType) p[3*GetPixelChannels(source)+i];
47191861c90c5c8c4ceb56885dd86377412aae0f4526cristy        if ((traits & BlendPixelTrait) == 0)
47201861c90c5c8c4ceb56885dd86377412aae0f4526cristy          {
47211861c90c5c8c4ceb56885dd86377412aae0f4526cristy            alpha[0]=1.0;
47221861c90c5c8c4ceb56885dd86377412aae0f4526cristy            alpha[1]=1.0;
47231861c90c5c8c4ceb56885dd86377412aae0f4526cristy            alpha[2]=1.0;
47241861c90c5c8c4ceb56885dd86377412aae0f4526cristy            alpha[3]=1.0;
47251861c90c5c8c4ceb56885dd86377412aae0f4526cristy          }
47261861c90c5c8c4ceb56885dd86377412aae0f4526cristy        else
47271861c90c5c8c4ceb56885dd86377412aae0f4526cristy          {
47281861c90c5c8c4ceb56885dd86377412aae0f4526cristy            alpha[0]=QuantumScale*GetPixelAlpha(source,p);
47291861c90c5c8c4ceb56885dd86377412aae0f4526cristy            alpha[1]=QuantumScale*GetPixelAlpha(source,p+
47301861c90c5c8c4ceb56885dd86377412aae0f4526cristy              GetPixelChannels(source));
47311861c90c5c8c4ceb56885dd86377412aae0f4526cristy            alpha[2]=QuantumScale*GetPixelAlpha(source,p+2*
47321861c90c5c8c4ceb56885dd86377412aae0f4526cristy              GetPixelChannels(source));
47331861c90c5c8c4ceb56885dd86377412aae0f4526cristy            alpha[3]=QuantumScale*GetPixelAlpha(source,p+3*
47341861c90c5c8c4ceb56885dd86377412aae0f4526cristy              GetPixelChannels(source));
47351861c90c5c8c4ceb56885dd86377412aae0f4526cristy          }
47361861c90c5c8c4ceb56885dd86377412aae0f4526cristy        delta.x=x-x_offset;
47371861c90c5c8c4ceb56885dd86377412aae0f4526cristy        delta.y=y-y_offset;
47381861c90c5c8c4ceb56885dd86377412aae0f4526cristy        luminance.x=GetPixelLuminance(source,p)-(double)
47391861c90c5c8c4ceb56885dd86377412aae0f4526cristy          GetPixelLuminance(source,p+3*GetPixelChannels(source));
47401861c90c5c8c4ceb56885dd86377412aae0f4526cristy        luminance.y=GetPixelLuminance(source,p+GetPixelChannels(source))-
47411861c90c5c8c4ceb56885dd86377412aae0f4526cristy          (double) GetPixelLuminance(source,p+2*GetPixelChannels(source));
47421861c90c5c8c4ceb56885dd86377412aae0f4526cristy        if (fabs(luminance.x) < fabs(luminance.y))
47431861c90c5c8c4ceb56885dd86377412aae0f4526cristy          {
47441861c90c5c8c4ceb56885dd86377412aae0f4526cristy            /*
47451861c90c5c8c4ceb56885dd86377412aae0f4526cristy              Diagonal 0-3 NW-SE.
47461861c90c5c8c4ceb56885dd86377412aae0f4526cristy            */
47471861c90c5c8c4ceb56885dd86377412aae0f4526cristy            if (delta.x <= delta.y)
47481861c90c5c8c4ceb56885dd86377412aae0f4526cristy              {
47491861c90c5c8c4ceb56885dd86377412aae0f4526cristy                /*
47501861c90c5c8c4ceb56885dd86377412aae0f4526cristy                  Bottom-left triangle (pixel: 2, diagonal: 0-3).
47511861c90c5c8c4ceb56885dd86377412aae0f4526cristy                */
47521861c90c5c8c4ceb56885dd86377412aae0f4526cristy                delta.y=1.0-delta.y;
47531861c90c5c8c4ceb56885dd86377412aae0f4526cristy                gamma=MeshInterpolate(&delta,alpha[2],alpha[3],alpha[0]);
47541861c90c5c8c4ceb56885dd86377412aae0f4526cristy                gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
47554a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy                SetPixelChannel(destination,channel,ClampToQuantum(gamma*
47564a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy                  MeshInterpolate(&delta,pixels[2],pixels[3],pixels[0])),pixel);
47571861c90c5c8c4ceb56885dd86377412aae0f4526cristy              }
47581861c90c5c8c4ceb56885dd86377412aae0f4526cristy            else
47591861c90c5c8c4ceb56885dd86377412aae0f4526cristy              {
47601861c90c5c8c4ceb56885dd86377412aae0f4526cristy                /*
47611861c90c5c8c4ceb56885dd86377412aae0f4526cristy                  Top-right triangle (pixel: 1, diagonal: 0-3).
47621861c90c5c8c4ceb56885dd86377412aae0f4526cristy                */
47631861c90c5c8c4ceb56885dd86377412aae0f4526cristy                delta.x=1.0-delta.x;
47641861c90c5c8c4ceb56885dd86377412aae0f4526cristy                gamma=MeshInterpolate(&delta,alpha[1],alpha[0],alpha[3]);
47651861c90c5c8c4ceb56885dd86377412aae0f4526cristy                gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
47664a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy                SetPixelChannel(destination,channel,ClampToQuantum(gamma*
47674a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy                  MeshInterpolate(&delta,pixels[1],pixels[0],pixels[3])),pixel);
47681861c90c5c8c4ceb56885dd86377412aae0f4526cristy              }
47691861c90c5c8c4ceb56885dd86377412aae0f4526cristy          }
47701861c90c5c8c4ceb56885dd86377412aae0f4526cristy        else
47711861c90c5c8c4ceb56885dd86377412aae0f4526cristy          {
47721861c90c5c8c4ceb56885dd86377412aae0f4526cristy            /*
47731861c90c5c8c4ceb56885dd86377412aae0f4526cristy              Diagonal 1-2 NE-SW.
47741861c90c5c8c4ceb56885dd86377412aae0f4526cristy            */
47751861c90c5c8c4ceb56885dd86377412aae0f4526cristy            if (delta.x <= (1.0-delta.y))
47761861c90c5c8c4ceb56885dd86377412aae0f4526cristy              {
47771861c90c5c8c4ceb56885dd86377412aae0f4526cristy                /*
47781861c90c5c8c4ceb56885dd86377412aae0f4526cristy                  Top-left triangle (pixel: 0, diagonal: 1-2).
47791861c90c5c8c4ceb56885dd86377412aae0f4526cristy                */
47801861c90c5c8c4ceb56885dd86377412aae0f4526cristy                gamma=MeshInterpolate(&delta,alpha[0],alpha[1],alpha[2]);
47811861c90c5c8c4ceb56885dd86377412aae0f4526cristy                gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
47824a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy                SetPixelChannel(destination,channel,ClampToQuantum(gamma*
47834a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy                  MeshInterpolate(&delta,pixels[0],pixels[1],pixels[2])),pixel);
47841861c90c5c8c4ceb56885dd86377412aae0f4526cristy              }
47851861c90c5c8c4ceb56885dd86377412aae0f4526cristy            else
47861861c90c5c8c4ceb56885dd86377412aae0f4526cristy              {
47871861c90c5c8c4ceb56885dd86377412aae0f4526cristy                /*
47881861c90c5c8c4ceb56885dd86377412aae0f4526cristy                  Bottom-right triangle (pixel: 3, diagonal: 1-2).
47891861c90c5c8c4ceb56885dd86377412aae0f4526cristy                */
47901861c90c5c8c4ceb56885dd86377412aae0f4526cristy                delta.x=1.0-delta.x;
47911861c90c5c8c4ceb56885dd86377412aae0f4526cristy                delta.y=1.0-delta.y;
47921861c90c5c8c4ceb56885dd86377412aae0f4526cristy                gamma=MeshInterpolate(&delta,alpha[3],alpha[2],alpha[1]);
47931861c90c5c8c4ceb56885dd86377412aae0f4526cristy                gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
47944a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy                SetPixelChannel(destination,channel,ClampToQuantum(gamma*
47954a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy                  MeshInterpolate(&delta,pixels[3],pixels[2],pixels[1])),pixel);
47961861c90c5c8c4ceb56885dd86377412aae0f4526cristy              }
47971861c90c5c8c4ceb56885dd86377412aae0f4526cristy          }
47985c4e2586d27d4299a742d170d41105de1689aa46cristy      }
47995c4e2586d27d4299a742d170d41105de1689aa46cristy      break;
48005c4e2586d27d4299a742d170d41105de1689aa46cristy    }
48015c4e2586d27d4299a742d170d41105de1689aa46cristy    case SplineInterpolatePixel:
48025c4e2586d27d4299a742d170d41105de1689aa46cristy    {
48035c4e2586d27d4299a742d170d41105de1689aa46cristy      p=GetCacheViewVirtualPixels(source_view,x_offset-1,y_offset-1,4,4,
48045c4e2586d27d4299a742d170d41105de1689aa46cristy        exception);
48055c4e2586d27d4299a742d170d41105de1689aa46cristy      if (p == (const Quantum *) NULL)
48065c4e2586d27d4299a742d170d41105de1689aa46cristy        {
48075c4e2586d27d4299a742d170d41105de1689aa46cristy          status=MagickFalse;
48085c4e2586d27d4299a742d170d41105de1689aa46cristy          break;
48095c4e2586d27d4299a742d170d41105de1689aa46cristy        }
48105c4e2586d27d4299a742d170d41105de1689aa46cristy      for (i=0; i < (ssize_t) GetPixelChannels(source); i++)
48115c4e2586d27d4299a742d170d41105de1689aa46cristy      {
48125c4e2586d27d4299a742d170d41105de1689aa46cristy        double
48135c4e2586d27d4299a742d170d41105de1689aa46cristy          sum;
48145c4e2586d27d4299a742d170d41105de1689aa46cristy
48155c4e2586d27d4299a742d170d41105de1689aa46cristy        MagickRealType
48165c4e2586d27d4299a742d170d41105de1689aa46cristy          dx,
48175c4e2586d27d4299a742d170d41105de1689aa46cristy          dy;
48185c4e2586d27d4299a742d170d41105de1689aa46cristy
48195c4e2586d27d4299a742d170d41105de1689aa46cristy        PointInfo
48205c4e2586d27d4299a742d170d41105de1689aa46cristy          delta;
48215c4e2586d27d4299a742d170d41105de1689aa46cristy
48225c4e2586d27d4299a742d170d41105de1689aa46cristy        register ssize_t
48235c4e2586d27d4299a742d170d41105de1689aa46cristy          j;
48245c4e2586d27d4299a742d170d41105de1689aa46cristy
48255c4e2586d27d4299a742d170d41105de1689aa46cristy        ssize_t
48265c4e2586d27d4299a742d170d41105de1689aa46cristy          k,
48275c4e2586d27d4299a742d170d41105de1689aa46cristy          n;
48285c4e2586d27d4299a742d170d41105de1689aa46cristy
4829e2a912b6c9086c98ec838baa0824cd8deca55538cristy        channel=GetPixelChannelMapChannel(source,i);
4830abace416e67464ca6dac2324410667b05076a9c2cristy        traits=GetPixelChannelMapTraits(source,channel);
48315c4e2586d27d4299a742d170d41105de1689aa46cristy        destination_traits=GetPixelChannelMapTraits(destination,channel);
48325c4e2586d27d4299a742d170d41105de1689aa46cristy        if ((traits == UndefinedPixelTrait) ||
48335c4e2586d27d4299a742d170d41105de1689aa46cristy            (destination_traits == UndefinedPixelTrait))
48345c4e2586d27d4299a742d170d41105de1689aa46cristy          continue;
48355c4e2586d27d4299a742d170d41105de1689aa46cristy        if ((traits & BlendPixelTrait) == 0)
48365c4e2586d27d4299a742d170d41105de1689aa46cristy          for (j=0; j < 16; j++)
48375c4e2586d27d4299a742d170d41105de1689aa46cristy          {
48385c4e2586d27d4299a742d170d41105de1689aa46cristy            alpha[j]=1.0;
48395c4e2586d27d4299a742d170d41105de1689aa46cristy            pixels[j]=(MagickRealType) p[j*GetPixelChannels(source)+i];
48405c4e2586d27d4299a742d170d41105de1689aa46cristy          }
48415c4e2586d27d4299a742d170d41105de1689aa46cristy        else
48425c4e2586d27d4299a742d170d41105de1689aa46cristy          for (j=0; j < 16; j++)
48435c4e2586d27d4299a742d170d41105de1689aa46cristy          {
48445c4e2586d27d4299a742d170d41105de1689aa46cristy            alpha[j]=QuantumScale*GetPixelAlpha(source,p+j*
48455c4e2586d27d4299a742d170d41105de1689aa46cristy              GetPixelChannels(source));
48465c4e2586d27d4299a742d170d41105de1689aa46cristy            pixels[j]=alpha[j]*p[j*GetPixelChannels(source)+i];
48475c4e2586d27d4299a742d170d41105de1689aa46cristy          }
48485c4e2586d27d4299a742d170d41105de1689aa46cristy        delta.x=x-x_offset;
48495c4e2586d27d4299a742d170d41105de1689aa46cristy        delta.y=y-y_offset;
48505c4e2586d27d4299a742d170d41105de1689aa46cristy        sum=0.0;
48515c4e2586d27d4299a742d170d41105de1689aa46cristy        n=0;
48525c4e2586d27d4299a742d170d41105de1689aa46cristy        for (j=(-1); j < 3L; j++)
48535c4e2586d27d4299a742d170d41105de1689aa46cristy        {
48545c4e2586d27d4299a742d170d41105de1689aa46cristy          dy=CubicWeightingFunction((MagickRealType) j-delta.y);
48555c4e2586d27d4299a742d170d41105de1689aa46cristy          for (k=(-1); k < 3L; k++)
48565c4e2586d27d4299a742d170d41105de1689aa46cristy          {
48575c4e2586d27d4299a742d170d41105de1689aa46cristy            dx=CubicWeightingFunction(delta.x-(MagickRealType) k);
48585c4e2586d27d4299a742d170d41105de1689aa46cristy            gamma=1.0/(fabs((double) alpha[n]) <= MagickEpsilon ? 1.0 :
48595c4e2586d27d4299a742d170d41105de1689aa46cristy              alpha[n]);
48605c4e2586d27d4299a742d170d41105de1689aa46cristy            sum+=gamma*dx*dy*pixels[n];
48615c4e2586d27d4299a742d170d41105de1689aa46cristy            n++;
48625c4e2586d27d4299a742d170d41105de1689aa46cristy          }
48635c4e2586d27d4299a742d170d41105de1689aa46cristy        }
48644a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy        SetPixelChannel(destination,channel,p[i],pixel);
48655c4e2586d27d4299a742d170d41105de1689aa46cristy      }
48665c4e2586d27d4299a742d170d41105de1689aa46cristy      break;
48675c4e2586d27d4299a742d170d41105de1689aa46cristy    }
48685c4e2586d27d4299a742d170d41105de1689aa46cristy  }
48695c4e2586d27d4299a742d170d41105de1689aa46cristy  return(status);
48705c4e2586d27d4299a742d170d41105de1689aa46cristy}
48715c4e2586d27d4299a742d170d41105de1689aa46cristy
48725c4e2586d27d4299a742d170d41105de1689aa46cristy/*
48735c4e2586d27d4299a742d170d41105de1689aa46cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
48745c4e2586d27d4299a742d170d41105de1689aa46cristy%                                                                             %
48755c4e2586d27d4299a742d170d41105de1689aa46cristy%                                                                             %
48765c4e2586d27d4299a742d170d41105de1689aa46cristy%                                                                             %
48779075cdb062fda00666ab37b0ba7df4b8cc2e8eaccristy%   I n t e r p o l a t e P i x e l I n f o                                   %
4878d76c51ed30cf4084f4434ba08925d16001d1e340cristy%                                                                             %
4879d76c51ed30cf4084f4434ba08925d16001d1e340cristy%                                                                             %
4880d76c51ed30cf4084f4434ba08925d16001d1e340cristy%                                                                             %
4881d76c51ed30cf4084f4434ba08925d16001d1e340cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4882d76c51ed30cf4084f4434ba08925d16001d1e340cristy%
4883884f600898ca6935a7981b4d56bf3d2c4ec17011cristy%  InterpolatePixelInfo() applies a pixel interpolation method between a
4884884f600898ca6935a7981b4d56bf3d2c4ec17011cristy%  floating point coordinate and the pixels surrounding that coordinate.  No
4885884f600898ca6935a7981b4d56bf3d2c4ec17011cristy%  pixel area resampling, or scaling of the result is performed.
4886d76c51ed30cf4084f4434ba08925d16001d1e340cristy%
48874c08aed51c5899665ade97263692328eea4af106cristy%  The format of the InterpolatePixelInfo method is:
4888d76c51ed30cf4084f4434ba08925d16001d1e340cristy%
48894c08aed51c5899665ade97263692328eea4af106cristy%      MagickBooleanType InterpolatePixelInfo(const Image *image,
48905c4e2586d27d4299a742d170d41105de1689aa46cristy%        const CacheView *image_view,const PixelInterpolateMethod method,
48914c08aed51c5899665ade97263692328eea4af106cristy%        const double x,const double y,PixelInfo *pixel,
4892d76c51ed30cf4084f4434ba08925d16001d1e340cristy%        ExceptionInfo *exception)
4893d76c51ed30cf4084f4434ba08925d16001d1e340cristy%
4894d76c51ed30cf4084f4434ba08925d16001d1e340cristy%  A description of each parameter follows:
4895d76c51ed30cf4084f4434ba08925d16001d1e340cristy%
4896d76c51ed30cf4084f4434ba08925d16001d1e340cristy%    o image: the image.
4897d76c51ed30cf4084f4434ba08925d16001d1e340cristy%
4898d76c51ed30cf4084f4434ba08925d16001d1e340cristy%    o image_view: the image view.
4899d76c51ed30cf4084f4434ba08925d16001d1e340cristy%
4900d76c51ed30cf4084f4434ba08925d16001d1e340cristy%    o method: the pixel color interpolation method.
4901d76c51ed30cf4084f4434ba08925d16001d1e340cristy%
4902d76c51ed30cf4084f4434ba08925d16001d1e340cristy%    o x,y: A double representing the current (x,y) position of the pixel.
4903d76c51ed30cf4084f4434ba08925d16001d1e340cristy%
4904d76c51ed30cf4084f4434ba08925d16001d1e340cristy%    o pixel: return the interpolated pixel here.
4905d76c51ed30cf4084f4434ba08925d16001d1e340cristy%
4906d76c51ed30cf4084f4434ba08925d16001d1e340cristy%    o exception: return any errors or warnings in this structure.
4907d76c51ed30cf4084f4434ba08925d16001d1e340cristy%
4908d76c51ed30cf4084f4434ba08925d16001d1e340cristy*/
4909d76c51ed30cf4084f4434ba08925d16001d1e340cristy
49104c08aed51c5899665ade97263692328eea4af106cristystatic inline void AlphaBlendPixelInfo(const Image *image,
49114c08aed51c5899665ade97263692328eea4af106cristy  const Quantum *pixel,PixelInfo *pixel_info,MagickRealType *alpha)
4912d76c51ed30cf4084f4434ba08925d16001d1e340cristy{
4913241310d359ef6893f4d0c1e43eeb39f34991fd2acristy  if (image->matte == MagickFalse)
4914241310d359ef6893f4d0c1e43eeb39f34991fd2acristy    {
4915241310d359ef6893f4d0c1e43eeb39f34991fd2acristy      *alpha=1.0;
49164c08aed51c5899665ade97263692328eea4af106cristy      pixel_info->red=(MagickRealType) GetPixelRed(image,pixel);
49174c08aed51c5899665ade97263692328eea4af106cristy      pixel_info->green=(MagickRealType) GetPixelGreen(image,pixel);
49184c08aed51c5899665ade97263692328eea4af106cristy      pixel_info->blue=(MagickRealType) GetPixelBlue(image,pixel);
49194c08aed51c5899665ade97263692328eea4af106cristy      pixel_info->black=0.0;
49204c08aed51c5899665ade97263692328eea4af106cristy      if (image->colorspace == CMYKColorspace)
49214c08aed51c5899665ade97263692328eea4af106cristy        pixel_info->black=(MagickRealType) GetPixelBlack(image,pixel);
49224c08aed51c5899665ade97263692328eea4af106cristy      pixel_info->alpha=(MagickRealType) GetPixelAlpha(image,pixel);
4923241310d359ef6893f4d0c1e43eeb39f34991fd2acristy      return;
4924241310d359ef6893f4d0c1e43eeb39f34991fd2acristy    }
49254c08aed51c5899665ade97263692328eea4af106cristy  *alpha=QuantumScale*GetPixelAlpha(image,pixel);
49264c08aed51c5899665ade97263692328eea4af106cristy  pixel_info->red=(*alpha*GetPixelRed(image,pixel));
49274c08aed51c5899665ade97263692328eea4af106cristy  pixel_info->green=(*alpha*GetPixelGreen(image,pixel));
49284c08aed51c5899665ade97263692328eea4af106cristy  pixel_info->blue=(*alpha*GetPixelBlue(image,pixel));
49294c08aed51c5899665ade97263692328eea4af106cristy  pixel_info->black=0.0;
49304c08aed51c5899665ade97263692328eea4af106cristy  if (image->colorspace == CMYKColorspace)
49314c08aed51c5899665ade97263692328eea4af106cristy    pixel_info->black=(*alpha*GetPixelBlack(image,pixel));
49324c08aed51c5899665ade97263692328eea4af106cristy  pixel_info->alpha=(MagickRealType) GetPixelAlpha(image,pixel);
4933d76c51ed30cf4084f4434ba08925d16001d1e340cristy}
4934d76c51ed30cf4084f4434ba08925d16001d1e340cristy
49354c08aed51c5899665ade97263692328eea4af106cristystatic void BicubicInterpolate(const PixelInfo *pixels,const double dx,
49364c08aed51c5899665ade97263692328eea4af106cristy  PixelInfo *pixel)
4937d76c51ed30cf4084f4434ba08925d16001d1e340cristy{
4938d76c51ed30cf4084f4434ba08925d16001d1e340cristy  MagickRealType
4939d76c51ed30cf4084f4434ba08925d16001d1e340cristy    dx2,
4940d76c51ed30cf4084f4434ba08925d16001d1e340cristy    p,
4941d76c51ed30cf4084f4434ba08925d16001d1e340cristy    q,
4942d76c51ed30cf4084f4434ba08925d16001d1e340cristy    r,
4943d76c51ed30cf4084f4434ba08925d16001d1e340cristy    s;
4944d76c51ed30cf4084f4434ba08925d16001d1e340cristy
4945d76c51ed30cf4084f4434ba08925d16001d1e340cristy  dx2=dx*dx;
4946d76c51ed30cf4084f4434ba08925d16001d1e340cristy  p=(pixels[3].red-pixels[2].red)-(pixels[0].red-pixels[1].red);
4947d76c51ed30cf4084f4434ba08925d16001d1e340cristy  q=(pixels[0].red-pixels[1].red)-p;
4948d76c51ed30cf4084f4434ba08925d16001d1e340cristy  r=pixels[2].red-pixels[0].red;
4949d76c51ed30cf4084f4434ba08925d16001d1e340cristy  s=pixels[1].red;
4950d76c51ed30cf4084f4434ba08925d16001d1e340cristy  pixel->red=(dx*dx2*p)+(dx2*q)+(dx*r)+s;
4951d76c51ed30cf4084f4434ba08925d16001d1e340cristy  p=(pixels[3].green-pixels[2].green)-(pixels[0].green-pixels[1].green);
4952d76c51ed30cf4084f4434ba08925d16001d1e340cristy  q=(pixels[0].green-pixels[1].green)-p;
4953d76c51ed30cf4084f4434ba08925d16001d1e340cristy  r=pixels[2].green-pixels[0].green;
4954d76c51ed30cf4084f4434ba08925d16001d1e340cristy  s=pixels[1].green;
4955d76c51ed30cf4084f4434ba08925d16001d1e340cristy  pixel->green=(dx*dx2*p)+(dx2*q)+(dx*r)+s;
4956d76c51ed30cf4084f4434ba08925d16001d1e340cristy  p=(pixels[3].blue-pixels[2].blue)-(pixels[0].blue-pixels[1].blue);
4957d76c51ed30cf4084f4434ba08925d16001d1e340cristy  q=(pixels[0].blue-pixels[1].blue)-p;
4958d76c51ed30cf4084f4434ba08925d16001d1e340cristy  r=pixels[2].blue-pixels[0].blue;
4959d76c51ed30cf4084f4434ba08925d16001d1e340cristy  s=pixels[1].blue;
4960d76c51ed30cf4084f4434ba08925d16001d1e340cristy  pixel->blue=(dx*dx2*p)+(dx2*q)+(dx*r)+s;
49614c08aed51c5899665ade97263692328eea4af106cristy  p=(pixels[3].alpha-pixels[2].alpha)-(pixels[0].alpha-pixels[1].alpha);
49624c08aed51c5899665ade97263692328eea4af106cristy  q=(pixels[0].alpha-pixels[1].alpha)-p;
49634c08aed51c5899665ade97263692328eea4af106cristy  r=pixels[2].alpha-pixels[0].alpha;
49644c08aed51c5899665ade97263692328eea4af106cristy  s=pixels[1].alpha;
49654c08aed51c5899665ade97263692328eea4af106cristy  pixel->alpha=(dx*dx2*p)+(dx2*q)+(dx*r)+s;
4966d76c51ed30cf4084f4434ba08925d16001d1e340cristy  if (pixel->colorspace == CMYKColorspace)
4967d76c51ed30cf4084f4434ba08925d16001d1e340cristy    {
49684c08aed51c5899665ade97263692328eea4af106cristy      p=(pixels[3].black-pixels[2].black)-(pixels[0].black-pixels[1].black);
49694c08aed51c5899665ade97263692328eea4af106cristy      q=(pixels[0].black-pixels[1].black)-p;
49704c08aed51c5899665ade97263692328eea4af106cristy      r=pixels[2].black-pixels[0].black;
49714c08aed51c5899665ade97263692328eea4af106cristy      s=pixels[1].black;
49724c08aed51c5899665ade97263692328eea4af106cristy      pixel->black=(dx*dx2*p)+(dx2*q)+(dx*r)+s;
4973d76c51ed30cf4084f4434ba08925d16001d1e340cristy    }
4974d76c51ed30cf4084f4434ba08925d16001d1e340cristy}
4975d76c51ed30cf4084f4434ba08925d16001d1e340cristy
49764c08aed51c5899665ade97263692328eea4af106cristyMagickExport MagickBooleanType InterpolatePixelInfo(const Image *image,
49775c4e2586d27d4299a742d170d41105de1689aa46cristy  const CacheView *image_view,const PixelInterpolateMethod method,
49784c08aed51c5899665ade97263692328eea4af106cristy  const double x,const double y,PixelInfo *pixel,ExceptionInfo *exception)
4979d76c51ed30cf4084f4434ba08925d16001d1e340cristy{
4980d76c51ed30cf4084f4434ba08925d16001d1e340cristy  MagickBooleanType
4981d76c51ed30cf4084f4434ba08925d16001d1e340cristy    status;
4982d76c51ed30cf4084f4434ba08925d16001d1e340cristy
498342587c577d5b808de94915f2388b88b05c3d43a3cristy  MagickRealType
498442587c577d5b808de94915f2388b88b05c3d43a3cristy    alpha[16],
498542587c577d5b808de94915f2388b88b05c3d43a3cristy    gamma;
498642587c577d5b808de94915f2388b88b05c3d43a3cristy
4987865d58d60e5fc755d47771eab37ce5159531629dcristy  PixelInfo
4988865d58d60e5fc755d47771eab37ce5159531629dcristy    pixels[16];
4989865d58d60e5fc755d47771eab37ce5159531629dcristy
49904c08aed51c5899665ade97263692328eea4af106cristy  register const Quantum
4991d76c51ed30cf4084f4434ba08925d16001d1e340cristy    *p;
4992d76c51ed30cf4084f4434ba08925d16001d1e340cristy
4993d76c51ed30cf4084f4434ba08925d16001d1e340cristy  register ssize_t
4994d76c51ed30cf4084f4434ba08925d16001d1e340cristy    i;
4995d76c51ed30cf4084f4434ba08925d16001d1e340cristy
499642587c577d5b808de94915f2388b88b05c3d43a3cristy  ssize_t
499742587c577d5b808de94915f2388b88b05c3d43a3cristy    x_offset,
499842587c577d5b808de94915f2388b88b05c3d43a3cristy    y_offset;
499942587c577d5b808de94915f2388b88b05c3d43a3cristy
5000d76c51ed30cf4084f4434ba08925d16001d1e340cristy  assert(image != (Image *) NULL);
5001d76c51ed30cf4084f4434ba08925d16001d1e340cristy  assert(image->signature == MagickSignature);
5002d76c51ed30cf4084f4434ba08925d16001d1e340cristy  assert(image_view != (CacheView *) NULL);
5003d76c51ed30cf4084f4434ba08925d16001d1e340cristy  status=MagickTrue;
500442587c577d5b808de94915f2388b88b05c3d43a3cristy  x_offset=(ssize_t) floor(x);
500542587c577d5b808de94915f2388b88b05c3d43a3cristy  y_offset=(ssize_t) floor(y);
50068a7c3e8a6d3d48dc6a4b40485c5f6c13cc2b2075cristy  switch (method == UndefinedInterpolatePixel ? image->interpolate : method)
5007d76c51ed30cf4084f4434ba08925d16001d1e340cristy  {
5008d76c51ed30cf4084f4434ba08925d16001d1e340cristy    case AverageInterpolatePixel:
5009d76c51ed30cf4084f4434ba08925d16001d1e340cristy    {
501042587c577d5b808de94915f2388b88b05c3d43a3cristy      p=GetCacheViewVirtualPixels(image_view,x_offset-1,y_offset-1,4,4,
501142587c577d5b808de94915f2388b88b05c3d43a3cristy        exception);
50124c08aed51c5899665ade97263692328eea4af106cristy      if (p == (const Quantum *) NULL)
5013d76c51ed30cf4084f4434ba08925d16001d1e340cristy        {
5014d76c51ed30cf4084f4434ba08925d16001d1e340cristy          status=MagickFalse;
5015d76c51ed30cf4084f4434ba08925d16001d1e340cristy          break;
5016d76c51ed30cf4084f4434ba08925d16001d1e340cristy        }
50175ce8df84afcfec6dc33ee61ac2014edb3871c455cristy      AlphaBlendPixelInfo(image,p,pixels+0,alpha+0);
501828474bfbda5ee2d4da2eb79f299cf1f692770b99cristy      AlphaBlendPixelInfo(image,p+GetPixelChannels(image),pixels+1,alpha+1);
5019ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+2*GetPixelChannels(image),pixels+2,alpha+2);
5020ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+3*GetPixelChannels(image),pixels+3,alpha+3);
5021ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+4*GetPixelChannels(image),pixels+4,alpha+4);
5022ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+5*GetPixelChannels(image),pixels+5,alpha+5);
5023ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+6*GetPixelChannels(image),pixels+6,alpha+6);
5024ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+7*GetPixelChannels(image),pixels+7,alpha+7);
5025ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+8*GetPixelChannels(image),pixels+8,alpha+8);
5026ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+9*GetPixelChannels(image),pixels+9,alpha+9);
5027ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+10*GetPixelChannels(image),pixels+10,alpha+
5028865d58d60e5fc755d47771eab37ce5159531629dcristy        10);
5029ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+11*GetPixelChannels(image),pixels+11,alpha+
5030865d58d60e5fc755d47771eab37ce5159531629dcristy        11);
5031ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+12*GetPixelChannels(image),pixels+12,alpha+
5032865d58d60e5fc755d47771eab37ce5159531629dcristy        12);
5033ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+13*GetPixelChannels(image),pixels+13,alpha+
5034865d58d60e5fc755d47771eab37ce5159531629dcristy        13);
5035ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+14*GetPixelChannels(image),pixels+14,alpha+
5036865d58d60e5fc755d47771eab37ce5159531629dcristy        14);
5037ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+15*GetPixelChannels(image),pixels+15,alpha+
5038865d58d60e5fc755d47771eab37ce5159531629dcristy        15);
5039241310d359ef6893f4d0c1e43eeb39f34991fd2acristy      pixel->red=0.0;
5040241310d359ef6893f4d0c1e43eeb39f34991fd2acristy      pixel->green=0.0;
5041241310d359ef6893f4d0c1e43eeb39f34991fd2acristy      pixel->blue=0.0;
50424c08aed51c5899665ade97263692328eea4af106cristy      pixel->black=0.0;
5043865d58d60e5fc755d47771eab37ce5159531629dcristy      pixel->alpha=0.0;
5044d76c51ed30cf4084f4434ba08925d16001d1e340cristy      for (i=0; i < 16L; i++)
5045d76c51ed30cf4084f4434ba08925d16001d1e340cristy      {
5046241310d359ef6893f4d0c1e43eeb39f34991fd2acristy        gamma=1.0/(fabs((double) alpha[i]) <= MagickEpsilon ? 1.0 : alpha[i]);
5047d76c51ed30cf4084f4434ba08925d16001d1e340cristy        pixel->red+=gamma*0.0625*pixels[i].red;
5048d76c51ed30cf4084f4434ba08925d16001d1e340cristy        pixel->green+=gamma*0.0625*pixels[i].green;
5049d76c51ed30cf4084f4434ba08925d16001d1e340cristy        pixel->blue+=gamma*0.0625*pixels[i].blue;
50505af738104f48677012746b82ba0daa0dc59bdbb5cristy        if (image->colorspace == CMYKColorspace)
50514c08aed51c5899665ade97263692328eea4af106cristy          pixel->black+=gamma*0.0625*pixels[i].black;
5052865d58d60e5fc755d47771eab37ce5159531629dcristy        pixel->alpha+=0.0625*pixels[i].alpha;
5053d76c51ed30cf4084f4434ba08925d16001d1e340cristy      }
5054d76c51ed30cf4084f4434ba08925d16001d1e340cristy      break;
5055d76c51ed30cf4084f4434ba08925d16001d1e340cristy    }
5056d76c51ed30cf4084f4434ba08925d16001d1e340cristy    case BicubicInterpolatePixel:
5057d76c51ed30cf4084f4434ba08925d16001d1e340cristy    {
50584c08aed51c5899665ade97263692328eea4af106cristy      PixelInfo
5059d76c51ed30cf4084f4434ba08925d16001d1e340cristy        u[4];
5060d76c51ed30cf4084f4434ba08925d16001d1e340cristy
5061d76c51ed30cf4084f4434ba08925d16001d1e340cristy      PointInfo
5062d76c51ed30cf4084f4434ba08925d16001d1e340cristy        delta;
5063d76c51ed30cf4084f4434ba08925d16001d1e340cristy
506442587c577d5b808de94915f2388b88b05c3d43a3cristy      p=GetCacheViewVirtualPixels(image_view,x_offset-1,y_offset-1,4,4,
506542587c577d5b808de94915f2388b88b05c3d43a3cristy        exception);
50664c08aed51c5899665ade97263692328eea4af106cristy      if (p == (const Quantum *) NULL)
5067d76c51ed30cf4084f4434ba08925d16001d1e340cristy        {
5068d76c51ed30cf4084f4434ba08925d16001d1e340cristy          status=MagickFalse;
5069d76c51ed30cf4084f4434ba08925d16001d1e340cristy          break;
5070d76c51ed30cf4084f4434ba08925d16001d1e340cristy        }
50715ce8df84afcfec6dc33ee61ac2014edb3871c455cristy      AlphaBlendPixelInfo(image,p,pixels+0,alpha+0);
507228474bfbda5ee2d4da2eb79f299cf1f692770b99cristy      AlphaBlendPixelInfo(image,p+GetPixelChannels(image),pixels+1,alpha+1);
5073ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+2*GetPixelChannels(image),pixels+2,alpha+2);
5074ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+3*GetPixelChannels(image),pixels+3,alpha+3);
5075ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+4*GetPixelChannels(image),pixels+4,alpha+4);
5076ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+5*GetPixelChannels(image),pixels+5,alpha+5);
5077ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+6*GetPixelChannels(image),pixels+6,alpha+6);
5078ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+7*GetPixelChannels(image),pixels+7,alpha+7);
5079ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+8*GetPixelChannels(image),pixels+8,alpha+8);
5080ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+9*GetPixelChannels(image),pixels+9,alpha+9);
5081ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+10*GetPixelChannels(image),pixels+10,alpha+
5082865d58d60e5fc755d47771eab37ce5159531629dcristy        10);
5083ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+11*GetPixelChannels(image),pixels+11,alpha+
5084865d58d60e5fc755d47771eab37ce5159531629dcristy        11);
5085ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+12*GetPixelChannels(image),pixels+12,alpha+
5086865d58d60e5fc755d47771eab37ce5159531629dcristy        12);
5087ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+13*GetPixelChannels(image),pixels+13,alpha+
5088865d58d60e5fc755d47771eab37ce5159531629dcristy        13);
5089ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+14*GetPixelChannels(image),pixels+14,alpha+
5090865d58d60e5fc755d47771eab37ce5159531629dcristy        14);
5091ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+15*GetPixelChannels(image),pixels+15,alpha+
5092865d58d60e5fc755d47771eab37ce5159531629dcristy        15);
509342587c577d5b808de94915f2388b88b05c3d43a3cristy      delta.x=x-x_offset;
509442587c577d5b808de94915f2388b88b05c3d43a3cristy      delta.y=y-y_offset;
5095d76c51ed30cf4084f4434ba08925d16001d1e340cristy      for (i=0; i < 4L; i++)
5096d76c51ed30cf4084f4434ba08925d16001d1e340cristy        BicubicInterpolate(pixels+4*i,delta.x,u+i);
5097d76c51ed30cf4084f4434ba08925d16001d1e340cristy      BicubicInterpolate(u,delta.y,pixel);
5098d76c51ed30cf4084f4434ba08925d16001d1e340cristy      break;
5099d76c51ed30cf4084f4434ba08925d16001d1e340cristy    }
5100d76c51ed30cf4084f4434ba08925d16001d1e340cristy    case BilinearInterpolatePixel:
5101d76c51ed30cf4084f4434ba08925d16001d1e340cristy    default:
5102d76c51ed30cf4084f4434ba08925d16001d1e340cristy    {
5103d76c51ed30cf4084f4434ba08925d16001d1e340cristy      PointInfo
5104d76c51ed30cf4084f4434ba08925d16001d1e340cristy        delta,
5105d76c51ed30cf4084f4434ba08925d16001d1e340cristy        epsilon;
5106d76c51ed30cf4084f4434ba08925d16001d1e340cristy
510742587c577d5b808de94915f2388b88b05c3d43a3cristy      p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,2,2,exception);
51084c08aed51c5899665ade97263692328eea4af106cristy      if (p == (const Quantum *) NULL)
5109d76c51ed30cf4084f4434ba08925d16001d1e340cristy        {
5110d76c51ed30cf4084f4434ba08925d16001d1e340cristy          status=MagickFalse;
5111d76c51ed30cf4084f4434ba08925d16001d1e340cristy          break;
5112d76c51ed30cf4084f4434ba08925d16001d1e340cristy        }
51135ce8df84afcfec6dc33ee61ac2014edb3871c455cristy      AlphaBlendPixelInfo(image,p,pixels+0,alpha+0);
511428474bfbda5ee2d4da2eb79f299cf1f692770b99cristy      AlphaBlendPixelInfo(image,p+GetPixelChannels(image),pixels+1,alpha+1);
5115ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+2*GetPixelChannels(image),pixels+2,alpha+2);
5116ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+3*GetPixelChannels(image),pixels+3,alpha+3);
511742587c577d5b808de94915f2388b88b05c3d43a3cristy      delta.x=x-x_offset;
511842587c577d5b808de94915f2388b88b05c3d43a3cristy      delta.y=y-y_offset;
5119d76c51ed30cf4084f4434ba08925d16001d1e340cristy      epsilon.x=1.0-delta.x;
5120d76c51ed30cf4084f4434ba08925d16001d1e340cristy      epsilon.y=1.0-delta.y;
5121241310d359ef6893f4d0c1e43eeb39f34991fd2acristy      gamma=((epsilon.y*(epsilon.x*alpha[0]+delta.x*alpha[1])+delta.y*
5122241310d359ef6893f4d0c1e43eeb39f34991fd2acristy        (epsilon.x*alpha[2]+delta.x*alpha[3])));
5123241310d359ef6893f4d0c1e43eeb39f34991fd2acristy      gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
5124d76c51ed30cf4084f4434ba08925d16001d1e340cristy      pixel->red=gamma*(epsilon.y*(epsilon.x*pixels[0].red+delta.x*
5125d76c51ed30cf4084f4434ba08925d16001d1e340cristy        pixels[1].red)+delta.y*(epsilon.x*pixels[2].red+delta.x*pixels[3].red));
5126d76c51ed30cf4084f4434ba08925d16001d1e340cristy      pixel->green=gamma*(epsilon.y*(epsilon.x*pixels[0].green+delta.x*
5127d76c51ed30cf4084f4434ba08925d16001d1e340cristy        pixels[1].green)+delta.y*(epsilon.x*pixels[2].green+delta.x*
5128d76c51ed30cf4084f4434ba08925d16001d1e340cristy        pixels[3].green));
5129d76c51ed30cf4084f4434ba08925d16001d1e340cristy      pixel->blue=gamma*(epsilon.y*(epsilon.x*pixels[0].blue+delta.x*
5130d76c51ed30cf4084f4434ba08925d16001d1e340cristy        pixels[1].blue)+delta.y*(epsilon.x*pixels[2].blue+delta.x*
5131d76c51ed30cf4084f4434ba08925d16001d1e340cristy        pixels[3].blue));
51325af738104f48677012746b82ba0daa0dc59bdbb5cristy      if (image->colorspace == CMYKColorspace)
51334c08aed51c5899665ade97263692328eea4af106cristy        pixel->black=gamma*(epsilon.y*(epsilon.x*pixels[0].black+delta.x*
51344c08aed51c5899665ade97263692328eea4af106cristy          pixels[1].black)+delta.y*(epsilon.x*pixels[2].black+delta.x*
51354c08aed51c5899665ade97263692328eea4af106cristy          pixels[3].black));
5136884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      gamma=((epsilon.y*(epsilon.x+delta.x)+delta.y*(epsilon.x+delta.x)));
5137884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
5138865d58d60e5fc755d47771eab37ce5159531629dcristy      pixel->alpha=(epsilon.y*(epsilon.x*pixels[0].alpha+delta.x*
5139865d58d60e5fc755d47771eab37ce5159531629dcristy        pixels[1].alpha)+delta.y*(epsilon.x*pixels[2].alpha+delta.x*
5140865d58d60e5fc755d47771eab37ce5159531629dcristy        pixels[3].alpha));
5141d76c51ed30cf4084f4434ba08925d16001d1e340cristy      break;
5142d76c51ed30cf4084f4434ba08925d16001d1e340cristy    }
5143d76c51ed30cf4084f4434ba08925d16001d1e340cristy    case FilterInterpolatePixel:
5144d76c51ed30cf4084f4434ba08925d16001d1e340cristy    {
5145d76c51ed30cf4084f4434ba08925d16001d1e340cristy      CacheView
5146d76c51ed30cf4084f4434ba08925d16001d1e340cristy        *filter_view;
5147d76c51ed30cf4084f4434ba08925d16001d1e340cristy
5148d76c51ed30cf4084f4434ba08925d16001d1e340cristy      Image
5149d76c51ed30cf4084f4434ba08925d16001d1e340cristy        *excerpt_image,
5150d76c51ed30cf4084f4434ba08925d16001d1e340cristy        *filter_image;
5151d76c51ed30cf4084f4434ba08925d16001d1e340cristy
5152d76c51ed30cf4084f4434ba08925d16001d1e340cristy      RectangleInfo
5153d76c51ed30cf4084f4434ba08925d16001d1e340cristy        geometry;
5154d76c51ed30cf4084f4434ba08925d16001d1e340cristy
5155d76c51ed30cf4084f4434ba08925d16001d1e340cristy      geometry.width=4L;
5156d76c51ed30cf4084f4434ba08925d16001d1e340cristy      geometry.height=4L;
515742587c577d5b808de94915f2388b88b05c3d43a3cristy      geometry.x=x_offset-1;
515842587c577d5b808de94915f2388b88b05c3d43a3cristy      geometry.y=y_offset-1;
5159d76c51ed30cf4084f4434ba08925d16001d1e340cristy      excerpt_image=ExcerptImage(image,&geometry,exception);
5160d76c51ed30cf4084f4434ba08925d16001d1e340cristy      if (excerpt_image == (Image *) NULL)
5161d76c51ed30cf4084f4434ba08925d16001d1e340cristy        {
5162d76c51ed30cf4084f4434ba08925d16001d1e340cristy          status=MagickFalse;
5163d76c51ed30cf4084f4434ba08925d16001d1e340cristy          break;
5164d76c51ed30cf4084f4434ba08925d16001d1e340cristy        }
5165aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy      filter_image=ResizeImage(excerpt_image,1,1,image->filter,exception);
5166d76c51ed30cf4084f4434ba08925d16001d1e340cristy      excerpt_image=DestroyImage(excerpt_image);
5167d76c51ed30cf4084f4434ba08925d16001d1e340cristy      if (filter_image == (Image *) NULL)
5168d76c51ed30cf4084f4434ba08925d16001d1e340cristy        break;
5169db070957cf6bf959df9283a482377e8854c3d4d2cristy      filter_view=AcquireVirtualCacheView(filter_image,exception);
5170d76c51ed30cf4084f4434ba08925d16001d1e340cristy      p=GetCacheViewVirtualPixels(filter_view,0,0,1,1,exception);
51714c08aed51c5899665ade97263692328eea4af106cristy      if (p != (const Quantum *) NULL)
5172803640d20a6a664315eddfff6f8531d0c5e0871dcristy        GetPixelInfoPixel(image,p,pixel);
5173d76c51ed30cf4084f4434ba08925d16001d1e340cristy      filter_view=DestroyCacheView(filter_view);
5174d76c51ed30cf4084f4434ba08925d16001d1e340cristy      filter_image=DestroyImage(filter_image);
5175d76c51ed30cf4084f4434ba08925d16001d1e340cristy      break;
5176d76c51ed30cf4084f4434ba08925d16001d1e340cristy    }
5177d76c51ed30cf4084f4434ba08925d16001d1e340cristy    case IntegerInterpolatePixel:
5178d76c51ed30cf4084f4434ba08925d16001d1e340cristy    {
517942587c577d5b808de94915f2388b88b05c3d43a3cristy      p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,1,1,exception);
51804c08aed51c5899665ade97263692328eea4af106cristy      if (p == (const Quantum *) NULL)
5181d76c51ed30cf4084f4434ba08925d16001d1e340cristy        {
5182d76c51ed30cf4084f4434ba08925d16001d1e340cristy          status=MagickFalse;
5183d76c51ed30cf4084f4434ba08925d16001d1e340cristy          break;
5184d76c51ed30cf4084f4434ba08925d16001d1e340cristy        }
5185803640d20a6a664315eddfff6f8531d0c5e0871dcristy      GetPixelInfoPixel(image,p,pixel);
5186d76c51ed30cf4084f4434ba08925d16001d1e340cristy      break;
5187d76c51ed30cf4084f4434ba08925d16001d1e340cristy    }
5188d76c51ed30cf4084f4434ba08925d16001d1e340cristy    case MeshInterpolatePixel:
5189d76c51ed30cf4084f4434ba08925d16001d1e340cristy    {
5190d76c51ed30cf4084f4434ba08925d16001d1e340cristy      PointInfo
5191d76c51ed30cf4084f4434ba08925d16001d1e340cristy        delta,
5192d76c51ed30cf4084f4434ba08925d16001d1e340cristy        luminance;
5193d76c51ed30cf4084f4434ba08925d16001d1e340cristy
519494ea1636709395774d7118ef56162d211904cfd2cristy      p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,2,2,exception);
51954c08aed51c5899665ade97263692328eea4af106cristy      if (p == (const Quantum *) NULL)
5196d76c51ed30cf4084f4434ba08925d16001d1e340cristy        {
5197d76c51ed30cf4084f4434ba08925d16001d1e340cristy          status=MagickFalse;
5198d76c51ed30cf4084f4434ba08925d16001d1e340cristy          break;
5199d76c51ed30cf4084f4434ba08925d16001d1e340cristy        }
520094ea1636709395774d7118ef56162d211904cfd2cristy      delta.x=x-x_offset;
520194ea1636709395774d7118ef56162d211904cfd2cristy      delta.y=y-y_offset;
5202884f600898ca6935a7981b4d56bf3d2c4ec17011cristy      luminance.x=GetPixelLuminance(image,p)-(double)
520394ea1636709395774d7118ef56162d211904cfd2cristy        GetPixelLuminance(image,p+3*GetPixelChannels(image));
520428474bfbda5ee2d4da2eb79f299cf1f692770b99cristy      luminance.y=GetPixelLuminance(image,p+GetPixelChannels(image))-(double)
520594ea1636709395774d7118ef56162d211904cfd2cristy        GetPixelLuminance(image,p+2*GetPixelChannels(image));
52065ce8df84afcfec6dc33ee61ac2014edb3871c455cristy      AlphaBlendPixelInfo(image,p,pixels+0,alpha+0);
520728474bfbda5ee2d4da2eb79f299cf1f692770b99cristy      AlphaBlendPixelInfo(image,p+GetPixelChannels(image),pixels+1,alpha+1);
5208ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+2*GetPixelChannels(image),pixels+2,alpha+2);
5209ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+3*GetPixelChannels(image),pixels+3,alpha+3);
5210d76c51ed30cf4084f4434ba08925d16001d1e340cristy      if (fabs(luminance.x) < fabs(luminance.y))
5211d76c51ed30cf4084f4434ba08925d16001d1e340cristy        {
5212d76c51ed30cf4084f4434ba08925d16001d1e340cristy          /*
5213d76c51ed30cf4084f4434ba08925d16001d1e340cristy            Diagonal 0-3 NW-SE.
5214d76c51ed30cf4084f4434ba08925d16001d1e340cristy          */
5215d76c51ed30cf4084f4434ba08925d16001d1e340cristy          if (delta.x <= delta.y)
5216d76c51ed30cf4084f4434ba08925d16001d1e340cristy            {
5217d76c51ed30cf4084f4434ba08925d16001d1e340cristy              /*
521894ea1636709395774d7118ef56162d211904cfd2cristy                Bottom-left triangle (pixel: 2, diagonal: 0-3).
5219d76c51ed30cf4084f4434ba08925d16001d1e340cristy              */
5220d76c51ed30cf4084f4434ba08925d16001d1e340cristy              delta.y=1.0-delta.y;
5221d76c51ed30cf4084f4434ba08925d16001d1e340cristy              gamma=MeshInterpolate(&delta,alpha[2],alpha[3],alpha[0]);
5222d76c51ed30cf4084f4434ba08925d16001d1e340cristy              gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
5223d76c51ed30cf4084f4434ba08925d16001d1e340cristy              pixel->red=gamma*MeshInterpolate(&delta,pixels[2].red,
5224d76c51ed30cf4084f4434ba08925d16001d1e340cristy                pixels[3].red,pixels[0].red);
5225d76c51ed30cf4084f4434ba08925d16001d1e340cristy              pixel->green=gamma*MeshInterpolate(&delta,pixels[2].green,
5226d76c51ed30cf4084f4434ba08925d16001d1e340cristy                pixels[3].green,pixels[0].green);
5227d76c51ed30cf4084f4434ba08925d16001d1e340cristy              pixel->blue=gamma*MeshInterpolate(&delta,pixels[2].blue,
5228d76c51ed30cf4084f4434ba08925d16001d1e340cristy                pixels[3].blue,pixels[0].blue);
52295af738104f48677012746b82ba0daa0dc59bdbb5cristy              if (image->colorspace == CMYKColorspace)
52304c08aed51c5899665ade97263692328eea4af106cristy                pixel->black=gamma*MeshInterpolate(&delta,pixels[2].black,
52314c08aed51c5899665ade97263692328eea4af106cristy                  pixels[3].black,pixels[0].black);
523294ea1636709395774d7118ef56162d211904cfd2cristy              gamma=MeshInterpolate(&delta,1.0,1.0,1.0);
5233865d58d60e5fc755d47771eab37ce5159531629dcristy              pixel->alpha=gamma*MeshInterpolate(&delta,pixels[2].alpha,
5234865d58d60e5fc755d47771eab37ce5159531629dcristy                pixels[3].alpha,pixels[0].alpha);
5235d76c51ed30cf4084f4434ba08925d16001d1e340cristy            }
5236d76c51ed30cf4084f4434ba08925d16001d1e340cristy          else
5237d76c51ed30cf4084f4434ba08925d16001d1e340cristy            {
5238d76c51ed30cf4084f4434ba08925d16001d1e340cristy              /*
523994ea1636709395774d7118ef56162d211904cfd2cristy                Top-right triangle (pixel:1 , diagonal: 0-3).
5240d76c51ed30cf4084f4434ba08925d16001d1e340cristy              */
5241d76c51ed30cf4084f4434ba08925d16001d1e340cristy              delta.x=1.0-delta.x;
5242d76c51ed30cf4084f4434ba08925d16001d1e340cristy              gamma=MeshInterpolate(&delta,alpha[1],alpha[0],alpha[3]);
5243d76c51ed30cf4084f4434ba08925d16001d1e340cristy              gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
5244d76c51ed30cf4084f4434ba08925d16001d1e340cristy              pixel->red=gamma*MeshInterpolate(&delta,pixels[1].red,
5245d76c51ed30cf4084f4434ba08925d16001d1e340cristy                pixels[0].red,pixels[3].red);
5246d76c51ed30cf4084f4434ba08925d16001d1e340cristy              pixel->green=gamma*MeshInterpolate(&delta,pixels[1].green,
5247d76c51ed30cf4084f4434ba08925d16001d1e340cristy                pixels[0].green,pixels[3].green);
5248d76c51ed30cf4084f4434ba08925d16001d1e340cristy              pixel->blue=gamma*MeshInterpolate(&delta,pixels[1].blue,
5249d76c51ed30cf4084f4434ba08925d16001d1e340cristy                pixels[0].blue,pixels[3].blue);
52505af738104f48677012746b82ba0daa0dc59bdbb5cristy              if (image->colorspace == CMYKColorspace)
52514c08aed51c5899665ade97263692328eea4af106cristy                pixel->black=gamma*MeshInterpolate(&delta,pixels[1].black,
52524c08aed51c5899665ade97263692328eea4af106cristy                  pixels[0].black,pixels[3].black);
525394ea1636709395774d7118ef56162d211904cfd2cristy              gamma=MeshInterpolate(&delta,1.0,1.0,1.0);
5254865d58d60e5fc755d47771eab37ce5159531629dcristy              pixel->alpha=gamma*MeshInterpolate(&delta,pixels[1].alpha,
5255865d58d60e5fc755d47771eab37ce5159531629dcristy                pixels[0].alpha,pixels[3].alpha);
5256d76c51ed30cf4084f4434ba08925d16001d1e340cristy            }
5257d76c51ed30cf4084f4434ba08925d16001d1e340cristy        }
5258d76c51ed30cf4084f4434ba08925d16001d1e340cristy      else
5259d76c51ed30cf4084f4434ba08925d16001d1e340cristy        {
5260d76c51ed30cf4084f4434ba08925d16001d1e340cristy          /*
5261d76c51ed30cf4084f4434ba08925d16001d1e340cristy            Diagonal 1-2 NE-SW.
5262d76c51ed30cf4084f4434ba08925d16001d1e340cristy          */
5263d76c51ed30cf4084f4434ba08925d16001d1e340cristy          if (delta.x <= (1.0-delta.y))
5264d76c51ed30cf4084f4434ba08925d16001d1e340cristy            {
5265d76c51ed30cf4084f4434ba08925d16001d1e340cristy              /*
526694ea1636709395774d7118ef56162d211904cfd2cristy                Top-left triangle (pixel: 0, diagonal: 1-2).
5267d76c51ed30cf4084f4434ba08925d16001d1e340cristy              */
5268d76c51ed30cf4084f4434ba08925d16001d1e340cristy              gamma=MeshInterpolate(&delta,alpha[0],alpha[1],alpha[2]);
5269d76c51ed30cf4084f4434ba08925d16001d1e340cristy              gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
5270d76c51ed30cf4084f4434ba08925d16001d1e340cristy              pixel->red=gamma*MeshInterpolate(&delta,pixels[0].red,
5271d76c51ed30cf4084f4434ba08925d16001d1e340cristy                pixels[1].red,pixels[2].red);
5272d76c51ed30cf4084f4434ba08925d16001d1e340cristy              pixel->green=gamma*MeshInterpolate(&delta,pixels[0].green,
5273d76c51ed30cf4084f4434ba08925d16001d1e340cristy                pixels[1].green,pixels[2].green);
5274d76c51ed30cf4084f4434ba08925d16001d1e340cristy              pixel->blue=gamma*MeshInterpolate(&delta,pixels[0].blue,
5275d76c51ed30cf4084f4434ba08925d16001d1e340cristy                pixels[1].blue,pixels[2].blue);
52765af738104f48677012746b82ba0daa0dc59bdbb5cristy              if (image->colorspace == CMYKColorspace)
52774c08aed51c5899665ade97263692328eea4af106cristy                pixel->black=gamma*MeshInterpolate(&delta,pixels[0].black,
52784c08aed51c5899665ade97263692328eea4af106cristy                  pixels[1].black,pixels[2].black);
527994ea1636709395774d7118ef56162d211904cfd2cristy              gamma=MeshInterpolate(&delta,1.0,1.0,1.0);
5280865d58d60e5fc755d47771eab37ce5159531629dcristy              pixel->alpha=gamma*MeshInterpolate(&delta,pixels[0].alpha,
5281865d58d60e5fc755d47771eab37ce5159531629dcristy                pixels[1].alpha,pixels[2].alpha);
5282d76c51ed30cf4084f4434ba08925d16001d1e340cristy            }
5283d76c51ed30cf4084f4434ba08925d16001d1e340cristy          else
5284d76c51ed30cf4084f4434ba08925d16001d1e340cristy            {
5285d76c51ed30cf4084f4434ba08925d16001d1e340cristy              /*
5286d76c51ed30cf4084f4434ba08925d16001d1e340cristy                Bottom-right triangle (pixel: 3, diagonal: 1-2).
5287d76c51ed30cf4084f4434ba08925d16001d1e340cristy              */
5288d76c51ed30cf4084f4434ba08925d16001d1e340cristy              delta.x=1.0-delta.x;
5289d76c51ed30cf4084f4434ba08925d16001d1e340cristy              delta.y=1.0-delta.y;
5290d76c51ed30cf4084f4434ba08925d16001d1e340cristy              gamma=MeshInterpolate(&delta,alpha[3],alpha[2],alpha[1]);
5291d76c51ed30cf4084f4434ba08925d16001d1e340cristy              gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
5292d76c51ed30cf4084f4434ba08925d16001d1e340cristy              pixel->red=gamma*MeshInterpolate(&delta,pixels[3].red,
5293d76c51ed30cf4084f4434ba08925d16001d1e340cristy                pixels[2].red,pixels[1].red);
5294d76c51ed30cf4084f4434ba08925d16001d1e340cristy              pixel->green=gamma*MeshInterpolate(&delta,pixels[3].green,
5295d76c51ed30cf4084f4434ba08925d16001d1e340cristy                pixels[2].green,pixels[1].green);
5296d76c51ed30cf4084f4434ba08925d16001d1e340cristy              pixel->blue=gamma*MeshInterpolate(&delta,pixels[3].blue,
5297d76c51ed30cf4084f4434ba08925d16001d1e340cristy                pixels[2].blue,pixels[1].blue);
52985af738104f48677012746b82ba0daa0dc59bdbb5cristy              if (image->colorspace == CMYKColorspace)
52994c08aed51c5899665ade97263692328eea4af106cristy                pixel->black=gamma*MeshInterpolate(&delta,pixels[3].black,
53004c08aed51c5899665ade97263692328eea4af106cristy                  pixels[2].black,pixels[1].black);
530194ea1636709395774d7118ef56162d211904cfd2cristy              gamma=MeshInterpolate(&delta,1.0,1.0,1.0);
5302865d58d60e5fc755d47771eab37ce5159531629dcristy              pixel->alpha=gamma*MeshInterpolate(&delta,pixels[3].alpha,
5303865d58d60e5fc755d47771eab37ce5159531629dcristy                pixels[2].alpha,pixels[1].alpha);
5304d76c51ed30cf4084f4434ba08925d16001d1e340cristy            }
5305d76c51ed30cf4084f4434ba08925d16001d1e340cristy        }
5306d76c51ed30cf4084f4434ba08925d16001d1e340cristy      break;
5307d76c51ed30cf4084f4434ba08925d16001d1e340cristy    }
5308d76c51ed30cf4084f4434ba08925d16001d1e340cristy    case NearestNeighborInterpolatePixel:
5309d76c51ed30cf4084f4434ba08925d16001d1e340cristy    {
5310d76c51ed30cf4084f4434ba08925d16001d1e340cristy      p=GetCacheViewVirtualPixels(image_view,NearestNeighbor(x),
5311d76c51ed30cf4084f4434ba08925d16001d1e340cristy        NearestNeighbor(y),1,1,exception);
53124c08aed51c5899665ade97263692328eea4af106cristy      if (p == (const Quantum *) NULL)
5313d76c51ed30cf4084f4434ba08925d16001d1e340cristy        {
5314d76c51ed30cf4084f4434ba08925d16001d1e340cristy          status=MagickFalse;
5315d76c51ed30cf4084f4434ba08925d16001d1e340cristy          break;
5316d76c51ed30cf4084f4434ba08925d16001d1e340cristy        }
5317803640d20a6a664315eddfff6f8531d0c5e0871dcristy      GetPixelInfoPixel(image,p,pixel);
5318d76c51ed30cf4084f4434ba08925d16001d1e340cristy      break;
5319d76c51ed30cf4084f4434ba08925d16001d1e340cristy    }
5320d76c51ed30cf4084f4434ba08925d16001d1e340cristy    case SplineInterpolatePixel:
5321d76c51ed30cf4084f4434ba08925d16001d1e340cristy    {
5322d76c51ed30cf4084f4434ba08925d16001d1e340cristy      MagickRealType
5323d76c51ed30cf4084f4434ba08925d16001d1e340cristy        dx,
532442587c577d5b808de94915f2388b88b05c3d43a3cristy        dy;
5325d76c51ed30cf4084f4434ba08925d16001d1e340cristy
5326d76c51ed30cf4084f4434ba08925d16001d1e340cristy      PointInfo
5327d76c51ed30cf4084f4434ba08925d16001d1e340cristy        delta;
5328d76c51ed30cf4084f4434ba08925d16001d1e340cristy
5329d76c51ed30cf4084f4434ba08925d16001d1e340cristy      ssize_t
5330d76c51ed30cf4084f4434ba08925d16001d1e340cristy        j,
5331d76c51ed30cf4084f4434ba08925d16001d1e340cristy        n;
5332d76c51ed30cf4084f4434ba08925d16001d1e340cristy
533342587c577d5b808de94915f2388b88b05c3d43a3cristy      p=GetCacheViewVirtualPixels(image_view,x_offset-1,y_offset-1,4,4,
533442587c577d5b808de94915f2388b88b05c3d43a3cristy        exception);
53354c08aed51c5899665ade97263692328eea4af106cristy      if (p == (const Quantum *) NULL)
5336d76c51ed30cf4084f4434ba08925d16001d1e340cristy        {
5337d76c51ed30cf4084f4434ba08925d16001d1e340cristy          status=MagickFalse;
5338d76c51ed30cf4084f4434ba08925d16001d1e340cristy          break;
5339d76c51ed30cf4084f4434ba08925d16001d1e340cristy        }
53405ce8df84afcfec6dc33ee61ac2014edb3871c455cristy      AlphaBlendPixelInfo(image,p,pixels+0,alpha+0);
534128474bfbda5ee2d4da2eb79f299cf1f692770b99cristy      AlphaBlendPixelInfo(image,p+GetPixelChannels(image),pixels+1,alpha+1);
5342ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+2*GetPixelChannels(image),pixels+2,alpha+2);
5343ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+3*GetPixelChannels(image),pixels+3,alpha+3);
5344ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+4*GetPixelChannels(image),pixels+4,alpha+4);
5345ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+5*GetPixelChannels(image),pixels+5,alpha+5);
5346ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+6*GetPixelChannels(image),pixels+6,alpha+6);
5347ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+7*GetPixelChannels(image),pixels+7,alpha+7);
5348ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+8*GetPixelChannels(image),pixels+8,alpha+8);
5349ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+9*GetPixelChannels(image),pixels+9,alpha+9);
5350ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+10*GetPixelChannels(image),pixels+10,alpha+
5351865d58d60e5fc755d47771eab37ce5159531629dcristy        10);
5352ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+11*GetPixelChannels(image),pixels+11,alpha+
5353865d58d60e5fc755d47771eab37ce5159531629dcristy        11);
5354ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+12*GetPixelChannels(image),pixels+12,alpha+
5355865d58d60e5fc755d47771eab37ce5159531629dcristy        12);
5356ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+13*GetPixelChannels(image),pixels+13,alpha+
5357865d58d60e5fc755d47771eab37ce5159531629dcristy        13);
5358ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+14*GetPixelChannels(image),pixels+14,alpha+
5359865d58d60e5fc755d47771eab37ce5159531629dcristy        14);
5360ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy      AlphaBlendPixelInfo(image,p+15*GetPixelChannels(image),pixels+15,alpha+
5361865d58d60e5fc755d47771eab37ce5159531629dcristy        15);
5362241310d359ef6893f4d0c1e43eeb39f34991fd2acristy      pixel->red=0.0;
5363241310d359ef6893f4d0c1e43eeb39f34991fd2acristy      pixel->green=0.0;
5364241310d359ef6893f4d0c1e43eeb39f34991fd2acristy      pixel->blue=0.0;
53654c08aed51c5899665ade97263692328eea4af106cristy      pixel->black=0.0;
5366865d58d60e5fc755d47771eab37ce5159531629dcristy      pixel->alpha=0.0;
536742587c577d5b808de94915f2388b88b05c3d43a3cristy      delta.x=x-x_offset;
536842587c577d5b808de94915f2388b88b05c3d43a3cristy      delta.y=y-y_offset;
5369241310d359ef6893f4d0c1e43eeb39f34991fd2acristy      n=0;
5370d76c51ed30cf4084f4434ba08925d16001d1e340cristy      for (i=(-1); i < 3L; i++)
5371d76c51ed30cf4084f4434ba08925d16001d1e340cristy      {
5372d76c51ed30cf4084f4434ba08925d16001d1e340cristy        dy=CubicWeightingFunction((MagickRealType) i-delta.y);
5373d76c51ed30cf4084f4434ba08925d16001d1e340cristy        for (j=(-1); j < 3L; j++)
5374d76c51ed30cf4084f4434ba08925d16001d1e340cristy        {
5375d76c51ed30cf4084f4434ba08925d16001d1e340cristy          dx=CubicWeightingFunction(delta.x-(MagickRealType) j);
5376241310d359ef6893f4d0c1e43eeb39f34991fd2acristy          gamma=1.0/(fabs((double) alpha[n]) <= MagickEpsilon ? 1.0 : alpha[n]);
5377d76c51ed30cf4084f4434ba08925d16001d1e340cristy          pixel->red+=gamma*dx*dy*pixels[n].red;
5378d76c51ed30cf4084f4434ba08925d16001d1e340cristy          pixel->green+=gamma*dx*dy*pixels[n].green;
5379d76c51ed30cf4084f4434ba08925d16001d1e340cristy          pixel->blue+=gamma*dx*dy*pixels[n].blue;
53805af738104f48677012746b82ba0daa0dc59bdbb5cristy          if (image->colorspace == CMYKColorspace)
53814c08aed51c5899665ade97263692328eea4af106cristy            pixel->black+=gamma*dx*dy*pixels[n].black;
53824c08aed51c5899665ade97263692328eea4af106cristy          pixel->alpha+=dx*dy*pixels[n].alpha;
5383d76c51ed30cf4084f4434ba08925d16001d1e340cristy          n++;
5384d76c51ed30cf4084f4434ba08925d16001d1e340cristy        }
5385d76c51ed30cf4084f4434ba08925d16001d1e340cristy      }
5386d76c51ed30cf4084f4434ba08925d16001d1e340cristy      break;
5387d76c51ed30cf4084f4434ba08925d16001d1e340cristy    }
5388d76c51ed30cf4084f4434ba08925d16001d1e340cristy  }
5389d76c51ed30cf4084f4434ba08925d16001d1e340cristy  return(status);
5390d76c51ed30cf4084f4434ba08925d16001d1e340cristy}
53914c08aed51c5899665ade97263692328eea4af106cristy
53924c08aed51c5899665ade97263692328eea4af106cristy/*
53934c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
53944c08aed51c5899665ade97263692328eea4af106cristy%                                                                             %
53954c08aed51c5899665ade97263692328eea4af106cristy%                                                                             %
53964c08aed51c5899665ade97263692328eea4af106cristy%                                                                             %
53974c08aed51c5899665ade97263692328eea4af106cristy+   I s F u z z y E q u i v a l e n c e P i x e l                             %
53984c08aed51c5899665ade97263692328eea4af106cristy%                                                                             %
53994c08aed51c5899665ade97263692328eea4af106cristy%                                                                             %
54004c08aed51c5899665ade97263692328eea4af106cristy%                                                                             %
54014c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
54024c08aed51c5899665ade97263692328eea4af106cristy%
54034c08aed51c5899665ade97263692328eea4af106cristy%  IsFuzzyEquivalencePixel() returns MagickTrue if the distance between two
54044c08aed51c5899665ade97263692328eea4af106cristy%  pixels is less than the specified distance in a linear three (or four)u
54054c08aed51c5899665ade97263692328eea4af106cristy%  dimensional color space.
54064c08aed51c5899665ade97263692328eea4af106cristy%
54074c08aed51c5899665ade97263692328eea4af106cristy%  The format of the IsFuzzyEquivalencePixel method is:
54084c08aed51c5899665ade97263692328eea4af106cristy%
5409e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy%      void IsFuzzyEquivalencePixel(const Image *source,const Quantum *p,
5410e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy%        const Image *destination,const Quantum *q)
54114c08aed51c5899665ade97263692328eea4af106cristy%
54124c08aed51c5899665ade97263692328eea4af106cristy%  A description of each parameter follows:
54134c08aed51c5899665ade97263692328eea4af106cristy%
5414e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy%    o source: the source image.
54154c08aed51c5899665ade97263692328eea4af106cristy%
54164c08aed51c5899665ade97263692328eea4af106cristy%    o p: Pixel p.
54174c08aed51c5899665ade97263692328eea4af106cristy%
5418e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy%    o destination: the destination image.
5419e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy%
54204c08aed51c5899665ade97263692328eea4af106cristy%    o q: Pixel q.
54214c08aed51c5899665ade97263692328eea4af106cristy%
54224c08aed51c5899665ade97263692328eea4af106cristy*/
5423e4a404711bf20d9062d11ab28bc12e5acd307f9ccristyMagickExport MagickBooleanType IsFuzzyEquivalencePixel(const Image *source,
5424e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy  const Quantum *p,const Image *destination,const Quantum *q)
54254c08aed51c5899665ade97263692328eea4af106cristy{
54264c08aed51c5899665ade97263692328eea4af106cristy  MagickRealType
54274c08aed51c5899665ade97263692328eea4af106cristy    fuzz,
54284c08aed51c5899665ade97263692328eea4af106cristy    pixel;
54294c08aed51c5899665ade97263692328eea4af106cristy
54304c08aed51c5899665ade97263692328eea4af106cristy  register MagickRealType
54314c08aed51c5899665ade97263692328eea4af106cristy    distance,
54324c08aed51c5899665ade97263692328eea4af106cristy    scale;
54334c08aed51c5899665ade97263692328eea4af106cristy
5434e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy  fuzz=MagickMax(source->fuzz,(MagickRealType) MagickSQ1_2)*MagickMax(
5435e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy    destination->fuzz,(MagickRealType) MagickSQ1_2);
54364c08aed51c5899665ade97263692328eea4af106cristy  scale=1.0;
54374c08aed51c5899665ade97263692328eea4af106cristy  distance=0.0;
5438e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy  if (source->matte != MagickFalse)
54394c08aed51c5899665ade97263692328eea4af106cristy    {
54404c08aed51c5899665ade97263692328eea4af106cristy      /*
54414c08aed51c5899665ade97263692328eea4af106cristy        Transparencies are involved - set alpha distance
54424c08aed51c5899665ade97263692328eea4af106cristy      */
544399abff36ae5d479bfd76652d166a4894ceada102cristy      pixel=GetPixelAlpha(source,p)-(MagickRealType)
544499abff36ae5d479bfd76652d166a4894ceada102cristy        GetPixelAlpha(destination,q);
54454c08aed51c5899665ade97263692328eea4af106cristy      distance=pixel*pixel;
54464c08aed51c5899665ade97263692328eea4af106cristy      if (distance > fuzz)
54474c08aed51c5899665ade97263692328eea4af106cristy        return(MagickFalse);
54484c08aed51c5899665ade97263692328eea4af106cristy      /*
54494c08aed51c5899665ade97263692328eea4af106cristy        Generate a alpha scaling factor to generate a 4D cone on colorspace
54504c08aed51c5899665ade97263692328eea4af106cristy        Note that if one color is transparent, distance has no color component.
54514c08aed51c5899665ade97263692328eea4af106cristy      */
5452e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy      scale=QuantumScale*GetPixelAlpha(source,p);
5453e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy      scale*=QuantumScale*GetPixelAlpha(destination,q);
54544c08aed51c5899665ade97263692328eea4af106cristy      if (scale <= MagickEpsilon)
54554c08aed51c5899665ade97263692328eea4af106cristy        return(MagickTrue);
54564c08aed51c5899665ade97263692328eea4af106cristy    }
54574c08aed51c5899665ade97263692328eea4af106cristy  /*
54584c08aed51c5899665ade97263692328eea4af106cristy    RGB or CMY color cube
54594c08aed51c5899665ade97263692328eea4af106cristy  */
54604c08aed51c5899665ade97263692328eea4af106cristy  distance*=3.0;  /* rescale appropriately */
54614c08aed51c5899665ade97263692328eea4af106cristy  fuzz*=3.0;
5462e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy  pixel=GetPixelRed(source,p)-(MagickRealType) GetPixelRed(destination,q);
5463e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy  if ((source->colorspace == HSLColorspace) ||
5464e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy      (source->colorspace == HSBColorspace) ||
5465e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy      (source->colorspace == HWBColorspace))
54664c08aed51c5899665ade97263692328eea4af106cristy    {
54674c08aed51c5899665ade97263692328eea4af106cristy      /*
54684c08aed51c5899665ade97263692328eea4af106cristy        Compute an arc distance for hue.  It should be a vector angle of
54694c08aed51c5899665ade97263692328eea4af106cristy        'S'/'W' length with 'L'/'B' forming appropriate cones.
54704c08aed51c5899665ade97263692328eea4af106cristy      */
54714c08aed51c5899665ade97263692328eea4af106cristy      if (fabs((double) pixel) > (QuantumRange/2))
54724c08aed51c5899665ade97263692328eea4af106cristy        pixel-=QuantumRange;
54734c08aed51c5899665ade97263692328eea4af106cristy      pixel*=2;
54744c08aed51c5899665ade97263692328eea4af106cristy    }
54754c08aed51c5899665ade97263692328eea4af106cristy  distance+=scale*pixel*pixel;
54764c08aed51c5899665ade97263692328eea4af106cristy  if (distance > fuzz)
54774c08aed51c5899665ade97263692328eea4af106cristy    return(MagickFalse);
5478e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy  pixel=GetPixelGreen(source,p)-(MagickRealType) GetPixelGreen(destination,q);
54794c08aed51c5899665ade97263692328eea4af106cristy  distance+=scale*pixel*pixel;
54804c08aed51c5899665ade97263692328eea4af106cristy  if (distance > fuzz)
54814c08aed51c5899665ade97263692328eea4af106cristy    return(MagickFalse);
5482e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy  pixel=GetPixelBlue(source,p)-(MagickRealType) GetPixelBlue(destination,q);
54834c08aed51c5899665ade97263692328eea4af106cristy  distance+=scale*pixel*pixel;
54844c08aed51c5899665ade97263692328eea4af106cristy  if (distance > fuzz)
54854c08aed51c5899665ade97263692328eea4af106cristy    return(MagickFalse);
54864c08aed51c5899665ade97263692328eea4af106cristy  return(MagickTrue);
54874c08aed51c5899665ade97263692328eea4af106cristy}
54884c08aed51c5899665ade97263692328eea4af106cristy
54894c08aed51c5899665ade97263692328eea4af106cristy/*
54904c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
54914c08aed51c5899665ade97263692328eea4af106cristy%                                                                             %
54924c08aed51c5899665ade97263692328eea4af106cristy%                                                                             %
54934c08aed51c5899665ade97263692328eea4af106cristy%                                                                             %
54944c08aed51c5899665ade97263692328eea4af106cristy+   I s F u z z y E q u i v a l e n c e P i x e l I n f o                     %
54954c08aed51c5899665ade97263692328eea4af106cristy%                                                                             %
54964c08aed51c5899665ade97263692328eea4af106cristy%                                                                             %
54974c08aed51c5899665ade97263692328eea4af106cristy%                                                                             %
54984c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
54994c08aed51c5899665ade97263692328eea4af106cristy%
55004c08aed51c5899665ade97263692328eea4af106cristy%  IsFuzzyEquivalencePixelInfo() returns true if the distance between two
55014c08aed51c5899665ade97263692328eea4af106cristy%  colors is less than the specified distance in a linear three (or four)
55024c08aed51c5899665ade97263692328eea4af106cristy%  dimensional color space.
55034c08aed51c5899665ade97263692328eea4af106cristy%
55045f95f4f77efc46ff53593d750491c8f60698c983cristy%  This implements the equivalent of:
55055f95f4f77efc46ff53593d750491c8f60698c983cristy%    fuzz < sqrt(color_distance^2 * u.a*v.a  + alpha_distance^2)
55064c08aed51c5899665ade97263692328eea4af106cristy%
55074c08aed51c5899665ade97263692328eea4af106cristy%  Which produces a multi-dimensional cone for that colorspace along the
55084c08aed51c5899665ade97263692328eea4af106cristy%  transparency vector.
55094c08aed51c5899665ade97263692328eea4af106cristy%
55105f95f4f77efc46ff53593d750491c8f60698c983cristy%  For example for an RGB:
55114c08aed51c5899665ade97263692328eea4af106cristy%    color_distance^2  = ( (u.r-v.r)^2 + (u.g-v.g)^2 + (u.b-v.b)^2 ) / 3
55124c08aed51c5899665ade97263692328eea4af106cristy%
55134c08aed51c5899665ade97263692328eea4af106cristy%  See http://www.imagemagick.org/Usage/bugs/fuzz_distance/
55144c08aed51c5899665ade97263692328eea4af106cristy%
55154c08aed51c5899665ade97263692328eea4af106cristy%  Hue colorspace distances need more work.  Hue is not a distance, it is an
55164c08aed51c5899665ade97263692328eea4af106cristy%  angle!
55174c08aed51c5899665ade97263692328eea4af106cristy%
55184c08aed51c5899665ade97263692328eea4af106cristy%  A check that q is in the same color space as p should be made and the
55194c08aed51c5899665ade97263692328eea4af106cristy%  appropriate mapping made.  -- Anthony Thyssen  8 December 2010
55204c08aed51c5899665ade97263692328eea4af106cristy%
55214c08aed51c5899665ade97263692328eea4af106cristy%  The format of the IsFuzzyEquivalencePixelInfo method is:
55224c08aed51c5899665ade97263692328eea4af106cristy%
55234c08aed51c5899665ade97263692328eea4af106cristy%      MagickBooleanType IsFuzzyEquivalencePixelInfo(const PixelInfo *p,
55244c08aed51c5899665ade97263692328eea4af106cristy%        const PixelInfo *q)
55254c08aed51c5899665ade97263692328eea4af106cristy%
55264c08aed51c5899665ade97263692328eea4af106cristy%  A description of each parameter follows:
55274c08aed51c5899665ade97263692328eea4af106cristy%
55284c08aed51c5899665ade97263692328eea4af106cristy%    o p: Pixel p.
55294c08aed51c5899665ade97263692328eea4af106cristy%
55304c08aed51c5899665ade97263692328eea4af106cristy%    o q: Pixel q.
55314c08aed51c5899665ade97263692328eea4af106cristy%
55324c08aed51c5899665ade97263692328eea4af106cristy*/
55334c08aed51c5899665ade97263692328eea4af106cristyMagickExport MagickBooleanType IsFuzzyEquivalencePixelInfo(const PixelInfo *p,
55344c08aed51c5899665ade97263692328eea4af106cristy  const PixelInfo *q)
55354c08aed51c5899665ade97263692328eea4af106cristy{
55364c08aed51c5899665ade97263692328eea4af106cristy  MagickRealType
55374c08aed51c5899665ade97263692328eea4af106cristy    fuzz,
55384c08aed51c5899665ade97263692328eea4af106cristy    pixel;
55394c08aed51c5899665ade97263692328eea4af106cristy
55404c08aed51c5899665ade97263692328eea4af106cristy  register MagickRealType
55414c08aed51c5899665ade97263692328eea4af106cristy    scale,
55424c08aed51c5899665ade97263692328eea4af106cristy    distance;
55434c08aed51c5899665ade97263692328eea4af106cristy
55444c08aed51c5899665ade97263692328eea4af106cristy  if ((p->fuzz == 0.0) && (q->fuzz == 0.0))
55454c08aed51c5899665ade97263692328eea4af106cristy    return(IsPixelInfoEquivalent(p,q));
55464c08aed51c5899665ade97263692328eea4af106cristy  if (p->fuzz == 0.0)
55475f95f4f77efc46ff53593d750491c8f60698c983cristy    fuzz=MagickMax(q->fuzz,(MagickRealType) MagickSQ1_2)*MagickMax(q->fuzz,
55485f95f4f77efc46ff53593d750491c8f60698c983cristy      (MagickRealType) MagickSQ1_2);
55494c08aed51c5899665ade97263692328eea4af106cristy  else if (q->fuzz == 0.0)
55505f95f4f77efc46ff53593d750491c8f60698c983cristy    fuzz=MagickMax(p->fuzz,(MagickRealType) MagickSQ1_2)*MagickMax(p->fuzz,
55515f95f4f77efc46ff53593d750491c8f60698c983cristy      (MagickRealType) MagickSQ1_2);
55524c08aed51c5899665ade97263692328eea4af106cristy  else
55535f95f4f77efc46ff53593d750491c8f60698c983cristy    fuzz=MagickMax(p->fuzz,(MagickRealType) MagickSQ1_2)*MagickMax(q->fuzz,
55545f95f4f77efc46ff53593d750491c8f60698c983cristy      (MagickRealType) MagickSQ1_2);
55554c08aed51c5899665ade97263692328eea4af106cristy  scale=1.0;
55564c08aed51c5899665ade97263692328eea4af106cristy  distance=0.0;
55574c08aed51c5899665ade97263692328eea4af106cristy  if ((p->matte != MagickFalse) || (q->matte != MagickFalse))
55584c08aed51c5899665ade97263692328eea4af106cristy    {
55594c08aed51c5899665ade97263692328eea4af106cristy      /*
55604c08aed51c5899665ade97263692328eea4af106cristy        Transparencies are involved - set alpha distance.
55614c08aed51c5899665ade97263692328eea4af106cristy      */
55624c08aed51c5899665ade97263692328eea4af106cristy      pixel=(p->matte != MagickFalse ? p->alpha : OpaqueAlpha)-
55634c08aed51c5899665ade97263692328eea4af106cristy        (q->matte != MagickFalse ? q->alpha : OpaqueAlpha);
55644c08aed51c5899665ade97263692328eea4af106cristy      distance=pixel*pixel;
55654c08aed51c5899665ade97263692328eea4af106cristy      if (distance > fuzz)
55664c08aed51c5899665ade97263692328eea4af106cristy        return(MagickFalse);
55674c08aed51c5899665ade97263692328eea4af106cristy      /*
55684c08aed51c5899665ade97263692328eea4af106cristy        Generate a alpha scaling factor to generate a 4D cone on colorspace.
55695f95f4f77efc46ff53593d750491c8f60698c983cristy        If one color is transparent, distance has no color component.
55704c08aed51c5899665ade97263692328eea4af106cristy      */
55714c08aed51c5899665ade97263692328eea4af106cristy      if (p->matte != MagickFalse)
55724c08aed51c5899665ade97263692328eea4af106cristy        scale=(QuantumScale*p->alpha);
55734c08aed51c5899665ade97263692328eea4af106cristy      if (q->matte != MagickFalse)
55744c08aed51c5899665ade97263692328eea4af106cristy        scale*=(QuantumScale*q->alpha);
55754c08aed51c5899665ade97263692328eea4af106cristy      if (scale <= MagickEpsilon )
55764c08aed51c5899665ade97263692328eea4af106cristy        return(MagickTrue);
55774c08aed51c5899665ade97263692328eea4af106cristy    }
55784c08aed51c5899665ade97263692328eea4af106cristy  /*
55794c08aed51c5899665ade97263692328eea4af106cristy    CMYK create a CMY cube with a multi-dimensional cone toward black.
55804c08aed51c5899665ade97263692328eea4af106cristy  */
55814c08aed51c5899665ade97263692328eea4af106cristy  if (p->colorspace == CMYKColorspace)
55824c08aed51c5899665ade97263692328eea4af106cristy    {
55834c08aed51c5899665ade97263692328eea4af106cristy      pixel=p->black-q->black;
55844c08aed51c5899665ade97263692328eea4af106cristy      distance+=pixel*pixel*scale;
55854c08aed51c5899665ade97263692328eea4af106cristy      if (distance > fuzz)
55864c08aed51c5899665ade97263692328eea4af106cristy        return(MagickFalse);
55874c08aed51c5899665ade97263692328eea4af106cristy      scale*=(MagickRealType) (QuantumScale*(QuantumRange-p->black));
55884c08aed51c5899665ade97263692328eea4af106cristy      scale*=(MagickRealType) (QuantumScale*(QuantumRange-q->black));
55894c08aed51c5899665ade97263692328eea4af106cristy    }
55904c08aed51c5899665ade97263692328eea4af106cristy  /*
55914c08aed51c5899665ade97263692328eea4af106cristy    RGB or CMY color cube.
55924c08aed51c5899665ade97263692328eea4af106cristy  */
55934c08aed51c5899665ade97263692328eea4af106cristy  distance*=3.0;  /* rescale appropriately */
55944c08aed51c5899665ade97263692328eea4af106cristy  fuzz*=3.0;
55954c08aed51c5899665ade97263692328eea4af106cristy  pixel=p->red-q->red;
55964c08aed51c5899665ade97263692328eea4af106cristy  if ((p->colorspace == HSLColorspace) || (p->colorspace == HSBColorspace) ||
55974c08aed51c5899665ade97263692328eea4af106cristy      (p->colorspace == HWBColorspace))
55984c08aed51c5899665ade97263692328eea4af106cristy    {
55995f95f4f77efc46ff53593d750491c8f60698c983cristy      /*
56005f95f4f77efc46ff53593d750491c8f60698c983cristy        This calculates a arc distance for hue-- it should be a vector angle
56015f95f4f77efc46ff53593d750491c8f60698c983cristy        of 'S'/'W' length with 'L'/'B' forming appropriate cones.  In other
56025f95f4f77efc46ff53593d750491c8f60698c983cristy        words this is a hack - Anthony.
56034c08aed51c5899665ade97263692328eea4af106cristy      */
56044c08aed51c5899665ade97263692328eea4af106cristy      if (fabs((double) pixel) > (QuantumRange/2))
56054c08aed51c5899665ade97263692328eea4af106cristy        pixel-=QuantumRange;
56064c08aed51c5899665ade97263692328eea4af106cristy      pixel*=2;
56074c08aed51c5899665ade97263692328eea4af106cristy    }
56084c08aed51c5899665ade97263692328eea4af106cristy  distance+=pixel*pixel*scale;
56094c08aed51c5899665ade97263692328eea4af106cristy  if (distance > fuzz)
56104c08aed51c5899665ade97263692328eea4af106cristy    return(MagickFalse);
56114c08aed51c5899665ade97263692328eea4af106cristy  pixel=p->green-q->green;
56124c08aed51c5899665ade97263692328eea4af106cristy  distance+=pixel*pixel*scale;
56134c08aed51c5899665ade97263692328eea4af106cristy  if (distance > fuzz)
56144c08aed51c5899665ade97263692328eea4af106cristy    return(MagickFalse);
56154c08aed51c5899665ade97263692328eea4af106cristy  pixel=p->blue-q->blue;
56164c08aed51c5899665ade97263692328eea4af106cristy  distance+=pixel*pixel*scale;
56174c08aed51c5899665ade97263692328eea4af106cristy  if (distance > fuzz)
56184c08aed51c5899665ade97263692328eea4af106cristy    return(MagickFalse);
56194c08aed51c5899665ade97263692328eea4af106cristy  return(MagickTrue);
56204c08aed51c5899665ade97263692328eea4af106cristy}
56212b9582a27910c7baaeb04b7e969638328fa70095cristy
56222b9582a27910c7baaeb04b7e969638328fa70095cristy/*
56232b9582a27910c7baaeb04b7e969638328fa70095cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
56242b9582a27910c7baaeb04b7e969638328fa70095cristy%                                                                             %
56252b9582a27910c7baaeb04b7e969638328fa70095cristy%                                                                             %
56262b9582a27910c7baaeb04b7e969638328fa70095cristy%                                                                             %
5627e2a912b6c9086c98ec838baa0824cd8deca55538cristy%   S e t P i x e l C h a n n e l M a p M a s k                               %
56282b9582a27910c7baaeb04b7e969638328fa70095cristy%                                                                             %
56292b9582a27910c7baaeb04b7e969638328fa70095cristy%                                                                             %
56302b9582a27910c7baaeb04b7e969638328fa70095cristy%                                                                             %
56312b9582a27910c7baaeb04b7e969638328fa70095cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
56322b9582a27910c7baaeb04b7e969638328fa70095cristy%
5633e2a912b6c9086c98ec838baa0824cd8deca55538cristy%  SetPixelChannelMapMask() sets the pixel channel map from the specified
5634e2a912b6c9086c98ec838baa0824cd8deca55538cristy%  channel mask.
56352b9582a27910c7baaeb04b7e969638328fa70095cristy%
5636e2a912b6c9086c98ec838baa0824cd8deca55538cristy%  The format of the SetPixelChannelMapMask method is:
56372b9582a27910c7baaeb04b7e969638328fa70095cristy%
5638e2a912b6c9086c98ec838baa0824cd8deca55538cristy%      void SetPixelChannelMapMask(Image *image,const ChannelType channel_mask)
56392b9582a27910c7baaeb04b7e969638328fa70095cristy%
56402b9582a27910c7baaeb04b7e969638328fa70095cristy%  A description of each parameter follows:
56412b9582a27910c7baaeb04b7e969638328fa70095cristy%
56422b9582a27910c7baaeb04b7e969638328fa70095cristy%    o image: the image.
56432b9582a27910c7baaeb04b7e969638328fa70095cristy%
5644dfdb19ea2c08296b31fef860352c0a6efe8e9cc6cristy%    o channel_mask: the channel mask.
56452b9582a27910c7baaeb04b7e969638328fa70095cristy%
56462b9582a27910c7baaeb04b7e969638328fa70095cristy*/
5647e2a912b6c9086c98ec838baa0824cd8deca55538cristyMagickExport void SetPixelChannelMapMask(Image *image,
564807a6785ad974f0631a83731fe5d7fb85751ca235cristy  const ChannelType channel_mask)
56492b9582a27910c7baaeb04b7e969638328fa70095cristy{
56506a917d6c8b1695012e26389d2ec303267676815fcristy#define GetChannelBit(mask,bit)  (((size_t) (mask) >> (size_t) (bit)) & 0x01)
5651dafd287faca4c8cd5415d13185973add9c02b2c4cristy
56522b9582a27910c7baaeb04b7e969638328fa70095cristy  register ssize_t
56532b9582a27910c7baaeb04b7e969638328fa70095cristy    i;
56542b9582a27910c7baaeb04b7e969638328fa70095cristy
5655177e41c20ccba692bc4c7797aeb817b2f80c7e8ccristy  if (image->debug != MagickFalse)
5656177e41c20ccba692bc4c7797aeb817b2f80c7e8ccristy    (void) LogMagickEvent(PixelEvent,GetMagickModule(),"%s[%08x]", \
5657177e41c20ccba692bc4c7797aeb817b2f80c7e8ccristy      image->filename,channel_mask); \
56583c30981743f8543ca2ccc0d19de8fbda2b3639c6cristy  image->channel_mask=channel_mask;
5659dafd287faca4c8cd5415d13185973add9c02b2c4cristy  for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
5660e2a912b6c9086c98ec838baa0824cd8deca55538cristy  {
5661e2a912b6c9086c98ec838baa0824cd8deca55538cristy    PixelChannel
5662e2a912b6c9086c98ec838baa0824cd8deca55538cristy      channel;
5663e2a912b6c9086c98ec838baa0824cd8deca55538cristy
5664e2a912b6c9086c98ec838baa0824cd8deca55538cristy    channel=GetPixelChannelMapChannel(image,i);
5665e2a912b6c9086c98ec838baa0824cd8deca55538cristy    SetPixelChannelMapTraits(image,channel,
5666e2a912b6c9086c98ec838baa0824cd8deca55538cristy      GetChannelBit(channel_mask,channel) == 0 ? CopyPixelTrait :
56670bbd87c90725154145a972d3efbc4c5124455fe3cristy      image->matte == MagickFalse || (channel == AlphaPixelChannel) ?
56680bbd87c90725154145a972d3efbc4c5124455fe3cristy      UpdatePixelTrait : (PixelTrait) (UpdatePixelTrait | BlendPixelTrait));
5669e2a912b6c9086c98ec838baa0824cd8deca55538cristy  }
56701685e7216ce4e5fac701834cd7db6eee6d426234cristy  if (image->storage_class == PseudoClass)
56711685e7216ce4e5fac701834cd7db6eee6d426234cristy    SetPixelChannelMapTraits(image,IndexPixelChannel,CopyPixelTrait);
5672183a5c7d1c8a9a747766ff9a2ef067853a7066e9cristy  if (image->mask != MagickFalse)
567310a6c61544fb48d72f29ec8f9573bdcd52abf1b7cristy    SetPixelChannelMapTraits(image,MaskPixelChannel,CopyPixelTrait);
56746dcb9b8f58179c62fb386bf2bc02c8ba901dfb15cristy  if (image->debug != MagickFalse)
56756dcb9b8f58179c62fb386bf2bc02c8ba901dfb15cristy    LogPixelChannels(image);
56762b9582a27910c7baaeb04b7e969638328fa70095cristy}
56772b9582a27910c7baaeb04b7e969638328fa70095cristy
56782b9582a27910c7baaeb04b7e969638328fa70095cristy/*
56792b9582a27910c7baaeb04b7e969638328fa70095cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
56802b9582a27910c7baaeb04b7e969638328fa70095cristy%                                                                             %
56812b9582a27910c7baaeb04b7e969638328fa70095cristy%                                                                             %
56822b9582a27910c7baaeb04b7e969638328fa70095cristy%                                                                             %
5683bd5a96cd2b69f218f85a7adc306296a736f91a56cristy%   S e t P i x e l C h a n n e l M a s k                                     %
56842b9582a27910c7baaeb04b7e969638328fa70095cristy%                                                                             %
56852b9582a27910c7baaeb04b7e969638328fa70095cristy%                                                                             %
56862b9582a27910c7baaeb04b7e969638328fa70095cristy%                                                                             %
56872b9582a27910c7baaeb04b7e969638328fa70095cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
56882b9582a27910c7baaeb04b7e969638328fa70095cristy%
56895f95f4f77efc46ff53593d750491c8f60698c983cristy%  SetPixelChannelMask() sets the pixel channel mask from the specified channel
56905f95f4f77efc46ff53593d750491c8f60698c983cristy%  mask.
56912b9582a27910c7baaeb04b7e969638328fa70095cristy%
5692bd5a96cd2b69f218f85a7adc306296a736f91a56cristy%  The format of the SetPixelChannelMask method is:
56932b9582a27910c7baaeb04b7e969638328fa70095cristy%
5694bd5a96cd2b69f218f85a7adc306296a736f91a56cristy%      ChannelType SetPixelChannelMask(Image *image,
5695bd5a96cd2b69f218f85a7adc306296a736f91a56cristy%        const ChannelType channel_mask)
56962b9582a27910c7baaeb04b7e969638328fa70095cristy%
56972b9582a27910c7baaeb04b7e969638328fa70095cristy%  A description of each parameter follows:
56982b9582a27910c7baaeb04b7e969638328fa70095cristy%
56992b9582a27910c7baaeb04b7e969638328fa70095cristy%    o image: the image.
57002b9582a27910c7baaeb04b7e969638328fa70095cristy%
5701bd5a96cd2b69f218f85a7adc306296a736f91a56cristy%    o channel_mask: the channel mask.
5702bd5a96cd2b69f218f85a7adc306296a736f91a56cristy%
57032b9582a27910c7baaeb04b7e969638328fa70095cristy*/
5704bd5a96cd2b69f218f85a7adc306296a736f91a56cristyMagickExport ChannelType SetPixelChannelMask(Image *image,
5705bd5a96cd2b69f218f85a7adc306296a736f91a56cristy  const ChannelType channel_mask)
57062b9582a27910c7baaeb04b7e969638328fa70095cristy{
5707bd5a96cd2b69f218f85a7adc306296a736f91a56cristy  ChannelType
5708bd5a96cd2b69f218f85a7adc306296a736f91a56cristy    mask;
570994c50bac20b1e1070a88b490fd6823fce1de400ecristy
5710bd5a96cd2b69f218f85a7adc306296a736f91a56cristy  mask=image->channel_mask;
5711bd5a96cd2b69f218f85a7adc306296a736f91a56cristy  image->channel_mask=channel_mask;
5712e2a912b6c9086c98ec838baa0824cd8deca55538cristy  SetPixelChannelMapMask(image,channel_mask);
5713bd5a96cd2b69f218f85a7adc306296a736f91a56cristy  return(mask);
57142b9582a27910c7baaeb04b7e969638328fa70095cristy}
5715322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy
5716322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy/*
5717322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5718322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy%                                                                             %
5719322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy%                                                                             %
5720322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy%                                                                             %
5721322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy%   S e t P i x e l M e t a C h a n n e l s                                   %
5722322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy%                                                                             %
5723322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy%                                                                             %
5724322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy%                                                                             %
5725322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5726322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy%
5727322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy%  SetPixelMetaChannels() sets the image meta channels.
5728322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy%
5729322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy%  The format of the SetPixelMetaChannels method is:
5730322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy%
5731322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy%      MagickBooleanType SetPixelMetaChannels(Image *image,
5732322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy%        const size_t number_meta_channels,ExceptionInfo *exception)
5733322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy%
5734322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy%  A description of each parameter follows:
5735322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy%
5736322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy%    o image: the image.
5737322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy%
5738322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy%    o number_meta_channels:  the number of meta channels.
5739322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy%
5740322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy%    o exception: return any errors or warnings in this structure.
5741322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy%
5742322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy*/
5743322d07da43d795a7c3b9a2d068d9a9005591cbe4cristyMagickExport MagickBooleanType SetPixelMetaChannels(Image *image,
5744322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy  const size_t number_meta_channels,ExceptionInfo *exception)
5745322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy{
5746322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy  image->number_meta_channels=number_meta_channels;
5747322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy  return(SyncImagePixelCache(image,exception));
5748322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy}
5749