quantum-export.c

Go to the documentation of this file.
00001 /*
00002 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
00003 %                                                                             %
00004 %                                                                             %
00005 %                                                                             %
00006 %                QQQ   U   U   AAA   N   N  TTTTT  U   U  M   M               %
00007 %               Q   Q  U   U  A   A  NN  N    T    U   U  MM MM               %
00008 %               Q   Q  U   U  AAAAA  N N N    T    U   U  M M M               %
00009 %               Q  QQ  U   U  A   A  N  NN    T    U   U  M   M               %
00010 %                QQQQ   UUU   A   A  N   N    T     UUU   M   M               %
00011 %                                                                             %
00012 %                   EEEEE  X   X  PPPP    OOO   RRRR   TTTTT                  %
00013 %                   E       X X   P   P  O   O  R   R    T                    %
00014 %                   EEE      X    PPPP   O   O  RRRR     T                    %
00015 %                   E       X X   P      O   O  R R      T                    %
00016 %                   EEEEE  X   X  P       OOO   R  R     T                    %
00017 %                                                                             %
00018 %                 MagickCore Methods to Export Quantum Pixels                 %
00019 %                                                                             %
00020 %                             Software Design                                 %
00021 %                               John Cristy                                   %
00022 %                               October 1998                                  %
00023 %                                                                             %
00024 %                                                                             %
00025 %  Copyright 1999-2008 ImageMagick Studio LLC, a non-profit organization      %
00026 %  dedicated to making software imaging solutions freely available.           %
00027 %                                                                             %
00028 %  You may not use this file except in compliance with the License.  You may  %
00029 %  obtain a copy of the License at                                            %
00030 %                                                                             %
00031 %    http://www.imagemagick.org/script/license.php                            %
00032 %                                                                             %
00033 %  Unless required by applicable law or agreed to in writing, software        %
00034 %  distributed under the License is distributed on an "AS IS" BASIS,          %
00035 %  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   %
00036 %  See the License for the specific language governing permissions and        %
00037 %  limitations under the License.                                             %
00038 %                                                                             %
00039 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
00040 %
00041 %
00042 */
00043 
00044 /*
00045   Include declarations.
00046 */
00047 #include "magick/studio.h"
00048 #include "magick/property.h"
00049 #include "magick/blob.h"
00050 #include "magick/blob-private.h"
00051 #include "magick/color-private.h"
00052 #include "magick/exception.h"
00053 #include "magick/exception-private.h"
00054 #include "magick/cache.h"
00055 #include "magick/constitute.h"
00056 #include "magick/delegate.h"
00057 #include "magick/geometry.h"
00058 #include "magick/list.h"
00059 #include "magick/magick.h"
00060 #include "magick/memory_.h"
00061 #include "magick/monitor.h"
00062 #include "magick/option.h"
00063 #include "magick/pixel.h"
00064 #include "magick/pixel-private.h"
00065 #include "magick/quantum.h"
00066 #include "magick/quantum-private.h"
00067 #include "magick/resource_.h"
00068 #include "magick/semaphore.h"
00069 #include "magick/statistic.h"
00070 #include "magick/stream.h"
00071 #include "magick/string_.h"
00072 #include "magick/utility.h"
00073 
00074 /*
00075 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
00076 %                                                                             %
00077 %                                                                             %
00078 %                                                                             %
00079 +   E x p o r t Q u a n t u m P i x e l s                                     %
00080 %                                                                             %
00081 %                                                                             %
00082 %                                                                             %
00083 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
00084 %
00085 %  ExportQuantumPixels() transfers one or more pixel components from the image
00086 %  pixel cache to a user supplied buffer.  The pixels are returned in network
00087 %  byte order.  MagickTrue is returned if the pixels are successfully
00088 %  transferred, otherwise MagickFalse.
00089 %
00090 %  The format of the ExportQuantumPixels method is:
00091 %
00092 %      size_t ExportQuantumPixels(const Image *image,const CacheView *image_view,
00093 %        const QuantumInfo *quantum_info,const QuantumType quantum_type,
00094 %        unsigned char *pixels,ExceptionInfo *exception)
00095 %
00096 %  A description of each parameter follows:
00097 %
00098 %    o image: the image.
00099 %
00100 %    o image_view: the image cache view.
00101 %
00102 %    o quantum_info: the quantum info.
00103 %
00104 %    o quantum_type: Declare which pixel components to transfer (RGB, RGBA,
00105 %      etc).
00106 %
00107 %    o pixels:  The components are transferred to this buffer.
00108 %
00109 %    o exception: return any errors or warnings in this structure.
00110 %
00111 */
00112 
00113 static inline unsigned char *PopDoublePixel(const QuantumState *quantum_state,
00114   const double pixel,unsigned char *pixels)
00115 {
00116   double
00117     *p;
00118 
00119   unsigned char
00120     quantum[8];
00121 
00122   p=(double *) quantum;
00123   *p=(double) (pixel*quantum_state->inverse_scale+quantum_state->minimum);
00124   if (quantum_state->endian != LSBEndian)
00125     {
00126       *pixels++=quantum[7];
00127       *pixels++=quantum[6];
00128       *pixels++=quantum[5];
00129       *pixels++=quantum[4];
00130       *pixels++=quantum[3];
00131       *pixels++=quantum[2];
00132       *pixels++=quantum[1];
00133       *pixels++=quantum[0];
00134       return(pixels);
00135     }
00136   *pixels++=quantum[0];
00137   *pixels++=quantum[1];
00138   *pixels++=quantum[2];
00139   *pixels++=quantum[3];
00140   *pixels++=quantum[4];
00141   *pixels++=quantum[5];
00142   *pixels++=quantum[6];
00143   *pixels++=quantum[7];
00144   return(pixels);
00145 }
00146 
00147 static inline unsigned char *PopFloatPixel(const QuantumState *quantum_state,
00148   const float pixel,unsigned char *pixels)
00149 {
00150   float
00151     *p;
00152 
00153   unsigned char
00154     quantum[4];
00155 
00156   p=(float *) quantum;
00157   *p=(float) ((double) pixel*quantum_state->inverse_scale+
00158     quantum_state->minimum);
00159   if (quantum_state->endian != LSBEndian)
00160     {
00161       *pixels++=quantum[3];
00162       *pixels++=quantum[2];
00163       *pixels++=quantum[1];
00164       *pixels++=quantum[0];
00165       return(pixels);
00166     }
00167   *pixels++=quantum[0];
00168   *pixels++=quantum[1];
00169   *pixels++=quantum[2];
00170   *pixels++=quantum[3];
00171   return(pixels);
00172 }
00173 
00174 static inline unsigned char *PopQuantumPixel(QuantumState *quantum_state,
00175   const unsigned long depth,const QuantumAny pixel,unsigned char *pixels)
00176 {
00177   register long
00178     i;
00179 
00180   register unsigned long
00181     quantum_bits;
00182 
00183   if (quantum_state->bits == 0UL)
00184     quantum_state->bits=8UL;
00185   for (i=(long) depth; i > 0L; )
00186   {
00187     quantum_bits=(unsigned long) i;
00188     if (quantum_bits > quantum_state->bits)
00189       quantum_bits=quantum_state->bits;
00190     i-=quantum_bits;
00191     if (quantum_state->bits == 8)
00192       *pixels='\0';
00193     quantum_state->bits-=quantum_bits;
00194     *pixels|=(((pixel >> i) &~ ((~0UL) << quantum_bits)) <<
00195       quantum_state->bits);
00196     if (quantum_state->bits == 0UL)
00197       {
00198         pixels++;
00199         quantum_state->bits=8UL;
00200       }
00201   }
00202   return(pixels);
00203 }
00204 
00205 static inline unsigned char *PopQuantumLongPixel(QuantumState *quantum_state,
00206   const unsigned long depth,const unsigned long pixel,unsigned char *pixels)
00207 {
00208   register long
00209     i;
00210 
00211   unsigned long
00212     quantum_bits;
00213 
00214   if (quantum_state->bits == 0UL)
00215     quantum_state->bits=32UL;
00216   for (i=(long) depth; i > 0; )
00217   {
00218     quantum_bits=(unsigned long) i;
00219     if (quantum_bits > quantum_state->bits)
00220       quantum_bits=quantum_state->bits;
00221     quantum_state->pixel|=(((pixel >> (depth-i)) &
00222       quantum_state->mask[quantum_bits]) << (32UL-quantum_state->bits));
00223     i-=quantum_bits;
00224     quantum_state->bits-=quantum_bits;
00225     if (quantum_state->bits == 0U)
00226       {
00227         pixels=PopLongPixel(quantum_state->endian,quantum_state->pixel,pixels);
00228         quantum_state->pixel=0U;
00229         quantum_state->bits=32UL;
00230       }
00231   }
00232   return(pixels);
00233 }
00234 
00235 MagickExport size_t ExportQuantumPixels(const Image *image,
00236   const CacheView *image_view,const QuantumInfo *quantum_info,
00237   const QuantumType quantum_type,unsigned char *pixels,ExceptionInfo *exception)
00238 {
00239   EndianType
00240     endian;
00241 
00242   long
00243     bit;
00244 
00245   MagickRealType
00246     alpha;
00247 
00248   MagickSizeType
00249     number_pixels;
00250 
00251   QuantumAny
00252     range;
00253 
00254   QuantumState
00255     quantum_state;
00256 
00257   register const IndexPacket
00258     *indexes;
00259 
00260   register const PixelPacket
00261     *p;
00262 
00263   register long
00264     x;
00265 
00266   register unsigned char
00267     *q;
00268 
00269   size_t
00270     extent;
00271 
00272   assert(image != (Image *) NULL);
00273   assert(image->signature == MagickSignature);
00274   if (image->debug != MagickFalse)
00275     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
00276   assert(quantum_info != (QuantumInfo *) NULL);
00277   assert(quantum_info->signature == MagickSignature);
00278   if (pixels == (unsigned char *) NULL)
00279     pixels=GetQuantumPixels(quantum_info);
00280   number_pixels=GetImageExtent(image);
00281   p=GetVirtualPixelQueue(image);
00282   indexes=GetVirtualIndexQueue(image);
00283   if (image_view != (CacheView *) NULL)
00284     {
00285       number_pixels=GetCacheViewExtent(image_view);
00286       p=GetCacheViewVirtualPixelQueue(image_view);
00287       indexes=GetCacheViewVirtualIndexQueue(image_view);
00288     }
00289   if (quantum_info->alpha_type == AssociatedQuantumAlpha)
00290     {
00291       register PixelPacket
00292         *__restrict q;
00293 
00294       /*
00295         Associate alpha.
00296       */
00297       q=GetAuthenticPixelQueue(image);
00298       if (image_view != (CacheView *) NULL)
00299         q=(PixelPacket *) GetCacheViewVirtualPixelQueue(image_view);
00300       for (x=0; x < (long) image->columns; x++)
00301       {
00302         alpha=QuantumScale*((double) QuantumRange-q->opacity);
00303         q->red=RoundToQuantum(alpha*q->red);
00304         q->green=RoundToQuantum(alpha*q->green);
00305         q->blue=RoundToQuantum(alpha*q->blue);
00306         q++;
00307       }
00308     }
00309   if ((quantum_type == RGBOQuantum) || (quantum_type == CMYKOQuantum))
00310     {
00311       register PixelPacket
00312         *__restrict q;
00313 
00314       q=GetAuthenticPixelQueue(image);
00315       if (image_view != (CacheView *) NULL)
00316         q=(PixelPacket *) GetCacheViewVirtualPixelQueue(image_view);
00317       for (x=0; x < (long) number_pixels; x++)
00318       {
00319         q->opacity=(Quantum) (QuantumRange-q->opacity);
00320         q++;
00321       }
00322     }
00323   if ((quantum_type == CbYCrQuantum) || (quantum_type == CbYCrAQuantum))
00324     {
00325       Quantum
00326         quantum;
00327 
00328       register PixelPacket
00329         *__restrict q;
00330 
00331       q=GetAuthenticPixelQueue(image);
00332       if (image_view != (CacheView *) NULL)
00333         q=GetAuthenticPixelQueue(image);
00334       for (x=0; x < (long) number_pixels; x++)
00335       {
00336         quantum=q->red;
00337         q->red=q->green;
00338         q->green=quantum;
00339         q++;
00340       }
00341     }
00342   x=0;
00343   q=pixels;
00344   InitializeQuantumState(quantum_info,image->endian,&quantum_state);
00345   extent=GetQuantumExtent(image,quantum_info,quantum_type);
00346   endian=quantum_state.endian;
00347   switch (quantum_type)
00348   {
00349     case IndexQuantum:
00350     {
00351       if (image->storage_class != PseudoClass)
00352         {
00353           (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
00354             "ColormappedImageRequired","`%s'",image->filename);
00355           return(extent);
00356         }
00357       switch (quantum_info->depth)
00358       {
00359         case 1:
00360         {
00361           register unsigned char
00362             pixel;
00363 
00364           for (x=((long) number_pixels-7); x > 0; x-=8)
00365           {
00366             pixel=(unsigned char) *indexes++;
00367             *q=((pixel & 0x01) << 7);
00368             pixel=(unsigned char) *indexes++;
00369             *q|=((pixel & 0x01) << 6);
00370             pixel=(unsigned char) *indexes++;
00371             *q|=((pixel & 0x01) << 5);
00372             pixel=(unsigned char) *indexes++;
00373             *q|=((pixel & 0x01) << 4);
00374             pixel=(unsigned char) *indexes++;
00375             *q|=((pixel & 0x01) << 3);
00376             pixel=(unsigned char) *indexes++;
00377             *q|=((pixel & 0x01) << 2);
00378             pixel=(unsigned char) *indexes++;
00379             *q|=((pixel & 0x01) << 1);
00380             pixel=(unsigned char) *indexes++;
00381             *q|=((pixel & 0x01) << 0);
00382             q++;
00383           }
00384           if ((number_pixels % 8) != 0)
00385             {
00386               *q='\0';
00387               for (bit=7; bit >= (long) (8-(number_pixels % 8)); bit--)
00388               {
00389                 pixel=(unsigned char) *indexes++;
00390                 *q|=((pixel & 0x01) << (unsigned char) bit);
00391               }
00392               q++;
00393             }
00394           break;
00395         }
00396         case 4:
00397         {
00398           register unsigned char
00399             pixel;
00400 
00401           for (x=0; x < (long) (number_pixels-1) ; x+=2)
00402           {
00403             pixel=(unsigned char) *indexes++;
00404             *q=((pixel & 0xf) << 4);
00405             pixel=(unsigned char) *indexes++;
00406             *q|=((pixel & 0xf) << 0);
00407             q++;
00408           }
00409           if ((number_pixels % 2) != 0)
00410             {
00411               pixel=(unsigned char) *indexes++;
00412               *q=((pixel & 0xf) << 4);
00413               q++;
00414             }
00415           break;
00416         }
00417         case 8:
00418         {
00419           for (x=0; x < (long) number_pixels; x++)
00420           {
00421             q=PopCharPixel((unsigned char) indexes[x],q);
00422             q+=quantum_info->pad;
00423           }
00424           break;
00425         }
00426         case 16:
00427         {
00428           for (x=0; x < (long) number_pixels; x++)
00429           {
00430             q=PopShortPixel(endian,(unsigned short) indexes[x],q);
00431             q+=quantum_info->pad;
00432           }
00433           break;
00434         }
00435         case 32:
00436         {
00437           if (quantum_info->format == FloatingPointQuantumFormat)
00438             {
00439               for (x=0; x < (long) number_pixels; x++)
00440               {
00441                 q=PopFloatPixel(&quantum_state,(float) indexes[x],q);
00442                 p++;
00443                 q+=quantum_info->pad;
00444               }
00445               break;
00446             }
00447           for (x=0; x < (long) number_pixels; x++)
00448           {
00449             q=PopLongPixel(endian,(unsigned long) indexes[x],q);
00450             q+=quantum_info->pad;
00451           }
00452           break;
00453         }
00454         case 64:
00455         {
00456           if (quantum_info->format == FloatingPointQuantumFormat)
00457             {
00458               for (x=0; x < (long) number_pixels; x++)
00459               {
00460                 q=PopDoublePixel(&quantum_state,(double) indexes[x],q);
00461                 p++;
00462                 q+=quantum_info->pad;
00463               }
00464               break;
00465             }
00466         }
00467         default:
00468         {
00469           for (x=0; x < (long) number_pixels; x++)
00470           {
00471             q=PopQuantumPixel(&quantum_state,image->depth,indexes[x],q);
00472             p++;
00473             q+=quantum_info->pad;
00474           }
00475           break;
00476         }
00477       }
00478       break;
00479     }
00480     case IndexAlphaQuantum:
00481     {
00482       if (image->storage_class != PseudoClass)
00483         {
00484           (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
00485             "ColormappedImageRequired","`%s'",image->filename);
00486           return(extent);
00487         }
00488       switch (quantum_info->depth)
00489       {
00490         case 1:
00491         {
00492           register unsigned char
00493             pixel;
00494 
00495           for (x=((long) number_pixels-3); x > 0; x-=4)
00496           {
00497             pixel=(unsigned char) *indexes++;
00498             *q=((pixel & 0x01) << 7);
00499             pixel=(unsigned char) (p->opacity == (Quantum) TransparentOpacity ?
00500               1 : 0);
00501             *q|=((pixel & 0x01) << 6);
00502             p++;
00503             pixel=(unsigned char) *indexes++;
00504             *q|=((pixel & 0x01) << 5);
00505             pixel=(unsigned char) (p->opacity == (Quantum) TransparentOpacity ?
00506               1 : 0);
00507             *q|=((pixel & 0x01) << 4);
00508             p++;
00509             pixel=(unsigned char) *indexes++;
00510             *q|=((pixel & 0x01) << 3);
00511             pixel=(unsigned char) (p->opacity == (Quantum) TransparentOpacity ?
00512               1 : 0);
00513             *q|=((pixel & 0x01) << 2);
00514             p++;
00515             pixel=(unsigned char) *indexes++;
00516             *q|=((pixel & 0x01) << 1);
00517             pixel=(unsigned char) (p->opacity == (Quantum) TransparentOpacity ?
00518               1 : 0);
00519             *q|=((pixel & 0x01) << 0);
00520             p++;
00521             q++;
00522           }
00523           if ((number_pixels % 4) != 0)
00524             {
00525               *q='\0';
00526               for (bit=3; bit >= (long) (4-(number_pixels % 4)); bit-=2)
00527               {
00528                 pixel=(unsigned char) *indexes++;
00529                 *q|=((pixel & 0x01) << (unsigned char) (bit+4));
00530                 pixel=(unsigned char) (p->opacity == (Quantum)
00531                   TransparentOpacity ? 1 : 0);
00532                 *q|=((pixel & 0x01) << (unsigned char) (bit+4-1));
00533                 p++;
00534               }
00535               q++;
00536             }
00537           break;
00538         }
00539         case 4:
00540         {
00541           register unsigned char
00542             pixel;
00543 
00544           for (x=0; x < (long) number_pixels ; x++)
00545           {
00546             pixel=(unsigned char) *indexes++;
00547             *q=((pixel & 0xf) << 4);
00548             pixel=(unsigned char) (16*QuantumScale*((Quantum) (QuantumRange-
00549               p->opacity))+0.5);
00550             *q|=((pixel & 0xf) << 0);
00551             p++;
00552             q++;
00553           }
00554           break;
00555         }
00556         case 8:
00557         {
00558           register unsigned char
00559             pixel;
00560 
00561           for (x=0; x < (long) number_pixels; x++)
00562           {
00563             q=PopCharPixel((unsigned char) indexes[x],q);
00564             pixel=ScaleQuantumToChar((Quantum) (QuantumRange-p->opacity));
00565             q=PopCharPixel(pixel,q);
00566             p++;
00567             q+=quantum_info->pad;
00568           }
00569           break;
00570         }
00571         case 16:
00572         {
00573           register unsigned short
00574             pixel;
00575 
00576           for (x=0; x < (long) number_pixels; x++)
00577           {
00578             q=PopShortPixel(endian,(unsigned short) indexes[x],q);
00579             pixel=ScaleQuantumToShort((Quantum) (QuantumRange-p->opacity));
00580             q=PopShortPixel(endian,pixel,q);
00581             p++;
00582             q+=quantum_info->pad;
00583           }
00584           break;
00585         }
00586         case 32:
00587         {
00588           register unsigned long
00589             pixel;
00590 
00591           if (quantum_info->format == FloatingPointQuantumFormat)
00592             {
00593               for (x=0; x < (long) number_pixels; x++)
00594               {
00595                 float
00596                   pixel;
00597 
00598                 q=PopFloatPixel(&quantum_state,(float) indexes[x],q);
00599                 pixel=(float)  (QuantumRange-p->opacity);
00600                 q=PopFloatPixel(&quantum_state,pixel,q);
00601                 p++;
00602                 q+=quantum_info->pad;
00603               }
00604               break;
00605             }
00606           for (x=0; x < (long) number_pixels; x++)
00607           {
00608             q=PopLongPixel(endian,(unsigned long) indexes[x],q);
00609             pixel=ScaleQuantumToLong((Quantum) (QuantumRange-p->opacity));
00610             q=PopLongPixel(endian,pixel,q);
00611             p++;
00612             q+=quantum_info->pad;
00613           }
00614           break;
00615         }
00616         case 64:
00617         {
00618           if (quantum_info->format == FloatingPointQuantumFormat)
00619             {
00620               for (x=0; x < (long) number_pixels; x++)
00621               {
00622                 double
00623                   pixel;
00624 
00625                 q=PopDoublePixel(&quantum_state,(double) indexes[x],q);
00626                 pixel=(double) (QuantumRange-p->opacity);
00627                 q=PopDoublePixel(&quantum_state,pixel,q);
00628                 p++;
00629                 q+=quantum_info->pad;
00630               }
00631               break;
00632             }
00633         }
00634         default:
00635         {
00636           range=GetQuantumRange(image->depth);
00637           for (x=0; x < (long) number_pixels; x++)
00638           {
00639             q=PopQuantumPixel(&quantum_state,image->depth,indexes[x],q);
00640             q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
00641               (Quantum) (QuantumRange-p->opacity),range),q);
00642             p++;
00643             q+=quantum_info->pad;
00644           }
00645           break;
00646         }
00647       }
00648       break;
00649     }
00650     case GrayQuantum:
00651     {
00652       switch (quantum_info->depth)
00653       {
00654         case 1:
00655         {
00656           register Quantum
00657             threshold;
00658 
00659           register unsigned char
00660             black,
00661             white;
00662 
00663           black=0x00;
00664           white=0x01;
00665           if (quantum_info->min_is_white != MagickFalse)
00666             {
00667               black=0x01;
00668               white=0x00;
00669             }
00670           threshold=(Quantum) (QuantumRange/2);
00671           for (x=((long) number_pixels-7); x > 0; x-=8)
00672           {
00673             *q='\0';
00674             *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 7;
00675             p++;
00676             *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 6;
00677             p++;
00678             *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 5;
00679             p++;
00680             *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 4;
00681             p++;
00682             *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 3;
00683             p++;
00684             *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 2;
00685             p++;
00686             *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 1;
00687             p++;
00688             *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 0;
00689             p++;
00690             q++;
00691           }
00692           if ((number_pixels % 8) != 0)
00693             {
00694               *q='\0';
00695               for (bit=7; bit >= (long) (8-(number_pixels % 8)); bit--)
00696               {
00697                 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) <<
00698                   bit;
00699                 p++;
00700               }
00701               q++;
00702             }
00703           break;
00704         }
00705         case 4:
00706         {
00707           register unsigned char
00708             pixel;
00709 
00710           for (x=0; x < (long) (number_pixels-1) ; x+=2)
00711           {
00712             pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
00713             *q=(((pixel >> 4) & 0xf) << 4);
00714             p++;
00715             pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
00716             *q|=pixel >> 4;
00717             p++;
00718             q++;
00719           }
00720           if ((number_pixels % 2) != 0)
00721             {
00722               pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
00723               *q=(((pixel >> 4) & 0xf) << 4);
00724               p++;
00725               q++;
00726             }
00727           break;
00728         }
00729         case 8:
00730         {
00731           register unsigned char
00732             pixel;
00733 
00734           for (x=0; x < (long) number_pixels; x++)
00735           {
00736             pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
00737             q=PopCharPixel(pixel,q);
00738             p++;
00739             q+=quantum_info->pad;
00740           }
00741           break;
00742         }
00743         case 10:
00744         {
00745           register unsigned short
00746             pixel;
00747 
00748           range=GetQuantumRange(image->depth);
00749           if (quantum_info->pack == MagickFalse)
00750             {
00751               for (x=0; x < (long) number_pixels; x++)
00752               {
00753                 pixel=ScaleQuantumToShort(PixelIntensityToQuantum(p));
00754                 q=PopShortPixel(endian,(unsigned short) ScaleQuantumToAny(
00755                   (Quantum) pixel,range),q);
00756                 p++;
00757                 q+=quantum_info->pad;
00758               }
00759               break;
00760             }
00761           for (x=0; x < (long) number_pixels; x++)
00762           {
00763             q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
00764               PixelIntensityToQuantum(p),range),q);
00765             p++;
00766             q+=quantum_info->pad;
00767           }
00768           break;
00769         }
00770         case 12:
00771         {
00772           register unsigned short
00773             pixel;
00774 
00775           range=GetQuantumRange(image->depth);
00776           if (quantum_info->pack == MagickFalse)
00777             {
00778               for (x=0; x < (long) number_pixels; x++)
00779               {
00780                 pixel=ScaleQuantumToShort(PixelIntensityToQuantum(p));
00781                 q=PopShortPixel(endian,(unsigned short) (pixel >> 4),q);
00782                 p++;
00783                 q+=quantum_info->pad;
00784               }
00785               break;
00786             }
00787           for (x=0; x < (long) number_pixels; x++)
00788           {
00789             q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
00790               PixelIntensityToQuantum(p),range),q);
00791             p++;
00792             q+=quantum_info->pad;
00793           }
00794           break;
00795         }
00796         case 16:
00797         {
00798           register unsigned short
00799             pixel;
00800 
00801           for (x=0; x < (long) number_pixels; x++)
00802           {
00803             pixel=ScaleQuantumToShort(PixelIntensityToQuantum(p));
00804             q=PopShortPixel(endian,pixel,q);
00805             p++;
00806             q+=quantum_info->pad;
00807           }
00808           break;
00809         }
00810         case 32:
00811         {
00812           register unsigned long
00813             pixel;
00814 
00815           if (quantum_info->format == FloatingPointQuantumFormat)
00816             {
00817               for (x=0; x < (long) number_pixels; x++)
00818               {
00819                 float
00820                   pixel;
00821 
00822                 pixel=(float) PixelIntensityToQuantum(p);
00823                 q=PopFloatPixel(&quantum_state,pixel,q);
00824                 p++;
00825                 q+=quantum_info->pad;
00826               }
00827               break;
00828             }
00829           for (x=0; x < (long) number_pixels; x++)
00830           {
00831             pixel=ScaleQuantumToLong(PixelIntensityToQuantum(p));
00832             q=PopLongPixel(endian,pixel,q);
00833             p++;
00834             q+=quantum_info->pad;
00835           }
00836           break;
00837         }
00838         case 64:
00839         {
00840           if (quantum_info->format == FloatingPointQuantumFormat)
00841             {
00842               for (x=0; x < (long) number_pixels; x++)
00843               {
00844                 double
00845                   pixel;
00846 
00847                 pixel=(double) PixelIntensityToQuantum(p);
00848                 q=PopDoublePixel(&quantum_state,pixel,q);
00849                 p++;
00850                 q+=quantum_info->pad;
00851               }
00852               break;
00853             }
00854         }
00855         default:
00856         {
00857           range=GetQuantumRange(image->depth);
00858           for (x=0; x < (long) number_pixels; x++)
00859           {
00860             q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
00861               PixelIntensityToQuantum(p),range),q);
00862             p++;
00863             q+=quantum_info->pad;
00864           }
00865           break;
00866         }
00867       }
00868       break;
00869     }
00870     case GrayAlphaQuantum:
00871     {
00872       switch (quantum_info->depth)
00873       {
00874         case 1:
00875         {
00876           register Quantum
00877             threshold;
00878 
00879           register unsigned char
00880             black,
00881             pixel,
00882             white;
00883 
00884           black=0x00;
00885           white=0x01;
00886           if (quantum_info->min_is_white == MagickFalse)
00887             {
00888               black=0x01;
00889               white=0x00;
00890             }
00891           threshold=(Quantum) (QuantumRange/2);
00892           for (x=((long) number_pixels-3); x > 0; x-=4)
00893           {
00894             *q='\0';
00895             *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 7;
00896             pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 : 0x01);
00897             *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 6);
00898             p++;
00899             *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 5;
00900             pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 : 0x01);
00901             *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 4);
00902             p++;
00903             *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 3;
00904             pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 : 0x01);
00905             *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 2);
00906             p++;
00907             *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) << 1;
00908             pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 : 0x01);
00909             *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 0);
00910             p++;
00911             q++;
00912           }
00913           if ((number_pixels % 4) != 0)
00914             {
00915               *q='\0';
00916               for (bit=3; bit >= (long) (4-(number_pixels % 4)); bit-=2)
00917               {
00918                 *q|=(PixelIntensityToQuantum(p) < threshold ? black : white) <<
00919                   (bit+4);
00920                 pixel=(unsigned char) (p->opacity == OpaqueOpacity ? 0x00 :
00921                   0x01);
00922                 *q|=(((int) pixel != 0 ? 0x00 : 0x01) << (unsigned char)
00923                   (bit+4-1));
00924                 p++;
00925               }
00926               q++;
00927             }
00928           break;
00929         }
00930         case 4:
00931         {
00932           register unsigned char
00933             pixel;
00934 
00935           for (x=0; x < (long) number_pixels ; x++)
00936           {
00937             pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
00938             *q=(((pixel >> 4) & 0xf) << 4);
00939             pixel=(unsigned char) (16*QuantumScale*((Quantum) (QuantumRange-
00940               p->opacity))+0.5);
00941             *q|=pixel & 0xf;
00942             p++;
00943             q++;
00944           }
00945           break;
00946         }
00947         case 8:
00948         {
00949           register unsigned char
00950             pixel;
00951 
00952           for (x=0; x < (long) number_pixels; x++)
00953           {
00954             pixel=ScaleQuantumToChar(PixelIntensityToQuantum(p));
00955             q=PopCharPixel(pixel,q);
00956             pixel=ScaleQuantumToChar((Quantum) (QuantumRange-p->opacity));
00957             q=PopCharPixel(pixel,q);
00958             p++;
00959             q+=quantum_info->pad;
00960           }
00961           break;
00962         }
00963         case 16:
00964         {
00965           register unsigned short
00966             pixel;
00967 
00968           for (x=0; x < (long) number_pixels; x++)
00969           {
00970             pixel=ScaleQuantumToShort(PixelIntensityToQuantum(p));
00971             q=PopShortPixel(endian,pixel,q);
00972             pixel=ScaleQuantumToShort((Quantum) (QuantumRange-p->opacity));
00973             q=PopShortPixel(endian,pixel,q);
00974             p++;
00975             q+=quantum_info->pad;
00976           }
00977           break;
00978         }
00979         case 32:
00980         {
00981           register unsigned long
00982             pixel;
00983 
00984           if (quantum_info->format == FloatingPointQuantumFormat)
00985             {
00986               for (x=0; x < (long) number_pixels; x++)
00987               {
00988                 float
00989                   pixel;
00990 
00991                 pixel=(float) PixelIntensityToQuantum(p);
00992                 q=PopFloatPixel(&quantum_state,pixel,q);
00993                 pixel=(float) (QuantumRange-p->opacity);
00994                 q=PopFloatPixel(&quantum_state,pixel,q);
00995                 p++;
00996                 q+=quantum_info->pad;
00997               }
00998               break;
00999             }
01000           for (x=0; x < (long) number_pixels; x++)
01001           {
01002             pixel=ScaleQuantumToLong(PixelIntensityToQuantum(p));
01003             q=PopLongPixel(endian,pixel,q);
01004             pixel=ScaleQuantumToLong((Quantum) (QuantumRange-p->opacity));
01005             q=PopLongPixel(endian,pixel,q);
01006             p++;
01007             q+=quantum_info->pad;
01008           }
01009           break;
01010         }
01011         case 64:
01012         {
01013           if (quantum_info->format == FloatingPointQuantumFormat)
01014             {
01015               for (x=0; x < (long) number_pixels; x++)
01016               {
01017                 double
01018                   pixel;
01019 
01020                 pixel=(double) PixelIntensityToQuantum(p);
01021                 q=PopDoublePixel(&quantum_state,pixel,q);
01022                 pixel=(double) (QuantumRange-p->opacity);
01023                 q=PopDoublePixel(&quantum_state,pixel,q);
01024                 p++;
01025                 q+=quantum_info->pad;
01026               }
01027               break;
01028             }
01029         }
01030         default:
01031         {
01032           range=GetQuantumRange(image->depth);
01033           for (x=0; x < (long) number_pixels; x++)
01034           {
01035             q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
01036               PixelIntensityToQuantum(p),range),q);
01037             q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
01038               (Quantum) (QuantumRange-p->opacity),range),q);
01039             p++;
01040             q+=quantum_info->pad;
01041           }
01042           break;
01043         }
01044       }
01045       break;
01046     }
01047     case RedQuantum:
01048     case CyanQuantum:
01049     {
01050       switch (quantum_info->depth)
01051       {
01052         case 8:
01053         {
01054           register unsigned char
01055             pixel;
01056 
01057           for (x=0; x < (long) number_pixels; x++)
01058           {
01059             pixel=ScaleQuantumToChar(p->red);
01060             q=PopCharPixel(pixel,q);
01061             p++;
01062             q+=quantum_info->pad;
01063           }
01064           break;
01065         }
01066         case 16:
01067         {
01068           register unsigned short
01069             pixel;
01070 
01071           for (x=0; x < (long) number_pixels; x++)
01072           {
01073             pixel=ScaleQuantumToShort(p->red);
01074             q=PopShortPixel(endian,pixel,q);
01075             p++;
01076             q+=quantum_info->pad;
01077           }
01078           break;
01079         }
01080         case 32:
01081         {
01082           register unsigned long
01083             pixel;
01084 
01085           if (quantum_info->format == FloatingPointQuantumFormat)
01086             {
01087               for (x=0; x < (long) number_pixels; x++)
01088               {
01089                 q=PopFloatPixel(&quantum_state,(float) p->red,q);
01090                 p++;
01091                 q+=quantum_info->pad;
01092               }
01093               break;
01094             }
01095           for (x=0; x < (long) number_pixels; x++)
01096           {
01097             pixel=ScaleQuantumToLong(p->red);
01098             q=PopLongPixel(endian,pixel,q);
01099             p++;
01100             q+=quantum_info->pad;
01101           }
01102           break;
01103         }
01104         case 64:
01105         {
01106           if (quantum_info->format == FloatingPointQuantumFormat)
01107             {
01108               for (x=0; x < (long) number_pixels; x++)
01109               {
01110                 q=PopDoublePixel(&quantum_state,(double) p->red,q);
01111                 p++;
01112                 q+=quantum_info->pad;
01113               }
01114               break;
01115             }
01116         }
01117         default:
01118         {
01119           range=GetQuantumRange(image->depth);
01120           for (x=0; x < (long) number_pixels; x++)
01121           {
01122             q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
01123               p->red,range),q);
01124             p++;
01125             q+=quantum_info->pad;
01126           }
01127           break;
01128         }
01129       }
01130       break;
01131     }
01132     case GreenQuantum:
01133     case MagentaQuantum:
01134     {
01135       switch (quantum_info->depth)
01136       {
01137         case 8:
01138         {
01139           register unsigned char
01140             pixel;
01141 
01142           for (x=0; x < (long) number_pixels; x++)
01143           {
01144             pixel=ScaleQuantumToChar(p->green);
01145             q=PopCharPixel(pixel,q);
01146             p++;
01147             q+=quantum_info->pad;
01148           }
01149           break;
01150         }
01151         case 16:
01152         {
01153           register unsigned short
01154             pixel;
01155 
01156           for (x=0; x < (long) number_pixels; x++)
01157           {
01158             pixel=ScaleQuantumToShort(p->green);
01159             q=PopShortPixel(endian,pixel,q);
01160             p++;
01161             q+=quantum_info->pad;
01162           }
01163           break;
01164         }
01165         case 32:
01166         {
01167           register unsigned long
01168             pixel;
01169 
01170           if (quantum_info->format == FloatingPointQuantumFormat)
01171             {
01172               for (x=0; x < (long) number_pixels; x++)
01173               {
01174                 q=PopFloatPixel(&quantum_state,(float) p->green,q);
01175                 p++;
01176                 q+=quantum_info->pad;
01177               }
01178               break;
01179             }
01180           for (x=0; x < (long) number_pixels; x++)
01181           {
01182             pixel=ScaleQuantumToLong(p->green);
01183             q=PopLongPixel(endian,pixel,q);
01184             p++;
01185             q+=quantum_info->pad;
01186           }
01187           break;
01188         }
01189         case 64:
01190         {
01191           if (quantum_info->format == FloatingPointQuantumFormat)
01192             {
01193               for (x=0; x < (long) number_pixels; x++)
01194               {
01195                 q=PopDoublePixel(&quantum_state,(double) p->green,q);
01196                 p++;
01197                 q+=quantum_info->pad;
01198               }
01199               break;
01200             }
01201         }
01202         default:
01203         {
01204           range=GetQuantumRange(image->depth);
01205           for (x=0; x < (long) number_pixels; x++)
01206           {
01207             q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
01208               p->green,range),q);
01209             p++;
01210             q+=quantum_info->pad;
01211           }
01212           break;
01213         }
01214       }
01215       break;
01216     }
01217     case BlueQuantum:
01218     case YellowQuantum:
01219     {
01220       switch (quantum_info->depth)
01221       {
01222         case 8:
01223         {
01224           register unsigned char
01225             pixel;
01226 
01227           for (x=0; x < (long) number_pixels; x++)
01228           {
01229             pixel=ScaleQuantumToChar(p->blue);
01230             q=PopCharPixel(pixel,q);
01231             p++;
01232             q+=quantum_info->pad;
01233           }
01234           break;
01235         }
01236         case 16:
01237         {
01238           register unsigned short
01239             pixel;
01240 
01241           for (x=0; x < (long) number_pixels; x++)
01242           {
01243             pixel=ScaleQuantumToShort(p->blue);
01244             q=PopShortPixel(endian,pixel,q);
01245             p++;
01246             q+=quantum_info->pad;
01247           }
01248           break;
01249         }
01250         case 32:
01251         {
01252           register unsigned long
01253             pixel;
01254 
01255           if (quantum_info->format == FloatingPointQuantumFormat)
01256             {
01257               for (x=0; x < (long) number_pixels; x++)
01258               {
01259                 q=PopFloatPixel(&quantum_state,(float) p->blue,q);
01260                 p++;
01261                 q+=quantum_info->pad;
01262               }
01263               break;
01264             }
01265           for (x=0; x < (long) number_pixels; x++)
01266           {
01267             pixel=ScaleQuantumToLong(p->blue);
01268             q=PopLongPixel(endian,pixel,q);
01269             p++;
01270             q+=quantum_info->pad;
01271           }
01272           break;
01273         }
01274         case 64:
01275         {
01276           if (quantum_info->format == FloatingPointQuantumFormat)
01277             {
01278               for (x=0; x < (long) number_pixels; x++)
01279               {
01280                 q=PopDoublePixel(&quantum_state,(double) p->blue,q);
01281                 p++;
01282                 q+=quantum_info->pad;
01283               }
01284               break;
01285             }
01286         }
01287         default:
01288         {
01289           range=GetQuantumRange(image->depth);
01290           for (x=0; x < (long) number_pixels; x++)
01291           {
01292             q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
01293               p->blue,range),q);
01294             p++;
01295             q+=quantum_info->pad;
01296           }
01297           break;
01298         }
01299       }
01300       break;
01301     }
01302     case AlphaQuantum:
01303     {
01304       switch (quantum_info->depth)
01305       {
01306         case 8:
01307         {
01308           register unsigned char
01309             pixel;
01310 
01311           for (x=0; x < (long) number_pixels; x++)
01312           {
01313             pixel=ScaleQuantumToChar((Quantum) (QuantumRange-p->opacity));
01314             q=PopCharPixel(pixel,q);
01315             p++;
01316             q+=quantum_info->pad;
01317           }
01318           break;
01319         }
01320         case 16:
01321         {
01322           register unsigned short
01323             pixel;
01324 
01325           for (x=0; x < (long) number_pixels; x++)
01326           {
01327             pixel=ScaleQuantumToShort((Quantum) (QuantumRange-p->opacity));
01328             q=PopShortPixel(endian,pixel,q);
01329             p++;
01330             q+=quantum_info->pad;
01331           }
01332           break;
01333         }
01334         case 32:
01335         {
01336           register unsigned long
01337             pixel;
01338 
01339           if (quantum_info->format == FloatingPointQuantumFormat)
01340             {
01341               for (x=0; x < (long) number_pixels; x++)
01342               {
01343                 float
01344                   pixel;
01345 
01346                 pixel=(float) (QuantumRange-p->opacity);
01347                 q=PopFloatPixel(&quantum_state,pixel,q);
01348                 p++;
01349                 q+=quantum_info->pad;
01350               }
01351               break;
01352             }
01353           for (x=0; x < (long) number_pixels; x++)
01354           {
01355             pixel=ScaleQuantumToLong((Quantum) (QuantumRange-p->opacity));
01356             q=PopLongPixel(endian,pixel,q);
01357             p++;
01358             q+=quantum_info->pad;
01359           }
01360           break;
01361         }
01362         case 64:
01363         {
01364           if (quantum_info->format == FloatingPointQuantumFormat)
01365             {
01366               for (x=0; x < (long) number_pixels; x++)
01367               {
01368                 double
01369                   pixel;
01370 
01371                 pixel=(double) (QuantumRange-p->opacity);
01372                 q=PopDoublePixel(&quantum_state,pixel,q);
01373                 p++;
01374                 q+=quantum_info->pad;
01375               }
01376               break;
01377             }
01378         }
01379         default:
01380         {
01381           range=GetQuantumRange(image->depth);
01382           for (x=0; x < (long) number_pixels; x++)
01383           {
01384             q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
01385               (Quantum) (QuantumRange-p->opacity),range),q);
01386             p++;
01387             q+=quantum_info->pad;
01388           }
01389           break;
01390         }
01391       }
01392       break;
01393     }
01394     case OpacityQuantum:
01395     {
01396       switch (quantum_info->depth)
01397       {
01398         case 8:
01399         {
01400           register unsigned char
01401             pixel;
01402 
01403           for (x=0; x < (long) number_pixels; x++)
01404           {
01405             pixel=ScaleQuantumToChar(p->opacity);
01406             q=PopCharPixel(pixel,q);
01407             p++;
01408             q+=quantum_info->pad;
01409           }
01410           break;
01411         }
01412         case 16:
01413         {
01414           register unsigned short
01415             pixel;
01416 
01417           for (x=0; x < (long) number_pixels; x++)
01418           {
01419             pixel=ScaleQuantumToShort(p->opacity);
01420             q=PopShortPixel(endian,pixel,q);
01421             p++;
01422             q+=quantum_info->pad;
01423           }
01424           break;
01425         }
01426         case 32:
01427         {
01428           register unsigned long
01429             pixel;
01430 
01431           if (quantum_info->format == FloatingPointQuantumFormat)
01432             {
01433               for (x=0; x < (long) number_pixels; x++)
01434               {
01435                 q=PopFloatPixel(&quantum_state,(float) p->opacity,q);
01436                 p++;
01437                 q+=quantum_info->pad;
01438               }
01439               break;
01440             }
01441           for (x=0; x < (long) number_pixels; x++)
01442           {
01443             pixel=ScaleQuantumToLong(p->opacity);
01444             q=PopLongPixel(endian,pixel,q);
01445             p++;
01446             q+=quantum_info->pad;
01447           }
01448           break;
01449         }
01450         case 64:
01451         {
01452           if (quantum_info->format == FloatingPointQuantumFormat)
01453             {
01454               for (x=0; x < (long) number_pixels; x++)
01455               {
01456                 q=PopDoublePixel(&quantum_state,(double) p->opacity,q);
01457                 p++;
01458                 q+=quantum_info->pad;
01459               }
01460               break;
01461             }
01462         }
01463         default:
01464         {
01465           range=GetQuantumRange(image->depth);
01466           for (x=0; x < (long) number_pixels; x++)
01467           {
01468             q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
01469               p->opacity,range),q);
01470             p++;
01471             q+=quantum_info->pad;
01472           }
01473           break;
01474         }
01475       }
01476       break;
01477     }
01478     case BlackQuantum:
01479     {
01480       if (image->colorspace != CMYKColorspace)
01481         {
01482           (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
01483             "ColorSeparatedImageRequired","`%s'",image->filename);
01484           return(extent);
01485         }
01486       switch (quantum_info->depth)
01487       {
01488         case 8:
01489         {
01490           register unsigned char
01491             pixel;
01492 
01493           for (x=0; x < (long) number_pixels; x++)
01494           {
01495             pixel=ScaleQuantumToChar(indexes[x]);
01496             q=PopCharPixel(pixel,q);
01497             p++;
01498             q+=quantum_info->pad;
01499           }
01500           break;
01501         }
01502         case 16:
01503         {
01504           register unsigned short
01505             pixel;
01506 
01507           for (x=0; x < (long) number_pixels; x++)
01508           {
01509             pixel=ScaleQuantumToShort(indexes[x]);
01510             q=PopShortPixel(endian,pixel,q);
01511             p++;
01512             q+=quantum_info->pad;
01513           }
01514           break;
01515         }
01516         case 32:
01517         {
01518           register unsigned long
01519             pixel;
01520 
01521           if (quantum_info->format == FloatingPointQuantumFormat)
01522             {
01523               for (x=0; x < (long) number_pixels; x++)
01524               {
01525                 q=PopFloatPixel(&quantum_state,(float) indexes[x],q);
01526                 p++;
01527                 q+=quantum_info->pad;
01528               }
01529               break;
01530             }
01531           for (x=0; x < (long) number_pixels; x++)
01532           {
01533             pixel=ScaleQuantumToLong(indexes[x]);
01534             q=PopLongPixel(endian,pixel,q);
01535             p++;
01536             q+=quantum_info->pad;
01537           }
01538           break;
01539         }
01540         case 64:
01541         {
01542           if (quantum_info->format == FloatingPointQuantumFormat)
01543             {
01544               for (x=0; x < (long) number_pixels; x++)
01545               {
01546                 q=PopDoublePixel(&quantum_state,(double) indexes[x],q);
01547                 p++;
01548                 q+=quantum_info->pad;
01549               }
01550               break;
01551             }
01552         }
01553         default:
01554         {
01555           range=GetQuantumRange(image->depth);
01556           for (x=0; x < (long) number_pixels; x++)
01557           {
01558             q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
01559               (Quantum) indexes[x],range),q);
01560             p++;
01561             q+=quantum_info->pad;
01562           }
01563           break;
01564         }
01565       }
01566       break;
01567     }
01568     case RGBQuantum:
01569     case CbYCrQuantum:
01570     {
01571       switch (quantum_info->depth)
01572       {
01573         case 8:
01574         {
01575           for (x=0; x < (long) number_pixels; x++)
01576           {
01577             q=PopCharPixel(ScaleQuantumToChar(p->red),q);
01578             q=PopCharPixel(ScaleQuantumToChar(p->green),q);
01579             q=PopCharPixel(ScaleQuantumToChar(p->blue),q);
01580             p++;
01581             q+=quantum_info->pad;
01582           }
01583           break;
01584         }
01585         case 10:
01586         {
01587           register unsigned long
01588             pixel;
01589 
01590           range=GetQuantumRange(image->depth);
01591           if (quantum_info->pack == MagickFalse)
01592             {
01593               for (x=0; x < (long) number_pixels; x++)
01594               {
01595                 pixel=(unsigned long) (ScaleQuantumToAny(p->red,range) << 22 |
01596                   ScaleQuantumToAny(p->green,range) <<  12 |
01597                   ScaleQuantumToAny(p->blue,range) << 2);
01598                 q=PopLongPixel(endian,pixel,q);
01599                 p++;
01600                 q+=quantum_info->pad;
01601               }
01602               break;
01603             }
01604           if (quantum_info->quantum == 32UL)
01605             {
01606               for (x=0; x < (long) number_pixels; x++)
01607               {
01608                 pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
01609                 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
01610                 pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
01611                 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
01612                 pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
01613                 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
01614                 p++;
01615                 q+=quantum_info->pad;
01616               }
01617               break;
01618             }
01619           for (x=0; x < (long) number_pixels; x++)
01620           {
01621             pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
01622             q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
01623             pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
01624             q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
01625             pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
01626             q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
01627             p++;
01628             q+=quantum_info->pad;
01629           }
01630           break;
01631         }
01632         case 12:
01633         {
01634           register unsigned long
01635             pixel;
01636 
01637           range=GetQuantumRange(image->depth);
01638           if (quantum_info->pack == MagickFalse)
01639             {
01640               for (x=0; x < (long) (3*number_pixels-1); x+=2)
01641               {
01642                 switch (x % 3)
01643                 {
01644                   default:
01645                   case 0:
01646                   {
01647                     pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
01648                     break;
01649                   }
01650                   case 1:
01651                   {
01652                     pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
01653                     break;
01654                   }
01655                   case 2:
01656                   {
01657                     pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
01658                     p++;
01659                     break;
01660                   }
01661                 }
01662                 q=PopShortPixel(endian,(unsigned short) (pixel << 4),q);
01663                 switch ((x+1) % 3)
01664                 {
01665                   default:
01666                   case 0:
01667                   {
01668                     pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
01669                     break;
01670                   }
01671                   case 1:
01672                   {
01673                     pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
01674                     break;
01675                   }
01676                   case 2:
01677                   {
01678                     pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
01679                     p++;
01680                     break;
01681                   }
01682                 }
01683                 q=PopShortPixel(endian,(unsigned short) (pixel << 4),q);
01684                 q+=quantum_info->pad;
01685               }
01686               for (bit=0; bit < (long) (3*number_pixels % 2); bit++)
01687               {
01688                 switch ((x+bit) % 3)
01689                 {
01690                   default:
01691                   case 0:
01692                   {
01693                     pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
01694                     break;
01695                   }
01696                   case 1:
01697                   {
01698                     pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
01699                     break;
01700                   }
01701                   case 2:
01702                   {
01703                     pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
01704                     p++;
01705                     break;
01706                   }
01707                 }
01708                 q=PopShortPixel(endian,(unsigned short) (pixel << 4),q);
01709                 q+=quantum_info->pad;
01710               }
01711               if (bit != 0)
01712                 p++;
01713               break;
01714             }
01715           if (quantum_info->quantum == 32UL)
01716             {
01717               for (x=0; x < (long) number_pixels; x++)
01718               {
01719                 pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
01720                 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
01721                 pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
01722                 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
01723                 pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
01724                 q=PopQuantumLongPixel(&quantum_state,image->depth,pixel,q);
01725                 p++;
01726                 q+=quantum_info->pad;
01727               }
01728               break;
01729             }
01730           for (x=0; x < (long) number_pixels; x++)
01731           {
01732             pixel=(unsigned long) ScaleQuantumToAny(p->red,range);
01733             q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
01734             pixel=(unsigned long) ScaleQuantumToAny(p->green,range);
01735             q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
01736             pixel=(unsigned long) ScaleQuantumToAny(p->blue,range);
01737             q=PopQuantumPixel(&quantum_state,image->depth,pixel,q);
01738             p++;
01739             q+=quantum_info->pad;
01740           }
01741           break;
01742         }
01743         case 16:
01744         {
01745           register unsigned short
01746             pixel;
01747 
01748           for (x=0; x < (long) number_pixels; x++)
01749           {
01750             pixel=ScaleQuantumToShort(p->red);
01751             q=PopShortPixel(endian,pixel,q);
01752             pixel=ScaleQuantumToShort(p->green);
01753             q=PopShortPixel(endian,pixel,q);
01754             pixel=ScaleQuantumToShort(p->blue);
01755             q=PopShortPixel(endian,pixel,q);
01756             p++;
01757             q+=quantum_info->pad;
01758           }
01759           break;
01760         }
01761         case 32:
01762         {
01763           register unsigned long
01764             pixel;
01765 
01766           if (quantum_info->format == FloatingPointQuantumFormat)
01767             {
01768               for (x=0; x < (long) number_pixels; x++)
01769               {
01770                 q=PopFloatPixel(&quantum_state,(float) p->red,q);
01771                 q=PopFloatPixel(&quantum_state,(float) p->green,q);
01772                 q=PopFloatPixel(&quantum_state,(float) p->blue,q);
01773                 p++;
01774                 q+=quantum_info->pad;
01775               }
01776               break;
01777             }
01778           for (x=0; x < (long) number_pixels; x++)
01779           {
01780             pixel=ScaleQuantumToLong(p->red);
01781             q=PopLongPixel(endian,pixel,q);
01782             pixel=ScaleQuantumToLong(p->green);
01783             q=PopLongPixel(endian,pixel,q);
01784             pixel=ScaleQuantumToLong(p->blue);
01785             q=PopLongPixel(endian,pixel,q);
01786             p++;
01787             q+=quantum_info->pad;
01788           }
01789           break;
01790         }
01791         case 64:
01792         {
01793           if (quantum_info->format == FloatingPointQuantumFormat)
01794             {
01795               for (x=0; x < (long) number_pixels; x++)
01796               {
01797                 q=PopDoublePixel(&quantum_state,(double) p->red,q);
01798                 q=PopDoublePixel(&quantum_state,(double) p->green,q);
01799                 q=PopDoublePixel(&quantum_state,(double) p->blue,q);
01800                 p++;
01801                 q+=quantum_info->pad;
01802               }
01803               break;
01804             }
01805         }
01806         default:
01807         {
01808           range=GetQuantumRange(image->depth);
01809           for (x=0; x < (long) number_pixels; x++)
01810           {
01811             q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
01812               p->red,range),q);
01813             q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
01814               p->green,range),q);
01815             q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
01816               p->blue,range),q);
01817             p++;
01818             q+=quantum_info->pad;
01819           }
01820           break;
01821         }
01822       }
01823       break;
01824     }
01825     case RGBAQuantum:
01826     case RGBOQuantum:
01827     case CbYCrAQuantum:
01828     {
01829       switch (quantum_info->depth)
01830       {
01831         case 8:
01832         {
01833           register unsigned char
01834             pixel;
01835 
01836           for (x=0; x < (long) number_pixels; x++)
01837           {
01838             pixel=ScaleQuantumToChar(p->red);
01839             q=PopCharPixel(pixel,q);
01840             pixel=ScaleQuantumToChar(p->green);
01841             q=PopCharPixel(pixel,q);
01842             pixel=ScaleQuantumToChar(p->blue);
01843             q=PopCharPixel(pixel,q);
01844             pixel=ScaleQuantumToChar((Quantum) (QuantumRange-p->opacity));
01845             q=PopCharPixel(pixel,q);
01846             p++;
01847             q+=quantum_info->pad;
01848           }
01849           break;
01850         }
01851         case 16:
01852         {
01853           register unsigned short
01854             pixel;
01855 
01856           for (x=0; x < (long) number_pixels; x++)
01857           {
01858             pixel=ScaleQuantumToShort(p->red);
01859             q=PopShortPixel(endian,pixel,q);
01860             pixel=ScaleQuantumToShort(p->green);
01861             q=PopShortPixel(endian,pixel,q);
01862             pixel=ScaleQuantumToShort(p->blue);
01863             q=PopShortPixel(endian,pixel,q);
01864             pixel=ScaleQuantumToShort((Quantum) (QuantumRange-p->opacity));
01865             q=PopShortPixel(endian,pixel,q);
01866             p++;
01867             q+=quantum_info->pad;
01868           }
01869           break;
01870         }
01871         case 32:
01872         {
01873           register unsigned long
01874             pixel;
01875 
01876           if (quantum_info->format == FloatingPointQuantumFormat)
01877             {
01878               for (x=0; x < (long) number_pixels; x++)
01879               {
01880                 float
01881                   pixel;
01882 
01883                 q=PopFloatPixel(&quantum_state,(float) p->red,q);
01884                 q=PopFloatPixel(&quantum_state,(float) p->green,q);
01885                 q=PopFloatPixel(&quantum_state,(float) p->blue,q);
01886                 pixel=(float) (QuantumRange-p->opacity);
01887                 q=PopFloatPixel(&quantum_state,pixel,q);
01888                 p++;
01889                 q+=quantum_info->pad;
01890               }
01891               break;
01892             }
01893           for (x=0; x < (long) number_pixels; x++)
01894           {
01895             pixel=ScaleQuantumToLong(p->red);
01896             q=PopLongPixel(endian,pixel,q);
01897             pixel=ScaleQuantumToLong(p->green);
01898             q=PopLongPixel(endian,pixel,q);
01899             pixel=ScaleQuantumToLong(p->blue);
01900             q=PopLongPixel(endian,pixel,q);
01901             pixel=ScaleQuantumToLong((Quantum) (QuantumRange-p->opacity));
01902             q=PopLongPixel(endian,pixel,q);
01903             p++;
01904             q+=quantum_info->pad;
01905           }
01906           break;
01907         }
01908         case 64:
01909         {
01910           if (quantum_info->format == FloatingPointQuantumFormat)
01911             {
01912               double
01913                 pixel;
01914 
01915               for (x=0; x < (long) number_pixels; x++)
01916               {
01917                 q=PopDoublePixel(&quantum_state,(double) p->red,q);
01918                 q=PopDoublePixel(&quantum_state,(double) p->green,q);
01919                 q=PopDoublePixel(&quantum_state,(double) p->blue,q);
01920                 pixel=(double) (QuantumRange-p->opacity);
01921                 q=PopDoublePixel(&quantum_state,pixel,q);
01922                 p++;
01923                 q+=quantum_info->pad;
01924               }
01925               break;
01926             }
01927         }
01928         default:
01929         {
01930           range=GetQuantumRange(image->depth);
01931           for (x=0; x < (long) number_pixels; x++)
01932           {
01933             q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
01934               p->red,range),q);
01935             q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
01936               p->green,range),q);
01937             q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
01938               p->blue,range),q);
01939             q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
01940               (Quantum) (QuantumRange-p->opacity),range),q);
01941             p++;
01942             q+=quantum_info->pad;
01943           }
01944           break;
01945         }
01946       }
01947       break;
01948     }
01949     case CMYKQuantum:
01950     {
01951       if (image->colorspace != CMYKColorspace)
01952         {
01953           (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
01954             "ColorSeparatedImageRequired","`%s'",image->filename);
01955           return(extent);
01956         }
01957       switch (quantum_info->depth)
01958       {
01959         case 8:
01960         {
01961           register unsigned char
01962             pixel;
01963 
01964           for (x=0; x < (long) number_pixels; x++)
01965           {
01966             pixel=ScaleQuantumToChar(p->red);
01967             q=PopCharPixel(pixel,q);
01968             pixel=ScaleQuantumToChar(p->green);
01969             q=PopCharPixel(pixel,q);
01970             pixel=ScaleQuantumToChar(p->blue);
01971             q=PopCharPixel(pixel,q);
01972             pixel=ScaleQuantumToChar(indexes[x]);
01973             q=PopCharPixel(pixel,q);
01974             p++;
01975             q+=quantum_info->pad;
01976           }
01977           break;
01978         }
01979         case 16:
01980         {
01981           register unsigned short
01982             pixel;
01983 
01984           for (x=0; x < (long) number_pixels; x++)
01985           {
01986             pixel=ScaleQuantumToShort(p->red);
01987             q=PopShortPixel(endian,pixel,q);
01988             pixel=ScaleQuantumToShort(p->green);
01989             q=PopShortPixel(endian,pixel,q);
01990             pixel=ScaleQuantumToShort(p->blue);
01991             q=PopShortPixel(endian,pixel,q);
01992             pixel=ScaleQuantumToShort(indexes[x]);
01993             q=PopShortPixel(endian,pixel,q);
01994             p++;
01995             q+=quantum_info->pad;
01996           }
01997           break;
01998         }
01999         case 32:
02000         {
02001           register unsigned long
02002             pixel;
02003 
02004           if (quantum_info->format == FloatingPointQuantumFormat)
02005             {
02006               for (x=0; x < (long) number_pixels; x++)
02007               {
02008                 q=PopFloatPixel(&quantum_state,(float) p->red,q);
02009                 q=PopFloatPixel(&quantum_state,(float) p->green,q);
02010                 q=PopFloatPixel(&quantum_state,(float) p->blue,q);
02011                 q=PopFloatPixel(&quantum_state,(float) indexes[x],q);
02012                 p++;
02013                 q+=quantum_info->pad;
02014               }
02015               break;
02016             }
02017           for (x=0; x < (long) number_pixels; x++)
02018           {
02019             pixel=ScaleQuantumToLong(p->red);
02020             q=PopLongPixel(endian,pixel,q);
02021             pixel=ScaleQuantumToLong(p->green);
02022             q=PopLongPixel(endian,pixel,q);
02023             pixel=ScaleQuantumToLong(p->blue);
02024             q=PopLongPixel(endian,pixel,q);
02025             pixel=ScaleQuantumToLong(indexes[x]);
02026             q=PopLongPixel(endian,pixel,q);
02027             p++;
02028             q+=quantum_info->pad;
02029           }
02030           break;
02031         }
02032         case 64:
02033         {
02034           if (quantum_info->format == FloatingPointQuantumFormat)
02035             {
02036               for (x=0; x < (long) number_pixels; x++)
02037               {
02038                 q=PopDoublePixel(&quantum_state,(double) p->red,q);
02039                 q=PopDoublePixel(&quantum_state,(double) p->green,q);
02040                 q=PopDoublePixel(&quantum_state,(double) p->blue,q);
02041                 q=PopDoublePixel(&quantum_state,(double) indexes[x],q);
02042                 p++;
02043                 q+=quantum_info->pad;
02044               }
02045               break;
02046             }
02047         }
02048         default:
02049         {
02050           range=GetQuantumRange(image->depth);
02051           for (x=0; x < (long) number_pixels; x++)
02052           {
02053             q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
02054               p->red,range),q);
02055             q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
02056               p->green,range),q);
02057             q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
02058               p->blue,range),q);
02059             q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
02060               indexes[x],range),q);
02061             p++;
02062             q+=quantum_info->pad;
02063           }
02064           break;
02065         }
02066       }
02067       break;
02068     }
02069     case CMYKAQuantum:
02070     case CMYKOQuantum:
02071     {
02072       if (image->colorspace != CMYKColorspace)
02073         {
02074           (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
02075             "ColorSeparatedImageRequired","`%s'",image->filename);
02076           return(extent);
02077         }
02078       switch (quantum_info->depth)
02079       {
02080         case 8:
02081         {
02082           register unsigned char
02083             pixel;
02084 
02085           for (x=0; x < (long) number_pixels; x++)
02086           {
02087             pixel=ScaleQuantumToChar(p->red);
02088             q=PopCharPixel(pixel,q);
02089             pixel=ScaleQuantumToChar(p->green);
02090             q=PopCharPixel(pixel,q);
02091             pixel=ScaleQuantumToChar(p->blue);
02092             q=PopCharPixel(pixel,q);
02093             pixel=ScaleQuantumToChar(indexes[x]);
02094             q=PopCharPixel(pixel,q);
02095             pixel=ScaleQuantumToChar((Quantum) (QuantumRange-p->opacity));
02096             q=PopCharPixel(pixel,q);
02097             p++;
02098             q+=quantum_info->pad;
02099           }
02100           break;
02101         }
02102         case 16:
02103         {
02104           register unsigned short
02105             pixel;
02106 
02107           for (x=0; x < (long) number_pixels; x++)
02108           {
02109             pixel=ScaleQuantumToShort(p->red);
02110             q=PopShortPixel(endian,pixel,q);
02111             pixel=ScaleQuantumToShort(p->green);
02112             q=PopShortPixel(endian,pixel,q);
02113             pixel=ScaleQuantumToShort(p->blue);
02114             q=PopShortPixel(endian,pixel,q);
02115             pixel=ScaleQuantumToShort(indexes[x]);
02116             q=PopShortPixel(endian,pixel,q);
02117             pixel=ScaleQuantumToShort((Quantum) (QuantumRange-p->opacity));
02118             q=PopShortPixel(endian,pixel,q);
02119             p++;
02120             q+=quantum_info->pad;
02121           }
02122           break;
02123         }
02124         case 32:
02125         {
02126           register unsigned long
02127             pixel;
02128 
02129           if (quantum_info->format == FloatingPointQuantumFormat)
02130             {
02131               for (x=0; x < (long) number_pixels; x++)
02132               {
02133                 float
02134                   pixel;
02135 
02136                 q=PopFloatPixel(&quantum_state,(float) p->red,q);
02137                 q=PopFloatPixel(&quantum_state,(float) p->green,q);
02138                 q=PopFloatPixel(&quantum_state,(float) p->blue,q);
02139                 q=PopFloatPixel(&quantum_state,(float) indexes[x],q);
02140                 pixel=(float) (QuantumRange-p->opacity);
02141                 q=PopFloatPixel(&quantum_state,pixel,q);
02142                 p++;
02143                 q+=quantum_info->pad;
02144               }
02145               break;
02146             }
02147           for (x=0; x < (long) number_pixels; x++)
02148           {
02149             pixel=ScaleQuantumToLong(p->red);
02150             q=PopLongPixel(endian,pixel,q);
02151             pixel=ScaleQuantumToLong(p->green);
02152             q=PopLongPixel(endian,pixel,q);
02153             pixel=ScaleQuantumToLong(p->blue);
02154             q=PopLongPixel(endian,pixel,q);
02155             pixel=ScaleQuantumToLong(indexes[x]);
02156             q=PopLongPixel(endian,pixel,q);
02157             pixel=ScaleQuantumToLong((Quantum) (QuantumRange-p->opacity));
02158             q=PopLongPixel(endian,pixel,q);
02159             p++;
02160             q+=quantum_info->pad;
02161           }
02162           break;
02163         }
02164         case 64:
02165         {
02166           if (quantum_info->format == FloatingPointQuantumFormat)
02167             {
02168               double
02169                 pixel;
02170 
02171               for (x=0; x < (long) number_pixels; x++)
02172               {
02173                 q=PopDoublePixel(&quantum_state,(double) p->red,q);
02174                 q=PopDoublePixel(&quantum_state,(double) p->green,q);
02175                 q=PopDoublePixel(&quantum_state,(double) p->blue,q);
02176                 q=PopDoublePixel(&quantum_state,(double) indexes[x],q);
02177                 pixel=(double) (QuantumRange-p->opacity);
02178                 q=PopDoublePixel(&quantum_state,pixel,q);
02179                 p++;
02180                 q+=quantum_info->pad;
02181               }
02182               break;
02183             }
02184         }
02185         default:
02186         {
02187           range=GetQuantumRange(image->depth);
02188           for (x=0; x < (long) number_pixels; x++)
02189           {
02190             q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
02191               p->red,range),q);
02192             q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
02193               p->green,range),q);
02194             q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
02195               p->blue,range),q);
02196             q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
02197               indexes[x],range),q);
02198             q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
02199               p->opacity,range),q);
02200             p++;
02201             q+=quantum_info->pad;
02202           }
02203           break;
02204         }
02205       }
02206       break;
02207     }
02208     case CbYCrYQuantum:
02209     {
02210      long
02211         n;
02212 
02213       Quantum
02214         cbcr[4];
02215 
02216       register long
02217         i;
02218 
02219       register unsigned long
02220         pixel;
02221 
02222       unsigned long
02223         quantum;
02224 
02225       n=0;
02226       quantum=0;
02227       range=GetQuantumRange(image->depth);
02228       switch (quantum_info->depth)
02229       {
02230         case 10:
02231         {
02232           if (quantum_info->pack == MagickFalse)
02233             {
02234               for (x=0; x < (long) number_pixels; x+=2)
02235               {
02236                 for (i=0; i < 4; i++)
02237                 {
02238                   switch (n % 3)
02239                   {
02240                     case 0:
02241                     {
02242                       quantum=p->red;
02243                       break;
02244                     }
02245                     case 1:
02246                     {
02247                       quantum=p->green;
02248                       break;
02249                     }
02250                     case 2:
02251                     {
02252                       quantum=p->blue;
02253                       break;
02254                     }
02255                   }
02256                   cbcr[i]=(Quantum) quantum;
02257                   n++;
02258                 }
02259                 pixel=(unsigned long) ((unsigned long) (cbcr[1]) << 22 |
02260                   (unsigned long) (cbcr[0]) <<  12 |
02261                   (unsigned long) (cbcr[2]) << 2);
02262                 q=PopLongPixel(endian,pixel,q);
02263                 p++;
02264                 pixel=(unsigned long) ((unsigned long) (cbcr[3]) << 22 |
02265                   (unsigned long) (cbcr[0]) <<  12 |
02266                   (unsigned long) (cbcr[2]) << 2);
02267                 q=PopLongPixel(endian,pixel,q);
02268                 p++;
02269                 q+=quantum_info->pad;
02270               }
02271               break;
02272             }
02273           break;
02274         }
02275         default:
02276         {
02277           for (x=0; x < (long) number_pixels; x+=2)
02278           {
02279             for (i=0; i < 4; i++)
02280             {
02281               switch (n % 3)
02282               {
02283                 case 0:
02284                 {
02285                   quantum=p->red;
02286                   break;
02287                 }
02288                 case 1:
02289                 {
02290                   quantum=p->green;
02291                   break;
02292                 }
02293                 case 2:
02294                 {
02295                   quantum=p->blue;
02296                   break;
02297                 }
02298               }
02299               cbcr[i]=(Quantum) quantum;
02300               n++;
02301             }
02302             q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
02303               cbcr[1],range),q);
02304             q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
02305               cbcr[0],range),q);
02306             q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
02307               cbcr[2],range),q);
02308             p++;
02309             q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
02310               cbcr[3],range),q);
02311             q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
02312               cbcr[0],range),q);
02313             q=PopQuantumPixel(&quantum_state,image->depth,ScaleQuantumToAny(
02314               cbcr[2],range),q);
02315             p++;
02316             q+=quantum_info->pad;
02317           }
02318           break;
02319         }
02320       }
02321       break;
02322     }
02323     default:
02324       break;
02325   }
02326   if ((quantum_type == CbYCrQuantum) || (quantum_type == CbYCrAQuantum))
02327     {
02328       Quantum
02329         quantum;
02330 
02331       register PixelPacket
02332         *__restrict q;
02333 
02334       q=GetAuthenticPixelQueue(image);
02335       if (image_view != (CacheView *) NULL)
02336         q=(PixelPacket *) GetCacheViewVirtualPixelQueue(image_view);
02337       for (x=0; x < (long) number_pixels; x++)
02338       {
02339         quantum=q->red;
02340         q->red=q->green;
02341         q->green=quantum;
02342         q++;
02343       }
02344     }
02345   if ((quantum_type == RGBOQuantum) || (quantum_type == CMYKOQuantum))
02346     {
02347       register PixelPacket
02348         *__restrict q;
02349 
02350       q=GetAuthenticPixelQueue(image);
02351       if (image_view != (CacheView *) NULL)
02352         q=(PixelPacket *) GetCacheViewVirtualPixelQueue(image_view);
02353       for (x=0; x < (long) number_pixels; x++)
02354       {
02355         q->opacity=(Quantum) (QuantumRange-q->opacity);
02356         q++;
02357       }
02358     }
02359   return(extent);
02360 }

Generated on 21 Nov 2009 for MagickCore by  doxygen 1.6.1