00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
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
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
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
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 }