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