13ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/*
23ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
33ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
43ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
53ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
63ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                QQQ   U   U   AAA   N   N  TTTTT  U   U  M   M               %
73ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%               Q   Q  U   U  A   A  NN  N    T    U   U  MM MM               %
83ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%               Q   Q  U   U  AAAAA  N N N    T    U   U  M M M               %
93ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%               Q  QQ  U   U  A   A  N  NN    T    U   U  M   M               %
103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                QQQQ   UUU   A   A  N   N    T     UUU   M   M               %
113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                   EEEEE  X   X  PPPP    OOO   RRRR   TTTTT                  %
133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                   E       X X   P   P  O   O  R   R    T                    %
143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                   EEE      X    PPPP   O   O  RRRR     T                    %
153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                   E       X X   P      O   O  R R      T                    %
163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                   EEEEE  X   X  P       OOO   R  R     T                    %
173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                 MagickCore Methods to Export Quantum Pixels                 %
193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                             Software Design                                 %
21de984cdc3631106b1cbbb8d3972b76a0fc27e8e8cristy%                                  Cristy                                     %
223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                               October 1998                                  %
233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
257ce65e7125a4e1df1a274ce373c537a9df9c16cdCristy%  Copyright 1999-2016 ImageMagick Studio LLC, a non-profit organization      %
263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  dedicated to making software imaging solutions freely available.           %
273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  You may not use this file except in compliance with the License.  You may  %
293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  obtain a copy of the License at                                            %
303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%    http://www.imagemagick.org/script/license.php                            %
323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  Unless required by applicable law or agreed to in writing, software        %
343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  distributed under the License is distributed on an "AS IS" BASIS,          %
353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   %
363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  See the License for the specific language governing permissions and        %
373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  limitations under the License.                                             %
383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/
433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/*
453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  Include declarations.
463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/
474c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/studio.h"
484c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/property.h"
494c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/blob.h"
504c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/blob-private.h"
514c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/color-private.h"
524c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/exception.h"
534c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/exception-private.h"
544c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/cache.h"
554c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/constitute.h"
564c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/delegate.h"
574c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/geometry.h"
584c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/list.h"
594c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/magick.h"
604c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/memory_.h"
614c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/monitor.h"
624c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/option.h"
634c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/pixel.h"
644c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/pixel-accessor.h"
654c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/quantum.h"
664c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/quantum-private.h"
674c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/resource_.h"
684c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/semaphore.h"
694c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/statistic.h"
704c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/stream.h"
714c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/string_.h"
724c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/utility.h"
733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/*
753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy+   E x p o r t Q u a n t u m P i x e l s                                     %
803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  ExportQuantumPixels() transfers one or more pixel components from the image
863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  pixel cache to a user supplied buffer.  The pixels are returned in network
873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  byte order.  MagickTrue is returned if the pixels are successfully
883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  transferred, otherwise MagickFalse.
893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  The format of the ExportQuantumPixels method is:
913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
9232c6843b4cfe042747eff85b4a80ec119c77bdc8cristy%      size_t ExportQuantumPixels(const Image *image,CacheView *image_view,
9332c6843b4cfe042747eff85b4a80ec119c77bdc8cristy%        QuantumInfo *quantum_info,const QuantumType quantum_type,
9405d2ff7ebf21f659f5b11e45afb294e152f4330cdirk%        unsigned char *magick_restrict pixels,ExceptionInfo *exception)
953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  A description of each parameter follows:
973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%    o image: the image.
993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
1003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%    o image_view: the image cache view.
1013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
1023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%    o quantum_info: the quantum info.
1033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
1043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%    o quantum_type: Declare which pixel components to transfer (RGB, RGBA,
1053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%      etc).
1063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
1073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%    o pixels:  The components are transferred to this buffer.
1083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
1093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%    o exception: return any errors or warnings in this structure.
1103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
1113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/
1123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
11332c6843b4cfe042747eff85b4a80ec119c77bdc8cristystatic inline unsigned char *PopDoublePixel(QuantumInfo *quantum_info,
11405d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  const double pixel,unsigned char *magick_restrict pixels)
1153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{
1163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  double
1173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    *p;
1183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
1193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  unsigned char
1208a1e4af723536f27e896029456130a6603923f61cristy    quantum[8];
1213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
1228a1e4af723536f27e896029456130a6603923f61cristy  (void) ResetMagickMemory(quantum,0,sizeof(quantum));
1233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  p=(double *) quantum;
12432c6843b4cfe042747eff85b4a80ec119c77bdc8cristy  *p=(double) (pixel*quantum_info->state.inverse_scale+quantum_info->minimum);
1251715f7998cc7a3ac9ab8e1d367f8c6c9ac7c3e6ecristy  if (quantum_info->endian == LSBEndian)
1263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
1273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      *pixels++=quantum[0];
1281715f7998cc7a3ac9ab8e1d367f8c6c9ac7c3e6ecristy      *pixels++=quantum[1];
1291715f7998cc7a3ac9ab8e1d367f8c6c9ac7c3e6ecristy      *pixels++=quantum[2];
1301715f7998cc7a3ac9ab8e1d367f8c6c9ac7c3e6ecristy      *pixels++=quantum[3];
1311715f7998cc7a3ac9ab8e1d367f8c6c9ac7c3e6ecristy      *pixels++=quantum[4];
1321715f7998cc7a3ac9ab8e1d367f8c6c9ac7c3e6ecristy      *pixels++=quantum[5];
1331715f7998cc7a3ac9ab8e1d367f8c6c9ac7c3e6ecristy      *pixels++=quantum[6];
1341715f7998cc7a3ac9ab8e1d367f8c6c9ac7c3e6ecristy      *pixels++=quantum[7];
1353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      return(pixels);
1363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
1373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  *pixels++=quantum[7];
1381715f7998cc7a3ac9ab8e1d367f8c6c9ac7c3e6ecristy  *pixels++=quantum[6];
1391715f7998cc7a3ac9ab8e1d367f8c6c9ac7c3e6ecristy  *pixels++=quantum[5];
1401715f7998cc7a3ac9ab8e1d367f8c6c9ac7c3e6ecristy  *pixels++=quantum[4];
1411715f7998cc7a3ac9ab8e1d367f8c6c9ac7c3e6ecristy  *pixels++=quantum[3];
1421715f7998cc7a3ac9ab8e1d367f8c6c9ac7c3e6ecristy  *pixels++=quantum[2];
1431715f7998cc7a3ac9ab8e1d367f8c6c9ac7c3e6ecristy  *pixels++=quantum[1];
1441715f7998cc7a3ac9ab8e1d367f8c6c9ac7c3e6ecristy  *pixels++=quantum[0];
1453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  return(pixels);
1463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy}
1473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
14832c6843b4cfe042747eff85b4a80ec119c77bdc8cristystatic inline unsigned char *PopFloatPixel(QuantumInfo *quantum_info,
14905d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  const float pixel,unsigned char *magick_restrict pixels)
1503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{
1513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  float
1523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    *p;
1533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
1543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  unsigned char
1558a1e4af723536f27e896029456130a6603923f61cristy    quantum[4];
1563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
1578a1e4af723536f27e896029456130a6603923f61cristy  (void) ResetMagickMemory(quantum,0,sizeof(quantum));
1583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  p=(float *) quantum;
15932c6843b4cfe042747eff85b4a80ec119c77bdc8cristy  *p=(float) ((double) pixel*quantum_info->state.inverse_scale+
16032c6843b4cfe042747eff85b4a80ec119c77bdc8cristy    quantum_info->minimum);
1611715f7998cc7a3ac9ab8e1d367f8c6c9ac7c3e6ecristy  if (quantum_info->endian == LSBEndian)
1623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
1633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      *pixels++=quantum[0];
1641715f7998cc7a3ac9ab8e1d367f8c6c9ac7c3e6ecristy      *pixels++=quantum[1];
1651715f7998cc7a3ac9ab8e1d367f8c6c9ac7c3e6ecristy      *pixels++=quantum[2];
1661715f7998cc7a3ac9ab8e1d367f8c6c9ac7c3e6ecristy      *pixels++=quantum[3];
1673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      return(pixels);
1683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
1693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  *pixels++=quantum[3];
1701715f7998cc7a3ac9ab8e1d367f8c6c9ac7c3e6ecristy  *pixels++=quantum[2];
1711715f7998cc7a3ac9ab8e1d367f8c6c9ac7c3e6ecristy  *pixels++=quantum[1];
1721715f7998cc7a3ac9ab8e1d367f8c6c9ac7c3e6ecristy  *pixels++=quantum[0];
1733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  return(pixels);
1743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy}
1753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
17632c6843b4cfe042747eff85b4a80ec119c77bdc8cristystatic inline unsigned char *PopQuantumPixel(QuantumInfo *quantum_info,
17705d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  const QuantumAny pixel,unsigned char *magick_restrict pixels)
1783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{
179bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy  register ssize_t
1803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    i;
1813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
1826b825f92c7de295f3cd04bd86d97de0e774a3efccristy  size_t
1833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    quantum_bits;
1843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
18532c6843b4cfe042747eff85b4a80ec119c77bdc8cristy  if (quantum_info->state.bits == 0UL)
18632c6843b4cfe042747eff85b4a80ec119c77bdc8cristy    quantum_info->state.bits=8U;
18732c6843b4cfe042747eff85b4a80ec119c77bdc8cristy  for (i=(ssize_t) quantum_info->depth; i > 0L; )
1883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  {
1896b825f92c7de295f3cd04bd86d97de0e774a3efccristy    quantum_bits=(size_t) i;
19032c6843b4cfe042747eff85b4a80ec119c77bdc8cristy    if (quantum_bits > quantum_info->state.bits)
19132c6843b4cfe042747eff85b4a80ec119c77bdc8cristy      quantum_bits=quantum_info->state.bits;
192ebdf07a4c558ff7408f91aad4593f52f0d60595ecristy    i-=(ssize_t) quantum_bits;
19342c36c10f5190bdf458c219b6e53c31bf18f1439cristy    if (i < 0)
19442c36c10f5190bdf458c219b6e53c31bf18f1439cristy      i=0;
19532c6843b4cfe042747eff85b4a80ec119c77bdc8cristy    if (quantum_info->state.bits == 8UL)
1963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      *pixels='\0';
19732c6843b4cfe042747eff85b4a80ec119c77bdc8cristy    quantum_info->state.bits-=quantum_bits;
1986b825f92c7de295f3cd04bd86d97de0e774a3efccristy    *pixels|=(((pixel >> i) &~ ((~0UL) << quantum_bits)) <<
19932c6843b4cfe042747eff85b4a80ec119c77bdc8cristy      quantum_info->state.bits);
20032c6843b4cfe042747eff85b4a80ec119c77bdc8cristy    if (quantum_info->state.bits == 0UL)
2013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
2023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        pixels++;
20332c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        quantum_info->state.bits=8UL;
2043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
2053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  }
2063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  return(pixels);
2073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy}
2083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
20932c6843b4cfe042747eff85b4a80ec119c77bdc8cristystatic inline unsigned char *PopQuantumLongPixel(QuantumInfo *quantum_info,
21005d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  const size_t pixel,unsigned char *magick_restrict pixels)
2113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{
212bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy  register ssize_t
2133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    i;
2143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
2156b825f92c7de295f3cd04bd86d97de0e774a3efccristy  size_t
2163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    quantum_bits;
2173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
21832c6843b4cfe042747eff85b4a80ec119c77bdc8cristy  if (quantum_info->state.bits == 0U)
21932c6843b4cfe042747eff85b4a80ec119c77bdc8cristy    quantum_info->state.bits=32UL;
22032c6843b4cfe042747eff85b4a80ec119c77bdc8cristy  for (i=(ssize_t) quantum_info->depth; i > 0; )
2213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  {
222bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy    quantum_bits=(size_t) i;
22332c6843b4cfe042747eff85b4a80ec119c77bdc8cristy    if (quantum_bits > quantum_info->state.bits)
22432c6843b4cfe042747eff85b4a80ec119c77bdc8cristy      quantum_bits=quantum_info->state.bits;
22532c6843b4cfe042747eff85b4a80ec119c77bdc8cristy    quantum_info->state.pixel|=(((pixel >> (quantum_info->depth-i)) &
22632c6843b4cfe042747eff85b4a80ec119c77bdc8cristy      quantum_info->state.mask[quantum_bits]) << (32U-
22732c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        quantum_info->state.bits));
228eaedf06777741da32408da72c1e512975c600c48cristy    i-=(ssize_t) quantum_bits;
22932c6843b4cfe042747eff85b4a80ec119c77bdc8cristy    quantum_info->state.bits-=quantum_bits;
23032c6843b4cfe042747eff85b4a80ec119c77bdc8cristy    if (quantum_info->state.bits == 0U)
2313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
23232c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        pixels=PopLongPixel(quantum_info->endian,quantum_info->state.pixel,
23332c6843b4cfe042747eff85b4a80ec119c77bdc8cristy          pixels);
23432c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        quantum_info->state.pixel=0U;
23532c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        quantum_info->state.bits=32U;
2363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
2373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  }
2383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  return(pixels);
2393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy}
2403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
24132c6843b4cfe042747eff85b4a80ec119c77bdc8cristystatic void ExportAlphaQuantum(const Image *image,QuantumInfo *quantum_info,
24205d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  const MagickSizeType number_pixels,const Quantum *magick_restrict p,
24305d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  unsigned char *magick_restrict q,ExceptionInfo *exception)
244f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy{
245f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy  QuantumAny
246f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy    range;
247f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy
248f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy  register ssize_t
249f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy    x;
250f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy
251b0de93fdedaac769cb08e15b3ec176d4c9078907cristy  assert(exception != (ExceptionInfo *) NULL);
252e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy  assert(exception->signature == MagickCoreSignature);
2530897d38090922ca628fa87157844e3ee0ca07911cristy  switch (quantum_info->depth)
2540897d38090922ca628fa87157844e3ee0ca07911cristy  {
2550897d38090922ca628fa87157844e3ee0ca07911cristy    case 8:
25640ae80f228afbc5b9b7693135723e47bbb088acecristy    {
2570897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned char
2580897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
259f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy
2600897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
261f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy      {
2620897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToChar(GetPixelAlpha(image,p));
2630897d38090922ca628fa87157844e3ee0ca07911cristy        q=PopCharPixel(pixel,q);
2640897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
2650897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
266f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy      }
2670897d38090922ca628fa87157844e3ee0ca07911cristy      break;
268f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy    }
2690897d38090922ca628fa87157844e3ee0ca07911cristy    case 16:
270f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy    {
2710897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned short
2720897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
273f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy
2740897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
2750897d38090922ca628fa87157844e3ee0ca07911cristy        {
2760897d38090922ca628fa87157844e3ee0ca07911cristy          for (x=0; x < (ssize_t) number_pixels; x++)
2770897d38090922ca628fa87157844e3ee0ca07911cristy          {
2780897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelAlpha(image,p));
27932c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopShortPixel(quantum_info->endian,pixel,q);
2800897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
2810897d38090922ca628fa87157844e3ee0ca07911cristy            q+=quantum_info->pad;
2820897d38090922ca628fa87157844e3ee0ca07911cristy          }
2830897d38090922ca628fa87157844e3ee0ca07911cristy          break;
2840897d38090922ca628fa87157844e3ee0ca07911cristy        }
285f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy      for (x=0; x < (ssize_t) number_pixels; x++)
286f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy      {
2870897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
28832c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopShortPixel(quantum_info->endian,pixel,q);
2890897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
2900897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
291f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy      }
2920897d38090922ca628fa87157844e3ee0ca07911cristy      break;
293f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy    }
2940897d38090922ca628fa87157844e3ee0ca07911cristy    case 32:
295f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy    {
2960897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned int
2970897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
29840ae80f228afbc5b9b7693135723e47bbb088acecristy
2990897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
3000897d38090922ca628fa87157844e3ee0ca07911cristy        {
3010897d38090922ca628fa87157844e3ee0ca07911cristy          for (x=0; x < (ssize_t) number_pixels; x++)
3020897d38090922ca628fa87157844e3ee0ca07911cristy          {
30332c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopFloatPixel(quantum_info,(float) GetPixelAlpha(image,p),q);
3040897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
3050897d38090922ca628fa87157844e3ee0ca07911cristy            q+=quantum_info->pad;
3060897d38090922ca628fa87157844e3ee0ca07911cristy          }
3070897d38090922ca628fa87157844e3ee0ca07911cristy          break;
3080897d38090922ca628fa87157844e3ee0ca07911cristy        }
309f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy      for (x=0; x < (ssize_t) number_pixels; x++)
310f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy      {
3110897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
31232c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopLongPixel(quantum_info->endian,pixel,q);
3130897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
3140897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
315f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy      }
3160897d38090922ca628fa87157844e3ee0ca07911cristy      break;
317f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy    }
3180897d38090922ca628fa87157844e3ee0ca07911cristy    case 64:
3191930c67f6c085d323a9ffa0828fa1132236039becristy    {
3200897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
32140ae80f228afbc5b9b7693135723e47bbb088acecristy        {
3220897d38090922ca628fa87157844e3ee0ca07911cristy          for (x=0; x < (ssize_t) number_pixels; x++)
32340ae80f228afbc5b9b7693135723e47bbb088acecristy          {
32432c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopDoublePixel(quantum_info,(double) GetPixelAlpha(image,p),q);
3250897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
3260897d38090922ca628fa87157844e3ee0ca07911cristy            q+=quantum_info->pad;
32740ae80f228afbc5b9b7693135723e47bbb088acecristy          }
32840ae80f228afbc5b9b7693135723e47bbb088acecristy          break;
32940ae80f228afbc5b9b7693135723e47bbb088acecristy        }
3300897d38090922ca628fa87157844e3ee0ca07911cristy    }
3310897d38090922ca628fa87157844e3ee0ca07911cristy    default:
3320897d38090922ca628fa87157844e3ee0ca07911cristy    {
3330897d38090922ca628fa87157844e3ee0ca07911cristy      range=GetQuantumRange(quantum_info->depth);
3340897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
3350897d38090922ca628fa87157844e3ee0ca07911cristy      {
33632c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
33732c6843b4cfe042747eff85b4a80ec119c77bdc8cristy          range),q);
3380897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
3390897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
3400897d38090922ca628fa87157844e3ee0ca07911cristy      }
3410897d38090922ca628fa87157844e3ee0ca07911cristy      break;
3420897d38090922ca628fa87157844e3ee0ca07911cristy    }
3430897d38090922ca628fa87157844e3ee0ca07911cristy  }
3440897d38090922ca628fa87157844e3ee0ca07911cristy}
3450897d38090922ca628fa87157844e3ee0ca07911cristy
34632c6843b4cfe042747eff85b4a80ec119c77bdc8cristystatic void ExportBGRQuantum(const Image *image,QuantumInfo *quantum_info,
34705d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  const MagickSizeType number_pixels,const Quantum *magick_restrict p,
34805d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  unsigned char *magick_restrict q,ExceptionInfo *exception)
3490897d38090922ca628fa87157844e3ee0ca07911cristy{
3500897d38090922ca628fa87157844e3ee0ca07911cristy  QuantumAny
3510897d38090922ca628fa87157844e3ee0ca07911cristy    range;
3520897d38090922ca628fa87157844e3ee0ca07911cristy
3530897d38090922ca628fa87157844e3ee0ca07911cristy  register ssize_t
3540897d38090922ca628fa87157844e3ee0ca07911cristy    x;
3550897d38090922ca628fa87157844e3ee0ca07911cristy
3560897d38090922ca628fa87157844e3ee0ca07911cristy  ssize_t
3570897d38090922ca628fa87157844e3ee0ca07911cristy    bit;
3580897d38090922ca628fa87157844e3ee0ca07911cristy
359b0de93fdedaac769cb08e15b3ec176d4c9078907cristy  assert(exception != (ExceptionInfo *) NULL);
360e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy  assert(exception->signature == MagickCoreSignature);
3610897d38090922ca628fa87157844e3ee0ca07911cristy  switch (quantum_info->depth)
3620897d38090922ca628fa87157844e3ee0ca07911cristy  {
3630897d38090922ca628fa87157844e3ee0ca07911cristy    case 8:
3640897d38090922ca628fa87157844e3ee0ca07911cristy    {
3650897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
3660897d38090922ca628fa87157844e3ee0ca07911cristy      {
3670897d38090922ca628fa87157844e3ee0ca07911cristy        q=PopCharPixel(ScaleQuantumToChar(GetPixelBlue(image,p)),q);
3680897d38090922ca628fa87157844e3ee0ca07911cristy        q=PopCharPixel(ScaleQuantumToChar(GetPixelGreen(image,p)),q);
3690897d38090922ca628fa87157844e3ee0ca07911cristy        q=PopCharPixel(ScaleQuantumToChar(GetPixelRed(image,p)),q);
3700897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
3710897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
3720897d38090922ca628fa87157844e3ee0ca07911cristy      }
3730897d38090922ca628fa87157844e3ee0ca07911cristy      break;
3740897d38090922ca628fa87157844e3ee0ca07911cristy    }
3750897d38090922ca628fa87157844e3ee0ca07911cristy    case 10:
3760897d38090922ca628fa87157844e3ee0ca07911cristy    {
3770897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned int
3780897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
37940ae80f228afbc5b9b7693135723e47bbb088acecristy
3800897d38090922ca628fa87157844e3ee0ca07911cristy      range=GetQuantumRange(quantum_info->depth);
3810897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->pack == MagickFalse)
3820897d38090922ca628fa87157844e3ee0ca07911cristy        {
3830897d38090922ca628fa87157844e3ee0ca07911cristy          for (x=0; x < (ssize_t) number_pixels; x++)
3841930c67f6c085d323a9ffa0828fa1132236039becristy          {
3850897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=(unsigned int) (
3860897d38090922ca628fa87157844e3ee0ca07911cristy              ScaleQuantumToAny(GetPixelRed(image,p),range) << 22 |
3870897d38090922ca628fa87157844e3ee0ca07911cristy              ScaleQuantumToAny(GetPixelGreen(image,p),range) << 12 |
3880897d38090922ca628fa87157844e3ee0ca07911cristy              ScaleQuantumToAny(GetPixelBlue(image,p),range) << 2);
38932c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopLongPixel(quantum_info->endian,pixel,q);
3900897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
3910897d38090922ca628fa87157844e3ee0ca07911cristy            q+=quantum_info->pad;
3921930c67f6c085d323a9ffa0828fa1132236039becristy          }
3931930c67f6c085d323a9ffa0828fa1132236039becristy          break;
3941930c67f6c085d323a9ffa0828fa1132236039becristy        }
3950897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->quantum == 32UL)
3961930c67f6c085d323a9ffa0828fa1132236039becristy        {
3971930c67f6c085d323a9ffa0828fa1132236039becristy          for (x=0; x < (ssize_t) number_pixels; x++)
3981930c67f6c085d323a9ffa0828fa1132236039becristy          {
3990897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
40032c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopQuantumLongPixel(quantum_info,pixel,q);
4010897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
4020897d38090922ca628fa87157844e3ee0ca07911cristy              range);
40332c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopQuantumLongPixel(quantum_info,pixel,q);
4040897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
40532c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopQuantumLongPixel(quantum_info,pixel,q);
4060897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
4071930c67f6c085d323a9ffa0828fa1132236039becristy            q+=quantum_info->pad;
4081930c67f6c085d323a9ffa0828fa1132236039becristy          }
4091930c67f6c085d323a9ffa0828fa1132236039becristy          break;
4101930c67f6c085d323a9ffa0828fa1132236039becristy        }
4110897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
4120897d38090922ca628fa87157844e3ee0ca07911cristy      {
4130897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
41432c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,pixel,q);
4150897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
41632c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,pixel,q);
4170897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
41832c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,pixel,q);
4190897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
4200897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
4210897d38090922ca628fa87157844e3ee0ca07911cristy      }
4220897d38090922ca628fa87157844e3ee0ca07911cristy      break;
4230897d38090922ca628fa87157844e3ee0ca07911cristy    }
4240897d38090922ca628fa87157844e3ee0ca07911cristy    case 12:
4250897d38090922ca628fa87157844e3ee0ca07911cristy    {
4260897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned int
4270897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
4280897d38090922ca628fa87157844e3ee0ca07911cristy
4290897d38090922ca628fa87157844e3ee0ca07911cristy      range=GetQuantumRange(quantum_info->depth);
4300897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->pack == MagickFalse)
4311930c67f6c085d323a9ffa0828fa1132236039becristy        {
4320897d38090922ca628fa87157844e3ee0ca07911cristy          for (x=0; x < (ssize_t) (3*number_pixels-1); x+=2)
4330897d38090922ca628fa87157844e3ee0ca07911cristy          {
4340897d38090922ca628fa87157844e3ee0ca07911cristy            switch (x % 3)
4351930c67f6c085d323a9ffa0828fa1132236039becristy            {
4360897d38090922ca628fa87157844e3ee0ca07911cristy              default:
4370897d38090922ca628fa87157844e3ee0ca07911cristy              case 0:
4381930c67f6c085d323a9ffa0828fa1132236039becristy              {
4390897d38090922ca628fa87157844e3ee0ca07911cristy                pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),
4400897d38090922ca628fa87157844e3ee0ca07911cristy                  range);
4410897d38090922ca628fa87157844e3ee0ca07911cristy                break;
4420897d38090922ca628fa87157844e3ee0ca07911cristy              }
4430897d38090922ca628fa87157844e3ee0ca07911cristy              case 1:
4440897d38090922ca628fa87157844e3ee0ca07911cristy              {
4450897d38090922ca628fa87157844e3ee0ca07911cristy                pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
4460897d38090922ca628fa87157844e3ee0ca07911cristy                  range);
4470897d38090922ca628fa87157844e3ee0ca07911cristy                break;
4480897d38090922ca628fa87157844e3ee0ca07911cristy              }
4490897d38090922ca628fa87157844e3ee0ca07911cristy              case 2:
4500897d38090922ca628fa87157844e3ee0ca07911cristy              {
4510897d38090922ca628fa87157844e3ee0ca07911cristy                pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),
4520897d38090922ca628fa87157844e3ee0ca07911cristy                  range);
4530897d38090922ca628fa87157844e3ee0ca07911cristy                p+=GetPixelChannels(image);
4540897d38090922ca628fa87157844e3ee0ca07911cristy                break;
4551930c67f6c085d323a9ffa0828fa1132236039becristy              }
4561930c67f6c085d323a9ffa0828fa1132236039becristy            }
457271ca22dc4cb635d443b8bbb7b3f6894420b05eccristy            q=PopShortPixel(quantum_info->endian,(unsigned short) (pixel << 4),
458271ca22dc4cb635d443b8bbb7b3f6894420b05eccristy              q);
4590897d38090922ca628fa87157844e3ee0ca07911cristy            switch ((x+1) % 3)
4601930c67f6c085d323a9ffa0828fa1132236039becristy            {
4610897d38090922ca628fa87157844e3ee0ca07911cristy              default:
4620897d38090922ca628fa87157844e3ee0ca07911cristy              case 0:
4631930c67f6c085d323a9ffa0828fa1132236039becristy              {
4640897d38090922ca628fa87157844e3ee0ca07911cristy                pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),
4650897d38090922ca628fa87157844e3ee0ca07911cristy                  range);
4660897d38090922ca628fa87157844e3ee0ca07911cristy                break;
4670897d38090922ca628fa87157844e3ee0ca07911cristy              }
4680897d38090922ca628fa87157844e3ee0ca07911cristy              case 1:
4690897d38090922ca628fa87157844e3ee0ca07911cristy              {
4700897d38090922ca628fa87157844e3ee0ca07911cristy                pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
4710897d38090922ca628fa87157844e3ee0ca07911cristy                  range);
4720897d38090922ca628fa87157844e3ee0ca07911cristy                break;
4730897d38090922ca628fa87157844e3ee0ca07911cristy              }
4740897d38090922ca628fa87157844e3ee0ca07911cristy              case 2:
4750897d38090922ca628fa87157844e3ee0ca07911cristy              {
4760897d38090922ca628fa87157844e3ee0ca07911cristy                pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),
4770897d38090922ca628fa87157844e3ee0ca07911cristy                  range);
4780897d38090922ca628fa87157844e3ee0ca07911cristy                p+=GetPixelChannels(image);
4790897d38090922ca628fa87157844e3ee0ca07911cristy                break;
4801930c67f6c085d323a9ffa0828fa1132236039becristy              }
4811930c67f6c085d323a9ffa0828fa1132236039becristy            }
482271ca22dc4cb635d443b8bbb7b3f6894420b05eccristy            q=PopShortPixel(quantum_info->endian,(unsigned short) (pixel << 4),
483271ca22dc4cb635d443b8bbb7b3f6894420b05eccristy              q);
4841930c67f6c085d323a9ffa0828fa1132236039becristy            q+=quantum_info->pad;
4851930c67f6c085d323a9ffa0828fa1132236039becristy          }
4860897d38090922ca628fa87157844e3ee0ca07911cristy          for (bit=0; bit < (ssize_t) (3*number_pixels % 2); bit++)
4870897d38090922ca628fa87157844e3ee0ca07911cristy          {
4880897d38090922ca628fa87157844e3ee0ca07911cristy            switch ((x+bit) % 3)
4891930c67f6c085d323a9ffa0828fa1132236039becristy            {
4900897d38090922ca628fa87157844e3ee0ca07911cristy              default:
4910897d38090922ca628fa87157844e3ee0ca07911cristy              case 0:
4920897d38090922ca628fa87157844e3ee0ca07911cristy              {
4930897d38090922ca628fa87157844e3ee0ca07911cristy                pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),
4940897d38090922ca628fa87157844e3ee0ca07911cristy                  range);
4950897d38090922ca628fa87157844e3ee0ca07911cristy                break;
4960897d38090922ca628fa87157844e3ee0ca07911cristy              }
4970897d38090922ca628fa87157844e3ee0ca07911cristy              case 1:
4981930c67f6c085d323a9ffa0828fa1132236039becristy              {
4990897d38090922ca628fa87157844e3ee0ca07911cristy                pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
5000897d38090922ca628fa87157844e3ee0ca07911cristy                  range);
5010897d38090922ca628fa87157844e3ee0ca07911cristy                break;
5020897d38090922ca628fa87157844e3ee0ca07911cristy              }
5030897d38090922ca628fa87157844e3ee0ca07911cristy              case 2:
5040897d38090922ca628fa87157844e3ee0ca07911cristy              {
5050897d38090922ca628fa87157844e3ee0ca07911cristy                pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),
5060897d38090922ca628fa87157844e3ee0ca07911cristy                  range);
5070897d38090922ca628fa87157844e3ee0ca07911cristy                p+=GetPixelChannels(image);
5080897d38090922ca628fa87157844e3ee0ca07911cristy                break;
5091930c67f6c085d323a9ffa0828fa1132236039becristy              }
5101930c67f6c085d323a9ffa0828fa1132236039becristy            }
511271ca22dc4cb635d443b8bbb7b3f6894420b05eccristy            q=PopShortPixel(quantum_info->endian,(unsigned short) (pixel << 4),
512271ca22dc4cb635d443b8bbb7b3f6894420b05eccristy              q);
5130897d38090922ca628fa87157844e3ee0ca07911cristy            q+=quantum_info->pad;
5140897d38090922ca628fa87157844e3ee0ca07911cristy          }
5150897d38090922ca628fa87157844e3ee0ca07911cristy          if (bit != 0)
5160897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
5170897d38090922ca628fa87157844e3ee0ca07911cristy          break;
5181930c67f6c085d323a9ffa0828fa1132236039becristy        }
5190897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->quantum == 32UL)
5201930c67f6c085d323a9ffa0828fa1132236039becristy        {
5211930c67f6c085d323a9ffa0828fa1132236039becristy          for (x=0; x < (ssize_t) number_pixels; x++)
5221930c67f6c085d323a9ffa0828fa1132236039becristy          {
5230897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
52432c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopQuantumLongPixel(quantum_info,pixel,q);
5250897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
5260897d38090922ca628fa87157844e3ee0ca07911cristy              range);
52732c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopQuantumLongPixel(quantum_info,pixel,q);
5280897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
52932c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopQuantumLongPixel(quantum_info,pixel,q);
5300897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
5311930c67f6c085d323a9ffa0828fa1132236039becristy            q+=quantum_info->pad;
5321930c67f6c085d323a9ffa0828fa1132236039becristy          }
5331930c67f6c085d323a9ffa0828fa1132236039becristy          break;
5341930c67f6c085d323a9ffa0828fa1132236039becristy        }
5350897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
5360897d38090922ca628fa87157844e3ee0ca07911cristy      {
5370897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
53832c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,pixel,q);
5390897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
54032c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,pixel,q);
5410897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
54232c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,pixel,q);
5430897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
5440897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
5451930c67f6c085d323a9ffa0828fa1132236039becristy      }
5461930c67f6c085d323a9ffa0828fa1132236039becristy      break;
5471930c67f6c085d323a9ffa0828fa1132236039becristy    }
5480897d38090922ca628fa87157844e3ee0ca07911cristy    case 16:
5491930c67f6c085d323a9ffa0828fa1132236039becristy    {
5500897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned short
5510897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
5520897d38090922ca628fa87157844e3ee0ca07911cristy
5530897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
5541930c67f6c085d323a9ffa0828fa1132236039becristy        {
5550897d38090922ca628fa87157844e3ee0ca07911cristy          for (x=0; x < (ssize_t) number_pixels; x++)
5560897d38090922ca628fa87157844e3ee0ca07911cristy          {
5570897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlue(image,p));
55832c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopShortPixel(quantum_info->endian,pixel,q);
5590897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelGreen(image,p));
56032c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopShortPixel(quantum_info->endian,pixel,q);
5610897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelRed(image,p));
56232c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopShortPixel(quantum_info->endian,pixel,q);
5630897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
5640897d38090922ca628fa87157844e3ee0ca07911cristy            q+=quantum_info->pad;
5650897d38090922ca628fa87157844e3ee0ca07911cristy          }
5660897d38090922ca628fa87157844e3ee0ca07911cristy          break;
5671930c67f6c085d323a9ffa0828fa1132236039becristy        }
5680897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
5691930c67f6c085d323a9ffa0828fa1132236039becristy      {
5700897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
57132c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopShortPixel(quantum_info->endian,pixel,q);
5720897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
57332c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopShortPixel(quantum_info->endian,pixel,q);
5740897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToShort(GetPixelRed(image,p));
57532c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopShortPixel(quantum_info->endian,pixel,q);
5760897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
5770897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
5780897d38090922ca628fa87157844e3ee0ca07911cristy      }
5790897d38090922ca628fa87157844e3ee0ca07911cristy      break;
5800897d38090922ca628fa87157844e3ee0ca07911cristy    }
5810897d38090922ca628fa87157844e3ee0ca07911cristy    case 32:
5820897d38090922ca628fa87157844e3ee0ca07911cristy    {
5830897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned int
5840897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
58540ae80f228afbc5b9b7693135723e47bbb088acecristy
5860897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
58740ae80f228afbc5b9b7693135723e47bbb088acecristy        {
58840ae80f228afbc5b9b7693135723e47bbb088acecristy          for (x=0; x < (ssize_t) number_pixels; x++)
58940ae80f228afbc5b9b7693135723e47bbb088acecristy          {
59032c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
59132c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
59232c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
5930897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
59440ae80f228afbc5b9b7693135723e47bbb088acecristy            q+=quantum_info->pad;
59540ae80f228afbc5b9b7693135723e47bbb088acecristy          }
59640ae80f228afbc5b9b7693135723e47bbb088acecristy          break;
59740ae80f228afbc5b9b7693135723e47bbb088acecristy        }
5980897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
5990897d38090922ca628fa87157844e3ee0ca07911cristy      {
6000897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
60132c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopLongPixel(quantum_info->endian,pixel,q);
6020897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
60332c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopLongPixel(quantum_info->endian,pixel,q);
6040897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToLong(GetPixelRed(image,p));
60532c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopLongPixel(quantum_info->endian,pixel,q);
6060897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
6070897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
6080897d38090922ca628fa87157844e3ee0ca07911cristy      }
6090897d38090922ca628fa87157844e3ee0ca07911cristy      break;
6100897d38090922ca628fa87157844e3ee0ca07911cristy    }
6110897d38090922ca628fa87157844e3ee0ca07911cristy    case 64:
6120897d38090922ca628fa87157844e3ee0ca07911cristy    {
6130897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
61440ae80f228afbc5b9b7693135723e47bbb088acecristy        {
61540ae80f228afbc5b9b7693135723e47bbb088acecristy          for (x=0; x < (ssize_t) number_pixels; x++)
61640ae80f228afbc5b9b7693135723e47bbb088acecristy          {
61732c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
61832c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
61932c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
6200897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
62140ae80f228afbc5b9b7693135723e47bbb088acecristy            q+=quantum_info->pad;
62240ae80f228afbc5b9b7693135723e47bbb088acecristy          }
62340ae80f228afbc5b9b7693135723e47bbb088acecristy          break;
62440ae80f228afbc5b9b7693135723e47bbb088acecristy        }
6250897d38090922ca628fa87157844e3ee0ca07911cristy    }
6260897d38090922ca628fa87157844e3ee0ca07911cristy    default:
6270897d38090922ca628fa87157844e3ee0ca07911cristy    {
6280897d38090922ca628fa87157844e3ee0ca07911cristy      range=GetQuantumRange(quantum_info->depth);
6290897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
6300897d38090922ca628fa87157844e3ee0ca07911cristy      {
63132c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
63232c6843b4cfe042747eff85b4a80ec119c77bdc8cristy          range),q);
63332c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
63432c6843b4cfe042747eff85b4a80ec119c77bdc8cristy          range),q);
63532c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
63632c6843b4cfe042747eff85b4a80ec119c77bdc8cristy          range),q);
6370897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
6380897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
6393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
640f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy      break;
6413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
6420897d38090922ca628fa87157844e3ee0ca07911cristy  }
6430897d38090922ca628fa87157844e3ee0ca07911cristy}
6440897d38090922ca628fa87157844e3ee0ca07911cristy
64532c6843b4cfe042747eff85b4a80ec119c77bdc8cristystatic void ExportBGRAQuantum(const Image *image,QuantumInfo *quantum_info,
64605d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  const MagickSizeType number_pixels,const Quantum *magick_restrict p,
64705d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  unsigned char *magick_restrict q,ExceptionInfo *exception)
6480897d38090922ca628fa87157844e3ee0ca07911cristy{
6490897d38090922ca628fa87157844e3ee0ca07911cristy  QuantumAny
6500897d38090922ca628fa87157844e3ee0ca07911cristy    range;
6510897d38090922ca628fa87157844e3ee0ca07911cristy
6520897d38090922ca628fa87157844e3ee0ca07911cristy  register ssize_t
6530897d38090922ca628fa87157844e3ee0ca07911cristy    x;
6540897d38090922ca628fa87157844e3ee0ca07911cristy
655b0de93fdedaac769cb08e15b3ec176d4c9078907cristy  assert(exception != (ExceptionInfo *) NULL);
656e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy  assert(exception->signature == MagickCoreSignature);
6570897d38090922ca628fa87157844e3ee0ca07911cristy  switch (quantum_info->depth)
6580897d38090922ca628fa87157844e3ee0ca07911cristy  {
6590897d38090922ca628fa87157844e3ee0ca07911cristy    case 8:
6603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
6610897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned char
6620897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
6630897d38090922ca628fa87157844e3ee0ca07911cristy
6640897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
66540ae80f228afbc5b9b7693135723e47bbb088acecristy      {
6660897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToChar(GetPixelBlue(image,p));
6670897d38090922ca628fa87157844e3ee0ca07911cristy        q=PopCharPixel(pixel,q);
6680897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
6690897d38090922ca628fa87157844e3ee0ca07911cristy        q=PopCharPixel(pixel,q);
6700897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToChar(GetPixelRed(image,p));
6710897d38090922ca628fa87157844e3ee0ca07911cristy        q=PopCharPixel(pixel,q);
6720897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToChar(GetPixelAlpha(image,p));
6730897d38090922ca628fa87157844e3ee0ca07911cristy        q=PopCharPixel(pixel,q);
6740897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
6750897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
6760897d38090922ca628fa87157844e3ee0ca07911cristy      }
6770897d38090922ca628fa87157844e3ee0ca07911cristy      break;
6780897d38090922ca628fa87157844e3ee0ca07911cristy    }
6790897d38090922ca628fa87157844e3ee0ca07911cristy    case 10:
6800897d38090922ca628fa87157844e3ee0ca07911cristy    {
6810897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned int
6820897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
6830897d38090922ca628fa87157844e3ee0ca07911cristy
6840897d38090922ca628fa87157844e3ee0ca07911cristy      range=GetQuantumRange(quantum_info->depth);
6850897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->pack == MagickFalse)
6863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
6870897d38090922ca628fa87157844e3ee0ca07911cristy          register ssize_t
6880897d38090922ca628fa87157844e3ee0ca07911cristy            i;
6890897d38090922ca628fa87157844e3ee0ca07911cristy
6900897d38090922ca628fa87157844e3ee0ca07911cristy          size_t
6910897d38090922ca628fa87157844e3ee0ca07911cristy            quantum;
6920897d38090922ca628fa87157844e3ee0ca07911cristy
6930897d38090922ca628fa87157844e3ee0ca07911cristy          ssize_t
6940897d38090922ca628fa87157844e3ee0ca07911cristy            n;
6950897d38090922ca628fa87157844e3ee0ca07911cristy
6960897d38090922ca628fa87157844e3ee0ca07911cristy          n=0;
6970897d38090922ca628fa87157844e3ee0ca07911cristy          quantum=0;
6980897d38090922ca628fa87157844e3ee0ca07911cristy          pixel=0;
699f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy          for (x=0; x < (ssize_t) number_pixels; x++)
7003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
7010897d38090922ca628fa87157844e3ee0ca07911cristy            for (i=0; i < 4; i++)
70240ae80f228afbc5b9b7693135723e47bbb088acecristy            {
7030897d38090922ca628fa87157844e3ee0ca07911cristy              switch (i)
704f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy              {
7050897d38090922ca628fa87157844e3ee0ca07911cristy                case 0: quantum=GetPixelRed(image,p); break;
7060897d38090922ca628fa87157844e3ee0ca07911cristy                case 1: quantum=GetPixelGreen(image,p); break;
7070897d38090922ca628fa87157844e3ee0ca07911cristy                case 2: quantum=GetPixelBlue(image,p); break;
7080897d38090922ca628fa87157844e3ee0ca07911cristy                case 3: quantum=GetPixelAlpha(image,p); break;
70940ae80f228afbc5b9b7693135723e47bbb088acecristy              }
7100897d38090922ca628fa87157844e3ee0ca07911cristy              switch (n % 3)
71140ae80f228afbc5b9b7693135723e47bbb088acecristy              {
7120897d38090922ca628fa87157844e3ee0ca07911cristy                case 0:
713f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy                {
7140897d38090922ca628fa87157844e3ee0ca07911cristy                  pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
7150897d38090922ca628fa87157844e3ee0ca07911cristy                    range) << 22);
7160897d38090922ca628fa87157844e3ee0ca07911cristy                  break;
717f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy                }
7180897d38090922ca628fa87157844e3ee0ca07911cristy                case 1:
719f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy                {
7200897d38090922ca628fa87157844e3ee0ca07911cristy                  pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
7210897d38090922ca628fa87157844e3ee0ca07911cristy                    range) << 12);
7220897d38090922ca628fa87157844e3ee0ca07911cristy                  break;
723f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy                }
7240897d38090922ca628fa87157844e3ee0ca07911cristy                case 2:
725f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy                {
7260897d38090922ca628fa87157844e3ee0ca07911cristy                  pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
7270897d38090922ca628fa87157844e3ee0ca07911cristy                    range) << 2);
72832c6843b4cfe042747eff85b4a80ec119c77bdc8cristy                  q=PopLongPixel(quantum_info->endian,pixel,q);
7290897d38090922ca628fa87157844e3ee0ca07911cristy                  pixel=0;
7300897d38090922ca628fa87157844e3ee0ca07911cristy                  break;
731f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy                }
73240ae80f228afbc5b9b7693135723e47bbb088acecristy              }
7330897d38090922ca628fa87157844e3ee0ca07911cristy              n++;
7343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            }
7350897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
7360897d38090922ca628fa87157844e3ee0ca07911cristy            q+=quantum_info->pad;
7370897d38090922ca628fa87157844e3ee0ca07911cristy          }
7380897d38090922ca628fa87157844e3ee0ca07911cristy          break;
7390897d38090922ca628fa87157844e3ee0ca07911cristy        }
7400897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->quantum == 32UL)
7410897d38090922ca628fa87157844e3ee0ca07911cristy        {
742bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy          for (x=0; x < (ssize_t) number_pixels; x++)
7433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
7440897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
74532c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopQuantumLongPixel(quantum_info,pixel,q);
746f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy            pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
747f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy              range);
74832c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopQuantumLongPixel(quantum_info,pixel,q);
7490897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
75032c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopQuantumLongPixel(quantum_info,pixel,q);
7510897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=(unsigned int) ScaleQuantumToAny(GetPixelAlpha(image,p),
752f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy              range);
75332c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopQuantumLongPixel(quantum_info,pixel,q);
7540897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
7553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            q+=quantum_info->pad;
7563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
7573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
7583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
7590897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
7600897d38090922ca628fa87157844e3ee0ca07911cristy      {
7610897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
76232c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,pixel,q);
7630897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
76432c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,pixel,q);
7650897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
76632c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,pixel,q);
7670897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned int) ScaleQuantumToAny(GetPixelAlpha(image,p),range);
76832c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,pixel,q);
7690897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
7700897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
7710897d38090922ca628fa87157844e3ee0ca07911cristy      }
7720897d38090922ca628fa87157844e3ee0ca07911cristy      break;
7730897d38090922ca628fa87157844e3ee0ca07911cristy    }
7740897d38090922ca628fa87157844e3ee0ca07911cristy    case 16:
7750897d38090922ca628fa87157844e3ee0ca07911cristy    {
7760897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned short
7770897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
77840ae80f228afbc5b9b7693135723e47bbb088acecristy
7790897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
7800897d38090922ca628fa87157844e3ee0ca07911cristy        {
781bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy          for (x=0; x < (ssize_t) number_pixels; x++)
7823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
7830897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlue(image,p));
78432c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopShortPixel(quantum_info->endian,pixel,q);
7850897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelGreen(image,p));
78632c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopShortPixel(quantum_info->endian,pixel,q);
7870897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelRed(image,p));
78832c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopShortPixel(quantum_info->endian,pixel,q);
7890897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelAlpha(image,p));
79032c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopShortPixel(quantum_info->endian,pixel,q);
7910897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
7923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            q+=quantum_info->pad;
7933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
7943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
7953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
7960897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
7970897d38090922ca628fa87157844e3ee0ca07911cristy      {
7980897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
79932c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopShortPixel(quantum_info->endian,pixel,q);
8000897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
80132c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopShortPixel(quantum_info->endian,pixel,q);
8020897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToShort(GetPixelRed(image,p));
80332c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopShortPixel(quantum_info->endian,pixel,q);
8040897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
80532c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopShortPixel(quantum_info->endian,pixel,q);
8060897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
8070897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
8080897d38090922ca628fa87157844e3ee0ca07911cristy      }
8090897d38090922ca628fa87157844e3ee0ca07911cristy      break;
8100897d38090922ca628fa87157844e3ee0ca07911cristy    }
8110897d38090922ca628fa87157844e3ee0ca07911cristy    case 32:
8120897d38090922ca628fa87157844e3ee0ca07911cristy    {
8130897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned int
8140897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
815f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy
8160897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
8173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
818bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy          for (x=0; x < (ssize_t) number_pixels; x++)
8193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
8200897d38090922ca628fa87157844e3ee0ca07911cristy            float
8210897d38090922ca628fa87157844e3ee0ca07911cristy              pixel;
8220897d38090922ca628fa87157844e3ee0ca07911cristy
82332c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
82432c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
82532c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
8260897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=(float) GetPixelAlpha(image,p);
82732c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopFloatPixel(quantum_info,pixel,q);
8280897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
8293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            q+=quantum_info->pad;
8303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
8313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
8323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
8330897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
8340897d38090922ca628fa87157844e3ee0ca07911cristy      {
8350897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
83632c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopLongPixel(quantum_info->endian,pixel,q);
8370897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
83832c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopLongPixel(quantum_info->endian,pixel,q);
8390897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToLong(GetPixelRed(image,p));
84032c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopLongPixel(quantum_info->endian,pixel,q);
8410897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
84232c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopLongPixel(quantum_info->endian,pixel,q);
8430897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
8440897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
8453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
8463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      break;
8473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
8480897d38090922ca628fa87157844e3ee0ca07911cristy    case 64:
8493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
8500897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
8513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
8520897d38090922ca628fa87157844e3ee0ca07911cristy          double
8533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            pixel;
8543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
855f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy          for (x=0; x < (ssize_t) number_pixels; x++)
8563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
85732c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
85832c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
85932c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
8600897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=(double) GetPixelAlpha(image,p);
86132c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopDoublePixel(quantum_info,pixel,q);
8620897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
863f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy            q+=quantum_info->pad;
8643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
8653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
8663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
8670897d38090922ca628fa87157844e3ee0ca07911cristy    }
8680897d38090922ca628fa87157844e3ee0ca07911cristy    default:
8690897d38090922ca628fa87157844e3ee0ca07911cristy    {
8700897d38090922ca628fa87157844e3ee0ca07911cristy      range=GetQuantumRange(quantum_info->depth);
8710897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
8720897d38090922ca628fa87157844e3ee0ca07911cristy      {
87332c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
87432c6843b4cfe042747eff85b4a80ec119c77bdc8cristy          range),q);
87532c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
87632c6843b4cfe042747eff85b4a80ec119c77bdc8cristy          range),q);
87732c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
87832c6843b4cfe042747eff85b4a80ec119c77bdc8cristy          range),q);
87932c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
88032c6843b4cfe042747eff85b4a80ec119c77bdc8cristy          range),q);
8810897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
8820897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
8830897d38090922ca628fa87157844e3ee0ca07911cristy      }
8840897d38090922ca628fa87157844e3ee0ca07911cristy      break;
8850897d38090922ca628fa87157844e3ee0ca07911cristy    }
8860897d38090922ca628fa87157844e3ee0ca07911cristy  }
8870897d38090922ca628fa87157844e3ee0ca07911cristy}
888f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy
8893b8b0b8b150e3f9bc338bb2c01af291269987f81dirkstatic void ExportBGROQuantum(const Image *image,QuantumInfo *quantum_info,
89005d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  const MagickSizeType number_pixels,const Quantum *magick_restrict p,
89105d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  unsigned char *magick_restrict q,ExceptionInfo *exception)
8923b8b0b8b150e3f9bc338bb2c01af291269987f81dirk{
8933b8b0b8b150e3f9bc338bb2c01af291269987f81dirk  QuantumAny
8943b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    range;
8953b8b0b8b150e3f9bc338bb2c01af291269987f81dirk
8963b8b0b8b150e3f9bc338bb2c01af291269987f81dirk  register ssize_t
8973b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    x;
8983b8b0b8b150e3f9bc338bb2c01af291269987f81dirk
8993b8b0b8b150e3f9bc338bb2c01af291269987f81dirk  assert(exception != (ExceptionInfo *) NULL);
900e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy  assert(exception->signature == MagickCoreSignature);
9013b8b0b8b150e3f9bc338bb2c01af291269987f81dirk  switch (quantum_info->depth)
9023b8b0b8b150e3f9bc338bb2c01af291269987f81dirk  {
9033b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    case 8:
9043b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    {
9053b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      register unsigned char
9063b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel;
9073b8b0b8b150e3f9bc338bb2c01af291269987f81dirk
9083b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      for (x=0; x < (ssize_t) number_pixels; x++)
9093b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      {
9103b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=ScaleQuantumToChar(GetPixelBlue(image,p));
9113b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopCharPixel(pixel,q);
9123b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
9133b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopCharPixel(pixel,q);
9143b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=ScaleQuantumToChar(GetPixelRed(image,p));
9153b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopCharPixel(pixel,q);
9163b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=ScaleQuantumToChar(GetPixelOpacity(image,p));
9173b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopCharPixel(pixel,q);
9183b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        p+=GetPixelChannels(image);
9193b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q+=quantum_info->pad;
9203b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      }
9213b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      break;
9223b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    }
9233b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    case 10:
9243b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    {
9253b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      register unsigned int
9263b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel;
9273b8b0b8b150e3f9bc338bb2c01af291269987f81dirk
9283b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      range=GetQuantumRange(quantum_info->depth);
9293b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      if (quantum_info->pack == MagickFalse)
9303b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        {
9313b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          register ssize_t
9323b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            i;
9333b8b0b8b150e3f9bc338bb2c01af291269987f81dirk
9343b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          size_t
9353b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            quantum;
9363b8b0b8b150e3f9bc338bb2c01af291269987f81dirk
9373b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          ssize_t
9383b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            n;
9393b8b0b8b150e3f9bc338bb2c01af291269987f81dirk
9403b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          n=0;
9413b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          quantum=0;
9423b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          pixel=0;
9433b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          for (x=0; x < (ssize_t) number_pixels; x++)
9443b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          {
9453b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            for (i=0; i < 4; i++)
9463b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            {
9473b8b0b8b150e3f9bc338bb2c01af291269987f81dirk              switch (i)
9483b8b0b8b150e3f9bc338bb2c01af291269987f81dirk              {
9493b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                case 0: quantum=GetPixelRed(image,p); break;
9503b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                case 1: quantum=GetPixelGreen(image,p); break;
9513b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                case 2: quantum=GetPixelBlue(image,p); break;
9523b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                case 3: quantum=GetPixelOpacity(image,p); break;
9533b8b0b8b150e3f9bc338bb2c01af291269987f81dirk              }
9543b8b0b8b150e3f9bc338bb2c01af291269987f81dirk              switch (n % 3)
9553b8b0b8b150e3f9bc338bb2c01af291269987f81dirk              {
9563b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                case 0:
9573b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                {
9583b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                  pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
9593b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                    range) << 22);
9603b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                  break;
9613b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                }
9623b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                case 1:
9633b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                {
9643b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                  pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
9653b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                    range) << 12);
9663b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                  break;
9673b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                }
9683b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                case 2:
9693b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                {
9703b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                  pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
9713b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                    range) << 2);
9723b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                  q=PopLongPixel(quantum_info->endian,pixel,q);
9733b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                  pixel=0;
9743b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                  break;
9753b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                }
9763b8b0b8b150e3f9bc338bb2c01af291269987f81dirk              }
9773b8b0b8b150e3f9bc338bb2c01af291269987f81dirk              n++;
9783b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            }
9793b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            p+=GetPixelChannels(image);
9803b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q+=quantum_info->pad;
9813b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          }
9823b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          break;
9833b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        }
9843b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      if (quantum_info->quantum == 32UL)
9853b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        {
9863b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          for (x=0; x < (ssize_t) number_pixels; x++)
9873b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          {
9883b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
9893b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopQuantumLongPixel(quantum_info,pixel,q);
9903b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
9913b8b0b8b150e3f9bc338bb2c01af291269987f81dirk              range);
9923b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopQuantumLongPixel(quantum_info,pixel,q);
9933b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
9943b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopQuantumLongPixel(quantum_info,pixel,q);
9953b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            pixel=(unsigned int) ScaleQuantumToAny(GetPixelOpacity(image,p),
9963b8b0b8b150e3f9bc338bb2c01af291269987f81dirk              range);
9973b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopQuantumLongPixel(quantum_info,pixel,q);
9983b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            p+=GetPixelChannels(image);
9993b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q+=quantum_info->pad;
10003b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          }
10013b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          break;
10023b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        }
10033b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      for (x=0; x < (ssize_t) number_pixels; x++)
10043b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      {
10053b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
10063b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopQuantumPixel(quantum_info,pixel,q);
10073b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
10083b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopQuantumPixel(quantum_info,pixel,q);
10093b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
10103b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopQuantumPixel(quantum_info,pixel,q);
10113b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=(unsigned int) ScaleQuantumToAny(GetPixelOpacity(image,p),range);
10123b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopQuantumPixel(quantum_info,pixel,q);
10133b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        p+=GetPixelChannels(image);
10143b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q+=quantum_info->pad;
10153b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      }
10163b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      break;
10173b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    }
10183b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    case 16:
10193b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    {
10203b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      register unsigned short
10213b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel;
10223b8b0b8b150e3f9bc338bb2c01af291269987f81dirk
10233b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      if (quantum_info->format == FloatingPointQuantumFormat)
10243b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        {
10253b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          for (x=0; x < (ssize_t) number_pixels; x++)
10263b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          {
10273b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlue(image,p));
10283b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopShortPixel(quantum_info->endian,pixel,q);
10293b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelGreen(image,p));
10303b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopShortPixel(quantum_info->endian,pixel,q);
10313b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelRed(image,p));
10323b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopShortPixel(quantum_info->endian,pixel,q);
10333b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelOpacity(image,p));
10343b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopShortPixel(quantum_info->endian,pixel,q);
10353b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            p+=GetPixelChannels(image);
10363b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q+=quantum_info->pad;
10373b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          }
10383b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          break;
10393b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        }
10403b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      for (x=0; x < (ssize_t) number_pixels; x++)
10413b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      {
10423b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
10433b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopShortPixel(quantum_info->endian,pixel,q);
10443b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
10453b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopShortPixel(quantum_info->endian,pixel,q);
10463b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=ScaleQuantumToShort(GetPixelRed(image,p));
10473b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopShortPixel(quantum_info->endian,pixel,q);
10483b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=ScaleQuantumToShort(GetPixelOpacity(image,p));
10493b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopShortPixel(quantum_info->endian,pixel,q);
10503b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        p+=GetPixelChannels(image);
10513b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q+=quantum_info->pad;
10523b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      }
10533b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      break;
10543b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    }
10553b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    case 32:
10563b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    {
10573b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      register unsigned int
10583b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel;
10593b8b0b8b150e3f9bc338bb2c01af291269987f81dirk
10603b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      if (quantum_info->format == FloatingPointQuantumFormat)
10613b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        {
10623b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          for (x=0; x < (ssize_t) number_pixels; x++)
10633b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          {
10643b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            float
10653b8b0b8b150e3f9bc338bb2c01af291269987f81dirk              pixel;
10663b8b0b8b150e3f9bc338bb2c01af291269987f81dirk
10673b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
10683b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
10693b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
10703b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            pixel=(float) GetPixelOpacity(image,p);
10713b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopFloatPixel(quantum_info,pixel,q);
10723b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            p+=GetPixelChannels(image);
10733b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q+=quantum_info->pad;
10743b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          }
10753b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          break;
10763b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        }
10773b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      for (x=0; x < (ssize_t) number_pixels; x++)
10783b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      {
10793b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
10803b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopLongPixel(quantum_info->endian,pixel,q);
10813b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
10823b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopLongPixel(quantum_info->endian,pixel,q);
10833b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=ScaleQuantumToLong(GetPixelRed(image,p));
10843b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopLongPixel(quantum_info->endian,pixel,q);
10853b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=ScaleQuantumToLong(GetPixelOpacity(image,p));
10863b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopLongPixel(quantum_info->endian,pixel,q);
10873b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        p+=GetPixelChannels(image);
10883b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q+=quantum_info->pad;
10893b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      }
10903b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      break;
10913b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    }
10923b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    case 64:
10933b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    {
10943b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      if (quantum_info->format == FloatingPointQuantumFormat)
10953b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        {
10963b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          double
10973b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            pixel;
10983b8b0b8b150e3f9bc338bb2c01af291269987f81dirk
10993b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          for (x=0; x < (ssize_t) number_pixels; x++)
11003b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          {
11013b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
11023b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
11033b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
11043b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            pixel=(double) GetPixelOpacity(image,p);
11053b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopDoublePixel(quantum_info,pixel,q);
11063b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            p+=GetPixelChannels(image);
11073b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q+=quantum_info->pad;
11083b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          }
11093b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          break;
11103b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        }
11113b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    }
11123b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    default:
11133b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    {
11143b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      range=GetQuantumRange(quantum_info->depth);
11153b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      for (x=0; x < (ssize_t) number_pixels; x++)
11163b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      {
11173b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
11183b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          range),q);
11193b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
11203b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          range),q);
11213b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
11223b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          range),q);
11233b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelOpacity(image,p),
11243b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          range),q);
11253b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        p+=GetPixelChannels(image);
11263b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q+=quantum_info->pad;
11273b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      }
11283b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      break;
11293b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    }
11303b8b0b8b150e3f9bc338bb2c01af291269987f81dirk  }
11313b8b0b8b150e3f9bc338bb2c01af291269987f81dirk}
11323b8b0b8b150e3f9bc338bb2c01af291269987f81dirk
113332c6843b4cfe042747eff85b4a80ec119c77bdc8cristystatic void ExportBlackQuantum(const Image *image,QuantumInfo *quantum_info,
113405d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  const MagickSizeType number_pixels,const Quantum *magick_restrict p,
113505d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  unsigned char *magick_restrict q,ExceptionInfo *exception)
11360897d38090922ca628fa87157844e3ee0ca07911cristy{
11370897d38090922ca628fa87157844e3ee0ca07911cristy  QuantumAny
11380897d38090922ca628fa87157844e3ee0ca07911cristy    range;
11393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
11400897d38090922ca628fa87157844e3ee0ca07911cristy  register ssize_t
11410897d38090922ca628fa87157844e3ee0ca07911cristy    x;
11420897d38090922ca628fa87157844e3ee0ca07911cristy
11430897d38090922ca628fa87157844e3ee0ca07911cristy  if (image->colorspace != CMYKColorspace)
11440897d38090922ca628fa87157844e3ee0ca07911cristy    {
11450897d38090922ca628fa87157844e3ee0ca07911cristy      (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1146efe601ce9ea5ad34ad0e8ad6e61d9be9b148b2a3cristy        "ColorSeparatedImageRequired","`%s'",image->filename);
11470897d38090922ca628fa87157844e3ee0ca07911cristy      return;
11480897d38090922ca628fa87157844e3ee0ca07911cristy    }
11490897d38090922ca628fa87157844e3ee0ca07911cristy  switch (quantum_info->depth)
11500897d38090922ca628fa87157844e3ee0ca07911cristy  {
11510897d38090922ca628fa87157844e3ee0ca07911cristy    case 8:
11520897d38090922ca628fa87157844e3ee0ca07911cristy    {
11530897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned char
11540897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
11550897d38090922ca628fa87157844e3ee0ca07911cristy
11560897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
11570897d38090922ca628fa87157844e3ee0ca07911cristy      {
11580897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToChar(GetPixelBlack(image,p));
11590897d38090922ca628fa87157844e3ee0ca07911cristy        q=PopCharPixel(pixel,q);
11600897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
11610897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
11620897d38090922ca628fa87157844e3ee0ca07911cristy      }
11630897d38090922ca628fa87157844e3ee0ca07911cristy      break;
11640897d38090922ca628fa87157844e3ee0ca07911cristy    }
11650897d38090922ca628fa87157844e3ee0ca07911cristy    case 16:
11660897d38090922ca628fa87157844e3ee0ca07911cristy    {
11670897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned short
11680897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
11690897d38090922ca628fa87157844e3ee0ca07911cristy
11700897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
11710897d38090922ca628fa87157844e3ee0ca07911cristy        {
1172bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy          for (x=0; x < (ssize_t) number_pixels; x++)
11733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
11740897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlack(image,p));
117532c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopShortPixel(quantum_info->endian,pixel,q);
11760897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
11773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            q+=quantum_info->pad;
11783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
11793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
11803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
11810897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
11820897d38090922ca628fa87157844e3ee0ca07911cristy      {
11830897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToShort(GetPixelBlack(image,p));
118432c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopShortPixel(quantum_info->endian,pixel,q);
11850897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
11860897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
11870897d38090922ca628fa87157844e3ee0ca07911cristy      }
11880897d38090922ca628fa87157844e3ee0ca07911cristy      break;
11890897d38090922ca628fa87157844e3ee0ca07911cristy    }
11900897d38090922ca628fa87157844e3ee0ca07911cristy    case 32:
11910897d38090922ca628fa87157844e3ee0ca07911cristy    {
11920897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned int
11930897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
119440ae80f228afbc5b9b7693135723e47bbb088acecristy
11950897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
11960897d38090922ca628fa87157844e3ee0ca07911cristy        {
1197bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy          for (x=0; x < (ssize_t) number_pixels; x++)
11983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
119932c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopFloatPixel(quantum_info,(float) GetPixelBlack(image,p),q);
12000897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
12013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            q+=quantum_info->pad;
12023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
12033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
12043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
12050897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
12060897d38090922ca628fa87157844e3ee0ca07911cristy      {
12070897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToLong(GetPixelBlack(image,p));
120832c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopLongPixel(quantum_info->endian,pixel,q);
12090897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
12100897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
12110897d38090922ca628fa87157844e3ee0ca07911cristy      }
12120897d38090922ca628fa87157844e3ee0ca07911cristy      break;
12130897d38090922ca628fa87157844e3ee0ca07911cristy    }
12140897d38090922ca628fa87157844e3ee0ca07911cristy    case 64:
12150897d38090922ca628fa87157844e3ee0ca07911cristy    {
12160897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
12173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
1218bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy          for (x=0; x < (ssize_t) number_pixels; x++)
12193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
122032c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopDoublePixel(quantum_info,(double) GetPixelBlack(image,p),q);
12210897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
12223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            q+=quantum_info->pad;
12233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
12243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
12253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
12260897d38090922ca628fa87157844e3ee0ca07911cristy    }
12270897d38090922ca628fa87157844e3ee0ca07911cristy    default:
12280897d38090922ca628fa87157844e3ee0ca07911cristy    {
12290897d38090922ca628fa87157844e3ee0ca07911cristy      range=GetQuantumRange(quantum_info->depth);
12300897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
12310897d38090922ca628fa87157844e3ee0ca07911cristy      {
123232c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlack(image,p),
123332c6843b4cfe042747eff85b4a80ec119c77bdc8cristy          range),q);
12340897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
12350897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
12360897d38090922ca628fa87157844e3ee0ca07911cristy      }
12370897d38090922ca628fa87157844e3ee0ca07911cristy      break;
12380897d38090922ca628fa87157844e3ee0ca07911cristy    }
12390897d38090922ca628fa87157844e3ee0ca07911cristy  }
12400897d38090922ca628fa87157844e3ee0ca07911cristy}
1241f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy
124232c6843b4cfe042747eff85b4a80ec119c77bdc8cristystatic void ExportBlueQuantum(const Image *image,QuantumInfo *quantum_info,
124305d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  const MagickSizeType number_pixels,const Quantum *magick_restrict p,
124405d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  unsigned char *magick_restrict q,ExceptionInfo *exception)
12450897d38090922ca628fa87157844e3ee0ca07911cristy{
12460897d38090922ca628fa87157844e3ee0ca07911cristy  QuantumAny
12470897d38090922ca628fa87157844e3ee0ca07911cristy    range;
12480897d38090922ca628fa87157844e3ee0ca07911cristy
12490897d38090922ca628fa87157844e3ee0ca07911cristy  register ssize_t
12500897d38090922ca628fa87157844e3ee0ca07911cristy    x;
12510897d38090922ca628fa87157844e3ee0ca07911cristy
1252b0de93fdedaac769cb08e15b3ec176d4c9078907cristy  assert(exception != (ExceptionInfo *) NULL);
1253e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy  assert(exception->signature == MagickCoreSignature);
12540897d38090922ca628fa87157844e3ee0ca07911cristy  switch (quantum_info->depth)
12550897d38090922ca628fa87157844e3ee0ca07911cristy  {
12560897d38090922ca628fa87157844e3ee0ca07911cristy    case 8:
12570897d38090922ca628fa87157844e3ee0ca07911cristy    {
12580897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned char
12590897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
12600897d38090922ca628fa87157844e3ee0ca07911cristy
12610897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
12620897d38090922ca628fa87157844e3ee0ca07911cristy      {
12630897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToChar(GetPixelBlue(image,p));
12640897d38090922ca628fa87157844e3ee0ca07911cristy        q=PopCharPixel(pixel,q);
12650897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
12660897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
12670897d38090922ca628fa87157844e3ee0ca07911cristy      }
12680897d38090922ca628fa87157844e3ee0ca07911cristy      break;
12690897d38090922ca628fa87157844e3ee0ca07911cristy    }
12700897d38090922ca628fa87157844e3ee0ca07911cristy    case 16:
12710897d38090922ca628fa87157844e3ee0ca07911cristy    {
12720897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned short
12730897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
12740897d38090922ca628fa87157844e3ee0ca07911cristy
12750897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
12763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
1277bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy          for (x=0; x < (ssize_t) number_pixels; x++)
12783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
12790897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlue(image,p));
128032c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopShortPixel(quantum_info->endian,pixel,q);
12810897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
12823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            q+=quantum_info->pad;
12833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
12843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
12853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
12860897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
12870897d38090922ca628fa87157844e3ee0ca07911cristy      {
12880897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
128932c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopShortPixel(quantum_info->endian,pixel,q);
12900897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
12910897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
12923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
12933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      break;
12943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
12950897d38090922ca628fa87157844e3ee0ca07911cristy    case 32:
1296a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy    {
12970897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned int
12980897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
129940ae80f228afbc5b9b7693135723e47bbb088acecristy
13000897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
1301a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy        {
13020897d38090922ca628fa87157844e3ee0ca07911cristy          for (x=0; x < (ssize_t) number_pixels; x++)
1303a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy          {
130432c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
13050897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
13060897d38090922ca628fa87157844e3ee0ca07911cristy            q+=quantum_info->pad;
1307a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy          }
1308a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy          break;
1309a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy        }
13100897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
13110897d38090922ca628fa87157844e3ee0ca07911cristy      {
13120897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
131332c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopLongPixel(quantum_info->endian,pixel,q);
13140897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
13150897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
13160897d38090922ca628fa87157844e3ee0ca07911cristy      }
13170897d38090922ca628fa87157844e3ee0ca07911cristy      break;
13180897d38090922ca628fa87157844e3ee0ca07911cristy    }
13190897d38090922ca628fa87157844e3ee0ca07911cristy    case 64:
13200897d38090922ca628fa87157844e3ee0ca07911cristy    {
13210897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
1322a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy        {
1323a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy          for (x=0; x < (ssize_t) number_pixels; x++)
1324a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy          {
132532c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
13260897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
1327a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy            q+=quantum_info->pad;
1328a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy          }
1329a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy          break;
1330a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy        }
13310897d38090922ca628fa87157844e3ee0ca07911cristy    }
13320897d38090922ca628fa87157844e3ee0ca07911cristy    default:
13330897d38090922ca628fa87157844e3ee0ca07911cristy    {
13340897d38090922ca628fa87157844e3ee0ca07911cristy      range=GetQuantumRange(quantum_info->depth);
13350897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
13360897d38090922ca628fa87157844e3ee0ca07911cristy      {
133732c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
133832c6843b4cfe042747eff85b4a80ec119c77bdc8cristy          range),q);
13390897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
13400897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
13410897d38090922ca628fa87157844e3ee0ca07911cristy      }
13420897d38090922ca628fa87157844e3ee0ca07911cristy      break;
13430897d38090922ca628fa87157844e3ee0ca07911cristy    }
13440897d38090922ca628fa87157844e3ee0ca07911cristy  }
13450897d38090922ca628fa87157844e3ee0ca07911cristy}
13460897d38090922ca628fa87157844e3ee0ca07911cristy
134732c6843b4cfe042747eff85b4a80ec119c77bdc8cristystatic void ExportCbYCrYQuantum(const Image *image,QuantumInfo *quantum_info,
134805d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  const MagickSizeType number_pixels,const Quantum *magick_restrict p,
134905d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  unsigned char *magick_restrict q,ExceptionInfo *exception)
13500897d38090922ca628fa87157844e3ee0ca07911cristy{
13510897d38090922ca628fa87157844e3ee0ca07911cristy  Quantum
13520897d38090922ca628fa87157844e3ee0ca07911cristy    cbcr[4];
13530897d38090922ca628fa87157844e3ee0ca07911cristy
13540897d38090922ca628fa87157844e3ee0ca07911cristy  register ssize_t
13550897d38090922ca628fa87157844e3ee0ca07911cristy    i,
13560897d38090922ca628fa87157844e3ee0ca07911cristy    x;
13570897d38090922ca628fa87157844e3ee0ca07911cristy
13580897d38090922ca628fa87157844e3ee0ca07911cristy  register unsigned int
13590897d38090922ca628fa87157844e3ee0ca07911cristy    pixel;
13600897d38090922ca628fa87157844e3ee0ca07911cristy
13610897d38090922ca628fa87157844e3ee0ca07911cristy  size_t
13620897d38090922ca628fa87157844e3ee0ca07911cristy    quantum;
13630897d38090922ca628fa87157844e3ee0ca07911cristy
13640897d38090922ca628fa87157844e3ee0ca07911cristy  ssize_t
13650897d38090922ca628fa87157844e3ee0ca07911cristy    n;
13660897d38090922ca628fa87157844e3ee0ca07911cristy
1367b0de93fdedaac769cb08e15b3ec176d4c9078907cristy  assert(exception != (ExceptionInfo *) NULL);
1368e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy  assert(exception->signature == MagickCoreSignature);
13690897d38090922ca628fa87157844e3ee0ca07911cristy  n=0;
13700897d38090922ca628fa87157844e3ee0ca07911cristy  quantum=0;
13710897d38090922ca628fa87157844e3ee0ca07911cristy  switch (quantum_info->depth)
13720897d38090922ca628fa87157844e3ee0ca07911cristy  {
13730897d38090922ca628fa87157844e3ee0ca07911cristy    case 10:
13740897d38090922ca628fa87157844e3ee0ca07911cristy    {
13750897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->pack == MagickFalse)
1376f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy        {
13770897d38090922ca628fa87157844e3ee0ca07911cristy          for (x=0; x < (ssize_t) number_pixels; x+=2)
13780897d38090922ca628fa87157844e3ee0ca07911cristy          {
13790897d38090922ca628fa87157844e3ee0ca07911cristy            for (i=0; i < 4; i++)
1380a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy            {
13810897d38090922ca628fa87157844e3ee0ca07911cristy              switch (n % 3)
1382a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy              {
13830897d38090922ca628fa87157844e3ee0ca07911cristy                case 0:
1384a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy                {
13850897d38090922ca628fa87157844e3ee0ca07911cristy                  quantum=GetPixelRed(image,p);
13860897d38090922ca628fa87157844e3ee0ca07911cristy                  break;
1387a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy                }
13880897d38090922ca628fa87157844e3ee0ca07911cristy                case 1:
13890897d38090922ca628fa87157844e3ee0ca07911cristy                {
13900897d38090922ca628fa87157844e3ee0ca07911cristy                  quantum=GetPixelGreen(image,p);
13910897d38090922ca628fa87157844e3ee0ca07911cristy                  break;
13920897d38090922ca628fa87157844e3ee0ca07911cristy                }
13930897d38090922ca628fa87157844e3ee0ca07911cristy                case 2:
13940897d38090922ca628fa87157844e3ee0ca07911cristy                {
13950897d38090922ca628fa87157844e3ee0ca07911cristy                  quantum=GetPixelBlue(image,p);
13960897d38090922ca628fa87157844e3ee0ca07911cristy                  break;
13970897d38090922ca628fa87157844e3ee0ca07911cristy                }
13980897d38090922ca628fa87157844e3ee0ca07911cristy              }
13990897d38090922ca628fa87157844e3ee0ca07911cristy              cbcr[i]=(Quantum) quantum;
14000897d38090922ca628fa87157844e3ee0ca07911cristy              n++;
1401a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy            }
14020897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=(unsigned int) ((size_t) (cbcr[1]) << 22 | (size_t)
14030897d38090922ca628fa87157844e3ee0ca07911cristy              (cbcr[0]) << 12 | (size_t) (cbcr[2]) << 2);
140432c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopLongPixel(quantum_info->endian,pixel,q);
14050897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
14060897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=(unsigned int) ((size_t) (cbcr[3]) << 22 | (size_t)
14070897d38090922ca628fa87157844e3ee0ca07911cristy              (cbcr[0]) << 12 | (size_t) (cbcr[2]) << 2);
140832c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopLongPixel(quantum_info->endian,pixel,q);
14090897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
1410a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy            q+=quantum_info->pad;
1411a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy          }
1412a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy          break;
1413a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy        }
14140897d38090922ca628fa87157844e3ee0ca07911cristy      break;
14150897d38090922ca628fa87157844e3ee0ca07911cristy    }
14160897d38090922ca628fa87157844e3ee0ca07911cristy    default:
14170897d38090922ca628fa87157844e3ee0ca07911cristy    {
14180897d38090922ca628fa87157844e3ee0ca07911cristy      QuantumAny
14190897d38090922ca628fa87157844e3ee0ca07911cristy        range;
142040ae80f228afbc5b9b7693135723e47bbb088acecristy
14210897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x+=2)
14220897d38090922ca628fa87157844e3ee0ca07911cristy      {
14230897d38090922ca628fa87157844e3ee0ca07911cristy        for (i=0; i < 4; i++)
14240897d38090922ca628fa87157844e3ee0ca07911cristy        {
14250897d38090922ca628fa87157844e3ee0ca07911cristy          switch (n % 3)
14260897d38090922ca628fa87157844e3ee0ca07911cristy          {
14270897d38090922ca628fa87157844e3ee0ca07911cristy            case 0:
1428a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy            {
14290897d38090922ca628fa87157844e3ee0ca07911cristy              quantum=GetPixelRed(image,p);
1430a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy              break;
1431a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy            }
14320897d38090922ca628fa87157844e3ee0ca07911cristy            case 1:
1433a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy            {
14340897d38090922ca628fa87157844e3ee0ca07911cristy              quantum=GetPixelGreen(image,p);
1435a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy              break;
1436a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy            }
14370897d38090922ca628fa87157844e3ee0ca07911cristy            case 2:
1438a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy            {
14390897d38090922ca628fa87157844e3ee0ca07911cristy              quantum=GetPixelBlue(image,p);
1440a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy              break;
1441a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy            }
1442a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy          }
14430897d38090922ca628fa87157844e3ee0ca07911cristy          cbcr[i]=(Quantum) quantum;
14440897d38090922ca628fa87157844e3ee0ca07911cristy          n++;
14450897d38090922ca628fa87157844e3ee0ca07911cristy        }
14460897d38090922ca628fa87157844e3ee0ca07911cristy        range=GetQuantumRange(quantum_info->depth);
144732c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(cbcr[1],range),q);
144832c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(cbcr[0],range),q);
144932c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(cbcr[2],range),q);
14500897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
145132c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(cbcr[3],range),q);
145232c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(cbcr[0],range),q);
145332c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(cbcr[2],range),q);
14540897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
14550897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
14560897d38090922ca628fa87157844e3ee0ca07911cristy      }
14570897d38090922ca628fa87157844e3ee0ca07911cristy      break;
14580897d38090922ca628fa87157844e3ee0ca07911cristy    }
14590897d38090922ca628fa87157844e3ee0ca07911cristy  }
14600897d38090922ca628fa87157844e3ee0ca07911cristy}
1461a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy
146232c6843b4cfe042747eff85b4a80ec119c77bdc8cristystatic void ExportCMYKQuantum(const Image *image,QuantumInfo *quantum_info,
146305d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  const MagickSizeType number_pixels,const Quantum *magick_restrict p,
146405d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  unsigned char *magick_restrict q,ExceptionInfo *exception)
14650897d38090922ca628fa87157844e3ee0ca07911cristy{
14660897d38090922ca628fa87157844e3ee0ca07911cristy  register ssize_t
14670897d38090922ca628fa87157844e3ee0ca07911cristy    x;
14680897d38090922ca628fa87157844e3ee0ca07911cristy
14690897d38090922ca628fa87157844e3ee0ca07911cristy  if (image->colorspace != CMYKColorspace)
14700897d38090922ca628fa87157844e3ee0ca07911cristy    {
14710897d38090922ca628fa87157844e3ee0ca07911cristy      (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1472efe601ce9ea5ad34ad0e8ad6e61d9be9b148b2a3cristy        "ColorSeparatedImageRequired","`%s'",image->filename);
14730897d38090922ca628fa87157844e3ee0ca07911cristy      return;
14740897d38090922ca628fa87157844e3ee0ca07911cristy    }
14750897d38090922ca628fa87157844e3ee0ca07911cristy  switch (quantum_info->depth)
14760897d38090922ca628fa87157844e3ee0ca07911cristy  {
14770897d38090922ca628fa87157844e3ee0ca07911cristy    case 8:
14780897d38090922ca628fa87157844e3ee0ca07911cristy    {
14790897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned char
14800897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
14810897d38090922ca628fa87157844e3ee0ca07911cristy
14820897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
14830897d38090922ca628fa87157844e3ee0ca07911cristy      {
14840897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToChar(GetPixelRed(image,p));
14850897d38090922ca628fa87157844e3ee0ca07911cristy        q=PopCharPixel(pixel,q);
14860897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
14870897d38090922ca628fa87157844e3ee0ca07911cristy        q=PopCharPixel(pixel,q);
14880897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToChar(GetPixelBlue(image,p));
14890897d38090922ca628fa87157844e3ee0ca07911cristy        q=PopCharPixel(pixel,q);
14900897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToChar(GetPixelBlack(image,p));
14910897d38090922ca628fa87157844e3ee0ca07911cristy        q=PopCharPixel(pixel,q);
14920897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
14930897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
14940897d38090922ca628fa87157844e3ee0ca07911cristy      }
14950897d38090922ca628fa87157844e3ee0ca07911cristy      break;
14960897d38090922ca628fa87157844e3ee0ca07911cristy    }
14970897d38090922ca628fa87157844e3ee0ca07911cristy    case 16:
14980897d38090922ca628fa87157844e3ee0ca07911cristy    {
14990897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned short
15000897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
15010897d38090922ca628fa87157844e3ee0ca07911cristy
15020897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
1503f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy        {
1504a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy          for (x=0; x < (ssize_t) number_pixels; x++)
1505a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy          {
15060897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelRed(image,p));
150732c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopShortPixel(quantum_info->endian,pixel,q);
15080897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelGreen(image,p));
150932c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopShortPixel(quantum_info->endian,pixel,q);
15100897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlue(image,p));
151132c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopShortPixel(quantum_info->endian,pixel,q);
15120897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlack(image,p));
151332c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopShortPixel(quantum_info->endian,pixel,q);
15140897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
1515a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy            q+=quantum_info->pad;
1516a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy          }
1517a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy          break;
1518a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy        }
15190897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
15200897d38090922ca628fa87157844e3ee0ca07911cristy      {
15210897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToShort(GetPixelRed(image,p));
152232c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopShortPixel(quantum_info->endian,pixel,q);
15230897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
152432c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopShortPixel(quantum_info->endian,pixel,q);
15250897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
152632c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopShortPixel(quantum_info->endian,pixel,q);
15270897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToShort(GetPixelBlack(image,p));
152832c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopShortPixel(quantum_info->endian,pixel,q);
15290897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
15300897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
1531f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy      }
1532f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy      break;
1533f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy    }
15340897d38090922ca628fa87157844e3ee0ca07911cristy    case 32:
1535f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy    {
15360897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned int
15370897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
1538a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy
15390897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
1540f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy        {
15410897d38090922ca628fa87157844e3ee0ca07911cristy          for (x=0; x < (ssize_t) number_pixels; x++)
1542a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy          {
154332c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
154432c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
154532c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
154632c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopFloatPixel(quantum_info,(float) GetPixelBlack(image,p),q);
15470897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
15480897d38090922ca628fa87157844e3ee0ca07911cristy            q+=quantum_info->pad;
1549a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy          }
1550a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy          break;
1551a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy        }
15520897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
15530897d38090922ca628fa87157844e3ee0ca07911cristy      {
15540897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToLong(GetPixelRed(image,p));
155532c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopLongPixel(quantum_info->endian,pixel,q);
15560897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
155732c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopLongPixel(quantum_info->endian,pixel,q);
15580897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
155932c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopLongPixel(quantum_info->endian,pixel,q);
15600897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToLong(GetPixelBlack(image,p));
156132c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopLongPixel(quantum_info->endian,pixel,q);
15620897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
15630897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
15640897d38090922ca628fa87157844e3ee0ca07911cristy      }
15650897d38090922ca628fa87157844e3ee0ca07911cristy      break;
15660897d38090922ca628fa87157844e3ee0ca07911cristy    }
15670897d38090922ca628fa87157844e3ee0ca07911cristy    case 64:
15680897d38090922ca628fa87157844e3ee0ca07911cristy    {
15690897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
1570a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy        {
1571a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy          for (x=0; x < (ssize_t) number_pixels; x++)
1572a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy          {
157332c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
157432c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
157532c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
157632c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopDoublePixel(quantum_info,(double) GetPixelBlack(image,p),q);
15770897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
1578a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy            q+=quantum_info->pad;
1579a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy          }
1580a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy          break;
1581a6a96a1ae6daf81a5bd88597e730b2e43fc3ea2ecristy        }
15820897d38090922ca628fa87157844e3ee0ca07911cristy    }
15830897d38090922ca628fa87157844e3ee0ca07911cristy    default:
15840897d38090922ca628fa87157844e3ee0ca07911cristy    {
15850897d38090922ca628fa87157844e3ee0ca07911cristy      QuantumAny
15860897d38090922ca628fa87157844e3ee0ca07911cristy        range;
158740ae80f228afbc5b9b7693135723e47bbb088acecristy
15880897d38090922ca628fa87157844e3ee0ca07911cristy      range=GetQuantumRange(quantum_info->depth);
15890897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
15900897d38090922ca628fa87157844e3ee0ca07911cristy      {
159132c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
159232c6843b4cfe042747eff85b4a80ec119c77bdc8cristy          range),q);
159332c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
159432c6843b4cfe042747eff85b4a80ec119c77bdc8cristy          range),q);
159532c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
159632c6843b4cfe042747eff85b4a80ec119c77bdc8cristy          range),q);
159732c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlack(image,p),
159832c6843b4cfe042747eff85b4a80ec119c77bdc8cristy          range),q);
15990897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
16000897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
16010897d38090922ca628fa87157844e3ee0ca07911cristy      }
16020897d38090922ca628fa87157844e3ee0ca07911cristy      break;
16030897d38090922ca628fa87157844e3ee0ca07911cristy    }
16040897d38090922ca628fa87157844e3ee0ca07911cristy  }
16050897d38090922ca628fa87157844e3ee0ca07911cristy}
16060897d38090922ca628fa87157844e3ee0ca07911cristy
160732c6843b4cfe042747eff85b4a80ec119c77bdc8cristystatic void ExportCMYKAQuantum(const Image *image,QuantumInfo *quantum_info,
160805d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  const MagickSizeType number_pixels,const Quantum *magick_restrict p,
160905d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  unsigned char *magick_restrict q,ExceptionInfo *exception)
16100897d38090922ca628fa87157844e3ee0ca07911cristy{
16110897d38090922ca628fa87157844e3ee0ca07911cristy  register ssize_t
16120897d38090922ca628fa87157844e3ee0ca07911cristy    x;
16130897d38090922ca628fa87157844e3ee0ca07911cristy
16140897d38090922ca628fa87157844e3ee0ca07911cristy  if (image->colorspace != CMYKColorspace)
16150897d38090922ca628fa87157844e3ee0ca07911cristy    {
16160897d38090922ca628fa87157844e3ee0ca07911cristy      (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1617efe601ce9ea5ad34ad0e8ad6e61d9be9b148b2a3cristy        "ColorSeparatedImageRequired","`%s'",image->filename);
16180897d38090922ca628fa87157844e3ee0ca07911cristy      return;
16190897d38090922ca628fa87157844e3ee0ca07911cristy    }
16200897d38090922ca628fa87157844e3ee0ca07911cristy  switch (quantum_info->depth)
16210897d38090922ca628fa87157844e3ee0ca07911cristy  {
16220897d38090922ca628fa87157844e3ee0ca07911cristy    case 8:
16230897d38090922ca628fa87157844e3ee0ca07911cristy    {
16240897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned char
16250897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
16260897d38090922ca628fa87157844e3ee0ca07911cristy
16270897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
16280897d38090922ca628fa87157844e3ee0ca07911cristy      {
16290897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToChar(GetPixelRed(image,p));
16300897d38090922ca628fa87157844e3ee0ca07911cristy        q=PopCharPixel(pixel,q);
16310897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
16320897d38090922ca628fa87157844e3ee0ca07911cristy        q=PopCharPixel(pixel,q);
16330897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToChar(GetPixelBlue(image,p));
16340897d38090922ca628fa87157844e3ee0ca07911cristy        q=PopCharPixel(pixel,q);
16350897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToChar(GetPixelBlack(image,p));
16360897d38090922ca628fa87157844e3ee0ca07911cristy        q=PopCharPixel(pixel,q);
16370897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToChar(GetPixelAlpha(image,p));
16380897d38090922ca628fa87157844e3ee0ca07911cristy        q=PopCharPixel(pixel,q);
16390897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
16400897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
16410897d38090922ca628fa87157844e3ee0ca07911cristy      }
16420897d38090922ca628fa87157844e3ee0ca07911cristy      break;
16430897d38090922ca628fa87157844e3ee0ca07911cristy    }
16440897d38090922ca628fa87157844e3ee0ca07911cristy    case 16:
16450897d38090922ca628fa87157844e3ee0ca07911cristy    {
16460897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned short
16470897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
16480897d38090922ca628fa87157844e3ee0ca07911cristy
16490897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
16500897d38090922ca628fa87157844e3ee0ca07911cristy        {
1651f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy          for (x=0; x < (ssize_t) number_pixels; x++)
1652f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy          {
16530897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelRed(image,p));
165432c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopShortPixel(quantum_info->endian,pixel,q);
16550897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelGreen(image,p));
165632c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopShortPixel(quantum_info->endian,pixel,q);
16570897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlue(image,p));
165832c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopShortPixel(quantum_info->endian,pixel,q);
16590897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlack(image,p));
166032c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopShortPixel(quantum_info->endian,pixel,q);
16610897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelAlpha(image,p));
166232c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopShortPixel(quantum_info->endian,pixel,q);
16630897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
1664f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy            q+=quantum_info->pad;
1665f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy          }
16663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
16673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
16680897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
16690897d38090922ca628fa87157844e3ee0ca07911cristy      {
16700897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToShort(GetPixelRed(image,p));
167132c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopShortPixel(quantum_info->endian,pixel,q);
16720897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
167332c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopShortPixel(quantum_info->endian,pixel,q);
16740897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
167532c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopShortPixel(quantum_info->endian,pixel,q);
16760897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToShort(GetPixelBlack(image,p));
167732c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopShortPixel(quantum_info->endian,pixel,q);
16780897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
167932c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopShortPixel(quantum_info->endian,pixel,q);
16800897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
16810897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
16820897d38090922ca628fa87157844e3ee0ca07911cristy      }
16830897d38090922ca628fa87157844e3ee0ca07911cristy      break;
16840897d38090922ca628fa87157844e3ee0ca07911cristy    }
16850897d38090922ca628fa87157844e3ee0ca07911cristy    case 32:
16860897d38090922ca628fa87157844e3ee0ca07911cristy    {
16870897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned int
16880897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
168940ae80f228afbc5b9b7693135723e47bbb088acecristy
16900897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
169140ae80f228afbc5b9b7693135723e47bbb088acecristy        {
1692bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy          for (x=0; x < (ssize_t) number_pixels; x++)
16933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
16940897d38090922ca628fa87157844e3ee0ca07911cristy            float
16950897d38090922ca628fa87157844e3ee0ca07911cristy              pixel;
16960897d38090922ca628fa87157844e3ee0ca07911cristy
169732c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
169832c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
169932c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
170032c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopFloatPixel(quantum_info,(float) GetPixelBlack(image,p),q);
17010897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=(float) (GetPixelAlpha(image,p));
170232c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopFloatPixel(quantum_info,pixel,q);
17030897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
17043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            q+=quantum_info->pad;
17053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
17063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
17073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
17080897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
17090897d38090922ca628fa87157844e3ee0ca07911cristy      {
17100897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToLong(GetPixelRed(image,p));
171132c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopLongPixel(quantum_info->endian,pixel,q);
17120897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
171332c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopLongPixel(quantum_info->endian,pixel,q);
17140897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
171532c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopLongPixel(quantum_info->endian,pixel,q);
17160897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToLong(GetPixelBlack(image,p));
171732c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopLongPixel(quantum_info->endian,pixel,q);
17180897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
171932c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopLongPixel(quantum_info->endian,pixel,q);
17200897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
17210897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
1722f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy      }
1723f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy      break;
1724f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy    }
17250897d38090922ca628fa87157844e3ee0ca07911cristy    case 64:
1726f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy    {
17270897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
17283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
17290897d38090922ca628fa87157844e3ee0ca07911cristy          double
173040ae80f228afbc5b9b7693135723e47bbb088acecristy            pixel;
173140ae80f228afbc5b9b7693135723e47bbb088acecristy
173240ae80f228afbc5b9b7693135723e47bbb088acecristy          for (x=0; x < (ssize_t) number_pixels; x++)
17333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
173432c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
173532c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
173632c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
173732c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopDoublePixel(quantum_info,(double) GetPixelBlack(image,p),q);
17380897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=(double) (GetPixelAlpha(image,p));
173932c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopDoublePixel(quantum_info,pixel,q);
17400897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
174140ae80f228afbc5b9b7693135723e47bbb088acecristy            q+=quantum_info->pad;
17423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
174340ae80f228afbc5b9b7693135723e47bbb088acecristy          break;
17443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
17450897d38090922ca628fa87157844e3ee0ca07911cristy    }
17460897d38090922ca628fa87157844e3ee0ca07911cristy    default:
17470897d38090922ca628fa87157844e3ee0ca07911cristy    {
17480897d38090922ca628fa87157844e3ee0ca07911cristy      QuantumAny
17490897d38090922ca628fa87157844e3ee0ca07911cristy        range;
17503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
17510897d38090922ca628fa87157844e3ee0ca07911cristy      range=GetQuantumRange(quantum_info->depth);
17520897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
17530897d38090922ca628fa87157844e3ee0ca07911cristy      {
175432c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
175532c6843b4cfe042747eff85b4a80ec119c77bdc8cristy          range),q);
175632c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
175732c6843b4cfe042747eff85b4a80ec119c77bdc8cristy          range),q);
175832c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
175932c6843b4cfe042747eff85b4a80ec119c77bdc8cristy          range),q);
176032c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlack(image,p),
176132c6843b4cfe042747eff85b4a80ec119c77bdc8cristy          range),q);
176232c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
176332c6843b4cfe042747eff85b4a80ec119c77bdc8cristy          range),q);
17640897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
17650897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
17660897d38090922ca628fa87157844e3ee0ca07911cristy      }
17670897d38090922ca628fa87157844e3ee0ca07911cristy      break;
17680897d38090922ca628fa87157844e3ee0ca07911cristy    }
17690897d38090922ca628fa87157844e3ee0ca07911cristy  }
17700897d38090922ca628fa87157844e3ee0ca07911cristy}
17710897d38090922ca628fa87157844e3ee0ca07911cristy
17723b8b0b8b150e3f9bc338bb2c01af291269987f81dirkstatic void ExportCMYKOQuantum(const Image *image,QuantumInfo *quantum_info,
177305d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  const MagickSizeType number_pixels,const Quantum *magick_restrict p,
177405d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  unsigned char *magick_restrict q,ExceptionInfo *exception)
17750897d38090922ca628fa87157844e3ee0ca07911cristy{
17760897d38090922ca628fa87157844e3ee0ca07911cristy  register ssize_t
17770897d38090922ca628fa87157844e3ee0ca07911cristy    x;
17780897d38090922ca628fa87157844e3ee0ca07911cristy
17793b8b0b8b150e3f9bc338bb2c01af291269987f81dirk  if (image->colorspace != CMYKColorspace)
17803b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    {
17813b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
17823b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        "ColorSeparatedImageRequired","`%s'",image->filename);
17833b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      return;
17843b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    }
17850897d38090922ca628fa87157844e3ee0ca07911cristy  switch (quantum_info->depth)
17860897d38090922ca628fa87157844e3ee0ca07911cristy  {
17873b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    case 8:
17880897d38090922ca628fa87157844e3ee0ca07911cristy    {
17890897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned char
17903b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel;
17913b8b0b8b150e3f9bc338bb2c01af291269987f81dirk
17923b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      for (x=0; x < (ssize_t) number_pixels; x++)
17933b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      {
17943b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=ScaleQuantumToChar(GetPixelRed(image,p));
17953b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopCharPixel(pixel,q);
17963b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
17973b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopCharPixel(pixel,q);
17983b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=ScaleQuantumToChar(GetPixelBlue(image,p));
17993b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopCharPixel(pixel,q);
18003b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=ScaleQuantumToChar(GetPixelBlack(image,p));
18013b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopCharPixel(pixel,q);
18023b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=ScaleQuantumToChar(GetPixelOpacity(image,p));
18033b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopCharPixel(pixel,q);
18043b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        p+=GetPixelChannels(image);
18053b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q+=quantum_info->pad;
18063b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      }
18073b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      break;
18083b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    }
18093b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    case 16:
18103b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    {
18113b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      register unsigned short
18123b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel;
18133b8b0b8b150e3f9bc338bb2c01af291269987f81dirk
18143b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      if (quantum_info->format == FloatingPointQuantumFormat)
18153b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        {
18163b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          for (x=0; x < (ssize_t) number_pixels; x++)
18173b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          {
18183b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelRed(image,p));
18193b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopShortPixel(quantum_info->endian,pixel,q);
18203b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelGreen(image,p));
18213b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopShortPixel(quantum_info->endian,pixel,q);
18223b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlue(image,p));
18233b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopShortPixel(quantum_info->endian,pixel,q);
18243b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlack(image,p));
18253b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopShortPixel(quantum_info->endian,pixel,q);
18263b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelOpacity(image,p));
18273b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopShortPixel(quantum_info->endian,pixel,q);
18283b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            p+=GetPixelChannels(image);
18293b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q+=quantum_info->pad;
18303b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          }
18313b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          break;
18323b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        }
18333b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      for (x=0; x < (ssize_t) number_pixels; x++)
18343b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      {
18353b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=ScaleQuantumToShort(GetPixelRed(image,p));
18363b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopShortPixel(quantum_info->endian,pixel,q);
18373b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
18383b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopShortPixel(quantum_info->endian,pixel,q);
18393b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
18403b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopShortPixel(quantum_info->endian,pixel,q);
18413b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=ScaleQuantumToShort(GetPixelBlack(image,p));
18423b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopShortPixel(quantum_info->endian,pixel,q);
18433b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=ScaleQuantumToShort(GetPixelOpacity(image,p));
18443b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopShortPixel(quantum_info->endian,pixel,q);
18453b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        p+=GetPixelChannels(image);
18463b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q+=quantum_info->pad;
18473b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      }
18483b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      break;
18493b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    }
18503b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    case 32:
18513b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    {
18523b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      register unsigned int
18533b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel;
18543b8b0b8b150e3f9bc338bb2c01af291269987f81dirk
18553b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      if (quantum_info->format == FloatingPointQuantumFormat)
18563b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        {
18573b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          for (x=0; x < (ssize_t) number_pixels; x++)
18583b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          {
18593b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            float
18603b8b0b8b150e3f9bc338bb2c01af291269987f81dirk              pixel;
18613b8b0b8b150e3f9bc338bb2c01af291269987f81dirk
18623b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
18633b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
18643b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
18653b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopFloatPixel(quantum_info,(float) GetPixelBlack(image,p),q);
18663b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            pixel=(float) (GetPixelOpacity(image,p));
18673b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopFloatPixel(quantum_info,pixel,q);
18683b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            p+=GetPixelChannels(image);
18693b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q+=quantum_info->pad;
18703b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          }
18713b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          break;
18723b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        }
18733b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      for (x=0; x < (ssize_t) number_pixels; x++)
18743b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      {
18753b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=ScaleQuantumToLong(GetPixelRed(image,p));
18763b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopLongPixel(quantum_info->endian,pixel,q);
18773b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
18783b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopLongPixel(quantum_info->endian,pixel,q);
18793b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
18803b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopLongPixel(quantum_info->endian,pixel,q);
18813b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=ScaleQuantumToLong(GetPixelBlack(image,p));
18823b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopLongPixel(quantum_info->endian,pixel,q);
18833b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=ScaleQuantumToLong(GetPixelOpacity(image,p));
18843b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopLongPixel(quantum_info->endian,pixel,q);
18853b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        p+=GetPixelChannels(image);
18863b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q+=quantum_info->pad;
18873b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      }
18883b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      break;
18893b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    }
18903b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    case 64:
18913b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    {
18923b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      if (quantum_info->format == FloatingPointQuantumFormat)
18933b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        {
18943b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          double
18953b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            pixel;
18963b8b0b8b150e3f9bc338bb2c01af291269987f81dirk
18973b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          for (x=0; x < (ssize_t) number_pixels; x++)
18983b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          {
18993b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
19003b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
19013b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
19023b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopDoublePixel(quantum_info,(double) GetPixelBlack(image,p),q);
19033b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            pixel=(double) (GetPixelOpacity(image,p));
19043b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopDoublePixel(quantum_info,pixel,q);
19053b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            p+=GetPixelChannels(image);
19063b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q+=quantum_info->pad;
19073b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          }
19083b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          break;
19093b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        }
19103b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    }
19113b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    default:
19123b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    {
19133b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      QuantumAny
19143b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        range;
19153b8b0b8b150e3f9bc338bb2c01af291269987f81dirk
19163b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      range=GetQuantumRange(quantum_info->depth);
19173b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      for (x=0; x < (ssize_t) number_pixels; x++)
19183b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      {
19193b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
19203b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          range),q);
19213b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
19223b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          range),q);
19233b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
19243b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          range),q);
19253b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlack(image,p),
19263b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          range),q);
19273b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelOpacity(image,p),
19283b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          range),q);
19293b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        p+=GetPixelChannels(image);
19303b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q+=quantum_info->pad;
19313b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      }
19323b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      break;
19333b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    }
19343b8b0b8b150e3f9bc338bb2c01af291269987f81dirk  }
19353b8b0b8b150e3f9bc338bb2c01af291269987f81dirk}
19363b8b0b8b150e3f9bc338bb2c01af291269987f81dirk
19373b8b0b8b150e3f9bc338bb2c01af291269987f81dirkstatic void ExportGrayQuantum(const Image *image,QuantumInfo *quantum_info,
193805d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  const MagickSizeType number_pixels,const Quantum *magick_restrict p,
193905d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  unsigned char *magick_restrict q,ExceptionInfo *exception)
19403b8b0b8b150e3f9bc338bb2c01af291269987f81dirk{
19413b8b0b8b150e3f9bc338bb2c01af291269987f81dirk  QuantumAny
19423b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    range;
19433b8b0b8b150e3f9bc338bb2c01af291269987f81dirk
19443b8b0b8b150e3f9bc338bb2c01af291269987f81dirk  register ssize_t
19453b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    x;
19463b8b0b8b150e3f9bc338bb2c01af291269987f81dirk
19473b8b0b8b150e3f9bc338bb2c01af291269987f81dirk  assert(exception != (ExceptionInfo *) NULL);
1948e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy  assert(exception->signature == MagickCoreSignature);
19493b8b0b8b150e3f9bc338bb2c01af291269987f81dirk  switch (quantum_info->depth)
19503b8b0b8b150e3f9bc338bb2c01af291269987f81dirk  {
19513b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    case 1:
19523b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    {
19533b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      register double
19543b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        threshold;
19553b8b0b8b150e3f9bc338bb2c01af291269987f81dirk
19563b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      register unsigned char
19573b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        black,
19583b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        white;
19590897d38090922ca628fa87157844e3ee0ca07911cristy
19600897d38090922ca628fa87157844e3ee0ca07911cristy      ssize_t
19610897d38090922ca628fa87157844e3ee0ca07911cristy        bit;
19620897d38090922ca628fa87157844e3ee0ca07911cristy
19630897d38090922ca628fa87157844e3ee0ca07911cristy      black=0x00;
19640897d38090922ca628fa87157844e3ee0ca07911cristy      white=0x01;
19650897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->min_is_white != MagickFalse)
19660897d38090922ca628fa87157844e3ee0ca07911cristy        {
19670897d38090922ca628fa87157844e3ee0ca07911cristy          black=0x01;
19680897d38090922ca628fa87157844e3ee0ca07911cristy          white=0x00;
19690897d38090922ca628fa87157844e3ee0ca07911cristy        }
1970f13c594b1d9509e479fd845c3b8a5bb1351c32eacristy      threshold=QuantumRange/2.0;
19710897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=((ssize_t) number_pixels-7); x > 0; x-=8)
19720897d38090922ca628fa87157844e3ee0ca07911cristy      {
19730897d38090922ca628fa87157844e3ee0ca07911cristy        *q='\0';
1974029bea2354b2003061b954121e582d9dcb4f7641cristy        *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 7;
19750897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
1976029bea2354b2003061b954121e582d9dcb4f7641cristy        *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 6;
19770897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
1978029bea2354b2003061b954121e582d9dcb4f7641cristy        *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 5;
19790897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
1980029bea2354b2003061b954121e582d9dcb4f7641cristy        *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 4;
19810897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
1982029bea2354b2003061b954121e582d9dcb4f7641cristy        *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 3;
19830897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
1984029bea2354b2003061b954121e582d9dcb4f7641cristy        *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 2;
19850897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
1986029bea2354b2003061b954121e582d9dcb4f7641cristy        *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 1;
19870897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
1988029bea2354b2003061b954121e582d9dcb4f7641cristy        *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 0;
19890897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
19900897d38090922ca628fa87157844e3ee0ca07911cristy        q++;
19910897d38090922ca628fa87157844e3ee0ca07911cristy      }
19920897d38090922ca628fa87157844e3ee0ca07911cristy      if ((number_pixels % 8) != 0)
19930897d38090922ca628fa87157844e3ee0ca07911cristy        {
19940897d38090922ca628fa87157844e3ee0ca07911cristy          *q='\0';
19950897d38090922ca628fa87157844e3ee0ca07911cristy          for (bit=7; bit >= (ssize_t) (8-(number_pixels % 8)); bit--)
199640ae80f228afbc5b9b7693135723e47bbb088acecristy          {
1997029bea2354b2003061b954121e582d9dcb4f7641cristy            *q|=(GetPixelLuma(image,p) < threshold ? black : white) << bit;
19980897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
199940ae80f228afbc5b9b7693135723e47bbb088acecristy          }
20000897d38090922ca628fa87157844e3ee0ca07911cristy          q++;
20010897d38090922ca628fa87157844e3ee0ca07911cristy        }
20020897d38090922ca628fa87157844e3ee0ca07911cristy      break;
20030897d38090922ca628fa87157844e3ee0ca07911cristy    }
20040897d38090922ca628fa87157844e3ee0ca07911cristy    case 4:
20050897d38090922ca628fa87157844e3ee0ca07911cristy    {
20060897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned char
20070897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
20080897d38090922ca628fa87157844e3ee0ca07911cristy
20090897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) (number_pixels-1) ; x+=2)
20100897d38090922ca628fa87157844e3ee0ca07911cristy      {
2011029bea2354b2003061b954121e582d9dcb4f7641cristy        pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
20120897d38090922ca628fa87157844e3ee0ca07911cristy        *q=(((pixel >> 4) & 0xf) << 4);
20130897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
2014029bea2354b2003061b954121e582d9dcb4f7641cristy        pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
20150897d38090922ca628fa87157844e3ee0ca07911cristy        *q|=pixel >> 4;
20160897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
20170897d38090922ca628fa87157844e3ee0ca07911cristy        q++;
20180897d38090922ca628fa87157844e3ee0ca07911cristy      }
20190897d38090922ca628fa87157844e3ee0ca07911cristy      if ((number_pixels % 2) != 0)
20200897d38090922ca628fa87157844e3ee0ca07911cristy        {
2021029bea2354b2003061b954121e582d9dcb4f7641cristy          pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
20220897d38090922ca628fa87157844e3ee0ca07911cristy          *q=(((pixel >> 4) & 0xf) << 4);
20230897d38090922ca628fa87157844e3ee0ca07911cristy          p+=GetPixelChannels(image);
20240897d38090922ca628fa87157844e3ee0ca07911cristy          q++;
202540ae80f228afbc5b9b7693135723e47bbb088acecristy        }
20260897d38090922ca628fa87157844e3ee0ca07911cristy      break;
20270897d38090922ca628fa87157844e3ee0ca07911cristy    }
20280897d38090922ca628fa87157844e3ee0ca07911cristy    case 8:
20290897d38090922ca628fa87157844e3ee0ca07911cristy    {
20300897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned char
20310897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
20320897d38090922ca628fa87157844e3ee0ca07911cristy
20330897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
20340897d38090922ca628fa87157844e3ee0ca07911cristy      {
2035029bea2354b2003061b954121e582d9dcb4f7641cristy        pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
20360897d38090922ca628fa87157844e3ee0ca07911cristy        q=PopCharPixel(pixel,q);
20370897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
20380897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
20390897d38090922ca628fa87157844e3ee0ca07911cristy      }
20400897d38090922ca628fa87157844e3ee0ca07911cristy      break;
20410897d38090922ca628fa87157844e3ee0ca07911cristy    }
20420897d38090922ca628fa87157844e3ee0ca07911cristy    case 10:
20430897d38090922ca628fa87157844e3ee0ca07911cristy    {
20440897d38090922ca628fa87157844e3ee0ca07911cristy      range=GetQuantumRange(quantum_info->depth);
20450897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->pack == MagickFalse)
20463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
2047f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy          register unsigned int
20483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            pixel;
20493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
20500897d38090922ca628fa87157844e3ee0ca07911cristy          for (x=0; x < (ssize_t) (number_pixels-2); x+=3)
20513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
2052f13c594b1d9509e479fd845c3b8a5bb1351c32eacristy            pixel=(unsigned int) (ScaleQuantumToAny(ClampToQuantum(
2053029bea2354b2003061b954121e582d9dcb4f7641cristy              GetPixelLuma(image,p+2*GetPixelChannels(image))),range) << 22 |
2054029bea2354b2003061b954121e582d9dcb4f7641cristy              ScaleQuantumToAny(ClampToQuantum(GetPixelLuma(image,p+
2055029bea2354b2003061b954121e582d9dcb4f7641cristy              GetPixelChannels(image))),range) << 12 | ScaleQuantumToAny(
2056029bea2354b2003061b954121e582d9dcb4f7641cristy              ClampToQuantum(GetPixelLuma(image,p)),range) << 2);
205732c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopLongPixel(quantum_info->endian,pixel,q);
20580897d38090922ca628fa87157844e3ee0ca07911cristy            p+=3*GetPixelChannels(image);
20593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            q+=quantum_info->pad;
20603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
20610897d38090922ca628fa87157844e3ee0ca07911cristy          if (x < (ssize_t) number_pixels)
2062f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy            {
20630897d38090922ca628fa87157844e3ee0ca07911cristy              pixel=0U;
20640897d38090922ca628fa87157844e3ee0ca07911cristy              if (x++ < (ssize_t) (number_pixels-1))
2065029bea2354b2003061b954121e582d9dcb4f7641cristy                pixel|=ScaleQuantumToAny(ClampToQuantum(GetPixelLuma(image,p+
2066029bea2354b2003061b954121e582d9dcb4f7641cristy                  GetPixelChannels(image))),range) << 12;
20670897d38090922ca628fa87157844e3ee0ca07911cristy              if (x++ < (ssize_t) number_pixels)
2068029bea2354b2003061b954121e582d9dcb4f7641cristy                pixel|=ScaleQuantumToAny(ClampToQuantum(GetPixelLuma(image,p)),
2069029bea2354b2003061b954121e582d9dcb4f7641cristy                  range) << 2;
207032c6843b4cfe042747eff85b4a80ec119c77bdc8cristy              q=PopLongPixel(quantum_info->endian,pixel,q);
2071f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy            }
20720897d38090922ca628fa87157844e3ee0ca07911cristy          break;
207340ae80f228afbc5b9b7693135723e47bbb088acecristy        }
20740897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
20750897d38090922ca628fa87157844e3ee0ca07911cristy      {
2076f13c594b1d9509e479fd845c3b8a5bb1351c32eacristy        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(ClampToQuantum(
2077029bea2354b2003061b954121e582d9dcb4f7641cristy          GetPixelLuma(image,p)),range),q);
20780897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
20790897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
20800897d38090922ca628fa87157844e3ee0ca07911cristy      }
20810897d38090922ca628fa87157844e3ee0ca07911cristy      break;
20820897d38090922ca628fa87157844e3ee0ca07911cristy    }
20830897d38090922ca628fa87157844e3ee0ca07911cristy    case 12:
20840897d38090922ca628fa87157844e3ee0ca07911cristy    {
20850897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned short
20860897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
20870897d38090922ca628fa87157844e3ee0ca07911cristy
20880897d38090922ca628fa87157844e3ee0ca07911cristy      range=GetQuantumRange(quantum_info->depth);
20890897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->pack == MagickFalse)
209040ae80f228afbc5b9b7693135723e47bbb088acecristy        {
209140ae80f228afbc5b9b7693135723e47bbb088acecristy          for (x=0; x < (ssize_t) number_pixels; x++)
209240ae80f228afbc5b9b7693135723e47bbb088acecristy          {
2093029bea2354b2003061b954121e582d9dcb4f7641cristy            pixel=ScaleQuantumToShort(ClampToQuantum(GetPixelLuma(image,p)));
2094271ca22dc4cb635d443b8bbb7b3f6894420b05eccristy            q=PopShortPixel(quantum_info->endian,(unsigned short) (pixel >> 4),
2095271ca22dc4cb635d443b8bbb7b3f6894420b05eccristy              q);
20960897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
209740ae80f228afbc5b9b7693135723e47bbb088acecristy            q+=quantum_info->pad;
209840ae80f228afbc5b9b7693135723e47bbb088acecristy          }
20993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
21003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
21010897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
21020897d38090922ca628fa87157844e3ee0ca07911cristy      {
2103f13c594b1d9509e479fd845c3b8a5bb1351c32eacristy        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(ClampToQuantum(
2104029bea2354b2003061b954121e582d9dcb4f7641cristy          GetPixelLuma(image,p)),range),q);
21050897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
21060897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
2107f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy      }
2108f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy      break;
2109f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy    }
21100897d38090922ca628fa87157844e3ee0ca07911cristy    case 16:
2111f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy    {
21120897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned short
21130897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
211440ae80f228afbc5b9b7693135723e47bbb088acecristy
21150897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
21160897d38090922ca628fa87157844e3ee0ca07911cristy        {
2117bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy          for (x=0; x < (ssize_t) number_pixels; x++)
21183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
2119029bea2354b2003061b954121e582d9dcb4f7641cristy            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelLuma(image,p));
212032c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopShortPixel(quantum_info->endian,pixel,q);
21210897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
21223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            q+=quantum_info->pad;
21233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
21243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
21253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
21260897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
21270897d38090922ca628fa87157844e3ee0ca07911cristy      {
2128029bea2354b2003061b954121e582d9dcb4f7641cristy        pixel=ScaleQuantumToShort(ClampToQuantum(GetPixelLuma(image,p)));
212932c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopShortPixel(quantum_info->endian,pixel,q);
21300897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
21310897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
21320897d38090922ca628fa87157844e3ee0ca07911cristy      }
21330897d38090922ca628fa87157844e3ee0ca07911cristy      break;
21340897d38090922ca628fa87157844e3ee0ca07911cristy    }
21350897d38090922ca628fa87157844e3ee0ca07911cristy    case 32:
21360897d38090922ca628fa87157844e3ee0ca07911cristy    {
21370897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned int
21380897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
213940ae80f228afbc5b9b7693135723e47bbb088acecristy
21400897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
21410897d38090922ca628fa87157844e3ee0ca07911cristy        {
2142bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy          for (x=0; x < (ssize_t) number_pixels; x++)
21433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
21440897d38090922ca628fa87157844e3ee0ca07911cristy            float
21450897d38090922ca628fa87157844e3ee0ca07911cristy              pixel;
21460897d38090922ca628fa87157844e3ee0ca07911cristy
2147029bea2354b2003061b954121e582d9dcb4f7641cristy            pixel=(float) GetPixelLuma(image,p);
214832c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopFloatPixel(quantum_info,pixel,q);
21490897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
21503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            q+=quantum_info->pad;
21513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
21523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
21533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
21540897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
21550897d38090922ca628fa87157844e3ee0ca07911cristy      {
2156029bea2354b2003061b954121e582d9dcb4f7641cristy        pixel=ScaleQuantumToLong(ClampToQuantum(GetPixelLuma(image,p)));
215732c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopLongPixel(quantum_info->endian,pixel,q);
21580897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
21590897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
21600897d38090922ca628fa87157844e3ee0ca07911cristy      }
21610897d38090922ca628fa87157844e3ee0ca07911cristy      break;
21620897d38090922ca628fa87157844e3ee0ca07911cristy    }
21630897d38090922ca628fa87157844e3ee0ca07911cristy    case 64:
21640897d38090922ca628fa87157844e3ee0ca07911cristy    {
21650897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
21663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
2167bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy          for (x=0; x < (ssize_t) number_pixels; x++)
21683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
21690897d38090922ca628fa87157844e3ee0ca07911cristy            double
21700897d38090922ca628fa87157844e3ee0ca07911cristy              pixel;
21710897d38090922ca628fa87157844e3ee0ca07911cristy
2172029bea2354b2003061b954121e582d9dcb4f7641cristy            pixel=GetPixelLuma(image,p);
217332c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopDoublePixel(quantum_info,pixel,q);
21740897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
21753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            q+=quantum_info->pad;
21763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
21773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
21783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
21790897d38090922ca628fa87157844e3ee0ca07911cristy    }
21800897d38090922ca628fa87157844e3ee0ca07911cristy    default:
21810897d38090922ca628fa87157844e3ee0ca07911cristy    {
21820897d38090922ca628fa87157844e3ee0ca07911cristy      range=GetQuantumRange(quantum_info->depth);
21830897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
21840897d38090922ca628fa87157844e3ee0ca07911cristy      {
2185f13c594b1d9509e479fd845c3b8a5bb1351c32eacristy        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(ClampToQuantum(
2186029bea2354b2003061b954121e582d9dcb4f7641cristy          GetPixelLuma(image,p)),range),q);
21870897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
21880897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
21890897d38090922ca628fa87157844e3ee0ca07911cristy      }
21900897d38090922ca628fa87157844e3ee0ca07911cristy      break;
21910897d38090922ca628fa87157844e3ee0ca07911cristy    }
21920897d38090922ca628fa87157844e3ee0ca07911cristy  }
21930897d38090922ca628fa87157844e3ee0ca07911cristy}
21940897d38090922ca628fa87157844e3ee0ca07911cristy
219532c6843b4cfe042747eff85b4a80ec119c77bdc8cristystatic void ExportGrayAlphaQuantum(const Image *image,QuantumInfo *quantum_info,
219605d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  const MagickSizeType number_pixels,const Quantum *magick_restrict p,
219705d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  unsigned char *magick_restrict q,ExceptionInfo *exception)
21980897d38090922ca628fa87157844e3ee0ca07911cristy{
21990897d38090922ca628fa87157844e3ee0ca07911cristy  QuantumAny
22000897d38090922ca628fa87157844e3ee0ca07911cristy    range;
22010897d38090922ca628fa87157844e3ee0ca07911cristy
22020897d38090922ca628fa87157844e3ee0ca07911cristy  register ssize_t
22030897d38090922ca628fa87157844e3ee0ca07911cristy    x;
22040897d38090922ca628fa87157844e3ee0ca07911cristy
2205b0de93fdedaac769cb08e15b3ec176d4c9078907cristy  assert(exception != (ExceptionInfo *) NULL);
2206e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy  assert(exception->signature == MagickCoreSignature);
22070897d38090922ca628fa87157844e3ee0ca07911cristy  switch (quantum_info->depth)
22080897d38090922ca628fa87157844e3ee0ca07911cristy  {
22090897d38090922ca628fa87157844e3ee0ca07911cristy    case 1:
22100897d38090922ca628fa87157844e3ee0ca07911cristy    {
2211f13c594b1d9509e479fd845c3b8a5bb1351c32eacristy      register double
22120897d38090922ca628fa87157844e3ee0ca07911cristy        threshold;
22130897d38090922ca628fa87157844e3ee0ca07911cristy
22140897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned char
22150897d38090922ca628fa87157844e3ee0ca07911cristy        black,
22160897d38090922ca628fa87157844e3ee0ca07911cristy        pixel,
22170897d38090922ca628fa87157844e3ee0ca07911cristy        white;
22180897d38090922ca628fa87157844e3ee0ca07911cristy
22190897d38090922ca628fa87157844e3ee0ca07911cristy      ssize_t
22200897d38090922ca628fa87157844e3ee0ca07911cristy        bit;
22210897d38090922ca628fa87157844e3ee0ca07911cristy
22220897d38090922ca628fa87157844e3ee0ca07911cristy      black=0x00;
22230897d38090922ca628fa87157844e3ee0ca07911cristy      white=0x01;
22240897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->min_is_white == MagickFalse)
22253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
22260897d38090922ca628fa87157844e3ee0ca07911cristy          black=0x01;
22270897d38090922ca628fa87157844e3ee0ca07911cristy          white=0x00;
222840ae80f228afbc5b9b7693135723e47bbb088acecristy        }
2229f13c594b1d9509e479fd845c3b8a5bb1351c32eacristy      threshold=QuantumRange/2.0;
22300897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=((ssize_t) number_pixels-3); x > 0; x-=4)
22310897d38090922ca628fa87157844e3ee0ca07911cristy      {
22320897d38090922ca628fa87157844e3ee0ca07911cristy        *q='\0';
2233029bea2354b2003061b954121e582d9dcb4f7641cristy        *q|=(GetPixelLuma(image,p) > threshold ? black : white) << 7;
22340897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned char) (GetPixelAlpha(image,p) == OpaqueAlpha ?
22350897d38090922ca628fa87157844e3ee0ca07911cristy          0x00 : 0x01);
22360897d38090922ca628fa87157844e3ee0ca07911cristy        *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 6);
22370897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
2238029bea2354b2003061b954121e582d9dcb4f7641cristy        *q|=(GetPixelLuma(image,p) > threshold ? black : white) << 5;
22390897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned char) (GetPixelAlpha(image,p) == OpaqueAlpha ?
22400897d38090922ca628fa87157844e3ee0ca07911cristy          0x00 : 0x01);
22410897d38090922ca628fa87157844e3ee0ca07911cristy        *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 4);
22420897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
2243029bea2354b2003061b954121e582d9dcb4f7641cristy        *q|=(GetPixelLuma(image,p) > threshold ? black : white) << 3;
22440897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned char) (GetPixelAlpha(image,p) == OpaqueAlpha ?
22450897d38090922ca628fa87157844e3ee0ca07911cristy          0x00 : 0x01);
22460897d38090922ca628fa87157844e3ee0ca07911cristy        *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 2);
22470897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
2248029bea2354b2003061b954121e582d9dcb4f7641cristy        *q|=(GetPixelLuma(image,p) > threshold ? black : white) << 1;
22490897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned char) (GetPixelAlpha(image,p) == OpaqueAlpha ?
22500897d38090922ca628fa87157844e3ee0ca07911cristy          0x00 : 0x01);
22510897d38090922ca628fa87157844e3ee0ca07911cristy        *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 0);
22520897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
22530897d38090922ca628fa87157844e3ee0ca07911cristy        q++;
22540897d38090922ca628fa87157844e3ee0ca07911cristy      }
22550897d38090922ca628fa87157844e3ee0ca07911cristy      if ((number_pixels % 4) != 0)
225640ae80f228afbc5b9b7693135723e47bbb088acecristy        {
22570897d38090922ca628fa87157844e3ee0ca07911cristy          *q='\0';
22580897d38090922ca628fa87157844e3ee0ca07911cristy          for (bit=0; bit <= (ssize_t) (number_pixels % 4); bit+=2)
22593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
2260029bea2354b2003061b954121e582d9dcb4f7641cristy            *q|=(GetPixelLuma(image,p) > threshold ? black : white) <<
22610897d38090922ca628fa87157844e3ee0ca07911cristy              (7-bit);
22620897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=(unsigned char) (GetPixelAlpha(image,p) == OpaqueAlpha ?
22630897d38090922ca628fa87157844e3ee0ca07911cristy              0x00 : 0x01);
22640897d38090922ca628fa87157844e3ee0ca07911cristy            *q|=(((int) pixel != 0 ? 0x00 : 0x01) << (unsigned char)
22650897d38090922ca628fa87157844e3ee0ca07911cristy              (7-bit-1));
22660897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
22673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
22680897d38090922ca628fa87157844e3ee0ca07911cristy          q++;
22693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
22700897d38090922ca628fa87157844e3ee0ca07911cristy      break;
22710897d38090922ca628fa87157844e3ee0ca07911cristy    }
22720897d38090922ca628fa87157844e3ee0ca07911cristy    case 4:
22730897d38090922ca628fa87157844e3ee0ca07911cristy    {
22740897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned char
22750897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
22760897d38090922ca628fa87157844e3ee0ca07911cristy
22770897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels ; x++)
22780897d38090922ca628fa87157844e3ee0ca07911cristy      {
2279029bea2354b2003061b954121e582d9dcb4f7641cristy        pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
22800897d38090922ca628fa87157844e3ee0ca07911cristy        *q=(((pixel >> 4) & 0xf) << 4);
22810897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned char) (16*QuantumScale*GetPixelAlpha(image,p)+0.5);
22820897d38090922ca628fa87157844e3ee0ca07911cristy        *q|=pixel & 0xf;
22830897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
22840897d38090922ca628fa87157844e3ee0ca07911cristy        q++;
2285f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy      }
2286f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy      break;
2287f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy    }
22880897d38090922ca628fa87157844e3ee0ca07911cristy    case 8:
2289f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy    {
22900897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned char
22910897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
22920897d38090922ca628fa87157844e3ee0ca07911cristy
22930897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
229440ae80f228afbc5b9b7693135723e47bbb088acecristy      {
2295029bea2354b2003061b954121e582d9dcb4f7641cristy        pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
22960897d38090922ca628fa87157844e3ee0ca07911cristy        q=PopCharPixel(pixel,q);
22970897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToChar(GetPixelAlpha(image,p));
22980897d38090922ca628fa87157844e3ee0ca07911cristy        q=PopCharPixel(pixel,q);
22990897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
23000897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
23010897d38090922ca628fa87157844e3ee0ca07911cristy      }
23020897d38090922ca628fa87157844e3ee0ca07911cristy      break;
23030897d38090922ca628fa87157844e3ee0ca07911cristy    }
23040897d38090922ca628fa87157844e3ee0ca07911cristy    case 16:
23050897d38090922ca628fa87157844e3ee0ca07911cristy    {
23060897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned short
23070897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
2308f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy
23090897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
231040ae80f228afbc5b9b7693135723e47bbb088acecristy        {
231140ae80f228afbc5b9b7693135723e47bbb088acecristy          for (x=0; x < (ssize_t) number_pixels; x++)
231240ae80f228afbc5b9b7693135723e47bbb088acecristy          {
2313029bea2354b2003061b954121e582d9dcb4f7641cristy            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelLuma(image,p));
231432c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopShortPixel(quantum_info->endian,pixel,q);
23150897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelAlpha(image,p));
231632c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopShortPixel(quantum_info->endian,pixel,q);
23170897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
231840ae80f228afbc5b9b7693135723e47bbb088acecristy            q+=quantum_info->pad;
231940ae80f228afbc5b9b7693135723e47bbb088acecristy          }
232040ae80f228afbc5b9b7693135723e47bbb088acecristy          break;
232140ae80f228afbc5b9b7693135723e47bbb088acecristy        }
23220897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
23230897d38090922ca628fa87157844e3ee0ca07911cristy      {
2324029bea2354b2003061b954121e582d9dcb4f7641cristy        pixel=ScaleQuantumToShort(ClampToQuantum(GetPixelLuma(image,p)));
232532c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopShortPixel(quantum_info->endian,pixel,q);
23260897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
232732c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopShortPixel(quantum_info->endian,pixel,q);
23280897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
23290897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
23300897d38090922ca628fa87157844e3ee0ca07911cristy      }
23310897d38090922ca628fa87157844e3ee0ca07911cristy      break;
23320897d38090922ca628fa87157844e3ee0ca07911cristy    }
23330897d38090922ca628fa87157844e3ee0ca07911cristy    case 32:
23340897d38090922ca628fa87157844e3ee0ca07911cristy    {
23350897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned int
23360897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
2337f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy
23380897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
23393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
234040ae80f228afbc5b9b7693135723e47bbb088acecristy          for (x=0; x < (ssize_t) number_pixels; x++)
23413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
23420897d38090922ca628fa87157844e3ee0ca07911cristy            float
23430897d38090922ca628fa87157844e3ee0ca07911cristy              pixel;
23440897d38090922ca628fa87157844e3ee0ca07911cristy
2345029bea2354b2003061b954121e582d9dcb4f7641cristy            pixel=(float) GetPixelLuma(image,p);
234632c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopFloatPixel(quantum_info,pixel,q);
23470897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=(float) (GetPixelAlpha(image,p));
234832c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopFloatPixel(quantum_info,pixel,q);
23490897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
235040ae80f228afbc5b9b7693135723e47bbb088acecristy            q+=quantum_info->pad;
23513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
235240ae80f228afbc5b9b7693135723e47bbb088acecristy          break;
23533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
23540897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
23550897d38090922ca628fa87157844e3ee0ca07911cristy      {
2356029bea2354b2003061b954121e582d9dcb4f7641cristy        pixel=ScaleQuantumToLong(ClampToQuantum(GetPixelLuma(image,p)));
235732c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopLongPixel(quantum_info->endian,pixel,q);
23580897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
235932c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopLongPixel(quantum_info->endian,pixel,q);
23600897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
23610897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
23623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
23633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      break;
23643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
23650897d38090922ca628fa87157844e3ee0ca07911cristy    case 64:
23663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
23670897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
236840ae80f228afbc5b9b7693135723e47bbb088acecristy        {
236940ae80f228afbc5b9b7693135723e47bbb088acecristy          for (x=0; x < (ssize_t) number_pixels; x++)
237040ae80f228afbc5b9b7693135723e47bbb088acecristy          {
23710897d38090922ca628fa87157844e3ee0ca07911cristy            double
23720897d38090922ca628fa87157844e3ee0ca07911cristy              pixel;
237340ae80f228afbc5b9b7693135723e47bbb088acecristy
2374029bea2354b2003061b954121e582d9dcb4f7641cristy            pixel=GetPixelLuma(image,p);
237532c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopDoublePixel(quantum_info,pixel,q);
23760897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=(double) (GetPixelAlpha(image,p));
237732c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopDoublePixel(quantum_info,pixel,q);
23780897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
23793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            q+=quantum_info->pad;
23803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
23813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
23823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
23830897d38090922ca628fa87157844e3ee0ca07911cristy    }
23840897d38090922ca628fa87157844e3ee0ca07911cristy    default:
23850897d38090922ca628fa87157844e3ee0ca07911cristy    {
23860897d38090922ca628fa87157844e3ee0ca07911cristy      range=GetQuantumRange(quantum_info->depth);
23870897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
23880897d38090922ca628fa87157844e3ee0ca07911cristy      {
2389f13c594b1d9509e479fd845c3b8a5bb1351c32eacristy        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(ClampToQuantum(
2390029bea2354b2003061b954121e582d9dcb4f7641cristy          GetPixelLuma(image,p)),range),q);
239132c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
239232c6843b4cfe042747eff85b4a80ec119c77bdc8cristy          range),q);
23930897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
23940897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
23950897d38090922ca628fa87157844e3ee0ca07911cristy      }
23960897d38090922ca628fa87157844e3ee0ca07911cristy      break;
23970897d38090922ca628fa87157844e3ee0ca07911cristy    }
23980897d38090922ca628fa87157844e3ee0ca07911cristy  }
23990897d38090922ca628fa87157844e3ee0ca07911cristy}
240040ae80f228afbc5b9b7693135723e47bbb088acecristy
240132c6843b4cfe042747eff85b4a80ec119c77bdc8cristystatic void ExportGreenQuantum(const Image *image,QuantumInfo *quantum_info,
240205d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  const MagickSizeType number_pixels,const Quantum *magick_restrict p,
240305d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  unsigned char *magick_restrict q,ExceptionInfo *exception)
24040897d38090922ca628fa87157844e3ee0ca07911cristy{
24050897d38090922ca628fa87157844e3ee0ca07911cristy  QuantumAny
24060897d38090922ca628fa87157844e3ee0ca07911cristy    range;
240740ae80f228afbc5b9b7693135723e47bbb088acecristy
24080897d38090922ca628fa87157844e3ee0ca07911cristy  register ssize_t
24090897d38090922ca628fa87157844e3ee0ca07911cristy    x;
24100897d38090922ca628fa87157844e3ee0ca07911cristy
2411b0de93fdedaac769cb08e15b3ec176d4c9078907cristy  assert(exception != (ExceptionInfo *) NULL);
2412e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy  assert(exception->signature == MagickCoreSignature);
24130897d38090922ca628fa87157844e3ee0ca07911cristy  switch (quantum_info->depth)
24140897d38090922ca628fa87157844e3ee0ca07911cristy  {
24150897d38090922ca628fa87157844e3ee0ca07911cristy    case 8:
24160897d38090922ca628fa87157844e3ee0ca07911cristy    {
24170897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned char
24180897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
24190897d38090922ca628fa87157844e3ee0ca07911cristy
24200897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
24210897d38090922ca628fa87157844e3ee0ca07911cristy      {
24220897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
24230897d38090922ca628fa87157844e3ee0ca07911cristy        q=PopCharPixel(pixel,q);
24240897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
24250897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
24260897d38090922ca628fa87157844e3ee0ca07911cristy      }
24270897d38090922ca628fa87157844e3ee0ca07911cristy      break;
24280897d38090922ca628fa87157844e3ee0ca07911cristy    }
24290897d38090922ca628fa87157844e3ee0ca07911cristy    case 16:
24300897d38090922ca628fa87157844e3ee0ca07911cristy    {
24310897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned short
24320897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
24330897d38090922ca628fa87157844e3ee0ca07911cristy
24340897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
24353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
2436bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy          for (x=0; x < (ssize_t) number_pixels; x++)
24373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
24380897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelGreen(image,p));
243932c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopShortPixel(quantum_info->endian,pixel,q);
24400897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
24413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            q+=quantum_info->pad;
24423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
24433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
24443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
24450897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
24460897d38090922ca628fa87157844e3ee0ca07911cristy      {
24470897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
244832c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopShortPixel(quantum_info->endian,pixel,q);
24490897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
24500897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
2451f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy      }
2452f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy      break;
2453f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy    }
24540897d38090922ca628fa87157844e3ee0ca07911cristy    case 32:
2455f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy    {
24560897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned int
24570897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
245840ae80f228afbc5b9b7693135723e47bbb088acecristy
24590897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
24600897d38090922ca628fa87157844e3ee0ca07911cristy        {
2461bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy          for (x=0; x < (ssize_t) number_pixels; x++)
24623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
246332c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
24640897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
24653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            q+=quantum_info->pad;
24663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
24673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
24683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
24690897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
24700897d38090922ca628fa87157844e3ee0ca07911cristy      {
24710897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
247232c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopLongPixel(quantum_info->endian,pixel,q);
24730897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
24740897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
24750897d38090922ca628fa87157844e3ee0ca07911cristy      }
24760897d38090922ca628fa87157844e3ee0ca07911cristy      break;
24770897d38090922ca628fa87157844e3ee0ca07911cristy    }
24780897d38090922ca628fa87157844e3ee0ca07911cristy    case 64:
24790897d38090922ca628fa87157844e3ee0ca07911cristy    {
24800897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
2481f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy        {
2482bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy          for (x=0; x < (ssize_t) number_pixels; x++)
24833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
248432c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
24850897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
24863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            q+=quantum_info->pad;
24873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
24883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
24893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
24900897d38090922ca628fa87157844e3ee0ca07911cristy    }
24910897d38090922ca628fa87157844e3ee0ca07911cristy    default:
24920897d38090922ca628fa87157844e3ee0ca07911cristy    {
24930897d38090922ca628fa87157844e3ee0ca07911cristy      range=GetQuantumRange(quantum_info->depth);
24940897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
24950897d38090922ca628fa87157844e3ee0ca07911cristy      {
249632c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
249732c6843b4cfe042747eff85b4a80ec119c77bdc8cristy          range),q);
24980897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
24990897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
25000897d38090922ca628fa87157844e3ee0ca07911cristy      }
25010897d38090922ca628fa87157844e3ee0ca07911cristy      break;
25020897d38090922ca628fa87157844e3ee0ca07911cristy    }
25030897d38090922ca628fa87157844e3ee0ca07911cristy  }
25040897d38090922ca628fa87157844e3ee0ca07911cristy}
25050897d38090922ca628fa87157844e3ee0ca07911cristy
250632c6843b4cfe042747eff85b4a80ec119c77bdc8cristystatic void ExportIndexQuantum(const Image *image,QuantumInfo *quantum_info,
250705d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  const MagickSizeType number_pixels,const Quantum *magick_restrict p,
250805d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  unsigned char *magick_restrict q,ExceptionInfo *exception)
25090897d38090922ca628fa87157844e3ee0ca07911cristy{
25100897d38090922ca628fa87157844e3ee0ca07911cristy  register ssize_t
25110897d38090922ca628fa87157844e3ee0ca07911cristy    x;
25120897d38090922ca628fa87157844e3ee0ca07911cristy
25130897d38090922ca628fa87157844e3ee0ca07911cristy  ssize_t
25140897d38090922ca628fa87157844e3ee0ca07911cristy    bit;
25150897d38090922ca628fa87157844e3ee0ca07911cristy
25160897d38090922ca628fa87157844e3ee0ca07911cristy  if (image->storage_class != PseudoClass)
25170897d38090922ca628fa87157844e3ee0ca07911cristy    {
25180897d38090922ca628fa87157844e3ee0ca07911cristy      (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2519efe601ce9ea5ad34ad0e8ad6e61d9be9b148b2a3cristy        "ColormappedImageRequired","`%s'",image->filename);
25200897d38090922ca628fa87157844e3ee0ca07911cristy      return;
25210897d38090922ca628fa87157844e3ee0ca07911cristy    }
25220897d38090922ca628fa87157844e3ee0ca07911cristy  switch (quantum_info->depth)
25230897d38090922ca628fa87157844e3ee0ca07911cristy  {
25240897d38090922ca628fa87157844e3ee0ca07911cristy    case 1:
25250897d38090922ca628fa87157844e3ee0ca07911cristy    {
25260897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned char
25270897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
25280897d38090922ca628fa87157844e3ee0ca07911cristy
25290897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=((ssize_t) number_pixels-7); x > 0; x-=8)
25300897d38090922ca628fa87157844e3ee0ca07911cristy      {
25310897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned char) GetPixelIndex(image,p);
25320897d38090922ca628fa87157844e3ee0ca07911cristy        *q=((pixel & 0x01) << 7);
25330897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
25340897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned char) GetPixelIndex(image,p);
25350897d38090922ca628fa87157844e3ee0ca07911cristy        *q|=((pixel & 0x01) << 6);
25360897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
25370897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned char) GetPixelIndex(image,p);
25380897d38090922ca628fa87157844e3ee0ca07911cristy        *q|=((pixel & 0x01) << 5);
25390897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
25400897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned char) GetPixelIndex(image,p);
25410897d38090922ca628fa87157844e3ee0ca07911cristy        *q|=((pixel & 0x01) << 4);
25420897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
25430897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned char) GetPixelIndex(image,p);
25440897d38090922ca628fa87157844e3ee0ca07911cristy        *q|=((pixel & 0x01) << 3);
25450897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
25460897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned char) GetPixelIndex(image,p);
25470897d38090922ca628fa87157844e3ee0ca07911cristy        *q|=((pixel & 0x01) << 2);
25480897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
25490897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned char) GetPixelIndex(image,p);
25500897d38090922ca628fa87157844e3ee0ca07911cristy        *q|=((pixel & 0x01) << 1);
25510897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
25520897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned char) GetPixelIndex(image,p);
25530897d38090922ca628fa87157844e3ee0ca07911cristy        *q|=((pixel & 0x01) << 0);
25540897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
25550897d38090922ca628fa87157844e3ee0ca07911cristy        q++;
25560897d38090922ca628fa87157844e3ee0ca07911cristy      }
25570897d38090922ca628fa87157844e3ee0ca07911cristy      if ((number_pixels % 8) != 0)
25580897d38090922ca628fa87157844e3ee0ca07911cristy        {
25590897d38090922ca628fa87157844e3ee0ca07911cristy          *q='\0';
25600897d38090922ca628fa87157844e3ee0ca07911cristy          for (bit=7; bit >= (ssize_t) (8-(number_pixels % 8)); bit--)
25610897d38090922ca628fa87157844e3ee0ca07911cristy          {
25620897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=(unsigned char) GetPixelIndex(image,p);
25630897d38090922ca628fa87157844e3ee0ca07911cristy            *q|=((pixel & 0x01) << (unsigned char) bit);
25640897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
25653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
25660897d38090922ca628fa87157844e3ee0ca07911cristy          q++;
25673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
25680897d38090922ca628fa87157844e3ee0ca07911cristy      break;
25690897d38090922ca628fa87157844e3ee0ca07911cristy    }
25700897d38090922ca628fa87157844e3ee0ca07911cristy    case 4:
25710897d38090922ca628fa87157844e3ee0ca07911cristy    {
25720897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned char
25730897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
25740897d38090922ca628fa87157844e3ee0ca07911cristy
25750897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) (number_pixels-1) ; x+=2)
25760897d38090922ca628fa87157844e3ee0ca07911cristy      {
25770897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned char) GetPixelIndex(image,p);
25780897d38090922ca628fa87157844e3ee0ca07911cristy        *q=((pixel & 0xf) << 4);
25790897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
25800897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned char) GetPixelIndex(image,p);
25810897d38090922ca628fa87157844e3ee0ca07911cristy        *q|=((pixel & 0xf) << 0);
25820897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
25830897d38090922ca628fa87157844e3ee0ca07911cristy        q++;
25840897d38090922ca628fa87157844e3ee0ca07911cristy      }
25850897d38090922ca628fa87157844e3ee0ca07911cristy      if ((number_pixels % 2) != 0)
2586f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy        {
25870897d38090922ca628fa87157844e3ee0ca07911cristy          pixel=(unsigned char) GetPixelIndex(image,p);
25880897d38090922ca628fa87157844e3ee0ca07911cristy          *q=((pixel & 0xf) << 4);
25890897d38090922ca628fa87157844e3ee0ca07911cristy          p+=GetPixelChannels(image);
25900897d38090922ca628fa87157844e3ee0ca07911cristy          q++;
25913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
25920897d38090922ca628fa87157844e3ee0ca07911cristy      break;
25930897d38090922ca628fa87157844e3ee0ca07911cristy    }
25940897d38090922ca628fa87157844e3ee0ca07911cristy    case 8:
25950897d38090922ca628fa87157844e3ee0ca07911cristy    {
25960897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
25970897d38090922ca628fa87157844e3ee0ca07911cristy      {
25980897d38090922ca628fa87157844e3ee0ca07911cristy        q=PopCharPixel((unsigned char) GetPixelIndex(image,p),q);
25990897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
26000897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
26010897d38090922ca628fa87157844e3ee0ca07911cristy      }
26020897d38090922ca628fa87157844e3ee0ca07911cristy      break;
26030897d38090922ca628fa87157844e3ee0ca07911cristy    }
26040897d38090922ca628fa87157844e3ee0ca07911cristy    case 16:
26050897d38090922ca628fa87157844e3ee0ca07911cristy    {
26060897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
26073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
2608bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy          for (x=0; x < (ssize_t) number_pixels; x++)
26093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
2610271ca22dc4cb635d443b8bbb7b3f6894420b05eccristy            q=PopShortPixel(quantum_info->endian,SinglePrecisionToHalf(
2611271ca22dc4cb635d443b8bbb7b3f6894420b05eccristy              QuantumScale*GetPixelIndex(image,p)),q);
26120897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
26133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            q+=quantum_info->pad;
26143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
26153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
26163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
26170897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
26180897d38090922ca628fa87157844e3ee0ca07911cristy      {
2619271ca22dc4cb635d443b8bbb7b3f6894420b05eccristy        q=PopShortPixel(quantum_info->endian,(unsigned short)
2620271ca22dc4cb635d443b8bbb7b3f6894420b05eccristy          GetPixelIndex(image,p),q);
26210897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
26220897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
26233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
26243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      break;
26253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
26260897d38090922ca628fa87157844e3ee0ca07911cristy    case 32:
26273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
26280897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
26293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
26300897d38090922ca628fa87157844e3ee0ca07911cristy          for (x=0; x < (ssize_t) number_pixels; x++)
26310897d38090922ca628fa87157844e3ee0ca07911cristy          {
263232c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopFloatPixel(quantum_info,(float) GetPixelIndex(image,p),q);
26330897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
26340897d38090922ca628fa87157844e3ee0ca07911cristy            q+=quantum_info->pad;
26350897d38090922ca628fa87157844e3ee0ca07911cristy          }
26360897d38090922ca628fa87157844e3ee0ca07911cristy          break;
26373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
26380897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
2639f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy      {
2640271ca22dc4cb635d443b8bbb7b3f6894420b05eccristy        q=PopLongPixel(quantum_info->endian,(unsigned int)
2641271ca22dc4cb635d443b8bbb7b3f6894420b05eccristy          GetPixelIndex(image,p),q);
26420897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
26430897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
26440897d38090922ca628fa87157844e3ee0ca07911cristy      }
26450897d38090922ca628fa87157844e3ee0ca07911cristy      break;
26460897d38090922ca628fa87157844e3ee0ca07911cristy    }
26470897d38090922ca628fa87157844e3ee0ca07911cristy    case 64:
26480897d38090922ca628fa87157844e3ee0ca07911cristy    {
26490897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
26503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
2651bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy          for (x=0; x < (ssize_t) number_pixels; x++)
26523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
265332c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopDoublePixel(quantum_info,(double) GetPixelIndex(image,p),q);
26540897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
26553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            q+=quantum_info->pad;
26563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
26573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
26583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
26590897d38090922ca628fa87157844e3ee0ca07911cristy    }
26600897d38090922ca628fa87157844e3ee0ca07911cristy    default:
26610897d38090922ca628fa87157844e3ee0ca07911cristy    {
26620897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
26630897d38090922ca628fa87157844e3ee0ca07911cristy      {
266432c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,GetPixelIndex(image,p),q);
26650897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
26660897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
26670897d38090922ca628fa87157844e3ee0ca07911cristy      }
26680897d38090922ca628fa87157844e3ee0ca07911cristy      break;
26690897d38090922ca628fa87157844e3ee0ca07911cristy    }
26700897d38090922ca628fa87157844e3ee0ca07911cristy  }
26710897d38090922ca628fa87157844e3ee0ca07911cristy}
26720897d38090922ca628fa87157844e3ee0ca07911cristy
26730897d38090922ca628fa87157844e3ee0ca07911cristystatic void ExportIndexAlphaQuantum(const Image *image,
267432c6843b4cfe042747eff85b4a80ec119c77bdc8cristy  QuantumInfo *quantum_info,const MagickSizeType number_pixels,
267505d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  const Quantum *magick_restrict p,unsigned char *magick_restrict q,
267605d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  ExceptionInfo *exception)
26770897d38090922ca628fa87157844e3ee0ca07911cristy{
26780897d38090922ca628fa87157844e3ee0ca07911cristy  register ssize_t
26790897d38090922ca628fa87157844e3ee0ca07911cristy    x;
26800897d38090922ca628fa87157844e3ee0ca07911cristy
26810897d38090922ca628fa87157844e3ee0ca07911cristy  ssize_t
26820897d38090922ca628fa87157844e3ee0ca07911cristy    bit;
26830897d38090922ca628fa87157844e3ee0ca07911cristy
26840897d38090922ca628fa87157844e3ee0ca07911cristy  if (image->storage_class != PseudoClass)
26850897d38090922ca628fa87157844e3ee0ca07911cristy    {
26860897d38090922ca628fa87157844e3ee0ca07911cristy      (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2687efe601ce9ea5ad34ad0e8ad6e61d9be9b148b2a3cristy        "ColormappedImageRequired","`%s'",image->filename);
26880897d38090922ca628fa87157844e3ee0ca07911cristy      return;
26890897d38090922ca628fa87157844e3ee0ca07911cristy    }
26900897d38090922ca628fa87157844e3ee0ca07911cristy  switch (quantum_info->depth)
26910897d38090922ca628fa87157844e3ee0ca07911cristy  {
26920897d38090922ca628fa87157844e3ee0ca07911cristy    case 1:
26930897d38090922ca628fa87157844e3ee0ca07911cristy    {
26940897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned char
26950897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
26960897d38090922ca628fa87157844e3ee0ca07911cristy
26970897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=((ssize_t) number_pixels-3); x > 0; x-=4)
26980897d38090922ca628fa87157844e3ee0ca07911cristy      {
26990897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned char) GetPixelIndex(image,p);
27000897d38090922ca628fa87157844e3ee0ca07911cristy        *q=((pixel & 0x01) << 7);
27010897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned char) (GetPixelAlpha(image,p) == (Quantum)
27020897d38090922ca628fa87157844e3ee0ca07911cristy          TransparentAlpha ? 1 : 0);
27030897d38090922ca628fa87157844e3ee0ca07911cristy        *q|=((pixel & 0x01) << 6);
27040897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
27050897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned char) GetPixelIndex(image,p);
27060897d38090922ca628fa87157844e3ee0ca07911cristy        *q|=((pixel & 0x01) << 5);
27070897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned char) (GetPixelAlpha(image,p) == (Quantum)
27080897d38090922ca628fa87157844e3ee0ca07911cristy          TransparentAlpha ? 1 : 0);
27090897d38090922ca628fa87157844e3ee0ca07911cristy        *q|=((pixel & 0x01) << 4);
27100897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
27110897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned char) GetPixelIndex(image,p);
27120897d38090922ca628fa87157844e3ee0ca07911cristy        *q|=((pixel & 0x01) << 3);
27130897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned char) (GetPixelAlpha(image,p) == (Quantum)
27140897d38090922ca628fa87157844e3ee0ca07911cristy          TransparentAlpha ? 1 : 0);
27150897d38090922ca628fa87157844e3ee0ca07911cristy        *q|=((pixel & 0x01) << 2);
27160897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
27170897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned char) GetPixelIndex(image,p);
27180897d38090922ca628fa87157844e3ee0ca07911cristy        *q|=((pixel & 0x01) << 1);
27190897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned char) (GetPixelAlpha(image,p) == (Quantum)
27200897d38090922ca628fa87157844e3ee0ca07911cristy          TransparentAlpha ? 1 : 0);
27210897d38090922ca628fa87157844e3ee0ca07911cristy        *q|=((pixel & 0x01) << 0);
27220897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
27230897d38090922ca628fa87157844e3ee0ca07911cristy        q++;
27240897d38090922ca628fa87157844e3ee0ca07911cristy      }
27250897d38090922ca628fa87157844e3ee0ca07911cristy      if ((number_pixels % 4) != 0)
27263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
27270897d38090922ca628fa87157844e3ee0ca07911cristy          *q='\0';
27280897d38090922ca628fa87157844e3ee0ca07911cristy          for (bit=3; bit >= (ssize_t) (4-(number_pixels % 4)); bit-=2)
27290897d38090922ca628fa87157844e3ee0ca07911cristy          {
27300897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=(unsigned char) GetPixelIndex(image,p);
27310897d38090922ca628fa87157844e3ee0ca07911cristy            *q|=((pixel & 0x01) << (unsigned char) (bit+4));
27320897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=(unsigned char) (GetPixelAlpha(image,p) == (Quantum)
27330897d38090922ca628fa87157844e3ee0ca07911cristy              TransparentAlpha ? 1 : 0);
27340897d38090922ca628fa87157844e3ee0ca07911cristy            *q|=((pixel & 0x01) << (unsigned char) (bit+4-1));
27350897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
27360897d38090922ca628fa87157844e3ee0ca07911cristy          }
27370897d38090922ca628fa87157844e3ee0ca07911cristy          q++;
27380897d38090922ca628fa87157844e3ee0ca07911cristy        }
27390897d38090922ca628fa87157844e3ee0ca07911cristy      break;
27400897d38090922ca628fa87157844e3ee0ca07911cristy    }
27410897d38090922ca628fa87157844e3ee0ca07911cristy    case 4:
27420897d38090922ca628fa87157844e3ee0ca07911cristy    {
27430897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned char
27440897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
27453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
27460897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels ; x++)
27470897d38090922ca628fa87157844e3ee0ca07911cristy      {
27480897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned char) GetPixelIndex(image,p);
27490897d38090922ca628fa87157844e3ee0ca07911cristy        *q=((pixel & 0xf) << 4);
27500897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned char) (16*QuantumScale*GetPixelAlpha(image,p)+0.5);
27510897d38090922ca628fa87157844e3ee0ca07911cristy        *q|=((pixel & 0xf) << 0);
27520897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
27530897d38090922ca628fa87157844e3ee0ca07911cristy        q++;
27540897d38090922ca628fa87157844e3ee0ca07911cristy      }
27550897d38090922ca628fa87157844e3ee0ca07911cristy      break;
27560897d38090922ca628fa87157844e3ee0ca07911cristy    }
27570897d38090922ca628fa87157844e3ee0ca07911cristy    case 8:
27580897d38090922ca628fa87157844e3ee0ca07911cristy    {
27590897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned char
27600897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
27610897d38090922ca628fa87157844e3ee0ca07911cristy
27620897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
27630897d38090922ca628fa87157844e3ee0ca07911cristy      {
27640897d38090922ca628fa87157844e3ee0ca07911cristy        q=PopCharPixel((unsigned char) GetPixelIndex(image,p),q);
27650897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToChar(GetPixelAlpha(image,p));
27660897d38090922ca628fa87157844e3ee0ca07911cristy        q=PopCharPixel(pixel,q);
27670897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
27680897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
27690897d38090922ca628fa87157844e3ee0ca07911cristy      }
27700897d38090922ca628fa87157844e3ee0ca07911cristy      break;
27710897d38090922ca628fa87157844e3ee0ca07911cristy    }
27720897d38090922ca628fa87157844e3ee0ca07911cristy    case 16:
27730897d38090922ca628fa87157844e3ee0ca07911cristy    {
27740897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned short
27750897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
27760897d38090922ca628fa87157844e3ee0ca07911cristy
27770897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
27780897d38090922ca628fa87157844e3ee0ca07911cristy        {
2779bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy          for (x=0; x < (ssize_t) number_pixels; x++)
27803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
2781271ca22dc4cb635d443b8bbb7b3f6894420b05eccristy            q=PopShortPixel(quantum_info->endian,(unsigned short)
2782271ca22dc4cb635d443b8bbb7b3f6894420b05eccristy              GetPixelIndex(image,p),q);
27830897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelAlpha(image,p));
278432c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopShortPixel(quantum_info->endian,pixel,q);
27850897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
27863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            q+=quantum_info->pad;
27873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
27883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
27893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
27900897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
27910897d38090922ca628fa87157844e3ee0ca07911cristy      {
2792271ca22dc4cb635d443b8bbb7b3f6894420b05eccristy        q=PopShortPixel(quantum_info->endian,(unsigned short)
2793271ca22dc4cb635d443b8bbb7b3f6894420b05eccristy              GetPixelIndex(image,p),q);
27940897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
279532c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopShortPixel(quantum_info->endian,pixel,q);
27960897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
27970897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
27980897d38090922ca628fa87157844e3ee0ca07911cristy      }
27990897d38090922ca628fa87157844e3ee0ca07911cristy      break;
28000897d38090922ca628fa87157844e3ee0ca07911cristy    }
28010897d38090922ca628fa87157844e3ee0ca07911cristy    case 32:
28020897d38090922ca628fa87157844e3ee0ca07911cristy    {
28030897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned int
28040897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
280540ae80f228afbc5b9b7693135723e47bbb088acecristy
28060897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
28070897d38090922ca628fa87157844e3ee0ca07911cristy        {
2808bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy          for (x=0; x < (ssize_t) number_pixels; x++)
28093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
28100897d38090922ca628fa87157844e3ee0ca07911cristy            float
28110897d38090922ca628fa87157844e3ee0ca07911cristy              pixel;
28120897d38090922ca628fa87157844e3ee0ca07911cristy
281332c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopFloatPixel(quantum_info,(float) GetPixelIndex(image,p),q);
28140897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=(float)  GetPixelAlpha(image,p);
281532c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopFloatPixel(quantum_info,pixel,q);
28160897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
28173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            q+=quantum_info->pad;
28183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
28193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
28203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
28210897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
28220897d38090922ca628fa87157844e3ee0ca07911cristy      {
2823271ca22dc4cb635d443b8bbb7b3f6894420b05eccristy        q=PopLongPixel(quantum_info->endian,(unsigned int)
2824271ca22dc4cb635d443b8bbb7b3f6894420b05eccristy          GetPixelIndex(image,p),q);
28250897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
282632c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopLongPixel(quantum_info->endian,pixel,q);
28270897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
28280897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
28290897d38090922ca628fa87157844e3ee0ca07911cristy      }
28300897d38090922ca628fa87157844e3ee0ca07911cristy      break;
28310897d38090922ca628fa87157844e3ee0ca07911cristy    }
28320897d38090922ca628fa87157844e3ee0ca07911cristy    case 64:
28330897d38090922ca628fa87157844e3ee0ca07911cristy    {
28340897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
28353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
2836bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy          for (x=0; x < (ssize_t) number_pixels; x++)
28373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
28380897d38090922ca628fa87157844e3ee0ca07911cristy            double
28390897d38090922ca628fa87157844e3ee0ca07911cristy              pixel;
28400897d38090922ca628fa87157844e3ee0ca07911cristy
284132c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopDoublePixel(quantum_info,(double) GetPixelIndex(image,p),q);
28420897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=(double) GetPixelAlpha(image,p);
284332c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopDoublePixel(quantum_info,pixel,q);
28440897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
28453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            q+=quantum_info->pad;
28463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
28473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
28483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
28490897d38090922ca628fa87157844e3ee0ca07911cristy    }
28500897d38090922ca628fa87157844e3ee0ca07911cristy    default:
28510897d38090922ca628fa87157844e3ee0ca07911cristy    {
28520897d38090922ca628fa87157844e3ee0ca07911cristy      QuantumAny
28530897d38090922ca628fa87157844e3ee0ca07911cristy        range;
28540897d38090922ca628fa87157844e3ee0ca07911cristy
28550897d38090922ca628fa87157844e3ee0ca07911cristy      range=GetQuantumRange(quantum_info->depth);
28560897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
28570897d38090922ca628fa87157844e3ee0ca07911cristy      {
285832c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,GetPixelIndex(image,p),q);
285932c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
286032c6843b4cfe042747eff85b4a80ec119c77bdc8cristy          range),q);
28610897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
28620897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
28633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
28643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      break;
28653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
28660897d38090922ca628fa87157844e3ee0ca07911cristy  }
28670897d38090922ca628fa87157844e3ee0ca07911cristy}
28680897d38090922ca628fa87157844e3ee0ca07911cristy
286932c6843b4cfe042747eff85b4a80ec119c77bdc8cristystatic void ExportOpacityQuantum(const Image *image,QuantumInfo *quantum_info,
287005d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  const MagickSizeType number_pixels,const Quantum *magick_restrict p,
287105d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  unsigned char *magick_restrict q,ExceptionInfo *exception)
28720897d38090922ca628fa87157844e3ee0ca07911cristy{
28730897d38090922ca628fa87157844e3ee0ca07911cristy  QuantumAny
28740897d38090922ca628fa87157844e3ee0ca07911cristy    range;
28750897d38090922ca628fa87157844e3ee0ca07911cristy
28760897d38090922ca628fa87157844e3ee0ca07911cristy  register ssize_t
28770897d38090922ca628fa87157844e3ee0ca07911cristy    x;
28780897d38090922ca628fa87157844e3ee0ca07911cristy
2879b0de93fdedaac769cb08e15b3ec176d4c9078907cristy  assert(exception != (ExceptionInfo *) NULL);
2880e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy  assert(exception->signature == MagickCoreSignature);
28810897d38090922ca628fa87157844e3ee0ca07911cristy  switch (quantum_info->depth)
28820897d38090922ca628fa87157844e3ee0ca07911cristy  {
28830897d38090922ca628fa87157844e3ee0ca07911cristy    case 8:
28843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
28850897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned char
28860897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
28870897d38090922ca628fa87157844e3ee0ca07911cristy
28880897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
288940ae80f228afbc5b9b7693135723e47bbb088acecristy      {
28900897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToChar(GetPixelOpacity(image,p));
28910897d38090922ca628fa87157844e3ee0ca07911cristy        q=PopCharPixel(pixel,q);
28920897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
28930897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
28940897d38090922ca628fa87157844e3ee0ca07911cristy      }
28950897d38090922ca628fa87157844e3ee0ca07911cristy      break;
28960897d38090922ca628fa87157844e3ee0ca07911cristy    }
28970897d38090922ca628fa87157844e3ee0ca07911cristy    case 16:
28980897d38090922ca628fa87157844e3ee0ca07911cristy    {
28990897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned short
29000897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
29010897d38090922ca628fa87157844e3ee0ca07911cristy
29020897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
29033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
2904f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy          for (x=0; x < (ssize_t) number_pixels; x++)
2905f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy          {
29060897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelOpacity(image,p));
290732c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopShortPixel(quantum_info->endian,pixel,q);
29080897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
2909f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy            q+=quantum_info->pad;
2910f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy          }
2911f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy          break;
29123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
29130897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
29140897d38090922ca628fa87157844e3ee0ca07911cristy      {
29150897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToShort(GetPixelOpacity(image,p));
291632c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopShortPixel(quantum_info->endian,pixel,q);
29170897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
29180897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
29190897d38090922ca628fa87157844e3ee0ca07911cristy      }
29200897d38090922ca628fa87157844e3ee0ca07911cristy      break;
29210897d38090922ca628fa87157844e3ee0ca07911cristy    }
29220897d38090922ca628fa87157844e3ee0ca07911cristy    case 32:
29230897d38090922ca628fa87157844e3ee0ca07911cristy    {
29240897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned int
29250897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
292640ae80f228afbc5b9b7693135723e47bbb088acecristy
29270897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
29280897d38090922ca628fa87157844e3ee0ca07911cristy        {
2929bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy          for (x=0; x < (ssize_t) number_pixels; x++)
29303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
293132c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopFloatPixel(quantum_info,(float) GetPixelOpacity(image,p),q);
29320897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
29333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            q+=quantum_info->pad;
29343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
29353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
29363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
29370897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
29380897d38090922ca628fa87157844e3ee0ca07911cristy      {
29390897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToLong(GetPixelOpacity(image,p));
294032c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopLongPixel(quantum_info->endian,pixel,q);
29410897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
29420897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
29430897d38090922ca628fa87157844e3ee0ca07911cristy      }
29440897d38090922ca628fa87157844e3ee0ca07911cristy      break;
29450897d38090922ca628fa87157844e3ee0ca07911cristy    }
29460897d38090922ca628fa87157844e3ee0ca07911cristy    case 64:
29470897d38090922ca628fa87157844e3ee0ca07911cristy    {
29480897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
294940ae80f228afbc5b9b7693135723e47bbb088acecristy        {
295040ae80f228afbc5b9b7693135723e47bbb088acecristy          for (x=0; x < (ssize_t) number_pixels; x++)
295140ae80f228afbc5b9b7693135723e47bbb088acecristy          {
295232c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopDoublePixel(quantum_info,(double) GetPixelOpacity(image,p),q);
29530897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
295440ae80f228afbc5b9b7693135723e47bbb088acecristy            q+=quantum_info->pad;
295540ae80f228afbc5b9b7693135723e47bbb088acecristy          }
295640ae80f228afbc5b9b7693135723e47bbb088acecristy          break;
295740ae80f228afbc5b9b7693135723e47bbb088acecristy        }
29580897d38090922ca628fa87157844e3ee0ca07911cristy    }
29590897d38090922ca628fa87157844e3ee0ca07911cristy    default:
29600897d38090922ca628fa87157844e3ee0ca07911cristy    {
29610897d38090922ca628fa87157844e3ee0ca07911cristy      range=GetQuantumRange(quantum_info->depth);
29620897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
29630897d38090922ca628fa87157844e3ee0ca07911cristy      {
296432c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(
296532c6843b4cfe042747eff85b4a80ec119c77bdc8cristy          GetPixelOpacity(image,p),range),q);
29660897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
29670897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
29680897d38090922ca628fa87157844e3ee0ca07911cristy      }
29690897d38090922ca628fa87157844e3ee0ca07911cristy      break;
29700897d38090922ca628fa87157844e3ee0ca07911cristy    }
29710897d38090922ca628fa87157844e3ee0ca07911cristy  }
29720897d38090922ca628fa87157844e3ee0ca07911cristy}
297340ae80f228afbc5b9b7693135723e47bbb088acecristy
297432c6843b4cfe042747eff85b4a80ec119c77bdc8cristystatic void ExportRedQuantum(const Image *image,QuantumInfo *quantum_info,
297505d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  const MagickSizeType number_pixels,const Quantum *magick_restrict p,
297605d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  unsigned char *magick_restrict q,ExceptionInfo *exception)
29770897d38090922ca628fa87157844e3ee0ca07911cristy{
29780897d38090922ca628fa87157844e3ee0ca07911cristy  QuantumAny
29790897d38090922ca628fa87157844e3ee0ca07911cristy    range;
29800897d38090922ca628fa87157844e3ee0ca07911cristy
29810897d38090922ca628fa87157844e3ee0ca07911cristy  register ssize_t
29820897d38090922ca628fa87157844e3ee0ca07911cristy    x;
29830897d38090922ca628fa87157844e3ee0ca07911cristy
2984b0de93fdedaac769cb08e15b3ec176d4c9078907cristy  assert(exception != (ExceptionInfo *) NULL);
2985e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy  assert(exception->signature == MagickCoreSignature);
29860897d38090922ca628fa87157844e3ee0ca07911cristy  switch (quantum_info->depth)
29870897d38090922ca628fa87157844e3ee0ca07911cristy  {
29880897d38090922ca628fa87157844e3ee0ca07911cristy    case 8:
29890897d38090922ca628fa87157844e3ee0ca07911cristy    {
29900897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned char
29910897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
29920897d38090922ca628fa87157844e3ee0ca07911cristy
29930897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
29940897d38090922ca628fa87157844e3ee0ca07911cristy      {
29950897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToChar(GetPixelRed(image,p));
29960897d38090922ca628fa87157844e3ee0ca07911cristy        q=PopCharPixel(pixel,q);
29970897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
29980897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
29990897d38090922ca628fa87157844e3ee0ca07911cristy      }
30000897d38090922ca628fa87157844e3ee0ca07911cristy      break;
30010897d38090922ca628fa87157844e3ee0ca07911cristy    }
30020897d38090922ca628fa87157844e3ee0ca07911cristy    case 16:
30030897d38090922ca628fa87157844e3ee0ca07911cristy    {
30040897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned short
30050897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
30060897d38090922ca628fa87157844e3ee0ca07911cristy
30070897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
30080897d38090922ca628fa87157844e3ee0ca07911cristy        {
3009bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy          for (x=0; x < (ssize_t) number_pixels; x++)
30103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
30110897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelRed(image,p));
301232c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopShortPixel(quantum_info->endian,pixel,q);
30130897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
30143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            q+=quantum_info->pad;
30153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
30163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
30173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
30180897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
30190897d38090922ca628fa87157844e3ee0ca07911cristy      {
30200897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToShort(GetPixelRed(image,p));
302132c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopShortPixel(quantum_info->endian,pixel,q);
30220897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
30230897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
30240897d38090922ca628fa87157844e3ee0ca07911cristy      }
30250897d38090922ca628fa87157844e3ee0ca07911cristy      break;
30260897d38090922ca628fa87157844e3ee0ca07911cristy    }
30270897d38090922ca628fa87157844e3ee0ca07911cristy    case 32:
30280897d38090922ca628fa87157844e3ee0ca07911cristy    {
30290897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned int
30300897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
303140ae80f228afbc5b9b7693135723e47bbb088acecristy
30320897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
30330897d38090922ca628fa87157844e3ee0ca07911cristy        {
3034bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy          for (x=0; x < (ssize_t) number_pixels; x++)
30353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
303632c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
30370897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
30383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            q+=quantum_info->pad;
30393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
30403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
30413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
30420897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
30430897d38090922ca628fa87157844e3ee0ca07911cristy      {
30440897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToLong(GetPixelRed(image,p));
304532c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopLongPixel(quantum_info->endian,pixel,q);
30460897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
30470897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
30480897d38090922ca628fa87157844e3ee0ca07911cristy      }
30490897d38090922ca628fa87157844e3ee0ca07911cristy      break;
30500897d38090922ca628fa87157844e3ee0ca07911cristy    }
30510897d38090922ca628fa87157844e3ee0ca07911cristy    case 64:
30520897d38090922ca628fa87157844e3ee0ca07911cristy    {
30530897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
30543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
3055bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy          for (x=0; x < (ssize_t) number_pixels; x++)
30563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
305732c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
30580897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
30593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            q+=quantum_info->pad;
30603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
30613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
30623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
30630897d38090922ca628fa87157844e3ee0ca07911cristy    }
30640897d38090922ca628fa87157844e3ee0ca07911cristy    default:
30650897d38090922ca628fa87157844e3ee0ca07911cristy    {
30660897d38090922ca628fa87157844e3ee0ca07911cristy      range=GetQuantumRange(quantum_info->depth);
30670897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
30680897d38090922ca628fa87157844e3ee0ca07911cristy      {
306932c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
307032c6843b4cfe042747eff85b4a80ec119c77bdc8cristy          range),q);
30710897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
30720897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
30733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
30743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      break;
30753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
30760897d38090922ca628fa87157844e3ee0ca07911cristy  }
30770897d38090922ca628fa87157844e3ee0ca07911cristy}
30780897d38090922ca628fa87157844e3ee0ca07911cristy
307932c6843b4cfe042747eff85b4a80ec119c77bdc8cristystatic void ExportRGBQuantum(const Image *image,QuantumInfo *quantum_info,
308005d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  const MagickSizeType number_pixels,const Quantum *magick_restrict p,
308105d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  unsigned char *magick_restrict q,ExceptionInfo *exception)
30820897d38090922ca628fa87157844e3ee0ca07911cristy{
30830897d38090922ca628fa87157844e3ee0ca07911cristy  QuantumAny
30840897d38090922ca628fa87157844e3ee0ca07911cristy    range;
30850897d38090922ca628fa87157844e3ee0ca07911cristy
30860897d38090922ca628fa87157844e3ee0ca07911cristy  register ssize_t
30870897d38090922ca628fa87157844e3ee0ca07911cristy    x;
30880897d38090922ca628fa87157844e3ee0ca07911cristy
30890897d38090922ca628fa87157844e3ee0ca07911cristy  ssize_t
30900897d38090922ca628fa87157844e3ee0ca07911cristy    bit;
30910897d38090922ca628fa87157844e3ee0ca07911cristy
3092b0de93fdedaac769cb08e15b3ec176d4c9078907cristy  assert(exception != (ExceptionInfo *) NULL);
3093e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy  assert(exception->signature == MagickCoreSignature);
30940897d38090922ca628fa87157844e3ee0ca07911cristy  switch (quantum_info->depth)
30950897d38090922ca628fa87157844e3ee0ca07911cristy  {
30960897d38090922ca628fa87157844e3ee0ca07911cristy    case 8:
30973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
30980897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
3099f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy      {
31000897d38090922ca628fa87157844e3ee0ca07911cristy        q=PopCharPixel(ScaleQuantumToChar(GetPixelRed(image,p)),q);
31010897d38090922ca628fa87157844e3ee0ca07911cristy        q=PopCharPixel(ScaleQuantumToChar(GetPixelGreen(image,p)),q);
31020897d38090922ca628fa87157844e3ee0ca07911cristy        q=PopCharPixel(ScaleQuantumToChar(GetPixelBlue(image,p)),q);
31030897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
31040897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
31050897d38090922ca628fa87157844e3ee0ca07911cristy      }
31060897d38090922ca628fa87157844e3ee0ca07911cristy      break;
31070897d38090922ca628fa87157844e3ee0ca07911cristy    }
31080897d38090922ca628fa87157844e3ee0ca07911cristy    case 10:
31090897d38090922ca628fa87157844e3ee0ca07911cristy    {
31100897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned int
31110897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
311240ae80f228afbc5b9b7693135723e47bbb088acecristy
31130897d38090922ca628fa87157844e3ee0ca07911cristy      range=GetQuantumRange(quantum_info->depth);
31140897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->pack == MagickFalse)
31150897d38090922ca628fa87157844e3ee0ca07911cristy        {
3116bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy          for (x=0; x < (ssize_t) number_pixels; x++)
31173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
31180897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=(unsigned int) (
31190897d38090922ca628fa87157844e3ee0ca07911cristy              ScaleQuantumToAny(GetPixelRed(image,p),range) << 22 |
31200897d38090922ca628fa87157844e3ee0ca07911cristy              ScaleQuantumToAny(GetPixelGreen(image,p),range) << 12 |
31210897d38090922ca628fa87157844e3ee0ca07911cristy              ScaleQuantumToAny(GetPixelBlue(image,p),range) << 2);
312232c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopLongPixel(quantum_info->endian,pixel,q);
31230897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
31243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            q+=quantum_info->pad;
31253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
31263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
31273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
31280897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->quantum == 32UL)
3129891dc79bb95cb3ea8f99f3bc90fe3dfbe362ace5cristy        {
31300897d38090922ca628fa87157844e3ee0ca07911cristy          for (x=0; x < (ssize_t) number_pixels; x++)
31310897d38090922ca628fa87157844e3ee0ca07911cristy          {
31320897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
313332c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopQuantumLongPixel(quantum_info,pixel,q);
31340897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
31350897d38090922ca628fa87157844e3ee0ca07911cristy              range);
313632c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopQuantumLongPixel(quantum_info,pixel,q);
31370897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
313832c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopQuantumLongPixel(quantum_info,pixel,q);
31390897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
31400897d38090922ca628fa87157844e3ee0ca07911cristy            q+=quantum_info->pad;
31410897d38090922ca628fa87157844e3ee0ca07911cristy          }
31420897d38090922ca628fa87157844e3ee0ca07911cristy          break;
31430897d38090922ca628fa87157844e3ee0ca07911cristy        }
31440897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
31450897d38090922ca628fa87157844e3ee0ca07911cristy      {
31460897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
314732c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,pixel,q);
31480897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
314932c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,pixel,q);
31500897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
315132c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,pixel,q);
31520897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
31530897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
31540897d38090922ca628fa87157844e3ee0ca07911cristy      }
31550897d38090922ca628fa87157844e3ee0ca07911cristy      break;
31560897d38090922ca628fa87157844e3ee0ca07911cristy    }
31570897d38090922ca628fa87157844e3ee0ca07911cristy    case 12:
31580897d38090922ca628fa87157844e3ee0ca07911cristy    {
31590897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned int
31600897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
31613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
31620897d38090922ca628fa87157844e3ee0ca07911cristy      range=GetQuantumRange(quantum_info->depth);
31630897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->pack == MagickFalse)
31640897d38090922ca628fa87157844e3ee0ca07911cristy        {
31650897d38090922ca628fa87157844e3ee0ca07911cristy          for (x=0; x < (ssize_t) (3*number_pixels-1); x+=2)
31660897d38090922ca628fa87157844e3ee0ca07911cristy          {
31670897d38090922ca628fa87157844e3ee0ca07911cristy            switch (x % 3)
3168c9672a94adef17dee351f074e7c9915405ef29e1cristy            {
31690897d38090922ca628fa87157844e3ee0ca07911cristy              default:
31700897d38090922ca628fa87157844e3ee0ca07911cristy              case 0:
3171f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy              {
31720897d38090922ca628fa87157844e3ee0ca07911cristy                pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),
31730897d38090922ca628fa87157844e3ee0ca07911cristy                  range);
31740897d38090922ca628fa87157844e3ee0ca07911cristy                break;
31750897d38090922ca628fa87157844e3ee0ca07911cristy              }
31760897d38090922ca628fa87157844e3ee0ca07911cristy              case 1:
31770897d38090922ca628fa87157844e3ee0ca07911cristy              {
31780897d38090922ca628fa87157844e3ee0ca07911cristy                pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
31790897d38090922ca628fa87157844e3ee0ca07911cristy                  range);
31800897d38090922ca628fa87157844e3ee0ca07911cristy                break;
31810897d38090922ca628fa87157844e3ee0ca07911cristy              }
31820897d38090922ca628fa87157844e3ee0ca07911cristy              case 2:
31830897d38090922ca628fa87157844e3ee0ca07911cristy              {
31840897d38090922ca628fa87157844e3ee0ca07911cristy                pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),
31850897d38090922ca628fa87157844e3ee0ca07911cristy                  range);
31860897d38090922ca628fa87157844e3ee0ca07911cristy                p+=GetPixelChannels(image);
31870897d38090922ca628fa87157844e3ee0ca07911cristy                break;
3188c9672a94adef17dee351f074e7c9915405ef29e1cristy              }
3189c9672a94adef17dee351f074e7c9915405ef29e1cristy            }
3190271ca22dc4cb635d443b8bbb7b3f6894420b05eccristy            q=PopShortPixel(quantum_info->endian,(unsigned short) (pixel << 4),
3191271ca22dc4cb635d443b8bbb7b3f6894420b05eccristy              q);
31920897d38090922ca628fa87157844e3ee0ca07911cristy            switch ((x+1) % 3)
31933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            {
31940897d38090922ca628fa87157844e3ee0ca07911cristy              default:
31950897d38090922ca628fa87157844e3ee0ca07911cristy              case 0:
3196f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy              {
3197f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy                pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),
3198f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy                  range);
31990897d38090922ca628fa87157844e3ee0ca07911cristy                break;
32000897d38090922ca628fa87157844e3ee0ca07911cristy              }
32010897d38090922ca628fa87157844e3ee0ca07911cristy              case 1:
32020897d38090922ca628fa87157844e3ee0ca07911cristy              {
3203f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy                pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
3204f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy                  range);
32050897d38090922ca628fa87157844e3ee0ca07911cristy                break;
32060897d38090922ca628fa87157844e3ee0ca07911cristy              }
32070897d38090922ca628fa87157844e3ee0ca07911cristy              case 2:
32080897d38090922ca628fa87157844e3ee0ca07911cristy              {
3209f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy                pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),
3210f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy                  range);
32110897d38090922ca628fa87157844e3ee0ca07911cristy                p+=GetPixelChannels(image);
32120897d38090922ca628fa87157844e3ee0ca07911cristy                break;
32133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              }
32143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            }
3215271ca22dc4cb635d443b8bbb7b3f6894420b05eccristy            q=PopShortPixel(quantum_info->endian,(unsigned short) (pixel << 4),
3216271ca22dc4cb635d443b8bbb7b3f6894420b05eccristy              q);
32173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            q+=quantum_info->pad;
32183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
32190897d38090922ca628fa87157844e3ee0ca07911cristy          for (bit=0; bit < (ssize_t) (3*number_pixels % 2); bit++)
32200897d38090922ca628fa87157844e3ee0ca07911cristy          {
32210897d38090922ca628fa87157844e3ee0ca07911cristy            switch ((x+bit) % 3)
322240ae80f228afbc5b9b7693135723e47bbb088acecristy            {
32230897d38090922ca628fa87157844e3ee0ca07911cristy              default:
32240897d38090922ca628fa87157844e3ee0ca07911cristy              case 0:
322540ae80f228afbc5b9b7693135723e47bbb088acecristy              {
32260897d38090922ca628fa87157844e3ee0ca07911cristy                pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),
32270897d38090922ca628fa87157844e3ee0ca07911cristy                  range);
32280897d38090922ca628fa87157844e3ee0ca07911cristy                break;
32290897d38090922ca628fa87157844e3ee0ca07911cristy              }
32300897d38090922ca628fa87157844e3ee0ca07911cristy              case 1:
32310897d38090922ca628fa87157844e3ee0ca07911cristy              {
32320897d38090922ca628fa87157844e3ee0ca07911cristy                pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
32330897d38090922ca628fa87157844e3ee0ca07911cristy                  range);
32340897d38090922ca628fa87157844e3ee0ca07911cristy                break;
32350897d38090922ca628fa87157844e3ee0ca07911cristy              }
32360897d38090922ca628fa87157844e3ee0ca07911cristy              case 2:
32370897d38090922ca628fa87157844e3ee0ca07911cristy              {
32380897d38090922ca628fa87157844e3ee0ca07911cristy                pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),
32390897d38090922ca628fa87157844e3ee0ca07911cristy                  range);
32400897d38090922ca628fa87157844e3ee0ca07911cristy                p+=GetPixelChannels(image);
32410897d38090922ca628fa87157844e3ee0ca07911cristy                break;
324240ae80f228afbc5b9b7693135723e47bbb088acecristy              }
324340ae80f228afbc5b9b7693135723e47bbb088acecristy            }
3244271ca22dc4cb635d443b8bbb7b3f6894420b05eccristy            q=PopShortPixel(quantum_info->endian,(unsigned short) (pixel << 4),
3245271ca22dc4cb635d443b8bbb7b3f6894420b05eccristy              q);
32463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            q+=quantum_info->pad;
32473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
32480897d38090922ca628fa87157844e3ee0ca07911cristy          if (bit != 0)
32490897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
32503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
32513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
32520897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->quantum == 32UL)
32533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
3254bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy          for (x=0; x < (ssize_t) number_pixels; x++)
32553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
32560897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
325732c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopQuantumLongPixel(quantum_info,pixel,q);
32580897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
32590897d38090922ca628fa87157844e3ee0ca07911cristy              range);
326032c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopQuantumLongPixel(quantum_info,pixel,q);
32610897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
326232c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopQuantumLongPixel(quantum_info,pixel,q);
32630897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
32643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            q+=quantum_info->pad;
32653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
32663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
32673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
32680897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
32690897d38090922ca628fa87157844e3ee0ca07911cristy      {
32700897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
327132c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,pixel,q);
32720897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
327332c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,pixel,q);
32740897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
327532c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,pixel,q);
32760897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
32770897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
32780897d38090922ca628fa87157844e3ee0ca07911cristy      }
32790897d38090922ca628fa87157844e3ee0ca07911cristy      break;
32800897d38090922ca628fa87157844e3ee0ca07911cristy    }
32810897d38090922ca628fa87157844e3ee0ca07911cristy    case 16:
32820897d38090922ca628fa87157844e3ee0ca07911cristy    {
32830897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned short
32840897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
328540ae80f228afbc5b9b7693135723e47bbb088acecristy
32860897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
328740ae80f228afbc5b9b7693135723e47bbb088acecristy        {
328840ae80f228afbc5b9b7693135723e47bbb088acecristy          for (x=0; x < (ssize_t) number_pixels; x++)
32893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
32900897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelRed(image,p));
329132c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopShortPixel(quantum_info->endian,pixel,q);
32920897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelGreen(image,p));
329332c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopShortPixel(quantum_info->endian,pixel,q);
32940897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlue(image,p));
329532c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopShortPixel(quantum_info->endian,pixel,q);
32960897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
32973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            q+=quantum_info->pad;
32983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
32993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
33003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
33010897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
33020897d38090922ca628fa87157844e3ee0ca07911cristy      {
33030897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToShort(GetPixelRed(image,p));
330432c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopShortPixel(quantum_info->endian,pixel,q);
33050897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
330632c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopShortPixel(quantum_info->endian,pixel,q);
33070897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
330832c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopShortPixel(quantum_info->endian,pixel,q);
33090897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
33100897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
3311f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy      }
3312f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy      break;
3313f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy    }
33140897d38090922ca628fa87157844e3ee0ca07911cristy    case 32:
3315f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy    {
33160897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned int
33170897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
3318f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy
33190897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
33200897d38090922ca628fa87157844e3ee0ca07911cristy        {
3321f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy          for (x=0; x < (ssize_t) number_pixels; x++)
3322f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy          {
332332c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
332432c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
332532c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
33260897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
332740ae80f228afbc5b9b7693135723e47bbb088acecristy            q+=quantum_info->pad;
332840ae80f228afbc5b9b7693135723e47bbb088acecristy          }
332940ae80f228afbc5b9b7693135723e47bbb088acecristy          break;
333040ae80f228afbc5b9b7693135723e47bbb088acecristy        }
33310897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
33320897d38090922ca628fa87157844e3ee0ca07911cristy      {
33330897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToLong(GetPixelRed(image,p));
333432c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopLongPixel(quantum_info->endian,pixel,q);
33350897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
333632c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopLongPixel(quantum_info->endian,pixel,q);
33370897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
333832c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopLongPixel(quantum_info->endian,pixel,q);
33390897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
33400897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
33410897d38090922ca628fa87157844e3ee0ca07911cristy      }
33420897d38090922ca628fa87157844e3ee0ca07911cristy      break;
33430897d38090922ca628fa87157844e3ee0ca07911cristy    }
33440897d38090922ca628fa87157844e3ee0ca07911cristy    case 64:
33450897d38090922ca628fa87157844e3ee0ca07911cristy    {
33460897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
33470897d38090922ca628fa87157844e3ee0ca07911cristy        {
334840ae80f228afbc5b9b7693135723e47bbb088acecristy          for (x=0; x < (ssize_t) number_pixels; x++)
334940ae80f228afbc5b9b7693135723e47bbb088acecristy          {
335032c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
335132c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
335232c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
33530897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
335440ae80f228afbc5b9b7693135723e47bbb088acecristy            q+=quantum_info->pad;
335540ae80f228afbc5b9b7693135723e47bbb088acecristy          }
335640ae80f228afbc5b9b7693135723e47bbb088acecristy          break;
335740ae80f228afbc5b9b7693135723e47bbb088acecristy        }
33580897d38090922ca628fa87157844e3ee0ca07911cristy    }
33590897d38090922ca628fa87157844e3ee0ca07911cristy    default:
33600897d38090922ca628fa87157844e3ee0ca07911cristy    {
33610897d38090922ca628fa87157844e3ee0ca07911cristy      range=GetQuantumRange(quantum_info->depth);
33620897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
33630897d38090922ca628fa87157844e3ee0ca07911cristy      {
336432c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
336532c6843b4cfe042747eff85b4a80ec119c77bdc8cristy          range),q);
336632c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
336732c6843b4cfe042747eff85b4a80ec119c77bdc8cristy          range),q);
336832c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
336932c6843b4cfe042747eff85b4a80ec119c77bdc8cristy          range),q);
33700897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
33710897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
33720897d38090922ca628fa87157844e3ee0ca07911cristy      }
33730897d38090922ca628fa87157844e3ee0ca07911cristy      break;
33740897d38090922ca628fa87157844e3ee0ca07911cristy    }
33750897d38090922ca628fa87157844e3ee0ca07911cristy  }
33760897d38090922ca628fa87157844e3ee0ca07911cristy}
33770897d38090922ca628fa87157844e3ee0ca07911cristy
337832c6843b4cfe042747eff85b4a80ec119c77bdc8cristystatic void ExportRGBAQuantum(const Image *image,QuantumInfo *quantum_info,
337905d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  const MagickSizeType number_pixels,const Quantum *magick_restrict p,
338005d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  unsigned char *magick_restrict q,ExceptionInfo *exception)
33810897d38090922ca628fa87157844e3ee0ca07911cristy{
33820897d38090922ca628fa87157844e3ee0ca07911cristy  QuantumAny
33830897d38090922ca628fa87157844e3ee0ca07911cristy    range;
33840897d38090922ca628fa87157844e3ee0ca07911cristy
33850897d38090922ca628fa87157844e3ee0ca07911cristy  register ssize_t
33860897d38090922ca628fa87157844e3ee0ca07911cristy    x;
33870897d38090922ca628fa87157844e3ee0ca07911cristy
3388b0de93fdedaac769cb08e15b3ec176d4c9078907cristy  assert(exception != (ExceptionInfo *) NULL);
3389e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy  assert(exception->signature == MagickCoreSignature);
33900897d38090922ca628fa87157844e3ee0ca07911cristy  switch (quantum_info->depth)
33910897d38090922ca628fa87157844e3ee0ca07911cristy  {
33920897d38090922ca628fa87157844e3ee0ca07911cristy    case 8:
33930897d38090922ca628fa87157844e3ee0ca07911cristy    {
33940897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned char
33950897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
33960897d38090922ca628fa87157844e3ee0ca07911cristy
33970897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
33980897d38090922ca628fa87157844e3ee0ca07911cristy      {
33990897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToChar(GetPixelRed(image,p));
34000897d38090922ca628fa87157844e3ee0ca07911cristy        q=PopCharPixel(pixel,q);
34010897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
34020897d38090922ca628fa87157844e3ee0ca07911cristy        q=PopCharPixel(pixel,q);
34030897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToChar(GetPixelBlue(image,p));
34040897d38090922ca628fa87157844e3ee0ca07911cristy        q=PopCharPixel(pixel,q);
34050897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToChar(GetPixelAlpha(image,p));
34060897d38090922ca628fa87157844e3ee0ca07911cristy        q=PopCharPixel(pixel,q);
34070897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
34080897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
34090897d38090922ca628fa87157844e3ee0ca07911cristy      }
34100897d38090922ca628fa87157844e3ee0ca07911cristy      break;
34110897d38090922ca628fa87157844e3ee0ca07911cristy    }
34120897d38090922ca628fa87157844e3ee0ca07911cristy    case 10:
34130897d38090922ca628fa87157844e3ee0ca07911cristy    {
34140897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned int
34150897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
34160897d38090922ca628fa87157844e3ee0ca07911cristy
34170897d38090922ca628fa87157844e3ee0ca07911cristy      range=GetQuantumRange(quantum_info->depth);
34180897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->pack == MagickFalse)
341940ae80f228afbc5b9b7693135723e47bbb088acecristy        {
34200897d38090922ca628fa87157844e3ee0ca07911cristy          register ssize_t
34210897d38090922ca628fa87157844e3ee0ca07911cristy            i;
342240ae80f228afbc5b9b7693135723e47bbb088acecristy
34230897d38090922ca628fa87157844e3ee0ca07911cristy          size_t
34240897d38090922ca628fa87157844e3ee0ca07911cristy            quantum;
34250897d38090922ca628fa87157844e3ee0ca07911cristy
34260897d38090922ca628fa87157844e3ee0ca07911cristy          ssize_t
34270897d38090922ca628fa87157844e3ee0ca07911cristy            n;
34280897d38090922ca628fa87157844e3ee0ca07911cristy
34290897d38090922ca628fa87157844e3ee0ca07911cristy          n=0;
34300897d38090922ca628fa87157844e3ee0ca07911cristy          quantum=0;
34310897d38090922ca628fa87157844e3ee0ca07911cristy          pixel=0;
34320897d38090922ca628fa87157844e3ee0ca07911cristy          for (x=0; x < (ssize_t) number_pixels; x++)
34330897d38090922ca628fa87157844e3ee0ca07911cristy          {
34340897d38090922ca628fa87157844e3ee0ca07911cristy            for (i=0; i < 4; i++)
343540ae80f228afbc5b9b7693135723e47bbb088acecristy            {
34360897d38090922ca628fa87157844e3ee0ca07911cristy              switch (i)
3437f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy              {
34380897d38090922ca628fa87157844e3ee0ca07911cristy                case 0: quantum=GetPixelRed(image,p); break;
34390897d38090922ca628fa87157844e3ee0ca07911cristy                case 1: quantum=GetPixelGreen(image,p); break;
34400897d38090922ca628fa87157844e3ee0ca07911cristy                case 2: quantum=GetPixelBlue(image,p); break;
34410897d38090922ca628fa87157844e3ee0ca07911cristy                case 3: quantum=GetPixelAlpha(image,p); break;
3442f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy              }
34430897d38090922ca628fa87157844e3ee0ca07911cristy              switch (n % 3)
34440897d38090922ca628fa87157844e3ee0ca07911cristy              {
34450897d38090922ca628fa87157844e3ee0ca07911cristy                case 0:
34460897d38090922ca628fa87157844e3ee0ca07911cristy                {
34470897d38090922ca628fa87157844e3ee0ca07911cristy                  pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
34480897d38090922ca628fa87157844e3ee0ca07911cristy                    range) << 22);
34490897d38090922ca628fa87157844e3ee0ca07911cristy                  break;
34500897d38090922ca628fa87157844e3ee0ca07911cristy                }
34510897d38090922ca628fa87157844e3ee0ca07911cristy                case 1:
34520897d38090922ca628fa87157844e3ee0ca07911cristy                {
34530897d38090922ca628fa87157844e3ee0ca07911cristy                  pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
34540897d38090922ca628fa87157844e3ee0ca07911cristy                    range) << 12);
34550897d38090922ca628fa87157844e3ee0ca07911cristy                  break;
34560897d38090922ca628fa87157844e3ee0ca07911cristy                }
34570897d38090922ca628fa87157844e3ee0ca07911cristy                case 2:
34580897d38090922ca628fa87157844e3ee0ca07911cristy                {
34590897d38090922ca628fa87157844e3ee0ca07911cristy                  pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
34600897d38090922ca628fa87157844e3ee0ca07911cristy                    range) << 2);
346132c6843b4cfe042747eff85b4a80ec119c77bdc8cristy                  q=PopLongPixel(quantum_info->endian,pixel,q);
34620897d38090922ca628fa87157844e3ee0ca07911cristy                  pixel=0;
34630897d38090922ca628fa87157844e3ee0ca07911cristy                  break;
34640897d38090922ca628fa87157844e3ee0ca07911cristy                }
34650897d38090922ca628fa87157844e3ee0ca07911cristy              }
34660897d38090922ca628fa87157844e3ee0ca07911cristy              n++;
3467c9672a94adef17dee351f074e7c9915405ef29e1cristy            }
34680897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
3469f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy            q+=quantum_info->pad;
3470f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy          }
3471f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy          break;
3472f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy        }
34730897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->quantum == 32UL)
3474f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy        {
3475bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy          for (x=0; x < (ssize_t) number_pixels; x++)
34763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
34770897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
347832c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopQuantumLongPixel(quantum_info,pixel,q);
34790897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
34800897d38090922ca628fa87157844e3ee0ca07911cristy              range);
348132c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopQuantumLongPixel(quantum_info,pixel,q);
34820897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
348332c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopQuantumLongPixel(quantum_info,pixel,q);
34840897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=(unsigned int) ScaleQuantumToAny(GetPixelAlpha(image,p),
34850897d38090922ca628fa87157844e3ee0ca07911cristy              range);
348632c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopQuantumLongPixel(quantum_info,pixel,q);
34870897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
3488f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy            q+=quantum_info->pad;
3489f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy          }
3490f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy          break;
3491f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy        }
34920897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
34930897d38090922ca628fa87157844e3ee0ca07911cristy      {
34940897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
349532c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,pixel,q);
34960897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
349732c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,pixel,q);
34980897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
349932c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,pixel,q);
35000897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=(unsigned int) ScaleQuantumToAny(GetPixelAlpha(image,p),range);
350132c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,pixel,q);
35020897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
35030897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
3504f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy      }
3505f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy      break;
3506f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy    }
35070897d38090922ca628fa87157844e3ee0ca07911cristy    case 16:
3508f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy    {
35090897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned short
35100897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
3511f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy
35120897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
3513f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy        {
3514f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy          for (x=0; x < (ssize_t) number_pixels; x++)
3515f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy          {
35160897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelRed(image,p));
351732c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopShortPixel(quantum_info->endian,pixel,q);
35180897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelGreen(image,p));
351932c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopShortPixel(quantum_info->endian,pixel,q);
35200897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlue(image,p));
352132c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopShortPixel(quantum_info->endian,pixel,q);
35220897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelAlpha(image,p));
352332c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopShortPixel(quantum_info->endian,pixel,q);
35240897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
35253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            q+=quantum_info->pad;
35263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
35273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
35283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
35290897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
35300897d38090922ca628fa87157844e3ee0ca07911cristy      {
35310897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToShort(GetPixelRed(image,p));
353232c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopShortPixel(quantum_info->endian,pixel,q);
35330897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
353432c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopShortPixel(quantum_info->endian,pixel,q);
35350897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
353632c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopShortPixel(quantum_info->endian,pixel,q);
35370897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
353832c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopShortPixel(quantum_info->endian,pixel,q);
35390897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
35400897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
35410897d38090922ca628fa87157844e3ee0ca07911cristy      }
35420897d38090922ca628fa87157844e3ee0ca07911cristy      break;
35430897d38090922ca628fa87157844e3ee0ca07911cristy    }
35440897d38090922ca628fa87157844e3ee0ca07911cristy    case 32:
35450897d38090922ca628fa87157844e3ee0ca07911cristy    {
35460897d38090922ca628fa87157844e3ee0ca07911cristy      register unsigned int
35470897d38090922ca628fa87157844e3ee0ca07911cristy        pixel;
354840ae80f228afbc5b9b7693135723e47bbb088acecristy
35490897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
35500897d38090922ca628fa87157844e3ee0ca07911cristy        {
3551bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy          for (x=0; x < (ssize_t) number_pixels; x++)
35523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
35530897d38090922ca628fa87157844e3ee0ca07911cristy            float
35540897d38090922ca628fa87157844e3ee0ca07911cristy              pixel;
35550897d38090922ca628fa87157844e3ee0ca07911cristy
355632c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
355732c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
355832c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
35590897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=(float) GetPixelAlpha(image,p);
356032c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopFloatPixel(quantum_info,pixel,q);
35610897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
35623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            q+=quantum_info->pad;
35633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
35643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
35653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
35660897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
35670897d38090922ca628fa87157844e3ee0ca07911cristy      {
35680897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToLong(GetPixelRed(image,p));
356932c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopLongPixel(quantum_info->endian,pixel,q);
35700897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
357132c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopLongPixel(quantum_info->endian,pixel,q);
35720897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
357332c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopLongPixel(quantum_info->endian,pixel,q);
35740897d38090922ca628fa87157844e3ee0ca07911cristy        pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
357532c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopLongPixel(quantum_info->endian,pixel,q);
35760897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
35770897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
35780897d38090922ca628fa87157844e3ee0ca07911cristy      }
35790897d38090922ca628fa87157844e3ee0ca07911cristy      break;
35800897d38090922ca628fa87157844e3ee0ca07911cristy    }
35810897d38090922ca628fa87157844e3ee0ca07911cristy    case 64:
35820897d38090922ca628fa87157844e3ee0ca07911cristy    {
35830897d38090922ca628fa87157844e3ee0ca07911cristy      if (quantum_info->format == FloatingPointQuantumFormat)
35843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
35850897d38090922ca628fa87157844e3ee0ca07911cristy          double
35860897d38090922ca628fa87157844e3ee0ca07911cristy            pixel;
35873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
3588bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy          for (x=0; x < (ssize_t) number_pixels; x++)
35893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
359032c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
359132c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
359232c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
35930897d38090922ca628fa87157844e3ee0ca07911cristy            pixel=(double) GetPixelAlpha(image,p);
359432c6843b4cfe042747eff85b4a80ec119c77bdc8cristy            q=PopDoublePixel(quantum_info,pixel,q);
35950897d38090922ca628fa87157844e3ee0ca07911cristy            p+=GetPixelChannels(image);
35963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            q+=quantum_info->pad;
35973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
35983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
35993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
36000897d38090922ca628fa87157844e3ee0ca07911cristy    }
36010897d38090922ca628fa87157844e3ee0ca07911cristy    default:
36020897d38090922ca628fa87157844e3ee0ca07911cristy    {
36030897d38090922ca628fa87157844e3ee0ca07911cristy      range=GetQuantumRange(quantum_info->depth);
36040897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
36050897d38090922ca628fa87157844e3ee0ca07911cristy      {
360632c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
360732c6843b4cfe042747eff85b4a80ec119c77bdc8cristy          range),q);
360832c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
360932c6843b4cfe042747eff85b4a80ec119c77bdc8cristy          range),q);
361032c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
361132c6843b4cfe042747eff85b4a80ec119c77bdc8cristy          range),q);
361232c6843b4cfe042747eff85b4a80ec119c77bdc8cristy        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
361332c6843b4cfe042747eff85b4a80ec119c77bdc8cristy          range),q);
36140897d38090922ca628fa87157844e3ee0ca07911cristy        p+=GetPixelChannels(image);
36150897d38090922ca628fa87157844e3ee0ca07911cristy        q+=quantum_info->pad;
36163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
36173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      break;
36183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
36190897d38090922ca628fa87157844e3ee0ca07911cristy  }
36200897d38090922ca628fa87157844e3ee0ca07911cristy}
3621f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy
36223b8b0b8b150e3f9bc338bb2c01af291269987f81dirkstatic void ExportRGBOQuantum(const Image *image,QuantumInfo *quantum_info,
362305d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  const MagickSizeType number_pixels,const Quantum *magick_restrict p,
362405d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  unsigned char *magick_restrict q,ExceptionInfo *exception)
36253b8b0b8b150e3f9bc338bb2c01af291269987f81dirk{
36263b8b0b8b150e3f9bc338bb2c01af291269987f81dirk  QuantumAny
36273b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    range;
36283b8b0b8b150e3f9bc338bb2c01af291269987f81dirk
36293b8b0b8b150e3f9bc338bb2c01af291269987f81dirk  register ssize_t
36303b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    x;
36313b8b0b8b150e3f9bc338bb2c01af291269987f81dirk
36323b8b0b8b150e3f9bc338bb2c01af291269987f81dirk  assert(exception != (ExceptionInfo *) NULL);
3633e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy  assert(exception->signature == MagickCoreSignature);
36343b8b0b8b150e3f9bc338bb2c01af291269987f81dirk  switch (quantum_info->depth)
36353b8b0b8b150e3f9bc338bb2c01af291269987f81dirk  {
36363b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    case 8:
36373b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    {
36383b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      register unsigned char
36393b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel;
36403b8b0b8b150e3f9bc338bb2c01af291269987f81dirk
36413b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      for (x=0; x < (ssize_t) number_pixels; x++)
36423b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      {
36433b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=ScaleQuantumToChar(GetPixelRed(image,p));
36443b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopCharPixel(pixel,q);
36453b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
36463b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopCharPixel(pixel,q);
36473b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=ScaleQuantumToChar(GetPixelBlue(image,p));
36483b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopCharPixel(pixel,q);
36493b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=ScaleQuantumToChar(GetPixelOpacity(image,p));
36503b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopCharPixel(pixel,q);
36513b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        p+=GetPixelChannels(image);
36523b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q+=quantum_info->pad;
36533b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      }
36543b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      break;
36553b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    }
36563b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    case 10:
36573b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    {
36583b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      register unsigned int
36593b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel;
36603b8b0b8b150e3f9bc338bb2c01af291269987f81dirk
36613b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      range=GetQuantumRange(quantum_info->depth);
36623b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      if (quantum_info->pack == MagickFalse)
36633b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        {
36643b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          register ssize_t
36653b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            i;
36663b8b0b8b150e3f9bc338bb2c01af291269987f81dirk
36673b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          size_t
36683b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            quantum;
36693b8b0b8b150e3f9bc338bb2c01af291269987f81dirk
36703b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          ssize_t
36713b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            n;
36723b8b0b8b150e3f9bc338bb2c01af291269987f81dirk
36733b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          n=0;
36743b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          quantum=0;
36753b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          pixel=0;
36763b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          for (x=0; x < (ssize_t) number_pixels; x++)
36773b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          {
36783b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            for (i=0; i < 4; i++)
36793b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            {
36803b8b0b8b150e3f9bc338bb2c01af291269987f81dirk              switch (i)
36813b8b0b8b150e3f9bc338bb2c01af291269987f81dirk              {
36823b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                case 0: quantum=GetPixelRed(image,p); break;
36833b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                case 1: quantum=GetPixelGreen(image,p); break;
36843b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                case 2: quantum=GetPixelBlue(image,p); break;
36853b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                case 3: quantum=GetPixelOpacity(image,p); break;
36863b8b0b8b150e3f9bc338bb2c01af291269987f81dirk              }
36873b8b0b8b150e3f9bc338bb2c01af291269987f81dirk              switch (n % 3)
36883b8b0b8b150e3f9bc338bb2c01af291269987f81dirk              {
36893b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                case 0:
36903b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                {
36913b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                  pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
36923b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                    range) << 22);
36933b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                  break;
36943b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                }
36953b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                case 1:
36963b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                {
36973b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                  pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
36983b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                    range) << 12);
36993b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                  break;
37003b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                }
37013b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                case 2:
37023b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                {
37033b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                  pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
37043b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                    range) << 2);
37053b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                  q=PopLongPixel(quantum_info->endian,pixel,q);
37063b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                  pixel=0;
37073b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                  break;
37083b8b0b8b150e3f9bc338bb2c01af291269987f81dirk                }
37093b8b0b8b150e3f9bc338bb2c01af291269987f81dirk              }
37103b8b0b8b150e3f9bc338bb2c01af291269987f81dirk              n++;
37113b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            }
37123b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            p+=GetPixelChannels(image);
37133b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q+=quantum_info->pad;
37143b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          }
37153b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          break;
37163b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        }
37173b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      if (quantum_info->quantum == 32UL)
37183b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        {
37193b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          for (x=0; x < (ssize_t) number_pixels; x++)
37203b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          {
37213b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
37223b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopQuantumLongPixel(quantum_info,pixel,q);
37233b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
37243b8b0b8b150e3f9bc338bb2c01af291269987f81dirk              range);
37253b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopQuantumLongPixel(quantum_info,pixel,q);
37263b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
37273b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopQuantumLongPixel(quantum_info,pixel,q);
37283b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            pixel=(unsigned int) ScaleQuantumToAny(GetPixelOpacity(image,p),
37293b8b0b8b150e3f9bc338bb2c01af291269987f81dirk              range);
37303b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopQuantumLongPixel(quantum_info,pixel,q);
37313b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            p+=GetPixelChannels(image);
37323b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q+=quantum_info->pad;
37333b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          }
37343b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          break;
37353b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        }
37363b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      for (x=0; x < (ssize_t) number_pixels; x++)
37373b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      {
37383b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
37393b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopQuantumPixel(quantum_info,pixel,q);
37403b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
37413b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopQuantumPixel(quantum_info,pixel,q);
37423b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
37433b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopQuantumPixel(quantum_info,pixel,q);
37443b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=(unsigned int) ScaleQuantumToAny(GetPixelOpacity(image,p),range);
37453b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopQuantumPixel(quantum_info,pixel,q);
37463b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        p+=GetPixelChannels(image);
37473b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q+=quantum_info->pad;
37483b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      }
37493b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      break;
37503b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    }
37513b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    case 16:
37523b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    {
37533b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      register unsigned short
37543b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel;
37553b8b0b8b150e3f9bc338bb2c01af291269987f81dirk
37563b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      if (quantum_info->format == FloatingPointQuantumFormat)
37573b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        {
37583b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          for (x=0; x < (ssize_t) number_pixels; x++)
37593b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          {
37603b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelRed(image,p));
37613b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopShortPixel(quantum_info->endian,pixel,q);
37623b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelGreen(image,p));
37633b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopShortPixel(quantum_info->endian,pixel,q);
37643b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelBlue(image,p));
37653b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopShortPixel(quantum_info->endian,pixel,q);
37663b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            pixel=SinglePrecisionToHalf(QuantumScale*GetPixelOpacity(image,p));
37673b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopShortPixel(quantum_info->endian,pixel,q);
37683b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            p+=GetPixelChannels(image);
37693b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q+=quantum_info->pad;
37703b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          }
37713b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          break;
37723b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        }
37733b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      for (x=0; x < (ssize_t) number_pixels; x++)
37743b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      {
37753b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=ScaleQuantumToShort(GetPixelRed(image,p));
37763b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopShortPixel(quantum_info->endian,pixel,q);
37773b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
37783b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopShortPixel(quantum_info->endian,pixel,q);
37793b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
37803b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopShortPixel(quantum_info->endian,pixel,q);
37813b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=ScaleQuantumToShort(GetPixelOpacity(image,p));
37823b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopShortPixel(quantum_info->endian,pixel,q);
37833b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        p+=GetPixelChannels(image);
37843b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q+=quantum_info->pad;
37853b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      }
37863b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      break;
37873b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    }
37883b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    case 32:
37893b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    {
37903b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      register unsigned int
37913b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel;
37923b8b0b8b150e3f9bc338bb2c01af291269987f81dirk
37933b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      if (quantum_info->format == FloatingPointQuantumFormat)
37943b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        {
37953b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          for (x=0; x < (ssize_t) number_pixels; x++)
37963b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          {
37973b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            float
37983b8b0b8b150e3f9bc338bb2c01af291269987f81dirk              pixel;
37993b8b0b8b150e3f9bc338bb2c01af291269987f81dirk
38003b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
38013b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
38023b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
38033b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            pixel=(float) GetPixelOpacity(image,p);
38043b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopFloatPixel(quantum_info,pixel,q);
38053b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            p+=GetPixelChannels(image);
38063b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q+=quantum_info->pad;
38073b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          }
38083b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          break;
38093b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        }
38103b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      for (x=0; x < (ssize_t) number_pixels; x++)
38113b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      {
38123b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=ScaleQuantumToLong(GetPixelRed(image,p));
38133b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopLongPixel(quantum_info->endian,pixel,q);
38143b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
38153b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopLongPixel(quantum_info->endian,pixel,q);
38163b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
38173b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopLongPixel(quantum_info->endian,pixel,q);
38183b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        pixel=ScaleQuantumToLong(GetPixelOpacity(image,p));
38193b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopLongPixel(quantum_info->endian,pixel,q);
38203b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        p+=GetPixelChannels(image);
38213b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q+=quantum_info->pad;
38223b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      }
38233b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      break;
38243b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    }
38253b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    case 64:
38263b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    {
38273b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      if (quantum_info->format == FloatingPointQuantumFormat)
38283b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        {
38293b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          double
38303b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            pixel;
38313b8b0b8b150e3f9bc338bb2c01af291269987f81dirk
38323b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          for (x=0; x < (ssize_t) number_pixels; x++)
38333b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          {
38343b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
38353b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
38363b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
38373b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            pixel=(double) GetPixelOpacity(image,p);
38383b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q=PopDoublePixel(quantum_info,pixel,q);
38393b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            p+=GetPixelChannels(image);
38403b8b0b8b150e3f9bc338bb2c01af291269987f81dirk            q+=quantum_info->pad;
38413b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          }
38423b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          break;
38433b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        }
38443b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    }
38453b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    default:
38463b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    {
38473b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      range=GetQuantumRange(quantum_info->depth);
38483b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      for (x=0; x < (ssize_t) number_pixels; x++)
38493b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      {
38503b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
38513b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          range),q);
38523b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
38533b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          range),q);
38543b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
38553b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          range),q);
38563b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelOpacity(image,p),
38573b8b0b8b150e3f9bc338bb2c01af291269987f81dirk          range),q);
38583b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        p+=GetPixelChannels(image);
38593b8b0b8b150e3f9bc338bb2c01af291269987f81dirk        q+=quantum_info->pad;
38603b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      }
38613b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      break;
38623b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    }
38633b8b0b8b150e3f9bc338bb2c01af291269987f81dirk  }
38643b8b0b8b150e3f9bc338bb2c01af291269987f81dirk}
38653b8b0b8b150e3f9bc338bb2c01af291269987f81dirk
386671b27171ca760d049f5d6e9716649e08a9fbe6aecristyMagickExport size_t ExportQuantumPixels(const Image *image,
386771b27171ca760d049f5d6e9716649e08a9fbe6aecristy  CacheView *image_view,QuantumInfo *quantum_info,
386805d2ff7ebf21f659f5b11e45afb294e152f4330cdirk  const QuantumType quantum_type,unsigned char *magick_restrict pixels,
38691d1254d929614c9b0cd5b3d7f8bbe051eb3e99d6cristy  ExceptionInfo *exception)
38700897d38090922ca628fa87157844e3ee0ca07911cristy{
38710897d38090922ca628fa87157844e3ee0ca07911cristy  MagickSizeType
38720897d38090922ca628fa87157844e3ee0ca07911cristy    number_pixels;
3873f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy
38740897d38090922ca628fa87157844e3ee0ca07911cristy  register const Quantum
387505d2ff7ebf21f659f5b11e45afb294e152f4330cdirk    *magick_restrict p;
3876f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy
38770897d38090922ca628fa87157844e3ee0ca07911cristy  register ssize_t
38780897d38090922ca628fa87157844e3ee0ca07911cristy    x;
3879f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy
38800897d38090922ca628fa87157844e3ee0ca07911cristy  register unsigned char
388105d2ff7ebf21f659f5b11e45afb294e152f4330cdirk    *magick_restrict q;
38820897d38090922ca628fa87157844e3ee0ca07911cristy
38830897d38090922ca628fa87157844e3ee0ca07911cristy  size_t
38840897d38090922ca628fa87157844e3ee0ca07911cristy    extent;
38850897d38090922ca628fa87157844e3ee0ca07911cristy
38860897d38090922ca628fa87157844e3ee0ca07911cristy  assert(image != (Image *) NULL);
3887e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy  assert(image->signature == MagickCoreSignature);
38880897d38090922ca628fa87157844e3ee0ca07911cristy  if (image->debug != MagickFalse)
38890897d38090922ca628fa87157844e3ee0ca07911cristy    (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
38900897d38090922ca628fa87157844e3ee0ca07911cristy  assert(quantum_info != (QuantumInfo *) NULL);
3891e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy  assert(quantum_info->signature == MagickCoreSignature);
38920897d38090922ca628fa87157844e3ee0ca07911cristy  if (pixels == (unsigned char *) NULL)
3893b3f97ae45019a91b30792a6fa42d81a2689a7025cristy    pixels=(unsigned char *) GetQuantumPixels(quantum_info);
38940897d38090922ca628fa87157844e3ee0ca07911cristy  if (image_view == (CacheView *) NULL)
38950897d38090922ca628fa87157844e3ee0ca07911cristy    {
38960897d38090922ca628fa87157844e3ee0ca07911cristy      number_pixels=GetImageExtent(image);
38970897d38090922ca628fa87157844e3ee0ca07911cristy      p=GetVirtualPixelQueue(image);
38980897d38090922ca628fa87157844e3ee0ca07911cristy    }
38990897d38090922ca628fa87157844e3ee0ca07911cristy  else
39000897d38090922ca628fa87157844e3ee0ca07911cristy    {
39010897d38090922ca628fa87157844e3ee0ca07911cristy      number_pixels=GetCacheViewExtent(image_view);
39020897d38090922ca628fa87157844e3ee0ca07911cristy      p=GetCacheViewVirtualPixelQueue(image_view);
39030897d38090922ca628fa87157844e3ee0ca07911cristy    }
39040897d38090922ca628fa87157844e3ee0ca07911cristy  if (quantum_info->alpha_type == AssociatedQuantumAlpha)
39050897d38090922ca628fa87157844e3ee0ca07911cristy    {
3906a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy      double
39070897d38090922ca628fa87157844e3ee0ca07911cristy        Sa;
39080897d38090922ca628fa87157844e3ee0ca07911cristy
39090897d38090922ca628fa87157844e3ee0ca07911cristy      register Quantum
391005d2ff7ebf21f659f5b11e45afb294e152f4330cdirk        *magick_restrict q;
39110897d38090922ca628fa87157844e3ee0ca07911cristy
39120897d38090922ca628fa87157844e3ee0ca07911cristy      /*
39130897d38090922ca628fa87157844e3ee0ca07911cristy        Associate alpha.
39140897d38090922ca628fa87157844e3ee0ca07911cristy      */
39150897d38090922ca628fa87157844e3ee0ca07911cristy      q=GetAuthenticPixelQueue(image);
39160897d38090922ca628fa87157844e3ee0ca07911cristy      if (image_view != (CacheView *) NULL)
39170897d38090922ca628fa87157844e3ee0ca07911cristy        q=GetCacheViewAuthenticPixelQueue(image_view);
39180897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) image->columns; x++)
3919f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy      {
39200897d38090922ca628fa87157844e3ee0ca07911cristy        register ssize_t
39210897d38090922ca628fa87157844e3ee0ca07911cristy          i;
39220897d38090922ca628fa87157844e3ee0ca07911cristy
3923883fde11debec15cedb05dc5d7228d8588066bc0cristy        if (GetPixelReadMask(image,q) == 0)
392410a6c61544fb48d72f29ec8f9573bdcd52abf1b7cristy          {
392510a6c61544fb48d72f29ec8f9573bdcd52abf1b7cristy            q+=GetPixelChannels(image);
392610a6c61544fb48d72f29ec8f9573bdcd52abf1b7cristy            continue;
392710a6c61544fb48d72f29ec8f9573bdcd52abf1b7cristy          }
39280897d38090922ca628fa87157844e3ee0ca07911cristy        Sa=QuantumScale*GetPixelAlpha(image,q);
39290897d38090922ca628fa87157844e3ee0ca07911cristy        for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
393040ae80f228afbc5b9b7693135723e47bbb088acecristy        {
39315a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy          PixelChannel channel=GetPixelChannelChannel(image,i);
39325a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy          PixelTrait traits=GetPixelChannelTraits(image,channel);
3933d09f880db9ae231429495434fc7f908bdce240f4cristy          if ((traits & UpdatePixelTrait) == 0)
3934d09f880db9ae231429495434fc7f908bdce240f4cristy            continue;
3935d09f880db9ae231429495434fc7f908bdce240f4cristy          q[i]=ClampToQuantum(Sa*q[i]);
393640ae80f228afbc5b9b7693135723e47bbb088acecristy        }
39370897d38090922ca628fa87157844e3ee0ca07911cristy        q+=GetPixelChannels(image);
3938f9f2ff451b98b43ff5606bd46e694f61b6401d1ccristy      }
39390897d38090922ca628fa87157844e3ee0ca07911cristy    }
39400897d38090922ca628fa87157844e3ee0ca07911cristy  if ((quantum_type == CbYCrQuantum) || (quantum_type == CbYCrAQuantum))
39410897d38090922ca628fa87157844e3ee0ca07911cristy    {
39420897d38090922ca628fa87157844e3ee0ca07911cristy      Quantum
39430897d38090922ca628fa87157844e3ee0ca07911cristy        quantum;
39440897d38090922ca628fa87157844e3ee0ca07911cristy
39450897d38090922ca628fa87157844e3ee0ca07911cristy      register Quantum
394605d2ff7ebf21f659f5b11e45afb294e152f4330cdirk        *magick_restrict q;
39470897d38090922ca628fa87157844e3ee0ca07911cristy
39480897d38090922ca628fa87157844e3ee0ca07911cristy      q=GetAuthenticPixelQueue(image);
39490897d38090922ca628fa87157844e3ee0ca07911cristy      if (image_view != (CacheView *) NULL)
39500897d38090922ca628fa87157844e3ee0ca07911cristy        q=GetAuthenticPixelQueue(image);
39510897d38090922ca628fa87157844e3ee0ca07911cristy      for (x=0; x < (ssize_t) number_pixels; x++)
39520897d38090922ca628fa87157844e3ee0ca07911cristy      {
39530897d38090922ca628fa87157844e3ee0ca07911cristy        quantum=GetPixelRed(image,q);
39540897d38090922ca628fa87157844e3ee0ca07911cristy        SetPixelRed(image,GetPixelGreen(image,q),q);
39550897d38090922ca628fa87157844e3ee0ca07911cristy        SetPixelGreen(image,quantum,q);
39560897d38090922ca628fa87157844e3ee0ca07911cristy        q+=GetPixelChannels(image);
39570897d38090922ca628fa87157844e3ee0ca07911cristy      }
39580897d38090922ca628fa87157844e3ee0ca07911cristy    }
39590897d38090922ca628fa87157844e3ee0ca07911cristy  x=0;
39600897d38090922ca628fa87157844e3ee0ca07911cristy  q=pixels;
396132c6843b4cfe042747eff85b4a80ec119c77bdc8cristy  ResetQuantumState(quantum_info);
39620897d38090922ca628fa87157844e3ee0ca07911cristy  extent=GetQuantumExtent(image,quantum_info,quantum_type);
39630897d38090922ca628fa87157844e3ee0ca07911cristy  switch (quantum_type)
39640897d38090922ca628fa87157844e3ee0ca07911cristy  {
39650897d38090922ca628fa87157844e3ee0ca07911cristy    case AlphaQuantum:
39660897d38090922ca628fa87157844e3ee0ca07911cristy    {
396732c6843b4cfe042747eff85b4a80ec119c77bdc8cristy      ExportAlphaQuantum(image,quantum_info,number_pixels,p,q,exception);
39680897d38090922ca628fa87157844e3ee0ca07911cristy      break;
39690897d38090922ca628fa87157844e3ee0ca07911cristy    }
39700897d38090922ca628fa87157844e3ee0ca07911cristy    case BGRQuantum:
39710897d38090922ca628fa87157844e3ee0ca07911cristy    {
397232c6843b4cfe042747eff85b4a80ec119c77bdc8cristy      ExportBGRQuantum(image,quantum_info,number_pixels,p,q,exception);
39730897d38090922ca628fa87157844e3ee0ca07911cristy      break;
39740897d38090922ca628fa87157844e3ee0ca07911cristy    }
39750897d38090922ca628fa87157844e3ee0ca07911cristy    case BGRAQuantum:
39760897d38090922ca628fa87157844e3ee0ca07911cristy    {
397732c6843b4cfe042747eff85b4a80ec119c77bdc8cristy      ExportBGRAQuantum(image,quantum_info,number_pixels,p,q,exception);
39780897d38090922ca628fa87157844e3ee0ca07911cristy      break;
39790897d38090922ca628fa87157844e3ee0ca07911cristy    }
39803b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    case BGROQuantum:
39813b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    {
39823b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      ExportBGROQuantum(image,quantum_info,number_pixels,p,q,exception);
39833b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      break;
39843b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    }
39850897d38090922ca628fa87157844e3ee0ca07911cristy    case BlackQuantum:
39860897d38090922ca628fa87157844e3ee0ca07911cristy    {
398732c6843b4cfe042747eff85b4a80ec119c77bdc8cristy      ExportBlackQuantum(image,quantum_info,number_pixels,p,q,exception);
39880897d38090922ca628fa87157844e3ee0ca07911cristy      break;
39890897d38090922ca628fa87157844e3ee0ca07911cristy    }
39900897d38090922ca628fa87157844e3ee0ca07911cristy    case BlueQuantum:
39910897d38090922ca628fa87157844e3ee0ca07911cristy    case YellowQuantum:
39920897d38090922ca628fa87157844e3ee0ca07911cristy    {
399332c6843b4cfe042747eff85b4a80ec119c77bdc8cristy      ExportBlueQuantum(image,quantum_info,number_pixels,p,q,exception);
39940897d38090922ca628fa87157844e3ee0ca07911cristy      break;
39950897d38090922ca628fa87157844e3ee0ca07911cristy    }
39960897d38090922ca628fa87157844e3ee0ca07911cristy    case CMYKQuantum:
39970897d38090922ca628fa87157844e3ee0ca07911cristy    {
399832c6843b4cfe042747eff85b4a80ec119c77bdc8cristy      ExportCMYKQuantum(image,quantum_info,number_pixels,p,q,exception);
39990897d38090922ca628fa87157844e3ee0ca07911cristy      break;
40000897d38090922ca628fa87157844e3ee0ca07911cristy    }
40010897d38090922ca628fa87157844e3ee0ca07911cristy    case CMYKAQuantum:
40020897d38090922ca628fa87157844e3ee0ca07911cristy    {
400332c6843b4cfe042747eff85b4a80ec119c77bdc8cristy      ExportCMYKAQuantum(image,quantum_info,number_pixels,p,q,exception);
40040897d38090922ca628fa87157844e3ee0ca07911cristy      break;
40050897d38090922ca628fa87157844e3ee0ca07911cristy    }
40063b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    case CMYKOQuantum:
40073b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    {
40083b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      ExportCMYKOQuantum(image,quantum_info,number_pixels,p,q,exception);
40093b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      break;
40103b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    }
40110897d38090922ca628fa87157844e3ee0ca07911cristy    case CbYCrYQuantum:
40120897d38090922ca628fa87157844e3ee0ca07911cristy    {
401332c6843b4cfe042747eff85b4a80ec119c77bdc8cristy      ExportCbYCrYQuantum(image,quantum_info,number_pixels,p,q,exception);
40140897d38090922ca628fa87157844e3ee0ca07911cristy      break;
40150897d38090922ca628fa87157844e3ee0ca07911cristy    }
40160897d38090922ca628fa87157844e3ee0ca07911cristy    case GrayQuantum:
40170897d38090922ca628fa87157844e3ee0ca07911cristy    {
401832c6843b4cfe042747eff85b4a80ec119c77bdc8cristy      ExportGrayQuantum(image,quantum_info,number_pixels,p,q,exception);
40190897d38090922ca628fa87157844e3ee0ca07911cristy      break;
40200897d38090922ca628fa87157844e3ee0ca07911cristy    }
40210897d38090922ca628fa87157844e3ee0ca07911cristy    case GrayAlphaQuantum:
40220897d38090922ca628fa87157844e3ee0ca07911cristy    {
402332c6843b4cfe042747eff85b4a80ec119c77bdc8cristy      ExportGrayAlphaQuantum(image,quantum_info,number_pixels,p,q,exception);
40240897d38090922ca628fa87157844e3ee0ca07911cristy      break;
40250897d38090922ca628fa87157844e3ee0ca07911cristy    }
40260897d38090922ca628fa87157844e3ee0ca07911cristy    case GreenQuantum:
40270897d38090922ca628fa87157844e3ee0ca07911cristy    case MagentaQuantum:
40280897d38090922ca628fa87157844e3ee0ca07911cristy    {
402932c6843b4cfe042747eff85b4a80ec119c77bdc8cristy      ExportGreenQuantum(image,quantum_info,number_pixels,p,q,exception);
40300897d38090922ca628fa87157844e3ee0ca07911cristy      break;
40310897d38090922ca628fa87157844e3ee0ca07911cristy    }
40320897d38090922ca628fa87157844e3ee0ca07911cristy    case IndexQuantum:
40330897d38090922ca628fa87157844e3ee0ca07911cristy    {
403432c6843b4cfe042747eff85b4a80ec119c77bdc8cristy      ExportIndexQuantum(image,quantum_info,number_pixels,p,q,exception);
40350897d38090922ca628fa87157844e3ee0ca07911cristy      break;
40360897d38090922ca628fa87157844e3ee0ca07911cristy    }
40370897d38090922ca628fa87157844e3ee0ca07911cristy    case IndexAlphaQuantum:
40380897d38090922ca628fa87157844e3ee0ca07911cristy    {
403932c6843b4cfe042747eff85b4a80ec119c77bdc8cristy      ExportIndexAlphaQuantum(image,quantum_info,number_pixels,p,q,exception);
40400897d38090922ca628fa87157844e3ee0ca07911cristy      break;
40410897d38090922ca628fa87157844e3ee0ca07911cristy    }
40420897d38090922ca628fa87157844e3ee0ca07911cristy    case RedQuantum:
40430897d38090922ca628fa87157844e3ee0ca07911cristy    case CyanQuantum:
40440897d38090922ca628fa87157844e3ee0ca07911cristy    {
404532c6843b4cfe042747eff85b4a80ec119c77bdc8cristy      ExportRedQuantum(image,quantum_info,number_pixels,p,q,exception);
40460897d38090922ca628fa87157844e3ee0ca07911cristy      break;
40470897d38090922ca628fa87157844e3ee0ca07911cristy    }
40480897d38090922ca628fa87157844e3ee0ca07911cristy    case OpacityQuantum:
40490897d38090922ca628fa87157844e3ee0ca07911cristy    {
405032c6843b4cfe042747eff85b4a80ec119c77bdc8cristy      ExportOpacityQuantum(image,quantum_info,number_pixels,p,q,exception);
40510897d38090922ca628fa87157844e3ee0ca07911cristy      break;
40520897d38090922ca628fa87157844e3ee0ca07911cristy    }
40530897d38090922ca628fa87157844e3ee0ca07911cristy    case RGBQuantum:
40540897d38090922ca628fa87157844e3ee0ca07911cristy    case CbYCrQuantum:
40550897d38090922ca628fa87157844e3ee0ca07911cristy    {
405632c6843b4cfe042747eff85b4a80ec119c77bdc8cristy      ExportRGBQuantum(image,quantum_info,number_pixels,p,q,exception);
40570897d38090922ca628fa87157844e3ee0ca07911cristy      break;
40580897d38090922ca628fa87157844e3ee0ca07911cristy    }
40590897d38090922ca628fa87157844e3ee0ca07911cristy    case RGBAQuantum:
40600897d38090922ca628fa87157844e3ee0ca07911cristy    case CbYCrAQuantum:
40610897d38090922ca628fa87157844e3ee0ca07911cristy    {
406232c6843b4cfe042747eff85b4a80ec119c77bdc8cristy      ExportRGBAQuantum(image,quantum_info,number_pixels,p,q,exception);
40633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      break;
40643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
40653b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    case RGBOQuantum:
40663b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    {
40673b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      ExportRGBOQuantum(image,quantum_info,number_pixels,p,q,exception);
40683b8b0b8b150e3f9bc338bb2c01af291269987f81dirk      break;
40693b8b0b8b150e3f9bc338bb2c01af291269987f81dirk    }
40703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    default:
40713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      break;
40723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  }
40733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  if ((quantum_type == CbYCrQuantum) || (quantum_type == CbYCrAQuantum))
40743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
40753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      Quantum
40763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        quantum;
40773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
40784c08aed51c5899665ade97263692328eea4af106cristy      register Quantum
407905d2ff7ebf21f659f5b11e45afb294e152f4330cdirk        *magick_restrict q;
40803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
40813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      q=GetAuthenticPixelQueue(image);
40823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      if (image_view != (CacheView *) NULL)
40834c08aed51c5899665ade97263692328eea4af106cristy        q=GetCacheViewAuthenticPixelQueue(image_view);
4084bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy      for (x=0; x < (ssize_t) number_pixels; x++)
40853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
40864c08aed51c5899665ade97263692328eea4af106cristy        quantum=GetPixelRed(image,q);
40874c08aed51c5899665ade97263692328eea4af106cristy        SetPixelRed(image,GetPixelGreen(image,q),q);
40884c08aed51c5899665ade97263692328eea4af106cristy        SetPixelGreen(image,quantum,q);
40890897d38090922ca628fa87157844e3ee0ca07911cristy        q+=GetPixelChannels(image);
40903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
40913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
40923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  return(extent);
40933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy}
4094