pixel.c revision 1352acf3bec61a13875a2d020306ad6339686040
13ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 23ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 33ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 43ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 53ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 63ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% PPPP IIIII X X EEEEE L % 73ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% P P I X X E L % 83ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% PPPP I X EEE L % 93ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% P I X X E L % 103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% P IIIII X X EEEEE LLLLL % 113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% MagickCore Methods to Import/Export Pixels % 133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Software Design % 153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% John Cristy % 163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% October 1998 % 173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1945ef08fd6a09813e4a8f5ddadf85ba9e0ec2cdc7cristy% Copyright 1999-2013 ImageMagick Studio LLC, a non-profit organization % 203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% dedicated to making software imaging solutions freely available. % 213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% You may not use this file except in compliance with the License. You may % 233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% obtain a copy of the License at % 243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% http://www.imagemagick.org/script/license.php % 263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Unless required by applicable law or agreed to in writing, software % 283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% distributed under the License is distributed on an "AS IS" BASIS, % 293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. % 303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% See the License for the specific language governing permissions and % 313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% limitations under the License. % 323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Include declarations. 403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 414c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/studio.h" 424c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/property.h" 434c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/blob.h" 444c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/blob-private.h" 45322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy#include "MagickCore/cache-private.h" 464c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/color-private.h" 474c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/draw.h" 484c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/exception.h" 494c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/exception-private.h" 504c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/cache.h" 514c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/constitute.h" 524c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/delegate.h" 534c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/geometry.h" 544c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/image-private.h" 554c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/list.h" 564c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/magick.h" 574c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/memory_.h" 584c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/monitor.h" 594c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/option.h" 604c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/pixel.h" 614c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/pixel-accessor.h" 62380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy#include "MagickCore/pixel-private.h" 634c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/quantum.h" 644c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/quantum-private.h" 654c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/resource_.h" 664c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/semaphore.h" 674c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/statistic.h" 684c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/stream.h" 694c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/string_.h" 704c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/transform.h" 714c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/utility.h" 724c08aed51c5899665ade97263692328eea4af106cristy 73146a62b25d7466cceec79975894ce812e11f4625cristy/* 744c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 754c08aed51c5899665ade97263692328eea4af106cristy% % 764c08aed51c5899665ade97263692328eea4af106cristy% % 774c08aed51c5899665ade97263692328eea4af106cristy% % 78ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy+ A c q u i r e P i x e l C h a n n e l M a p % 794c08aed51c5899665ade97263692328eea4af106cristy% % 804c08aed51c5899665ade97263692328eea4af106cristy% % 814c08aed51c5899665ade97263692328eea4af106cristy% % 824c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 834c08aed51c5899665ade97263692328eea4af106cristy% 84ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy% AcquirePixelChannelMap() acquires a pixel component map. 854c08aed51c5899665ade97263692328eea4af106cristy% 86ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy% The format of the AcquirePixelChannelMap() method is: 874c08aed51c5899665ade97263692328eea4af106cristy% 88bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% PixelChannelMap *AcquirePixelChannelMap(void) 894c08aed51c5899665ade97263692328eea4af106cristy% 904c08aed51c5899665ade97263692328eea4af106cristy*/ 91bd5a96cd2b69f218f85a7adc306296a736f91a56cristyMagickExport PixelChannelMap *AcquirePixelChannelMap(void) 924c08aed51c5899665ade97263692328eea4af106cristy{ 93ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy PixelChannelMap 94bd5a96cd2b69f218f85a7adc306296a736f91a56cristy *channel_map; 954c08aed51c5899665ade97263692328eea4af106cristy 964c08aed51c5899665ade97263692328eea4af106cristy register ssize_t 974c08aed51c5899665ade97263692328eea4af106cristy i; 984c08aed51c5899665ade97263692328eea4af106cristy 99bd5a96cd2b69f218f85a7adc306296a736f91a56cristy channel_map=(PixelChannelMap *) AcquireQuantumMemory(MaxPixelChannels, 100bd5a96cd2b69f218f85a7adc306296a736f91a56cristy sizeof(*channel_map)); 101bd5a96cd2b69f218f85a7adc306296a736f91a56cristy if (channel_map == (PixelChannelMap *) NULL) 1024c08aed51c5899665ade97263692328eea4af106cristy ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed"); 103bd5a96cd2b69f218f85a7adc306296a736f91a56cristy (void) ResetMagickMemory(channel_map,0,MaxPixelChannels*sizeof(*channel_map)); 104bd5a96cd2b69f218f85a7adc306296a736f91a56cristy for (i=0; i < MaxPixelChannels; i++) 105bd5a96cd2b69f218f85a7adc306296a736f91a56cristy channel_map[i].channel=(PixelChannel) i; 106ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy return(channel_map); 1074c08aed51c5899665ade97263692328eea4af106cristy} 1084c08aed51c5899665ade97263692328eea4af106cristy 1094c08aed51c5899665ade97263692328eea4af106cristy/* 1104c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1114c08aed51c5899665ade97263692328eea4af106cristy% % 1124c08aed51c5899665ade97263692328eea4af106cristy% % 1134c08aed51c5899665ade97263692328eea4af106cristy% % 114ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy+ C l o n e P i x e l C h a n n e l M a p % 1154c08aed51c5899665ade97263692328eea4af106cristy% % 1164c08aed51c5899665ade97263692328eea4af106cristy% % 1174c08aed51c5899665ade97263692328eea4af106cristy% % 1184c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1194c08aed51c5899665ade97263692328eea4af106cristy% 120ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy% ClonePixelChannelMap() clones a pixel component map. 1214c08aed51c5899665ade97263692328eea4af106cristy% 122ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy% The format of the ClonePixelChannelMap() method is: 1234c08aed51c5899665ade97263692328eea4af106cristy% 124bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% PixelChannelMap *ClonePixelChannelMap(PixelChannelMap *channel_map) 1254c08aed51c5899665ade97263692328eea4af106cristy% 1264c08aed51c5899665ade97263692328eea4af106cristy% A description of each parameter follows: 1274c08aed51c5899665ade97263692328eea4af106cristy% 128ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy% o channel_map: the pixel component map. 1294c08aed51c5899665ade97263692328eea4af106cristy% 1304c08aed51c5899665ade97263692328eea4af106cristy*/ 131bd5a96cd2b69f218f85a7adc306296a736f91a56cristyMagickExport PixelChannelMap *ClonePixelChannelMap(PixelChannelMap *channel_map) 1324c08aed51c5899665ade97263692328eea4af106cristy{ 133ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy PixelChannelMap 134bd5a96cd2b69f218f85a7adc306296a736f91a56cristy *clone_map; 1354c08aed51c5899665ade97263692328eea4af106cristy 136bd5a96cd2b69f218f85a7adc306296a736f91a56cristy assert(channel_map != (PixelChannelMap *) NULL); 137ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy clone_map=AcquirePixelChannelMap(); 138bd5a96cd2b69f218f85a7adc306296a736f91a56cristy if (clone_map == (PixelChannelMap *) NULL) 139bd5a96cd2b69f218f85a7adc306296a736f91a56cristy return((PixelChannelMap *) NULL); 140bd5a96cd2b69f218f85a7adc306296a736f91a56cristy (void) CopyMagickMemory(clone_map,channel_map,MaxPixelChannels* 141bd5a96cd2b69f218f85a7adc306296a736f91a56cristy sizeof(*channel_map)); 1424c08aed51c5899665ade97263692328eea4af106cristy return(clone_map); 1434c08aed51c5899665ade97263692328eea4af106cristy} 1444c08aed51c5899665ade97263692328eea4af106cristy 1454c08aed51c5899665ade97263692328eea4af106cristy/* 1464c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1474c08aed51c5899665ade97263692328eea4af106cristy% % 1484c08aed51c5899665ade97263692328eea4af106cristy% % 1494c08aed51c5899665ade97263692328eea4af106cristy% % 1504c08aed51c5899665ade97263692328eea4af106cristy+ C l o n e P i x e l I n f o % 1514c08aed51c5899665ade97263692328eea4af106cristy% % 1524c08aed51c5899665ade97263692328eea4af106cristy% % 1534c08aed51c5899665ade97263692328eea4af106cristy% % 1544c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1554c08aed51c5899665ade97263692328eea4af106cristy% 1564c08aed51c5899665ade97263692328eea4af106cristy% ClonePixelInfo() makes a duplicate of the given pixel info structure, or if 1574c08aed51c5899665ade97263692328eea4af106cristy% pixel info is NULL, a new one. 1584c08aed51c5899665ade97263692328eea4af106cristy% 1594c08aed51c5899665ade97263692328eea4af106cristy% The format of the ClonePixelInfo method is: 1604c08aed51c5899665ade97263692328eea4af106cristy% 1614c08aed51c5899665ade97263692328eea4af106cristy% PixelInfo *ClonePixelInfo(const PixelInfo *pixel_info) 1624c08aed51c5899665ade97263692328eea4af106cristy% 1634c08aed51c5899665ade97263692328eea4af106cristy% A description of each parameter follows: 1644c08aed51c5899665ade97263692328eea4af106cristy% 1654c08aed51c5899665ade97263692328eea4af106cristy% o pixel_info: the pixel info. 1664c08aed51c5899665ade97263692328eea4af106cristy% 1674c08aed51c5899665ade97263692328eea4af106cristy*/ 1684c08aed51c5899665ade97263692328eea4af106cristyMagickExport PixelInfo *ClonePixelInfo(const PixelInfo *pixel) 1694c08aed51c5899665ade97263692328eea4af106cristy{ 1704c08aed51c5899665ade97263692328eea4af106cristy PixelInfo 1714c08aed51c5899665ade97263692328eea4af106cristy *pixel_info; 1724c08aed51c5899665ade97263692328eea4af106cristy 173a64b85d7873d5e540fe6e2941aa98ec7653a4e2dcristy pixel_info=(PixelInfo *) AcquireQuantumMemory(1,sizeof(*pixel_info)); 1744c08aed51c5899665ade97263692328eea4af106cristy if (pixel_info == (PixelInfo *) NULL) 1754c08aed51c5899665ade97263692328eea4af106cristy ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed"); 1764c08aed51c5899665ade97263692328eea4af106cristy *pixel_info=(*pixel); 1774c08aed51c5899665ade97263692328eea4af106cristy return(pixel_info); 1784c08aed51c5899665ade97263692328eea4af106cristy} 1794c08aed51c5899665ade97263692328eea4af106cristy 1804c08aed51c5899665ade97263692328eea4af106cristy/* 1814c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1824c08aed51c5899665ade97263692328eea4af106cristy% % 1834c08aed51c5899665ade97263692328eea4af106cristy% % 1844c08aed51c5899665ade97263692328eea4af106cristy% % 185c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% D e c o d e P i x e l G a m m a % 186c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% % 187c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% % 188c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% % 189c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 190c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% 191c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% DecodePixelGamma() applies the expansive power-law nonlinearity to the pixel. 192c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% 1933506059097340c6cdeff165058b5e18adfc89025cristy% The format of the DecodePixelGamma method is: 194c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% 195c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% double DecodePixelGamma(const MagickRealType pixel) 196c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% 197c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% A description of each parameter follows: 198c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% 199c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% o pixel: the pixel. 200c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% 201c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy*/ 202c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 203c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristystatic inline double DecodeGamma(const double x) 204c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy{ 205c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy div_t 206c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy quotient; 207c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 208c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy double 209c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy p, 210c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy term[9]; 211c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 212c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy int 213c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy exponent; 214c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 215c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy static const double coefficient[] = /* terms for x^(7/5), x=1.5 */ 216c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy { 217c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 1.7917488588043277509, 218c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 0.82045614371976854984, 219c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 0.027694100686325412819, 220c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy -0.00094244335181762134018, 221c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 0.000064355540911469709545, 222c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy -5.7224404636060757485e-06, 223c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 5.8767669437311184313e-07, 224c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy -6.6139920053589721168e-08, 225c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 7.9323242696227458163e-09 226c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy }; 227c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 228c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy static const double powers_of_two[] = /* (2^x)^(7/5) */ 229c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy { 230c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 1.0, 231c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 2.6390158215457883983, 232c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 6.9644045063689921093, 233c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 1.8379173679952558018e+01, 234c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 4.8502930128332728543e+01 235c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy }; 236c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 237c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy /* 238c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy Compute x^2.4 == x*x^(7/5) == pow(x,2.4). 239c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy */ 240c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy term[0]=1.0; 241c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy term[1]=4.0*frexp(x,&exponent)-3.0; 242c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy term[2]=2.0*term[1]*term[1]-term[0]; 243c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy term[3]=2.0*term[1]*term[2]-term[1]; 244c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy term[4]=2.0*term[1]*term[3]-term[2]; 245c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy term[5]=2.0*term[1]*term[4]-term[3]; 246c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy term[6]=2.0*term[1]*term[5]-term[4]; 247c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy term[7]=2.0*term[1]*term[6]-term[5]; 248c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy term[8]=2.0*term[1]*term[7]-term[6]; 249c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy p=coefficient[0]*term[0]+coefficient[1]*term[1]+coefficient[2]*term[2]+ 250c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy coefficient[3]*term[3]+coefficient[4]*term[4]+coefficient[5]*term[5]+ 251c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy coefficient[6]*term[6]+coefficient[7]*term[7]+coefficient[8]*term[8]; 252c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy quotient=div(exponent-1,5); 253c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy if (quotient.rem < 0) 254c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy { 255c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy quotient.quot-=1; 256c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy quotient.rem+=5; 257c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy } 258c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy return(x*ldexp(powers_of_two[quotient.rem]*p,7*quotient.quot)); 259c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy} 260c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 261c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristyMagickExport MagickRealType DecodePixelGamma(const MagickRealType pixel) 262c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy{ 263c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy if (pixel <= (0.0404482362771076*QuantumRange)) 264c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy return(pixel/12.92f); 265c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy return((MagickRealType) (QuantumRange*DecodeGamma((double) (QuantumScale* 266c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy pixel+0.055)/1.055))); 267c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy} 268c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy 269c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy/* 270c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 271c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% % 272c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% % 273c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% % 274ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy+ D e s t r o y P i x e l C h a n n e l M a p % 2754c08aed51c5899665ade97263692328eea4af106cristy% % 2764c08aed51c5899665ade97263692328eea4af106cristy% % 2774c08aed51c5899665ade97263692328eea4af106cristy% % 2784c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2794c08aed51c5899665ade97263692328eea4af106cristy% 280ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy% DestroyPixelChannelMap() deallocates memory associated with the pixel 281ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy% channel map. 2824c08aed51c5899665ade97263692328eea4af106cristy% 283ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy% The format of the DestroyPixelChannelMap() method is: 2844c08aed51c5899665ade97263692328eea4af106cristy% 285bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% PixelChannelMap *DestroyPixelChannelMap(PixelChannelMap *channel_map) 2864c08aed51c5899665ade97263692328eea4af106cristy% 2874c08aed51c5899665ade97263692328eea4af106cristy% A description of each parameter follows: 2884c08aed51c5899665ade97263692328eea4af106cristy% 289ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy% o channel_map: the pixel component map. 2904c08aed51c5899665ade97263692328eea4af106cristy% 2914c08aed51c5899665ade97263692328eea4af106cristy*/ 292bd5a96cd2b69f218f85a7adc306296a736f91a56cristyMagickExport PixelChannelMap *DestroyPixelChannelMap( 293bd5a96cd2b69f218f85a7adc306296a736f91a56cristy PixelChannelMap *channel_map) 2944c08aed51c5899665ade97263692328eea4af106cristy{ 295bd5a96cd2b69f218f85a7adc306296a736f91a56cristy assert(channel_map != (PixelChannelMap *) NULL); 296bd5a96cd2b69f218f85a7adc306296a736f91a56cristy channel_map=(PixelChannelMap *) RelinquishMagickMemory(channel_map); 297bd5a96cd2b69f218f85a7adc306296a736f91a56cristy return((PixelChannelMap *) RelinquishMagickMemory(channel_map)); 2984c08aed51c5899665ade97263692328eea4af106cristy} 2993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 3013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 305c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy+ E n c o d e P i x e l G a m m a % 306c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% % 307c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% % 308c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% % 309c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 310c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% 311c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% EncodePixelGamma() cancels any nonlinearity in the pixel. 312c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% 3133506059097340c6cdeff165058b5e18adfc89025cristy% The format of the EncodePixelGamma method is: 314c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% 315c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% MagickRealType EncodePixelGamma(const double MagickRealType) 316c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% 317c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% A description of each parameter follows: 318c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% 319c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% o pixel: the pixel. 320c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% 321c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy*/ 322c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 323c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristystatic inline double EncodeGamma(const double x) 324c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy{ 325c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy div_t 326c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy quotient; 327c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 328c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy double 329c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy p, 330c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy term[9]; 331c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 332c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy int 333c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy exponent; 334c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 335c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy static const double coefficient[] = /* Chebychevi poly: x^(5/12), x=1.5 */ 336c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy { 337c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 1.1758200232996901923, 338c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 0.16665763094889061230, 339c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy -0.0083154894939042125035, 340c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 0.00075187976780420279038, 341c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy -0.000083240178519391795367, 342c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 0.000010229209410070008679, 343c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy -1.3400466409860246e-06, 344c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 1.8333422241635376682e-07, 345c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy -2.5878596761348859722e-08 346c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy }; 347c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 348c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy static const double powers_of_two[] = /* (2^N)^(5/12) */ 349c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy { 350c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 1.0, 351c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 1.3348398541700343678, 352c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 1.7817974362806785482, 353c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 2.3784142300054420538, 354c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 3.1748021039363991669, 355c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 4.2378523774371812394, 356c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 5.6568542494923805819, 357c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 7.5509945014535482244, 358c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 1.0079368399158985525e1, 359c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 1.3454342644059433809e1, 360c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 1.7959392772949968275e1, 361c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 2.3972913230026907883e1 362c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy }; 363c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 364c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy /* 365c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy Compute x^(1/2.4) == x^(5/12) == pow(x,1.0/2.4). 366c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy */ 367c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy term[0]=1.0; 368c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy term[1]=4.0*frexp(x,&exponent)-3.0; 369c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy term[2]=2.0*term[1]*term[1]-term[0]; 370c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy term[3]=2.0*term[1]*term[2]-term[1]; 371c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy term[4]=2.0*term[1]*term[3]-term[2]; 372c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy term[5]=2.0*term[1]*term[4]-term[3]; 373c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy term[6]=2.0*term[1]*term[5]-term[4]; 374c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy term[7]=2.0*term[1]*term[6]-term[5]; 375c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy term[8]=2.0*term[1]*term[7]-term[6]; 376c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy p=coefficient[0]*term[0]+coefficient[1]*term[1]+coefficient[2]*term[2]+ 377c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy coefficient[3]*term[3]+coefficient[4]*term[4]+coefficient[5]*term[5]+ 378c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy coefficient[6]*term[6]+coefficient[7]*term[7]+coefficient[8]*term[8]; 379c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy quotient=div(exponent-1,12); 380c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy if (quotient.rem < 0) 381c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy { 382c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy quotient.quot-=1; 383c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy quotient.rem+=12; 384c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy } 385c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy return(ldexp(powers_of_two[quotient.rem]*p,5*quotient.quot)); 386c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy} 387c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 388c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristyMagickExport MagickRealType EncodePixelGamma(const MagickRealType pixel) 389c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy{ 390c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy if (pixel <= (0.0031306684425005883*QuantumRange)) 391c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy return(12.92f*pixel); 392c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy return((MagickRealType) QuantumRange*(1.055*EncodeGamma((double) QuantumScale* 3932a13aa6938f7e40986908f79a54a32958bf0fc81cristy pixel)-0.055)); 394c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy} 395c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy 396c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy/* 397c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 398c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% % 399c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% % 400c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% % 4013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% E x p o r t I m a g e P i x e l s % 4023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ExportImagePixels() extracts pixel data from an image and returns it to you. 4083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The method returns MagickTrue on success otherwise MagickFalse if an error is 409b5a45a37a6faa8a3725c814b51a1a86daa4ff21fcristy% encountered. The data is returned as char, short int, Quantum, unsigned int, 410cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy% unsigned long long, float, or double in the order specified by map. 4113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Suppose you want to extract the first scanline of a 640x480 image as 4133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% character data in red-green-blue order: 4143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ExportImagePixels(image,0,0,640,1,"RGB",CharPixel,pixels,exception); 4163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the ExportImagePixels method is: 4183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 419cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy% MagickBooleanType ExportImagePixels(const Image *image,const ssize_t x, 420cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy% const ssize_t y,const size_t width,const size_t height, 421cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy% const char *map,const StorageType type,void *pixels, 42246f4be29828ab7588745336d46ab11611c847933cristy% ExceptionInfo *exception) 4233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 4253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o image: the image. 4273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 428cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy% o x,y,width,height: These values define the perimeter 4293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% of a region of pixels you want to extract. 4303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o map: This string reflects the expected ordering of the pixel array. 4323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% It can be any combination or order of R = red, G = green, B = blue, 4333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A = alpha (0 is transparent), O = opacity (0 is opaque), C = cyan, 4343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Y = yellow, M = magenta, K = black, I = intensity (for grayscale), 4353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% P = pad. 4363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o type: Define the data type of the pixels. Float and double types are 4383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% normalized to [0..1] otherwise [0..QuantumRange]. Choose from these 4396c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy% types: CharPixel (char *), DoublePixel (double *), FloatPixel (float *), 440ff6834e270b99c2747ad5b2f4edeecf862aaf825cristy% LongPixel (unsigned int *), LongLongPixel (unsigned long long *), 4416c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy% QuantumPixel (Quantum *), or ShortPixel (unsigned short *). 4423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o pixels: This array of values contain the pixel components as defined by 4443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% map and type. You must preallocate this array where the expected 4453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% length varies depending on the values of width, height, map, and type. 4463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o exception: return any errors or warnings in this structure. 4483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 450e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 4512dc655d16d7bc2a04312bc00ad27139d7543b10ccristystatic void ExportCharPixel(Image *image,const RectangleInfo *roi, 45246f4be29828ab7588745336d46ab11611c847933cristy const char *restrict map,const QuantumType *quantum_map,void *pixels, 45346f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 4543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 455e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const Quantum 456e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *restrict p; 4573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 458bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 4593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x; 4603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 461e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register unsigned char 4623fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy *restrict q; 4633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 46414d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 46514d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 46614d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 4679d314ff2c17a77996c05413c2013880387e50f0ecristy ssize_t 4689d314ff2c17a77996c05413c2013880387e50f0ecristy y; 4699d314ff2c17a77996c05413c2013880387e50f0ecristy 47046f4be29828ab7588745336d46ab11611c847933cristy q=(unsigned char *) pixels; 471e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 4723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 473cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 4743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 475cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 476e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 4773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 478cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 479e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 480e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelBlue(image,p)); 481e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelGreen(image,p)); 482e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelRed(image,p)); 483e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 484e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 486e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 487e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 488e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 489e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 490cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 4913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 492cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 493e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 4943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 495cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 496e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 497e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelBlue(image,p)); 498e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelGreen(image,p)); 499e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelRed(image,p)); 500e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelAlpha(image,p)); 501e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 502e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 5033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 504e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 505e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 506e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 507e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 508cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 5093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 510cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 511e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 5123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 513cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 514e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 515e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelBlue(image,p)); 516e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelGreen(image,p)); 517e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelRed(image,p)); 518e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar((Quantum) 0); 519e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 520e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 5213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 522e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 523e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 524e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 525e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 526cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 5273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 528cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 529e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 530e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 531cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 532e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 53370e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy *q++=ScaleQuantumToChar(ClampToQuantum(GetPixelIntensity(image,p))); 534e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 535e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 5363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 537e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 538e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 539e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 540e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 541cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 5423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 543cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 544e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 545e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 546cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 547e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 548e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelRed(image,p)); 549e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelGreen(image,p)); 550e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelBlue(image,p)); 551e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 552e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 5533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 554e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 555e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 556e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 557e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 558cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 5593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 560cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 561e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 5623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 563cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 564e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 565e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelRed(image,p)); 566e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelGreen(image,p)); 567e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelBlue(image,p)); 568e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelAlpha(image,p)); 569e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 570e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 5713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 572e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 573e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 574e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 575e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 576cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 5773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 578cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 579e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 580e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 581cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 582e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 583e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelRed(image,p)); 584e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelGreen(image,p)); 585e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelBlue(image,p)); 586e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar((Quantum) 0); 587e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 588e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 5893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 590e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 5913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 59214d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 593cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 5943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 595cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 596e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 597e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 598cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 5993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 600e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 601e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 6023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 60314d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 604e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 605e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=0; 606e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 6073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 608e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 609e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 6103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 611e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToChar(GetPixelRed(image,p)); 612e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 6133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 614e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 615e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 6163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 617e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToChar(GetPixelGreen(image,p)); 618e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 6193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 620e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 621e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 6223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 623e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToChar(GetPixelBlue(image,p)); 624e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 6253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 626e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 6273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 628e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToChar(GetPixelAlpha(image,p)); 629e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 6303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 631e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 6323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 633e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToChar(GetPixelAlpha(image,p)); 634e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 6353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 636e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 6373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 638e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->colorspace == CMYKColorspace) 639e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToChar(GetPixelBlack(image,p)); 640e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 6413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 642e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 6433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 64470e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy *q=ScaleQuantumToChar(ClampToQuantum(GetPixelIntensity(image,p))); 645e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 6463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 647e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 648e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 6493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 650e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q++; 651e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 652e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 653e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 654e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 655e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 656e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 6572dc655d16d7bc2a04312bc00ad27139d7543b10ccristystatic void ExportDoublePixel(Image *image,const RectangleInfo *roi, 65846f4be29828ab7588745336d46ab11611c847933cristy const char *restrict map,const QuantumType *quantum_map,void *pixels, 65946f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 660e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 661e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const Quantum 662e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *restrict p; 663e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 664e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register double 6653fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy *restrict q; 666e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 667e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 668e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 669e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 67014d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 67114d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 67214d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 673e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 674e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 675e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 676e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q=(double *) pixels; 677e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 678e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 679cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 6803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 681cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 6824c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 6833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 684cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 6853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 686e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelBlue(image,p)); 687e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelGreen(image,p)); 688e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelRed(image,p)); 689ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(image); 6903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 692e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 6933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 694e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 6953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 696cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 697e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 698cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 699e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 7003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 701cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 7023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 703e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelBlue(image,p)); 704e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelGreen(image,p)); 705e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelRed(image,p)); 706e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelAlpha(image,p)); 707e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 7083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 709e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 710e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 711e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 712e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 713e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 714cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 7153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 716cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 7174c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 7183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 719cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 7203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 721e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelBlue(image,p)); 722e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelGreen(image,p)); 723e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelRed(image,p)); 724e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=0.0; 725ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(image); 7263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 7273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 728e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 7293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 730e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 7313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 732cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 733e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 734cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 735e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 7363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 737cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 7383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 739e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelIntensity(image,p)); 740e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 7413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 742e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 743e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 744e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 745e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 746e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 747cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 748e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 749cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 750e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 7513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 752cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 7533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 754e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelRed(image,p)); 755e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelGreen(image,p)); 756e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelBlue(image,p)); 757e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 7583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 759e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 760e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 761e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 762e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 763e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 764cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 765e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 766cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 767e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 7683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 769cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 7703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 771e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelRed(image,p)); 772e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelGreen(image,p)); 773e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelBlue(image,p)); 774e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelAlpha(image,p)); 775e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 7763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 777e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 778e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 779e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 780e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 781e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 782cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 7833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 784cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 7854c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 7863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 787cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 7883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 789e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelRed(image,p)); 790e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelGreen(image,p)); 791e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelBlue(image,p)); 792e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=0.0; 793ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(image); 7943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 7953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 796e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 7973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 79814d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 799cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 800e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 801cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 802e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 803e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 804cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 8053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 806e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 807e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 8083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 80914d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 810e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 811e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=0; 812e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 8133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 814e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 815e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 8163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 817e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(double) (QuantumScale*GetPixelRed(image,p)); 818e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 8193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 820e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 821e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 8223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 823e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(double) (QuantumScale*GetPixelGreen(image,p)); 824e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 8253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 826e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 827e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 8283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 829e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(double) (QuantumScale*GetPixelBlue(image,p)); 830e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 8313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 832e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 8333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 834e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(double) (QuantumScale*GetPixelAlpha(image,p)); 835e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 8363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 837e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 8383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 839e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(double) (QuantumScale*GetPixelAlpha(image,p)); 840e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 8413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 842e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 8433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 844e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->colorspace == CMYKColorspace) 845e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(double) (QuantumScale* 846e5370944fabb7afa477ab1325d400731b1e5d5e8cristy GetPixelBlack(image,p)); 847e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 8483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 849e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 8503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 851e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(double) (QuantumScale*GetPixelIntensity(image,p)); 852e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 8533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 854e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 855e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=0; 8563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 857e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q++; 858e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 859e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 860e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 861e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 862e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 863e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 8642dc655d16d7bc2a04312bc00ad27139d7543b10ccristystatic void ExportFloatPixel(Image *image,const RectangleInfo *roi, 86546f4be29828ab7588745336d46ab11611c847933cristy const char *restrict map,const QuantumType *quantum_map,void *pixels, 86646f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 867e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 868e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const Quantum 869e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *restrict p; 870e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 871e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register float 8723fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy *restrict q; 873e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 874e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 875e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 876e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 87714d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 87814d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 87914d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 880e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 881e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 882e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 883e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q=(float *) pixels; 884e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 885e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 886cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 8873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 888cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 8894c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 8903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 891cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 8923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 893e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelBlue(image,p)); 894e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelGreen(image,p)); 895e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelRed(image,p)); 896ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(image); 8973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 8983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 899e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 9003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 901e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 9023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 903cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 904e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 905cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 906e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 9073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 908cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 9093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 910e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelBlue(image,p)); 911e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelGreen(image,p)); 912e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelRed(image,p)); 913e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelAlpha(image,p)); 914e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 9153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 916e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 917e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 918e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 919e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 920e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 921cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 9223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 923cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 9244c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 9253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 926cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 9273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 928e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelBlue(image,p)); 929e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelGreen(image,p)); 930e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelRed(image,p)); 931e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=0.0; 932ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(image); 9333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 9343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 935e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 9363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 937e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 9383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 939cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 940e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 941cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 942e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 9433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 944cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 9453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 946e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelIntensity(image,p)); 947e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 9483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 949e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 950e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 951e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 952e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 953e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 954cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 955e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 956cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 957e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 9583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 959cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 9603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 961e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelRed(image,p)); 962e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelGreen(image,p)); 963e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelBlue(image,p)); 964e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 9653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 966e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 967e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 968e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 969e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 970e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 971cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 972e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 973cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 974e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 9753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 976cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 9773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 978e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelRed(image,p)); 979e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelGreen(image,p)); 980e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelBlue(image,p)); 981e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelAlpha(image,p)); 982e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 9833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 984e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 985e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 986e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 987e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 988e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 989cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 9903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 991cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 9924c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 9933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 994cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 9953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 996e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelRed(image,p)); 997e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelGreen(image,p)); 998e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelBlue(image,p)); 999e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=0.0; 1000ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(image); 10013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 10023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1003e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 10043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 100514d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 1006cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1007e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1008cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1009e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1010e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1011cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 10123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1013e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 1014e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 10153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 101614d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 1017e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1018e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=0; 1019e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 10203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1021e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 1022e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 10233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1024e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(float) (QuantumScale*GetPixelRed(image,p)); 1025e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 10263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1027e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 1028e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 10293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1030e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(float) (QuantumScale*GetPixelGreen(image,p)); 1031e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 10323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1033e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 1034e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 10353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1036e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(float) (QuantumScale*GetPixelBlue(image,p)); 1037e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 10383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1039e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 10403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1041e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(float) (QuantumScale*((Quantum) (GetPixelAlpha(image,p)))); 1042e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 10433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1044e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 10453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1046e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(float) (QuantumScale*GetPixelAlpha(image,p)); 1047e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 10483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1049e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 10503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1051e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->colorspace == CMYKColorspace) 1052e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(float) (QuantumScale* GetPixelBlack(image,p)); 1053e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 10543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1055e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 10563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1057e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(float) (QuantumScale*GetPixelIntensity(image,p)); 1058e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 10593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1060e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 1061e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=0; 10623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1063e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q++; 1064e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1065e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1066e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1067e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1068e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 1069e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 10702dc655d16d7bc2a04312bc00ad27139d7543b10ccristystatic void ExportLongPixel(Image *image,const RectangleInfo *roi, 107146f4be29828ab7588745336d46ab11611c847933cristy const char *restrict map,const QuantumType *quantum_map,void *pixels, 107246f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 1073e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 1074e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const Quantum 1075e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *restrict p; 1076e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1077e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 1078e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 1079e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1080e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register unsigned int 10813fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy *restrict q; 1082e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 108314d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 108414d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 108514d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 1086e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 1087e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 1088e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1089e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q=(unsigned int *) pixels; 1090e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 1091e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1092cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 10933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1094cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 10954c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 10963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 1097cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 10983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 10996c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelBlue(image,p)); 11006c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelGreen(image,p)); 11016c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelRed(image,p)); 1102ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(image); 11033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 11043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1105e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 11063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1107e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 11083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1109cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1110e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1111cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1112e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1113e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1114cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1115e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 11166c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelBlue(image,p)); 11176c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelGreen(image,p)); 11186c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelRed(image,p)); 11196c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelAlpha(image,p)); 1120e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1121e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1122e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1123e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1124e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1125e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 1126e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1127cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1128e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1129cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1130e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1131e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1132cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1133e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 11346c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelBlue(image,p)); 11356c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelGreen(image,p)); 11366c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelRed(image,p)); 11376c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=0; 1138e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1139e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1140e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1141e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1142e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1143e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 1144e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1145cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1146e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1147cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1148e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1149e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1150cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1151e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 115270e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy *q++=ScaleQuantumToLong(ClampToQuantum(GetPixelIntensity(image,p))); 1153e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1154e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1155e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1156e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1157e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1158e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 1159e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1160cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1161e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1162cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1163e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1164e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1165cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1166e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 11676c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelRed(image,p)); 11686c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelGreen(image,p)); 11696c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelBlue(image,p)); 1170e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1171e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1172e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1173e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1174e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1175e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 1176e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1177cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1178e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1179cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1180e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1181e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1182cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1183e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 11846c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelRed(image,p)); 11856c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelGreen(image,p)); 11866c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelBlue(image,p)); 11876c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelAlpha(image,p)); 1188e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1189e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1190e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1191e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1192e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1193e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 1194e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1195cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1196e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1197cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1198e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1199e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1200cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1201e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 12026c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelRed(image,p)); 12036c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelGreen(image,p)); 12046c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelBlue(image,p)); 12056c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=0; 1206e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1207e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1208e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1209e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1210e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 121114d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 1212cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1213e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1214cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1215e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1216e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1217cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1218e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1219e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 1220e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 1221e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 122214d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 1223e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1224e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=0; 1225e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 1226e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1227e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 1228e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 1229e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 12306c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q=ScaleQuantumToLong(GetPixelRed(image,p)); 1231e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1232e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1233e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 1234e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 1235e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 12366c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q=ScaleQuantumToLong(GetPixelGreen(image,p)); 1237e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1238e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1239e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 1240e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 1241e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 12426c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q=ScaleQuantumToLong(GetPixelBlue(image,p)); 1243e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1244e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1245e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 1246e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 12476c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q=ScaleQuantumToLong(GetPixelAlpha(image,p)); 1248e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1249e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1250e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 1251e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 12526c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q=ScaleQuantumToLong(GetPixelAlpha(image,p)); 1253e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1254e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1255e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 1256e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1257e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->colorspace == CMYKColorspace) 12586c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q=ScaleQuantumToLong(GetPixelBlack(image,p)); 1259e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1260e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1261e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 1262e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 126370e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy *q=ScaleQuantumToLong(ClampToQuantum(GetPixelIntensity(image,p))); 1264e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1265e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1266e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 12676c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy break; 1268e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1269e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q++; 1270e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1271e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1272e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1273e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1274e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 1275e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 12762dc655d16d7bc2a04312bc00ad27139d7543b10ccristystatic void ExportLongLongPixel(Image *image,const RectangleInfo *roi, 127746f4be29828ab7588745336d46ab11611c847933cristy const char *restrict map,const QuantumType *quantum_map,void *pixels, 127846f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 1279e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 1280e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const Quantum 1281e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *restrict p; 1282e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1283e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 1284e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 1285e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1286b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy register MagickSizeType 12873fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy *restrict q; 1288e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 128914d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 129014d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 129114d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 1292e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 1293e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 1294e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1295b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy q=(MagickSizeType *) pixels; 1296e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 1297e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1298cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1299e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1300cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1301e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1302e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1303cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1304e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1305b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelBlue(image,p)); 1306b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelGreen(image,p)); 1307b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelRed(image,p)); 1308e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1309e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1310e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1311e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1312e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1313e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 1314e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1315cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1316e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1317cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1318e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1319e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1320cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1321e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1322b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelBlue(image,p)); 1323b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelGreen(image,p)); 1324b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelRed(image,p)); 1325b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelAlpha(image,p)); 1326e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1327e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1328e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1329e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1330e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1331e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 1332e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1333cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1334e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1335cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1336e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1337e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1338cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1339e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1340b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelBlue(image,p)); 1341b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelGreen(image,p)); 1342b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelRed(image,p)); 1343e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=0; 1344e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1345e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1346e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1347e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1348e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1349e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 1350e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1351cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1352e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1353cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1354e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1355e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1356cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1357e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 135870e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy *q++=ScaleQuantumToLongLong(ClampToQuantum(GetPixelIntensity(image,p))); 1359e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1360e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1361e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1362e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1363e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1364e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 1365e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1366cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1367e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1368cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1369e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1370e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1371cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1372e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1373b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelRed(image,p)); 1374b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelGreen(image,p)); 1375b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelBlue(image,p)); 1376e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1377e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1378e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1379e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1380e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1381e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 1382e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1383cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1384e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1385cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1386e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1387e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1388cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1389e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1390b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelRed(image,p)); 1391b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelGreen(image,p)); 1392b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelBlue(image,p)); 1393b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelAlpha(image,p)); 1394e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1395e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1396e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1397e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1398e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1399e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 1400e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1401cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1402e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1403cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1404e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1405e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1406cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1407e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1408b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelRed(image,p)); 1409b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelGreen(image,p)); 1410b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelBlue(image,p)); 1411e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=0; 1412e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1413e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1414e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1415e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1416e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 141714d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 1418cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1419e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1420cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1421e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1422e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1423cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1424e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1425e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 1426e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 1427e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 142814d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 1429e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1430e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=0; 1431e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 1432e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1433e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 1434e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 1435e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1436b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q=ScaleQuantumToLongLong(GetPixelRed(image,p)); 1437e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1438e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1439e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 1440e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 1441e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1442b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q=ScaleQuantumToLongLong(GetPixelGreen(image,p)); 1443e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1444e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1445e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 1446e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 1447e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1448b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q=ScaleQuantumToLongLong(GetPixelBlue(image,p)); 1449e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1450e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1451e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 1452e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1453b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q=ScaleQuantumToLongLong(GetPixelAlpha(image,p)); 1454e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1455e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1456e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 1457e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1458b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q=ScaleQuantumToLongLong(GetPixelAlpha(image,p)); 1459e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1460e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1461e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 1462e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1463e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->colorspace == CMYKColorspace) 1464b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q=ScaleQuantumToLongLong(GetPixelBlack(image,p)); 1465e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1466e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1467e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 1468e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 146958ee5018960b42b80b54398eacabe9ae5da89149cristy *q=ScaleQuantumToLongLong(ClampToQuantum( 147058ee5018960b42b80b54398eacabe9ae5da89149cristy GetPixelIntensity(image,p))); 1471e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1472e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1473e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 1474e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1475e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1476e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q++; 1477e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1478e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1479e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1480e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1481e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 1482e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 14832dc655d16d7bc2a04312bc00ad27139d7543b10ccristystatic void ExportQuantumPixel(Image *image,const RectangleInfo *roi, 148446f4be29828ab7588745336d46ab11611c847933cristy const char *restrict map,const QuantumType *quantum_map,void *pixels, 148546f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 1486e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 1487e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const Quantum 1488e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *restrict p; 1489e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1490e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register Quantum 14913fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy *restrict q; 1492e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1493e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 1494e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 1495e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 149614d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 149714d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 149814d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 1499e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 1500e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 1501e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1502e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q=(Quantum *) pixels; 1503e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 1504e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1505cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1506e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1507cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1508e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1509e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1510cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1511e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1512e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelBlue(image,p); 1513e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelGreen(image,p); 1514e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelRed(image,p); 1515e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1516e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1517e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1518e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1519e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1520e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 1521e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1522cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1523e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1524cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1525e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1526e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1527cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1528e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1529e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelBlue(image,p); 1530e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelGreen(image,p); 1531e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelRed(image,p); 1532e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(Quantum) (GetPixelAlpha(image,p)); 1533e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1534e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1535e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1536e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1537e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1538e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 1539e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1540cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1541e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1542cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1543e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1544e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1545cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1546e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1547e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelBlue(image,p); 1548e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelGreen(image,p); 1549e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelRed(image,p); 1550e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(Quantum) 0; 1551e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1552e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1553e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1554e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1555e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1556e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 1557e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1558cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1559e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1560cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1561e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1562e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1563cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1564e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 156570e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy *q++=ClampToQuantum(GetPixelIntensity(image,p)); 1566e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1567e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1568e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1569e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1570e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1571e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 1572e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1573cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1574e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1575cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1576e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1577e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1578cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1579e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1580e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelRed(image,p); 1581e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelGreen(image,p); 1582e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelBlue(image,p); 1583e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1584e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1585e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1586e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1587e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1588e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 1589e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1590cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1591e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1592cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1593e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1594e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1595cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1596e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1597e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelRed(image,p); 1598e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelGreen(image,p); 1599e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelBlue(image,p); 1600e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(Quantum) (GetPixelAlpha(image,p)); 1601e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1602e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1603e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1604e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1605e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1606e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 1607e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1608cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1609e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1610cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1611e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1612e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1613cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1614e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1615e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelRed(image,p); 1616e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelGreen(image,p); 1617e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelBlue(image,p); 1618e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(Quantum) 0; 1619e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1620e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1621e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1622e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1623e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 162414d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 1625cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1626e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1627cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1628e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1629e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1630cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1631e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1632e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 1633e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 1634e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 163514d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 1636e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1637e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(Quantum) 0; 1638e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 1639e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1640e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 1641e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 1642e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1643e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=GetPixelRed(image,p); 1644e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1645e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1646e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 1647e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 1648e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1649e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=GetPixelGreen(image,p); 1650e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1651e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1652e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 1653e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 1654e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1655e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=GetPixelBlue(image,p); 1656e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1657e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1658e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 1659e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1660e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=GetPixelAlpha(image,p); 1661e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1662e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1663e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 1664e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1665e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=GetPixelAlpha(image,p); 1666e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1667e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1668e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 1669e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1670e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->colorspace == CMYKColorspace) 1671e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=GetPixelBlack(image,p); 1672e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1673e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1674e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 1675e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 167670e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy *q=ClampToQuantum(GetPixelIntensity(image,p)); 1677e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1678e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1679e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 1680e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1681e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(Quantum) 0; 1682e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1683e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1684e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1685e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q++; 1686e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1687e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1688e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1689e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1690e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 1691e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 16922dc655d16d7bc2a04312bc00ad27139d7543b10ccristystatic void ExportShortPixel(Image *image,const RectangleInfo *roi, 169346f4be29828ab7588745336d46ab11611c847933cristy const char *restrict map,const QuantumType *quantum_map,void *pixels, 169446f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 1695e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 1696e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const Quantum 1697e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *restrict p; 1698e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1699e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 1700e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 1701e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1702e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register unsigned short 17033fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy *restrict q; 1704e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 170514d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 170614d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 170714d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 170814d712974a2c2cd2aebf8db11c7ca686bb67596fcristy ssize_t 170914d712974a2c2cd2aebf8db11c7ca686bb67596fcristy y; 171014d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 1711e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q=(unsigned short *) pixels; 1712e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 1713e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1714cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1715e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1716cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1717e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1718e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1719cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1720e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1721e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelBlue(image,p)); 1722e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelGreen(image,p)); 1723e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelRed(image,p)); 1724e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1725e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1726e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1727e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1728e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1729e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 1730e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1731cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1732e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1733cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1734e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1735e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1736cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1737e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1738e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelBlue(image,p)); 1739e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelGreen(image,p)); 1740e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelRed(image,p)); 1741e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelAlpha(image,p)); 1742e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1743e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1744e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1745e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1746e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1747e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 1748e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1749cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1750e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1751cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1752e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1753e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1754cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1755e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1756e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelBlue(image,p)); 1757e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelGreen(image,p)); 1758e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelRed(image,p)); 1759e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=0; 1760e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1761e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1762e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1763e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1764e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1765e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 1766e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1767cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1768e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1769cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1770e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1771e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1772cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1773e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 177470e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy *q++=ScaleQuantumToShort(ClampToQuantum(GetPixelIntensity(image,p))); 1775e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1776e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1777e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1778e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1779e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1780e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 1781e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1782cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1783e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1784cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1785e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1786e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1787cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1788e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1789e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelRed(image,p)); 1790e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelGreen(image,p)); 1791e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelBlue(image,p)); 1792e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1793e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1794e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1795e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1796e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1797e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 1798e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1799cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1800e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1801cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1802e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1803e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1804cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1805e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1806e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelRed(image,p)); 1807e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelGreen(image,p)); 1808e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelBlue(image,p)); 1809e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelAlpha(image,p)); 1810e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1811e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1812e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1813e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1814e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1815e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 1816e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1817cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1818e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1819cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1820e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1821e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1822cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1823e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1824e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelRed(image,p)); 1825e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelGreen(image,p)); 1826e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelBlue(image,p)); 1827e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=0; 1828e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1829e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1830e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1831e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1832e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 183314d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 1834cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1835e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1836cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1837e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1838e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1839cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1840e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1841e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 1842e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 1843e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 184414d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 1845e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1846e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=0; 1847e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 1848e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1849e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 1850e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 1851e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1852e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToShort(GetPixelRed(image,p)); 1853e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1854e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1855e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 1856e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 1857e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1858e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToShort(GetPixelGreen(image,p)); 1859e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1860e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1861e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 1862e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 1863e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1864e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToShort(GetPixelBlue(image,p)); 1865e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1866e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1867e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 1868e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1869e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToShort(GetPixelAlpha(image,p)); 1870e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1871e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1872e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 1873e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1874e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToShort(GetPixelAlpha(image,p)); 1875e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1876e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1877e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 1878e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1879e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->colorspace == CMYKColorspace) 1880e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToShort(GetPixelBlack(image,p)); 1881e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1882e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1883e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 1884e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 188570e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy *q=ScaleQuantumToShort(ClampToQuantum(GetPixelIntensity(image,p))); 1886e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1887e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1888e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 1889e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1890e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1891e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q++; 1892e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1893e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1894e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1895e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1896e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 1897e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 189858ee5018960b42b80b54398eacabe9ae5da89149cristyMagickExport MagickBooleanType ExportImagePixels(Image *image,const ssize_t x, 189958ee5018960b42b80b54398eacabe9ae5da89149cristy const ssize_t y,const size_t width,const size_t height,const char *map, 190058ee5018960b42b80b54398eacabe9ae5da89149cristy const StorageType type,void *pixels,ExceptionInfo *exception) 1901e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 1902e5370944fabb7afa477ab1325d400731b1e5d5e8cristy QuantumType 1903e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *quantum_map; 1904e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1905cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy RectangleInfo 1906cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy roi; 1907cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy 1908e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 1909e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 1910e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 191114d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 191214d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 191314d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 1914e5370944fabb7afa477ab1325d400731b1e5d5e8cristy assert(image != (Image *) NULL); 1915e5370944fabb7afa477ab1325d400731b1e5d5e8cristy assert(image->signature == MagickSignature); 1916e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->debug != MagickFalse) 1917e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename); 191814d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 191914d712974a2c2cd2aebf8db11c7ca686bb67596fcristy quantum_map=(QuantumType *) AcquireQuantumMemory(length,sizeof(*quantum_map)); 1920e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (quantum_map == (QuantumType *) NULL) 1921e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1922e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) ThrowMagickException(exception,GetMagickModule(), 1923efe601ce9ea5ad34ad0e8ad6e61d9be9b148b2a3cristy ResourceLimitError,"MemoryAllocationFailed","`%s'",image->filename); 1924e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return(MagickFalse); 1925e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 192614d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 1927e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1928e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (map[i]) 1929e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1930e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'A': 1931e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'a': 1932e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1933e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=AlphaQuantum; 1934e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1935e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1936e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'B': 1937e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'b': 1938e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1939e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=BlueQuantum; 1940e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1941e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1942e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'C': 1943e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'c': 1944e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1945e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=CyanQuantum; 1946e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->colorspace == CMYKColorspace) 1947e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1948e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map); 1949e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) ThrowMagickException(exception,GetMagickModule(),ImageError, 1950efe601ce9ea5ad34ad0e8ad6e61d9be9b148b2a3cristy "ColorSeparatedImageRequired","`%s'",map); 1951e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return(MagickFalse); 1952e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1953e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'g': 1954e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'G': 1955e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1956e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=GreenQuantum; 1957e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1958e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1959e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'I': 1960e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'i': 1961e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1962e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=IndexQuantum; 1963e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1964e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1965e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'K': 1966e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'k': 1967e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1968e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=BlackQuantum; 1969e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->colorspace == CMYKColorspace) 1970e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1971e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map); 1972e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) ThrowMagickException(exception,GetMagickModule(),ImageError, 1973efe601ce9ea5ad34ad0e8ad6e61d9be9b148b2a3cristy "ColorSeparatedImageRequired","`%s'",map); 1974e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return(MagickFalse); 1975e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1976e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'M': 1977e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'm': 1978e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1979e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=MagentaQuantum; 1980e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->colorspace == CMYKColorspace) 1981e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1982e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map); 1983e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) ThrowMagickException(exception,GetMagickModule(),ImageError, 1984efe601ce9ea5ad34ad0e8ad6e61d9be9b148b2a3cristy "ColorSeparatedImageRequired","`%s'",map); 1985e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return(MagickFalse); 1986e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1987e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'o': 1988e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'O': 1989e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1990e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=OpacityQuantum; 1991e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1992e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1993e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'P': 1994e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'p': 1995e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1996e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=UndefinedQuantum; 1997e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1998e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1999e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'R': 2000e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'r': 2001e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2002e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=RedQuantum; 2003e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2004e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2005e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'Y': 2006e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'y': 2007e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2008e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=YellowQuantum; 2009e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->colorspace == CMYKColorspace) 2010e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2011e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map); 2012e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) ThrowMagickException(exception,GetMagickModule(),ImageError, 2013efe601ce9ea5ad34ad0e8ad6e61d9be9b148b2a3cristy "ColorSeparatedImageRequired","`%s'",map); 2014e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return(MagickFalse); 2015e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2016e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 2017e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2018e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map); 2019e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) ThrowMagickException(exception,GetMagickModule(),OptionError, 2020efe601ce9ea5ad34ad0e8ad6e61d9be9b148b2a3cristy "UnrecognizedPixelMap","`%s'",map); 2021e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return(MagickFalse); 2022e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2023e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2024e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2025cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy roi.width=width; 2026cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy roi.height=height; 2027cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy roi.x=x; 2028cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy roi.y=y; 2029e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (type) 2030e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2031e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CharPixel: 2032e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2033cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ExportCharPixel(image,&roi,map,quantum_map,pixels,exception); 2034e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2035e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2036e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case DoublePixel: 2037e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2038cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ExportDoublePixel(image,&roi,map,quantum_map,pixels,exception); 2039e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2040e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2041e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case FloatPixel: 2042e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2043cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ExportFloatPixel(image,&roi,map,quantum_map,pixels,exception); 2044e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2045e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 20466c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy case LongPixel: 2047e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2048cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ExportLongPixel(image,&roi,map,quantum_map,pixels,exception); 2049e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2050e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 20516c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy case LongLongPixel: 2052e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2053cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ExportLongLongPixel(image,&roi,map,quantum_map,pixels,exception); 2054e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2055e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2056e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case QuantumPixel: 2057e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2058cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ExportQuantumPixel(image,&roi,map,quantum_map,pixels,exception); 2059e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2060e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2061e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case ShortPixel: 2062e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2063cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ExportShortPixel(image,&roi,map,quantum_map,pixels,exception); 2064e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2065e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2066e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 2067e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2068e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map); 2069e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) ThrowMagickException(exception,GetMagickModule(),OptionError, 2070efe601ce9ea5ad34ad0e8ad6e61d9be9b148b2a3cristy "UnrecognizedPixelMap","`%s'",map); 20713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 20723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 20733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2074e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map); 2075e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return(MagickTrue); 2076e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 2077e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2078e5370944fabb7afa477ab1325d400731b1e5d5e8cristy/* 2079e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2080e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 2081e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 2082e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 2083e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% G e t P i x e l I n f o % 2084e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 2085e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 2086e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 2087e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2088e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2089e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% GetPixelInfo() initializes the PixelInfo structure. 2090e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2091e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% The format of the GetPixelInfo method is: 2092e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2093e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% GetPixelInfo(const Image *image,PixelInfo *pixel) 2094e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2095e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% A description of each parameter follows: 2096e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2097a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony% o image: the image. (optional - may be NULL) 2098e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2099e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% o pixel: Specifies a pointer to a PixelInfo structure. 2100e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2101e5370944fabb7afa477ab1325d400731b1e5d5e8cristy*/ 2102e5370944fabb7afa477ab1325d400731b1e5d5e8cristyMagickExport void GetPixelInfo(const Image *image,PixelInfo *pixel) 2103e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 2104e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->storage_class=DirectClass; 21057020ae6594690c03a4f73784fd41a7131a5b22c6cristy pixel->colorspace=sRGBColorspace; 21068a46d827a124555f0c48fb2368ec1bba8e079ab6cristy pixel->alpha_trait=UndefinedPixelTrait; 2107e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->fuzz=0.0; 2108e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->depth=MAGICKCORE_QUANTUM_DEPTH; 2109e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->red=0.0; 2110e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->green=0.0; 2111e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->blue=0.0; 2112e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->black=0.0; 2113a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixel->alpha=(double) OpaqueAlpha; 2114e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->index=0.0; 2115e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image == (const Image *) NULL) 2116e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2117e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->storage_class=image->storage_class; 2118e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->colorspace=image->colorspace; 21198a46d827a124555f0c48fb2368ec1bba8e079ab6cristy pixel->alpha_trait=image->alpha_trait; 2120e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->depth=image->depth; 2121e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->fuzz=image->fuzz; 2122e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 2123e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2124e5370944fabb7afa477ab1325d400731b1e5d5e8cristy/* 2125e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2126e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 2127e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 2128e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 21299731df786aef53bf0482896bcdf9af7011880042cristy% G e t P i x e l I n t e n s i t y % 21309731df786aef53bf0482896bcdf9af7011880042cristy% % 21319731df786aef53bf0482896bcdf9af7011880042cristy% % 21329731df786aef53bf0482896bcdf9af7011880042cristy% % 21339731df786aef53bf0482896bcdf9af7011880042cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 21349731df786aef53bf0482896bcdf9af7011880042cristy% 21350c5c889633982c1b29bfaacf17092343544d6c8bcristy% GetPixelIntensity() returns a single sample intensity value from the red, 213670e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy% green, and blue components of a pixel based on the selected method: 213770e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy% 21382cf5d375fa7abe962164b39a35948fe76b4d239acristy% Rec601Luma 0.298839R' + 0.586811G' + 0.114350B' 21392cf5d375fa7abe962164b39a35948fe76b4d239acristy% Rec601Luminance 0.298839R + 0.586811G + 0.114350B 21401352acf3bec61a13875a2d020306ad6339686040cristy% Rec709Luma 0.212656R' + 0.715158G' + 0.072186B' 21411352acf3bec61a13875a2d020306ad6339686040cristy% Rec709Luminance 0.212656R + 0.715158G + 0.072186B 214209bb043b5d7ce21f9eb1067d6e9bc80365852b98cristy% Brightness max(R', G', B') 214309bb043b5d7ce21f9eb1067d6e9bc80365852b98cristy% Lightness (min(R', G', B') + max(R', G', B')) / 2.0 214409bb043b5d7ce21f9eb1067d6e9bc80365852b98cristy% 214509bb043b5d7ce21f9eb1067d6e9bc80365852b98cristy% MS (R^2 + G^2 + B^2) / 3.0 214609bb043b5d7ce21f9eb1067d6e9bc80365852b98cristy% RMS sqrt((R^2 + G^2 + B^2) / 3.0 214709bb043b5d7ce21f9eb1067d6e9bc80365852b98cristy% Average (R + G + B') / 3.0 21489731df786aef53bf0482896bcdf9af7011880042cristy% 21499731df786aef53bf0482896bcdf9af7011880042cristy% The format of the GetPixelIntensity method is: 21509731df786aef53bf0482896bcdf9af7011880042cristy% 21512cf5d375fa7abe962164b39a35948fe76b4d239acristy% MagickRealType GetPixelIntensity(const Image *image, 21522cf5d375fa7abe962164b39a35948fe76b4d239acristy% const Quantum *pixel) 21539731df786aef53bf0482896bcdf9af7011880042cristy% 21549731df786aef53bf0482896bcdf9af7011880042cristy% A description of each parameter follows: 21559731df786aef53bf0482896bcdf9af7011880042cristy% 21569731df786aef53bf0482896bcdf9af7011880042cristy% o image: the image. 21579731df786aef53bf0482896bcdf9af7011880042cristy% 21589731df786aef53bf0482896bcdf9af7011880042cristy% o pixel: Specifies a pointer to a Quantum structure. 21599731df786aef53bf0482896bcdf9af7011880042cristy% 21609731df786aef53bf0482896bcdf9af7011880042cristy*/ 216170e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy 216270e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristystatic inline MagickRealType MagickMax(const MagickRealType x, 216370e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy const MagickRealType y) 216470e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy{ 216570e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy if (x > y) 216670e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy return(x); 216770e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy return(y); 216870e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy} 216970e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy 217070e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristystatic inline MagickRealType MagickMin(const MagickRealType x, 217170e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy const MagickRealType y) 217270e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy{ 217370e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy if (x < y) 217470e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy return(x); 217570e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy return(y); 217670e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy} 217770e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy 21789731df786aef53bf0482896bcdf9af7011880042cristyMagickExport MagickRealType GetPixelIntensity(const Image *restrict image, 21799731df786aef53bf0482896bcdf9af7011880042cristy const Quantum *restrict pixel) 21809731df786aef53bf0482896bcdf9af7011880042cristy{ 21819731df786aef53bf0482896bcdf9af7011880042cristy MagickRealType 21829731df786aef53bf0482896bcdf9af7011880042cristy blue, 21839731df786aef53bf0482896bcdf9af7011880042cristy green, 218470e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy red, 218570e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy intensity; 21869731df786aef53bf0482896bcdf9af7011880042cristy 21879731df786aef53bf0482896bcdf9af7011880042cristy if (image->colorspace == GRAYColorspace) 2188592d6bbf607f36bbae8ca1391570534e3b72087ccristy return((MagickRealType) GetPixelGray(image,pixel)); 2189592d6bbf607f36bbae8ca1391570534e3b72087ccristy red=(MagickRealType) GetPixelRed(image,pixel); 2190592d6bbf607f36bbae8ca1391570534e3b72087ccristy green=(MagickRealType) GetPixelGreen(image,pixel); 2191592d6bbf607f36bbae8ca1391570534e3b72087ccristy blue=(MagickRealType) GetPixelBlue(image,pixel); 219270e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy switch (image->intensity) 219370e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy { 2194bf02d73b29c613944ea22e2acc8b830aa4700871cristy case AveragePixelIntensityMethod: 2195bf02d73b29c613944ea22e2acc8b830aa4700871cristy { 2196bf02d73b29c613944ea22e2acc8b830aa4700871cristy intensity=(red+green+blue)/3.0; 2197bf02d73b29c613944ea22e2acc8b830aa4700871cristy break; 2198bf02d73b29c613944ea22e2acc8b830aa4700871cristy } 2199bf02d73b29c613944ea22e2acc8b830aa4700871cristy case BrightnessPixelIntensityMethod: 2200bf02d73b29c613944ea22e2acc8b830aa4700871cristy { 2201bf02d73b29c613944ea22e2acc8b830aa4700871cristy intensity=MagickMax(MagickMax(red,green),blue); 2202bf02d73b29c613944ea22e2acc8b830aa4700871cristy break; 2203bf02d73b29c613944ea22e2acc8b830aa4700871cristy } 2204bf02d73b29c613944ea22e2acc8b830aa4700871cristy case LightnessPixelIntensityMethod: 2205bf02d73b29c613944ea22e2acc8b830aa4700871cristy { 220609bb043b5d7ce21f9eb1067d6e9bc80365852b98cristy intensity=(MagickMin(MagickMin(red,green),blue)+ 2207ce326724341c443b3c813774b0cc3b4ce4b425cbcristy MagickMax(MagickMax(red,green),blue))/2.0; 2208bf02d73b29c613944ea22e2acc8b830aa4700871cristy break; 2209bf02d73b29c613944ea22e2acc8b830aa4700871cristy } 2210462c1ca063d4cb0f06b05b657caf4d1bb81c616ccristy case MSPixelIntensityMethod: 2211462c1ca063d4cb0f06b05b657caf4d1bb81c616ccristy { 2212462c1ca063d4cb0f06b05b657caf4d1bb81c616ccristy intensity=(MagickRealType) (((double) red*red+green*green+blue*blue)/ 2213462c1ca063d4cb0f06b05b657caf4d1bb81c616ccristy (3.0*QuantumRange)); 2214462c1ca063d4cb0f06b05b657caf4d1bb81c616ccristy break; 2215462c1ca063d4cb0f06b05b657caf4d1bb81c616ccristy } 221670e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy case Rec601LumaPixelIntensityMethod: 221770e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy { 221809bb043b5d7ce21f9eb1067d6e9bc80365852b98cristy if (image->colorspace == RGBColorspace) 221909bb043b5d7ce21f9eb1067d6e9bc80365852b98cristy { 222009bb043b5d7ce21f9eb1067d6e9bc80365852b98cristy red=EncodePixelGamma(red); 222109bb043b5d7ce21f9eb1067d6e9bc80365852b98cristy green=EncodePixelGamma(green); 222209bb043b5d7ce21f9eb1067d6e9bc80365852b98cristy blue=EncodePixelGamma(blue); 222309bb043b5d7ce21f9eb1067d6e9bc80365852b98cristy } 22249e2436a78bdabef900e018dc77c0cc497bf6fbafcristy intensity=0.298839*red+0.586811*green+0.114350*blue; 22252cf5d375fa7abe962164b39a35948fe76b4d239acristy break; 22262cf5d375fa7abe962164b39a35948fe76b4d239acristy } 22272cf5d375fa7abe962164b39a35948fe76b4d239acristy case Rec601LuminancePixelIntensityMethod: 22282cf5d375fa7abe962164b39a35948fe76b4d239acristy { 222970e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy if (image->colorspace == sRGBColorspace) 223070e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy { 223170e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy red=DecodePixelGamma(red); 223270e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy green=DecodePixelGamma(green); 223370e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy blue=DecodePixelGamma(blue); 223470e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy } 22359e2436a78bdabef900e018dc77c0cc497bf6fbafcristy intensity=0.298839*red+0.586811*green+0.114350*blue; 223670e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy break; 223770e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy } 223870e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy case Rec709LumaPixelIntensityMethod: 2239c94210c7c054e663026a776edfa1e2d6b79a00a5cristy default: 224070e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy { 224109bb043b5d7ce21f9eb1067d6e9bc80365852b98cristy if (image->colorspace == RGBColorspace) 224209bb043b5d7ce21f9eb1067d6e9bc80365852b98cristy { 224309bb043b5d7ce21f9eb1067d6e9bc80365852b98cristy red=EncodePixelGamma(red); 224409bb043b5d7ce21f9eb1067d6e9bc80365852b98cristy green=EncodePixelGamma(green); 224509bb043b5d7ce21f9eb1067d6e9bc80365852b98cristy blue=EncodePixelGamma(blue); 224609bb043b5d7ce21f9eb1067d6e9bc80365852b98cristy } 22471352acf3bec61a13875a2d020306ad6339686040cristy intensity=0.212656*red+0.715158*green+0.072186*blue; 22482cf5d375fa7abe962164b39a35948fe76b4d239acristy break; 22492cf5d375fa7abe962164b39a35948fe76b4d239acristy } 22502cf5d375fa7abe962164b39a35948fe76b4d239acristy case Rec709LuminancePixelIntensityMethod: 22512cf5d375fa7abe962164b39a35948fe76b4d239acristy { 225270e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy if (image->colorspace == sRGBColorspace) 225370e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy { 225470e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy red=DecodePixelGamma(red); 225570e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy green=DecodePixelGamma(green); 225670e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy blue=DecodePixelGamma(blue); 225770e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy } 22581352acf3bec61a13875a2d020306ad6339686040cristy intensity=0.212656*red+0.715158*green+0.072186*blue; 225970e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy break; 226070e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy } 226170e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy case RMSPixelIntensityMethod: 226270e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy { 2263462c1ca063d4cb0f06b05b657caf4d1bb81c616ccristy intensity=(MagickRealType) (sqrt((double) red*red+green*green+blue*blue)/ 2264462c1ca063d4cb0f06b05b657caf4d1bb81c616ccristy sqrt(3.0)); 226570e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy break; 226670e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy } 226770e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy } 226870e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy return(intensity); 22699731df786aef53bf0482896bcdf9af7011880042cristy} 22709731df786aef53bf0482896bcdf9af7011880042cristy 22719731df786aef53bf0482896bcdf9af7011880042cristy/* 22729731df786aef53bf0482896bcdf9af7011880042cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 22739731df786aef53bf0482896bcdf9af7011880042cristy% % 22749731df786aef53bf0482896bcdf9af7011880042cristy% % 22759731df786aef53bf0482896bcdf9af7011880042cristy% % 2276e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% I m p o r t I m a g e P i x e l s % 2277e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 2278e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 2279e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 2280e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2281e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2282e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% ImportImagePixels() accepts pixel data and stores in the image at the 2283e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% location you specify. The method returns MagickTrue on success otherwise 2284e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% MagickFalse if an error is encountered. The pixel data can be either char, 2285b5a45a37a6faa8a3725c814b51a1a86daa4ff21fcristy% Quantum, short int, unsigned int, unsigned long long, float, or double in 2286b5a45a37a6faa8a3725c814b51a1a86daa4ff21fcristy% the order specified by map. 2287e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2288e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% Suppose your want to upload the first scanline of a 640x480 image from 2289e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% character data in red-green-blue order: 2290e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2291e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% ImportImagePixels(image,0,0,640,1,"RGB",CharPixel,pixels); 2292e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2293e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% The format of the ImportImagePixels method is: 2294e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2295cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy% MagickBooleanType ImportImagePixels(Image *image,const ssize_t x, 2296cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy% const ssize_t y,const size_t width,const size_t height, 2297cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy% const char *map,const StorageType type,const void *pixels, 2298cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy% ExceptionInfo *exception) 2299e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2300e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% A description of each parameter follows: 2301e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2302e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% o image: the image. 2303e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2304cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy% o x,y,width,height: These values define the perimeter 2305e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% of a region of pixels you want to define. 2306e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2307e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% o map: This string reflects the expected ordering of the pixel array. 2308e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% It can be any combination or order of R = red, G = green, B = blue, 2309e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% A = alpha (0 is transparent), O = opacity (0 is opaque), C = cyan, 2310e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% Y = yellow, M = magenta, K = black, I = intensity (for grayscale), 2311e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% P = pad. 2312e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2313e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% o type: Define the data type of the pixels. Float and double types are 2314e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% normalized to [0..1] otherwise [0..QuantumRange]. Choose from these 23156c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy% types: CharPixel (char *), DoublePixel (double *), FloatPixel (float *), 2316ff6834e270b99c2747ad5b2f4edeecf862aaf825cristy% LongPixel (unsigned int *), LongLongPixel (unsigned long long *), 23176c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy% QuantumPixel (Quantum *), or ShortPixel (unsigned short *). 2318e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2319e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% o pixels: This array of values contain the pixel components as defined by 2320e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% map and type. You must preallocate this array where the expected 2321e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% length varies depending on the values of width, height, map, and type. 2322e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2323e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% o exception: return any errors or warnings in this structure. 2324e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2325e5370944fabb7afa477ab1325d400731b1e5d5e8cristy*/ 2326e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2327cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ImportCharPixel(Image *image,const RectangleInfo *roi, 232846f4be29828ab7588745336d46ab11611c847933cristy const char *restrict map,const QuantumType *quantum_map,const void *pixels, 232946f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 2330e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 2331e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const unsigned char 2332e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *restrict p; 2333e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2334e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register Quantum 23353fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy *restrict q; 2336e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2337e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 2338e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 2339e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 234014d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 234114d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 234214d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 2343e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 2344e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 2345e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2346e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p=(const unsigned char *) pixels; 2347e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 2348e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2349cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2350e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2351cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2352e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2353e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2354cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2355e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2356e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleCharToQuantum(*p++),q); 2357e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleCharToQuantum(*p++),q); 2358e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleCharToQuantum(*p++),q); 2359e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2360e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2361e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2362e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2363e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2364e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2365e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2366e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 2367e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2368cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2369e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2370cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2371e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2372e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2373cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2374e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2375e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleCharToQuantum(*p++),q); 2376e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleCharToQuantum(*p++),q); 2377e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleCharToQuantum(*p++),q); 2378e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleCharToQuantum(*p++),q); 2379e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2380e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2381e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2382e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2383e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2384e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2385e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2386e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRO") == 0) 2387e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2388cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2389e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2390cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2391e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2392e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2393cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2394e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2395e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleCharToQuantum(*p++),q); 2396e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleCharToQuantum(*p++),q); 2397e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleCharToQuantum(*p++),q); 2398e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleCharToQuantum(*p++),q); 2399e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2400e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2401e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2402e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2403e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2404e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2405e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2406e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 2407e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2408cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2409e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2410cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2411e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2412e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2413cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2414e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2415e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleCharToQuantum(*p++),q); 2416e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleCharToQuantum(*p++),q); 2417e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleCharToQuantum(*p++),q); 2418e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2419e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2420e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2421e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2422e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2423e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2424e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2425e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2426e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 2427e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2428cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2429e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2430cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2431e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2432e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2433cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2434e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2435e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGray(image,ScaleCharToQuantum(*p++),q); 2436e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2437e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2438e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2439e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2440e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2441e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2442e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2443e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 2444e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2445cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2446e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2447cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2448e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2449e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2450cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2451e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2452e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleCharToQuantum(*p++),q); 2453e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleCharToQuantum(*p++),q); 2454e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleCharToQuantum(*p++),q); 2455e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2456e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2457e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2458e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2459e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2460e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2461e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2462e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 2463e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2464cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2465e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2466cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2467e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2468e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2469cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2470e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2471e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleCharToQuantum(*p++),q); 2472e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleCharToQuantum(*p++),q); 2473e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleCharToQuantum(*p++),q); 2474e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleCharToQuantum(*p++),q); 2475e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2476e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2477e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2478e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2479e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2480e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2481e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2482e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBO") == 0) 2483e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2484cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2485e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2486cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2487e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2488e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2489cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2490e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2491e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleCharToQuantum(*p++),q); 2492e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleCharToQuantum(*p++),q); 2493e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleCharToQuantum(*p++),q); 2494e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleCharToQuantum(*p++),q); 2495e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2496e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2497e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2498e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2499e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2500e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2501e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2502e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 2503e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2504cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2505e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2506cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2507e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2508e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2509cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2510e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2511e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleCharToQuantum(*p++),q); 2512e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleCharToQuantum(*p++),q); 2513e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleCharToQuantum(*p++),q); 2514e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2515e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2516e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2517e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2518e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2519e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2520e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2521e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 252214d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 2523cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2524e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2525cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2526e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2527e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2528cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2529e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2530e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 2531e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 2532e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 253314d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 2534e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2535e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 2536e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2537e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 2538e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 2539e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2540e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleCharToQuantum(*p),q); 2541e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2542e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2543e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 2544e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 2545e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2546e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleCharToQuantum(*p),q); 2547e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2548e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2549e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 2550e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 2551e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2552e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleCharToQuantum(*p),q); 2553e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2554e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2555e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 2556e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2557e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleCharToQuantum(*p),q); 2558e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2559e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2560e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 2561e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2562e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleCharToQuantum(*p),q); 2563e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2564e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2565e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 2566e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2567e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlack(image,ScaleCharToQuantum(*p),q); 2568e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2569e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2570e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 2571e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2572e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGray(image,ScaleCharToQuantum(*p),q); 2573e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2574e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2575e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 2576e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2577e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2578e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2579e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2580e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2581e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2582e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2583e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2584e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2585e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 2586e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2587cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ImportDoublePixel(Image *image,const RectangleInfo *roi, 258846f4be29828ab7588745336d46ab11611c847933cristy const char *restrict map,const QuantumType *quantum_map,const void *pixels, 258946f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 2590e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 2591e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const double 2592e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *restrict p; 2593e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2594e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register Quantum 25953fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy *restrict q; 2596e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2597e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 2598e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 2599e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 260014d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 260114d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 260214d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 2603e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 2604e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 2605e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2606e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p=(const double *) pixels; 2607e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 2608e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2609cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2610e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2611cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2612e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2613e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2614cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2615e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 26168cd03c32d039162196906ff36501f3543019b56acristy SetPixelBlue(image,ClampToQuantum(QuantumRange*(*p)),q); 2617e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 26188cd03c32d039162196906ff36501f3543019b56acristy SetPixelGreen(image,ClampToQuantum(QuantumRange*(*p)),q); 2619e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 26208cd03c32d039162196906ff36501f3543019b56acristy SetPixelRed(image,ClampToQuantum(QuantumRange*(*p)),q); 2621e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2622e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2623e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2624e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2625e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2626e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2627e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2628e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2629e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 2630e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2631cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2632e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2633cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2634e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2635e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2636cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2637e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 26388cd03c32d039162196906ff36501f3543019b56acristy SetPixelBlue(image,ClampToQuantum(QuantumRange*(*p)),q); 2639e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 26408cd03c32d039162196906ff36501f3543019b56acristy SetPixelGreen(image,ClampToQuantum(QuantumRange*(*p)),q); 2641e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 26428cd03c32d039162196906ff36501f3543019b56acristy SetPixelRed(image,ClampToQuantum(QuantumRange*(*p)),q); 2643e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 26448cd03c32d039162196906ff36501f3543019b56acristy SetPixelAlpha(image,ClampToQuantum(QuantumRange*(*p)),q); 2645e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2646e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2647e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2648e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2649e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2650e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2651e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2652e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2653e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 2654e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2655cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2656e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2657cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2658e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2659e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2660cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2661e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 26628cd03c32d039162196906ff36501f3543019b56acristy SetPixelBlue(image,ClampToQuantum(QuantumRange*(*p)),q); 2663e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 26648cd03c32d039162196906ff36501f3543019b56acristy SetPixelGreen(image,ClampToQuantum(QuantumRange*(*p)),q); 2665e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 26668cd03c32d039162196906ff36501f3543019b56acristy SetPixelRed(image,ClampToQuantum(QuantumRange*(*p)),q); 2667e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2668e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2669e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2670e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2671e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2672e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2673e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2674e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2675e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2676e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 2677e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2678cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2679e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2680cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2681e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2682e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2683cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2684e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 26858cd03c32d039162196906ff36501f3543019b56acristy SetPixelGray(image,ClampToQuantum(QuantumRange*(*p)),q); 2686e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2687e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2688e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2689e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2690e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2691e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2692e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2693e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2694e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 2695e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2696cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2697e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2698cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2699e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2700e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2701cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2702e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 27038cd03c32d039162196906ff36501f3543019b56acristy SetPixelRed(image,ClampToQuantum(QuantumRange*(*p)),q); 2704e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 27058cd03c32d039162196906ff36501f3543019b56acristy SetPixelGreen(image,ClampToQuantum(QuantumRange*(*p)),q); 2706e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 27078cd03c32d039162196906ff36501f3543019b56acristy SetPixelBlue(image,ClampToQuantum(QuantumRange*(*p)),q); 2708e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2709e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2710e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2711e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2712e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2713e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2714e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2715e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2716e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 2717e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2718cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2719e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2720cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2721e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2722e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2723cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2724e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 27258cd03c32d039162196906ff36501f3543019b56acristy SetPixelRed(image,ClampToQuantum(QuantumRange*(*p)),q); 2726e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 27278cd03c32d039162196906ff36501f3543019b56acristy SetPixelGreen(image,ClampToQuantum(QuantumRange*(*p)),q); 2728e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 27298cd03c32d039162196906ff36501f3543019b56acristy SetPixelBlue(image,ClampToQuantum(QuantumRange*(*p)),q); 2730e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 27318cd03c32d039162196906ff36501f3543019b56acristy SetPixelAlpha(image,ClampToQuantum(QuantumRange*(*p)),q); 2732e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2733e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2734e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2735e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2736e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2737e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2738e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2739e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2740e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 2741e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2742cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2743e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2744cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2745e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2746e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2747cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2748e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 27498cd03c32d039162196906ff36501f3543019b56acristy SetPixelRed(image,ClampToQuantum(QuantumRange*(*p)),q); 2750e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 27518cd03c32d039162196906ff36501f3543019b56acristy SetPixelGreen(image,ClampToQuantum(QuantumRange*(*p)),q); 2752e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 27538cd03c32d039162196906ff36501f3543019b56acristy SetPixelBlue(image,ClampToQuantum(QuantumRange*(*p)),q); 2754e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2755e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2756e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2757e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2758e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2759e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2760e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2761e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 276214d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 2763cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2764e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2765cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2766e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2767e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2768cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2769e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2770e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 2771e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 2772e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 277314d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 2774e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2775e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 2776e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2777e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 2778e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 2779e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 27808cd03c32d039162196906ff36501f3543019b56acristy SetPixelRed(image,ClampToQuantum(QuantumRange*(*p)),q); 2781e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2782e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2783e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 2784e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 2785e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 27868cd03c32d039162196906ff36501f3543019b56acristy SetPixelGreen(image,ClampToQuantum(QuantumRange*(*p)),q); 2787e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2788e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2789e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 2790e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 2791e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 27928cd03c32d039162196906ff36501f3543019b56acristy SetPixelBlue(image,ClampToQuantum(QuantumRange*(*p)),q); 2793e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2794e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2795e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 2796e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 27978cd03c32d039162196906ff36501f3543019b56acristy SetPixelAlpha(image,ClampToQuantum(QuantumRange*(*p)),q); 2798e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2799e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2800e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 2801e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 28028cd03c32d039162196906ff36501f3543019b56acristy SetPixelAlpha(image,ClampToQuantum(QuantumRange*(*p)),q); 2803e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2804e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2805e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 2806e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 28078cd03c32d039162196906ff36501f3543019b56acristy SetPixelBlack(image,ClampToQuantum(QuantumRange*(*p)),q); 2808e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2809e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2810e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 2811e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 28128cd03c32d039162196906ff36501f3543019b56acristy SetPixelGray(image,ClampToQuantum(QuantumRange*(*p)),q); 2813e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2814e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2815e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 2816e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2817e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2818e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2819e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2820e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2821e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2822e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2823e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2824e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 28253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 2826e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2827cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ImportFloatPixel(Image *image,const RectangleInfo *roi, 282846f4be29828ab7588745336d46ab11611c847933cristy const char *restrict map,const QuantumType *quantum_map,const void *pixels, 282946f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 28303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 2831e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const float 2832e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *restrict p; 2833e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2834e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register Quantum 28353fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy *restrict q; 2836e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2837e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 2838e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 2839e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 284014d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 284114d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 284214d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 2843e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 2844e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 2845e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2846e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p=(const float *) pixels; 2847e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 2848e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2849cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2850e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2851cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2852e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2853e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2854cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2855e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 28568cd03c32d039162196906ff36501f3543019b56acristy SetPixelBlue(image,ClampToQuantum(QuantumRange*(*p)),q); 2857e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 28588cd03c32d039162196906ff36501f3543019b56acristy SetPixelGreen(image,ClampToQuantum(QuantumRange*(*p)),q); 2859e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 28608cd03c32d039162196906ff36501f3543019b56acristy SetPixelRed(image,ClampToQuantum(QuantumRange*(*p)),q); 2861e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2862e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2863e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2864e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2865e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2866e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2867e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2868e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2869e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 2870e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2871cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2872e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2873cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2874e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2875e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2876cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2877e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 28788cd03c32d039162196906ff36501f3543019b56acristy SetPixelBlue(image,ClampToQuantum(QuantumRange*(*p)),q); 2879e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 28808cd03c32d039162196906ff36501f3543019b56acristy SetPixelGreen(image,ClampToQuantum(QuantumRange*(*p)),q); 2881e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 28828cd03c32d039162196906ff36501f3543019b56acristy SetPixelRed(image,ClampToQuantum(QuantumRange*(*p)),q); 2883e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 28848cd03c32d039162196906ff36501f3543019b56acristy SetPixelAlpha(image,ClampToQuantum(QuantumRange*(*p)),q); 2885e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2886e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2887e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2888e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2889e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2890e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2891e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2892e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2893e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 2894e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2895cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2896e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2897cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2898e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2899e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2900cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2901e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 29028cd03c32d039162196906ff36501f3543019b56acristy SetPixelBlue(image,ClampToQuantum(QuantumRange*(*p)),q); 2903e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 29048cd03c32d039162196906ff36501f3543019b56acristy SetPixelGreen(image,ClampToQuantum(QuantumRange*(*p)),q); 2905e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 29068cd03c32d039162196906ff36501f3543019b56acristy SetPixelRed(image,ClampToQuantum(QuantumRange*(*p)),q); 2907e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2908e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2909e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2910e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2911e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2912e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2913e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2914e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2915e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2916e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 2917e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2918cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2919e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2920cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2921e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2922e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2923cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2924e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 29258cd03c32d039162196906ff36501f3543019b56acristy SetPixelGray(image,ClampToQuantum(QuantumRange*(*p)),q); 2926e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2927e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2928e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2929e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2930e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2931e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2932e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2933e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2934e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 2935e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2936cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2937e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2938cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2939e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2940e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2941cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2942e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 29438cd03c32d039162196906ff36501f3543019b56acristy SetPixelRed(image,ClampToQuantum(QuantumRange*(*p)),q); 2944e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 29458cd03c32d039162196906ff36501f3543019b56acristy SetPixelGreen(image,ClampToQuantum(QuantumRange*(*p)),q); 2946e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 29478cd03c32d039162196906ff36501f3543019b56acristy SetPixelBlue(image,ClampToQuantum(QuantumRange*(*p)),q); 2948e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2949e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2950e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2951e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2952e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2953e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2954e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2955e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2956e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 2957e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2958cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2959e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2960cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2961e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2962e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2963cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2964e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 29658cd03c32d039162196906ff36501f3543019b56acristy SetPixelRed(image,ClampToQuantum(QuantumRange*(*p)),q); 2966e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 29678cd03c32d039162196906ff36501f3543019b56acristy SetPixelGreen(image,ClampToQuantum(QuantumRange*(*p)),q); 2968e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 29698cd03c32d039162196906ff36501f3543019b56acristy SetPixelBlue(image,ClampToQuantum(QuantumRange*(*p)),q); 2970e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 29718cd03c32d039162196906ff36501f3543019b56acristy SetPixelAlpha(image,ClampToQuantum(QuantumRange*(*p)),q); 2972e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2973e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2974e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2975e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2976e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2977e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2978e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2979e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2980e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 2981e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2982cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2983e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2984cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2985e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2986e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2987cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2988e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 29898cd03c32d039162196906ff36501f3543019b56acristy SetPixelRed(image,ClampToQuantum(QuantumRange*(*p)),q); 2990e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 29918cd03c32d039162196906ff36501f3543019b56acristy SetPixelGreen(image,ClampToQuantum(QuantumRange*(*p)),q); 2992e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 29938cd03c32d039162196906ff36501f3543019b56acristy SetPixelBlue(image,ClampToQuantum(QuantumRange*(*p)),q); 2994e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2995e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2996e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2997e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2998e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2999e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3000e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3001e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 300214d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 3003cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3004e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3005cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3006e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3007e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3008cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3009e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3010e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 3011e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 3012e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 301314d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 3014e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3015e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 3016e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3017e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 3018e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 3019e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 30208cd03c32d039162196906ff36501f3543019b56acristy SetPixelRed(image,ClampToQuantum(QuantumRange*(*p)),q); 3021e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3022e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3023e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 3024e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 3025e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 30268cd03c32d039162196906ff36501f3543019b56acristy SetPixelGreen(image,ClampToQuantum(QuantumRange*(*p)),q); 3027e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3028e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3029e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 3030e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 3031e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 30328cd03c32d039162196906ff36501f3543019b56acristy SetPixelBlue(image,ClampToQuantum(QuantumRange*(*p)),q); 3033e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3034e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3035e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 3036e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 30378cd03c32d039162196906ff36501f3543019b56acristy SetPixelAlpha(image,ClampToQuantum(QuantumRange*(*p)),q); 3038e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3039e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3040e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 3041e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 30428cd03c32d039162196906ff36501f3543019b56acristy SetPixelAlpha(image,ClampToQuantum(QuantumRange*(*p)),q); 3043e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3044e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3045e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 3046e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 30478cd03c32d039162196906ff36501f3543019b56acristy SetPixelBlack(image,ClampToQuantum(QuantumRange*(*p)),q); 3048e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3049e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3050e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 3051e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 30528cd03c32d039162196906ff36501f3543019b56acristy SetPixelGray(image,ClampToQuantum(QuantumRange*(*p)),q); 3053e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3054e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3055e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 3056e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3057e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3058e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3059e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3060e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3061e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3062e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3063e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3064e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3065e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 3066e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3067cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ImportLongPixel(Image *image,const RectangleInfo *roi, 306846f4be29828ab7588745336d46ab11611c847933cristy const char *restrict map,const QuantumType *quantum_map,const void *pixels, 306946f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 30703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 3071e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const unsigned int 3072e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *restrict p; 30733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 30744c08aed51c5899665ade97263692328eea4af106cristy register Quantum 30753fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy *restrict q; 30763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3077bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 30783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x; 30793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 308014d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 308114d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 308214d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 30839d314ff2c17a77996c05413c2013880387e50f0ecristy ssize_t 30849d314ff2c17a77996c05413c2013880387e50f0ecristy y; 30859d314ff2c17a77996c05413c2013880387e50f0ecristy 3086e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p=(const unsigned int *) pixels; 3087e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 30883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3089cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 30903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3091cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3092e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3093e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3094cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3095e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3096e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleLongToQuantum(*p++),q); 3097e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleLongToQuantum(*p++),q); 3098e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleLongToQuantum(*p++),q); 3099e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3100e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3101e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3102e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 31033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3104e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3105e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3106e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 3107e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3108cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 31093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3110cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3111e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3112e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3113cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3114e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3115e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleLongToQuantum(*p++),q); 3116e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleLongToQuantum(*p++),q); 3117e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleLongToQuantum(*p++),q); 3118e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleLongToQuantum(*p++),q); 3119e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3120e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3121e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3122e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 31233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3124e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3125e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3126e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 3127e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3128cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 31293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3130cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3131e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3132e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3133cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3134e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3135e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleLongToQuantum(*p++),q); 3136e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleLongToQuantum(*p++),q); 3137e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleLongToQuantum(*p++),q); 3138e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3139e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3140e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3141e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3142e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 31433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3144e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3145e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3146e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 3147e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3148cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 31493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3150cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3151e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3152e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3153cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3154e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3155e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGray(image,ScaleLongToQuantum(*p++),q); 3156e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3157e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3158e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3159e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 31603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3161e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3162e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3163e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 3164e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3165cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 31663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3167cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3168e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3169e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3170cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3171e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3172e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleLongToQuantum(*p++),q); 3173e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleLongToQuantum(*p++),q); 3174e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleLongToQuantum(*p++),q); 3175e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3176e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3177e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3178e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 31793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3180e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3181e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3182e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 3183e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3184cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 31853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3186cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3187e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3188e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3189cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3190e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3191e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleLongToQuantum(*p++),q); 3192e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleLongToQuantum(*p++),q); 3193e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleLongToQuantum(*p++),q); 3194e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleLongToQuantum(*p++),q); 3195e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3196e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3197e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3198e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 31993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3200e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3201e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3202e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 3203e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3204cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 32053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3206cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3207e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3208e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3209cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3210e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3211e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleLongToQuantum(*p++),q); 3212e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleLongToQuantum(*p++),q); 3213e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleLongToQuantum(*p++),q); 3214e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3215e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3216e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3217e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3218e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 32193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3220e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3221e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 322214d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 3223cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3224e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3225cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3226e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3227e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3228cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3229e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3230e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 3231e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 3232e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 323314d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 32343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3235e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 3236e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3237e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 3238e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 3239e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3240e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleLongToQuantum(*p),q); 3241e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3242e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3243e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 3244e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 3245e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3246e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleLongToQuantum(*p),q); 3247e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3248e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3249e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 3250e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 3251e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3252e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleLongToQuantum(*p),q); 3253e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3254e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3255e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 3256e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3257e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleLongToQuantum(*p),q); 3258e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3259e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3260e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 3261e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3262e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleLongToQuantum(*p),q); 3263e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3264e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3265e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 3266e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3267e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlack(image,ScaleLongToQuantum(*p),q); 3268e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3269e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3270e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 3271e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3272e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGray(image,ScaleLongToQuantum(*p),q); 3273e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3274e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3275e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 3276e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3277e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3278e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3279e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3280e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3281e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3282e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3283e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3284e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3285e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 3286e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3287cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ImportLongLongPixel(Image *image,const RectangleInfo *roi, 328846f4be29828ab7588745336d46ab11611c847933cristy const char *restrict map,const QuantumType *quantum_map,const void *pixels, 328946f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 3290e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 3291b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy register const MagickSizeType 3292e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *restrict p; 3293e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3294e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register Quantum 32953fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy *restrict q; 3296e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3297e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 3298e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 3299e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 330014d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 330114d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 330214d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 3303e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 3304e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 3305e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3306b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy p=(const MagickSizeType *) pixels; 3307e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 3308e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3309cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3310e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3311cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3312e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3313e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3314cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3315e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3316b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelBlue(image,ScaleLongLongToQuantum(*p++),q); 3317b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelGreen(image,ScaleLongLongToQuantum(*p++),q); 3318b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelRed(image,ScaleLongLongToQuantum(*p++),q); 3319e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3320e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3321e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3322e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3323e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3324e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3325e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3326e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 3327e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3328cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3329e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3330cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3331e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3332e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3333cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3334e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3335b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelBlue(image,ScaleLongLongToQuantum(*p++),q); 3336b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelGreen(image,ScaleLongLongToQuantum(*p++),q); 3337b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelRed(image,ScaleLongLongToQuantum(*p++),q); 3338b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelAlpha(image,ScaleLongLongToQuantum(*p++),q); 3339e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3340e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3341e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3342e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3343e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3344e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3345e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3346e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 3347e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3348cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3349e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3350cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3351e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3352e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3353cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3354e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3355b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelBlue(image,ScaleLongLongToQuantum(*p++),q); 3356b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelGreen(image,ScaleLongLongToQuantum(*p++),q); 3357b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelRed(image,ScaleLongLongToQuantum(*p++),q); 3358e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3359e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3360e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3361e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3362e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 33633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3364e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3365e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3366e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 3367e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3368cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 33693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3370cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3371e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3372e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3373cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3374e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3375b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelGray(image,ScaleLongLongToQuantum(*p++),q); 3376e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3377e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3378e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3379e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 33803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3381e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3382e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3383e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 3384e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3385cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 33863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3387cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3388e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3389e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3390cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3391e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3392b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelRed(image,ScaleLongLongToQuantum(*p++),q); 3393b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelGreen(image,ScaleLongLongToQuantum(*p++),q); 3394b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelBlue(image,ScaleLongLongToQuantum(*p++),q); 3395e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3396e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3397e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3398e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 33993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3400e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3401e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3402e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 3403e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3404cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 34053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3406cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3407e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3408e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3409cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3410e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3411b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelRed(image,ScaleLongLongToQuantum(*p++),q); 3412b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelGreen(image,ScaleLongLongToQuantum(*p++),q); 3413b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelBlue(image,ScaleLongLongToQuantum(*p++),q); 3414b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelAlpha(image,ScaleLongLongToQuantum(*p++),q); 3415e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3416e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3417e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3418e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 34193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3420e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3421e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3422e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 3423e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3424cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 34253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3426cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3427e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3428e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3429cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3430e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3431b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelRed(image,ScaleLongLongToQuantum(*p++),q); 3432b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelGreen(image,ScaleLongLongToQuantum(*p++),q); 3433b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelBlue(image,ScaleLongLongToQuantum(*p++),q); 3434e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3435e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3436e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3437e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3438e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 34393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3440e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 34413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 344214d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 3443cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 34443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3445cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3446e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3447e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3448cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 34493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3450e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 3451e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 34523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 345314d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 3454e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3455e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 34563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3457e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 3458e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 34593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3460b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelRed(image,ScaleLongLongToQuantum(*p),q); 3461e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 34623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3463e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 3464e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 34653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3466b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelGreen(image,ScaleLongLongToQuantum(*p),q); 3467e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 34683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3469e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 3470e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 34713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3472b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelBlue(image,ScaleLongLongToQuantum(*p),q); 3473e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 34743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3475e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 34763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3477b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelAlpha(image,ScaleLongLongToQuantum(*p),q); 3478e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 34793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3480e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 34813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3482b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelAlpha(image,ScaleLongLongToQuantum(*p),q); 3483e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 34843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3485e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 34863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3487b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelBlack(image,ScaleLongLongToQuantum(*p),q); 3488e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 34893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3490e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 34913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3492b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelGray(image,ScaleLongLongToQuantum(*p),q); 3493e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 34943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3495e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 3496e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 34973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3498e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3499e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3500e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3501e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3502e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3503e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3504e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3505e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 3506e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3507cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ImportQuantumPixel(Image *image,const RectangleInfo *roi, 350846f4be29828ab7588745336d46ab11611c847933cristy const char *restrict map,const QuantumType *quantum_map,const void *pixels, 350946f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 3510e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 3511e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const Quantum 3512e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *restrict p; 3513e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3514e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register Quantum 35153fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy *restrict q; 3516e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3517e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 3518e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 3519e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 352014d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 352114d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 352214d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 3523e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 3524e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 3525e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3526e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p=(const Quantum *) pixels; 3527e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 3528e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3529cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3530e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3531cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3532e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 35333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3534cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 35353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3536e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,*p++,q); 3537e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,*p++,q); 3538e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,*p++,q); 3539e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3540e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3541e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3542e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3543e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3544e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3545e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3546e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 3547e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3548cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3549e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3550cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3551e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 35523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3553cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3554e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3555e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,*p++,q); 3556e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,*p++,q); 3557e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,*p++,q); 3558e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,*p++,q); 3559e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 35603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3561e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3562e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3563e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3564e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3565e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3566e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 3567e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3568cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 35693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3570cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 35714c08aed51c5899665ade97263692328eea4af106cristy if (q == (Quantum *) NULL) 35723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3573cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 35743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3575e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,*p++,q); 3576e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,*p++,q); 3577e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,*p++,q); 3578e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3579ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(image); 35803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 35813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 35823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 35833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3584e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 35853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3586e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 35873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3588cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3589e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3590cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3591e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 35923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3593cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3594e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3595e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGray(image,*p++,q); 3596e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 35973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3598e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3599e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3600e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3601e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3602e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3603e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 3604e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3605cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 36063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3607cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 36084c08aed51c5899665ade97263692328eea4af106cristy if (q == (Quantum *) NULL) 36093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3610cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 36113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3612e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,*p++,q); 3613e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,*p++,q); 3614e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,*p++,q); 3615ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(image); 36163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 36173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 36183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 36193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3620e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 36213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3622e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 36233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3624cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3625e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3626cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3627e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 36283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3629cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3630e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3631e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,*p++,q); 3632e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,*p++,q); 3633e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,*p++,q); 3634e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,*p++,q); 3635e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 36363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3637e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3638e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3639e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3640e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3641e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3642e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 3643e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3644cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 36453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3646cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 36474c08aed51c5899665ade97263692328eea4af106cristy if (q == (Quantum *) NULL) 36483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3649cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 36503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3651e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,*p++,q); 3652e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,*p++,q); 3653e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,*p++,q); 3654e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3655ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(image); 36563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 36573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 36583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 36593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3660e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 36613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 366214d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 3663cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3664e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3665cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3666e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3667e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3668cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 36693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3670e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 3671e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 36723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 367314d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 3674e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3675e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 36763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3677e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 3678e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 36793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3680e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,*p,q); 3681e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 36823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3683e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 3684e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 36853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3686e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,*p,q); 3687e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 36883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3689e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 3690e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 36913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3692e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,*p,q); 3693e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 36943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3695e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 36963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3697e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,*p,q); 3698e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 36993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3700e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 37013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3702e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,*p,q); 3703e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 37043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3705e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 37063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3707e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlack(image,*p,q); 3708e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 37093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3710e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 37113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3712e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGray(image,*p,q); 3713e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 37143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3715e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 3716e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 37173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3718e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3719e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3720e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3721e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3722e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3723e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3724e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3725e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 3726e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3727cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ImportShortPixel(Image *image,const RectangleInfo *roi, 372846f4be29828ab7588745336d46ab11611c847933cristy const char *restrict map,const QuantumType *quantum_map,const void *pixels, 372946f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 3730e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 3731e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const unsigned short 3732e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *restrict p; 3733e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3734e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register Quantum 37353fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy *restrict q; 3736e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3737e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 3738e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 3739e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 374014d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 374114d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 374214d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 3743e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 3744e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 3745e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3746e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p=(const unsigned short *) pixels; 3747e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 3748e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3749cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 37503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3751cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 37524c08aed51c5899665ade97263692328eea4af106cristy if (q == (Quantum *) NULL) 37533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3754cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 37553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3756e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleShortToQuantum(*p++),q); 3757e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleShortToQuantum(*p++),q); 3758e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleShortToQuantum(*p++),q); 3759ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(image); 37603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 37613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 37623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 37633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3764e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 37653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3766e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 37673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3768cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3769e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3770cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3771e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 37723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3773cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 37743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3775e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleShortToQuantum(*p++),q); 3776e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleShortToQuantum(*p++),q); 3777e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleShortToQuantum(*p++),q); 3778e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleShortToQuantum(*p++),q); 3779e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 37803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3781e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 37823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3783e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3784e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3785e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3786e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 3787e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3788cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 37893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3790cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 37914c08aed51c5899665ade97263692328eea4af106cristy if (q == (Quantum *) NULL) 37923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3793cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 37943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3795e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleShortToQuantum(*p++),q); 3796e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleShortToQuantum(*p++),q); 3797e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleShortToQuantum(*p++),q); 3798e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3799ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(image); 38003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 38013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 38023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 38033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3804e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 38053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3806e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 38073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3808cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3809e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3810cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3811e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 38123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3813cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 38143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3815e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGray(image,ScaleShortToQuantum(*p++),q); 3816e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 38173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3818e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 38193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3820e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3821e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3822e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3823e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 3824e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3825cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3826e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3827cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3828e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 38293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3830cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 38313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3832e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleShortToQuantum(*p++),q); 3833e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleShortToQuantum(*p++),q); 3834e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleShortToQuantum(*p++),q); 3835e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 38363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3837e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 38383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3839e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3840e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3841e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3842e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 3843e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3844cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3845e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3846cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3847e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 38483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3849cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3850e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3851e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleShortToQuantum(*p++),q); 3852e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleShortToQuantum(*p++),q); 3853e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleShortToQuantum(*p++),q); 3854e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleShortToQuantum(*p++),q); 3855e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 38563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3857e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3858e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3859e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3860e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3861e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3862e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 3863e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3864cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 38653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3866cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 38674c08aed51c5899665ade97263692328eea4af106cristy if (q == (Quantum *) NULL) 38683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3869cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 38703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3871e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleShortToQuantum(*p++),q); 3872e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleShortToQuantum(*p++),q); 3873e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleShortToQuantum(*p++),q); 3874e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3875ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(image); 38763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 38773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 38783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 38793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3880e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 38813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 388214d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 3883cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3884e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3885cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3886e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3887e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3888cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 38893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3890e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 3891e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 38923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 389314d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 3894e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3895e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 38963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3897e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 3898e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 38993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3900e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleShortToQuantum(*p),q); 3901e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 39023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3903e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 3904e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 39053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3906e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleShortToQuantum(*p),q); 3907e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 39083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3909e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 3910e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 39113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3912e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleShortToQuantum(*p),q); 3913e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 39143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3915e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 39163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3917e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleShortToQuantum(*p),q); 3918e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 39193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3920e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 39213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3922e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleShortToQuantum(*p),q); 3923e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 39243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3925e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 39263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3927e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlack(image,ScaleShortToQuantum(*p),q); 3928e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 39293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3930e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 39313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3932e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGray(image,ScaleShortToQuantum(*p),q); 3933e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 39343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3935e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 3936e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 39373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3938e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3939e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3940e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3941e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3942e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3943e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3944e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3945e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 3946e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3947cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristyMagickExport MagickBooleanType ImportImagePixels(Image *image,const ssize_t x, 3948cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy const ssize_t y,const size_t width,const size_t height,const char *map, 3949cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy const StorageType type,const void *pixels,ExceptionInfo *exception) 3950e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 3951e5370944fabb7afa477ab1325d400731b1e5d5e8cristy QuantumType 3952e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *quantum_map; 3953e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3954cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy RectangleInfo 3955cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy roi; 3956cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy 3957e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 3958e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 3959e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 396014d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 396114d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 396214d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 3963e5370944fabb7afa477ab1325d400731b1e5d5e8cristy /* 3964e5370944fabb7afa477ab1325d400731b1e5d5e8cristy Allocate image structure. 3965e5370944fabb7afa477ab1325d400731b1e5d5e8cristy */ 3966e5370944fabb7afa477ab1325d400731b1e5d5e8cristy assert(image != (Image *) NULL); 3967e5370944fabb7afa477ab1325d400731b1e5d5e8cristy assert(image->signature == MagickSignature); 3968e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->debug != MagickFalse) 3969e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename); 397014d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 397114d712974a2c2cd2aebf8db11c7ca686bb67596fcristy quantum_map=(QuantumType *) AcquireQuantumMemory(length,sizeof(*quantum_map)); 3972e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (quantum_map == (QuantumType *) NULL) 3973e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ThrowBinaryException(ResourceLimitError,"MemoryAllocationFailed", 3974e5370944fabb7afa477ab1325d400731b1e5d5e8cristy image->filename); 397514d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 3976e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3977e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (map[i]) 3978e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3979e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'a': 3980e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'A': 39813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3982e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=AlphaQuantum; 39838a46d827a124555f0c48fb2368ec1bba8e079ab6cristy image->alpha_trait=BlendPixelTrait; 3984e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3985e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3986e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'B': 3987e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'b': 3988e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3989e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=BlueQuantum; 3990e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3991e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3992e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'C': 3993e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'c': 3994e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3995e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=CyanQuantum; 3996e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) SetImageColorspace(image,CMYKColorspace,exception); 3997e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3998e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3999e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'g': 4000e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'G': 4001e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4002e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=GreenQuantum; 4003e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 4004e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4005e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'K': 4006e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'k': 4007e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4008e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=BlackQuantum; 4009e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) SetImageColorspace(image,CMYKColorspace,exception); 4010e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 4011e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4012e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'I': 4013e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'i': 4014e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4015e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=IndexQuantum; 4016b7b3da6aa145fe62d107c4b4c1a25bcc24bd1006cristy (void) SetImageColorspace(image,GRAYColorspace,exception); 4017e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 4018e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4019e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'm': 4020e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'M': 4021e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4022e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=MagentaQuantum; 4023e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) SetImageColorspace(image,CMYKColorspace,exception); 4024e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 4025e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4026e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'O': 4027e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'o': 4028e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4029e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=OpacityQuantum; 40308a46d827a124555f0c48fb2368ec1bba8e079ab6cristy image->alpha_trait=BlendPixelTrait; 4031e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 4032e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4033e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'P': 4034e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'p': 4035e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4036e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=UndefinedQuantum; 4037e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 4038e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4039e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'R': 4040e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'r': 4041e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4042e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=RedQuantum; 4043e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 40443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 4045e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'Y': 4046e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'y': 4047e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4048e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=YellowQuantum; 4049e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) SetImageColorspace(image,CMYKColorspace,exception); 4050e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 4051e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4052e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 4053e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4054e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map); 4055e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) ThrowMagickException(exception,GetMagickModule(),OptionError, 4056efe601ce9ea5ad34ad0e8ad6e61d9be9b148b2a3cristy "UnrecognizedPixelMap","`%s'",map); 4057e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return(MagickFalse); 4058e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4059e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4060e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4061e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SetImageStorageClass(image,DirectClass,exception) == MagickFalse) 4062e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return(MagickFalse); 4063e5370944fabb7afa477ab1325d400731b1e5d5e8cristy /* 4064e5370944fabb7afa477ab1325d400731b1e5d5e8cristy Transfer the pixels from the pixel data to the image. 4065e5370944fabb7afa477ab1325d400731b1e5d5e8cristy */ 4066cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy roi.width=width; 4067cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy roi.height=height; 4068cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy roi.x=x; 4069cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy roi.y=y; 4070e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (type) 4071e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4072e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CharPixel: 4073e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4074cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ImportCharPixel(image,&roi,map,quantum_map,pixels,exception); 4075e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 4076e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4077e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case DoublePixel: 4078e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4079cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ImportDoublePixel(image,&roi,map,quantum_map,pixels,exception); 4080e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 4081e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4082e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case FloatPixel: 4083e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4084cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ImportFloatPixel(image,&roi,map,quantum_map,pixels,exception); 4085e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 4086e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 40876c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy case LongPixel: 4088e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4089cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ImportLongPixel(image,&roi,map,quantum_map,pixels,exception); 4090e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 4091e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 40926c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy case LongLongPixel: 4093e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4094cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ImportLongLongPixel(image,&roi,map,quantum_map,pixels,exception); 4095e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 4096e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4097e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case QuantumPixel: 4098e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4099cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ImportQuantumPixel(image,&roi,map,quantum_map,pixels,exception); 4100e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 4101e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4102e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case ShortPixel: 4103e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4104cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ImportShortPixel(image,&roi,map,quantum_map,pixels,exception); 41053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 41063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 41073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 41083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 41093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map); 4110c82a27bb8e3138ff9bbf0f696663bdf3e704cedecristy (void) ThrowMagickException(exception,GetMagickModule(),OptionError, 4111efe601ce9ea5ad34ad0e8ad6e61d9be9b148b2a3cristy "UnrecognizedPixelMap","`%s'",map); 41123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 41133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 41143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 41153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map); 41163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickTrue); 41173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 4118d76c51ed30cf4084f4434ba08925d16001d1e340cristy 4119d76c51ed30cf4084f4434ba08925d16001d1e340cristy/* 4120d76c51ed30cf4084f4434ba08925d16001d1e340cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4121a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% % 4122a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% % 4123a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% % 4124bd5a96cd2b69f218f85a7adc306296a736f91a56cristy+ I n i t i a l i z e P i x e l C h a n n e l M a p % 4125bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% % 4126bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% % 4127bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% % 4128bd5a96cd2b69f218f85a7adc306296a736f91a56cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4129bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% 4130bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% InitializePixelChannelMap() defines the standard pixel component map. 4131bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% 4132bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% The format of the InitializePixelChannelMap() method is: 4133bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% 4134bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% void InitializePixelChannelMap(Image *image) 4135bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% 4136bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% A description of each parameter follows: 4137bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% 4138bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% o image: the image. 4139bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% 4140bd5a96cd2b69f218f85a7adc306296a736f91a56cristy*/ 4141021216a8b35ea91ef1f12713ed41da843bbaee7bcristy 4142021216a8b35ea91ef1f12713ed41da843bbaee7bcristystatic void LogPixelChannels(const Image *image) 4143021216a8b35ea91ef1f12713ed41da843bbaee7bcristy{ 4144021216a8b35ea91ef1f12713ed41da843bbaee7bcristy register ssize_t 4145021216a8b35ea91ef1f12713ed41da843bbaee7bcristy i; 4146021216a8b35ea91ef1f12713ed41da843bbaee7bcristy 4147021216a8b35ea91ef1f12713ed41da843bbaee7bcristy (void) LogMagickEvent(PixelEvent,GetMagickModule(),"%s[%.20g]", 4148021216a8b35ea91ef1f12713ed41da843bbaee7bcristy image->filename,(double) image->number_channels); 4149021216a8b35ea91ef1f12713ed41da843bbaee7bcristy for (i=0; i < (ssize_t) image->number_channels; i++) 4150021216a8b35ea91ef1f12713ed41da843bbaee7bcristy { 4151021216a8b35ea91ef1f12713ed41da843bbaee7bcristy char 4152021216a8b35ea91ef1f12713ed41da843bbaee7bcristy traits[MaxTextExtent]; 4153021216a8b35ea91ef1f12713ed41da843bbaee7bcristy 4154021216a8b35ea91ef1f12713ed41da843bbaee7bcristy const char 4155021216a8b35ea91ef1f12713ed41da843bbaee7bcristy *name; 4156021216a8b35ea91ef1f12713ed41da843bbaee7bcristy 4157021216a8b35ea91ef1f12713ed41da843bbaee7bcristy PixelChannel 4158021216a8b35ea91ef1f12713ed41da843bbaee7bcristy channel; 4159021216a8b35ea91ef1f12713ed41da843bbaee7bcristy 4160021216a8b35ea91ef1f12713ed41da843bbaee7bcristy switch (GetPixelChannelChannel(image,i)) 4161021216a8b35ea91ef1f12713ed41da843bbaee7bcristy { 4162021216a8b35ea91ef1f12713ed41da843bbaee7bcristy case RedPixelChannel: 4163021216a8b35ea91ef1f12713ed41da843bbaee7bcristy { 4164021216a8b35ea91ef1f12713ed41da843bbaee7bcristy name="red"; 4165021216a8b35ea91ef1f12713ed41da843bbaee7bcristy if (image->colorspace == CMYKColorspace) 4166021216a8b35ea91ef1f12713ed41da843bbaee7bcristy name="cyan"; 4167021216a8b35ea91ef1f12713ed41da843bbaee7bcristy if (image->colorspace == GRAYColorspace) 4168021216a8b35ea91ef1f12713ed41da843bbaee7bcristy name="gray"; 4169021216a8b35ea91ef1f12713ed41da843bbaee7bcristy break; 4170021216a8b35ea91ef1f12713ed41da843bbaee7bcristy } 4171021216a8b35ea91ef1f12713ed41da843bbaee7bcristy case GreenPixelChannel: 4172021216a8b35ea91ef1f12713ed41da843bbaee7bcristy { 4173021216a8b35ea91ef1f12713ed41da843bbaee7bcristy name="green"; 4174021216a8b35ea91ef1f12713ed41da843bbaee7bcristy if (image->colorspace == CMYKColorspace) 4175021216a8b35ea91ef1f12713ed41da843bbaee7bcristy name="magenta"; 4176021216a8b35ea91ef1f12713ed41da843bbaee7bcristy break; 4177021216a8b35ea91ef1f12713ed41da843bbaee7bcristy } 4178021216a8b35ea91ef1f12713ed41da843bbaee7bcristy case BluePixelChannel: 4179021216a8b35ea91ef1f12713ed41da843bbaee7bcristy { 4180021216a8b35ea91ef1f12713ed41da843bbaee7bcristy name="blue"; 4181021216a8b35ea91ef1f12713ed41da843bbaee7bcristy if (image->colorspace == CMYKColorspace) 4182021216a8b35ea91ef1f12713ed41da843bbaee7bcristy name="yellow"; 4183021216a8b35ea91ef1f12713ed41da843bbaee7bcristy break; 4184021216a8b35ea91ef1f12713ed41da843bbaee7bcristy } 4185021216a8b35ea91ef1f12713ed41da843bbaee7bcristy case BlackPixelChannel: 4186021216a8b35ea91ef1f12713ed41da843bbaee7bcristy { 4187021216a8b35ea91ef1f12713ed41da843bbaee7bcristy name="black"; 4188021216a8b35ea91ef1f12713ed41da843bbaee7bcristy if (image->storage_class == PseudoClass) 4189021216a8b35ea91ef1f12713ed41da843bbaee7bcristy name="index"; 4190021216a8b35ea91ef1f12713ed41da843bbaee7bcristy break; 4191021216a8b35ea91ef1f12713ed41da843bbaee7bcristy } 4192021216a8b35ea91ef1f12713ed41da843bbaee7bcristy case IndexPixelChannel: 4193021216a8b35ea91ef1f12713ed41da843bbaee7bcristy { 4194021216a8b35ea91ef1f12713ed41da843bbaee7bcristy name="index"; 4195021216a8b35ea91ef1f12713ed41da843bbaee7bcristy break; 4196021216a8b35ea91ef1f12713ed41da843bbaee7bcristy } 4197021216a8b35ea91ef1f12713ed41da843bbaee7bcristy case AlphaPixelChannel: 4198021216a8b35ea91ef1f12713ed41da843bbaee7bcristy { 4199021216a8b35ea91ef1f12713ed41da843bbaee7bcristy name="alpha"; 4200021216a8b35ea91ef1f12713ed41da843bbaee7bcristy break; 4201021216a8b35ea91ef1f12713ed41da843bbaee7bcristy } 4202021216a8b35ea91ef1f12713ed41da843bbaee7bcristy case ReadMaskPixelChannel: 4203021216a8b35ea91ef1f12713ed41da843bbaee7bcristy { 42040481714f03ee904233a3aa1a5ed8c7690c9d361dcristy name="read-mask"; 4205021216a8b35ea91ef1f12713ed41da843bbaee7bcristy break; 4206021216a8b35ea91ef1f12713ed41da843bbaee7bcristy } 4207021216a8b35ea91ef1f12713ed41da843bbaee7bcristy case WriteMaskPixelChannel: 4208021216a8b35ea91ef1f12713ed41da843bbaee7bcristy { 42090481714f03ee904233a3aa1a5ed8c7690c9d361dcristy name="write-mask"; 4210021216a8b35ea91ef1f12713ed41da843bbaee7bcristy break; 4211021216a8b35ea91ef1f12713ed41da843bbaee7bcristy } 4212021216a8b35ea91ef1f12713ed41da843bbaee7bcristy case MetaPixelChannel: 4213021216a8b35ea91ef1f12713ed41da843bbaee7bcristy { 4214021216a8b35ea91ef1f12713ed41da843bbaee7bcristy name="meta"; 4215021216a8b35ea91ef1f12713ed41da843bbaee7bcristy break; 4216021216a8b35ea91ef1f12713ed41da843bbaee7bcristy } 4217021216a8b35ea91ef1f12713ed41da843bbaee7bcristy default: 4218021216a8b35ea91ef1f12713ed41da843bbaee7bcristy name="undefined"; 4219021216a8b35ea91ef1f12713ed41da843bbaee7bcristy } 4220021216a8b35ea91ef1f12713ed41da843bbaee7bcristy channel=GetPixelChannelChannel(image,i); 4221021216a8b35ea91ef1f12713ed41da843bbaee7bcristy *traits='\0'; 4222021216a8b35ea91ef1f12713ed41da843bbaee7bcristy if ((GetPixelChannelTraits(image,channel) & UpdatePixelTrait) != 0) 4223021216a8b35ea91ef1f12713ed41da843bbaee7bcristy (void) ConcatenateMagickString(traits,"update,",MaxTextExtent); 4224021216a8b35ea91ef1f12713ed41da843bbaee7bcristy if ((GetPixelChannelTraits(image,channel) & BlendPixelTrait) != 0) 4225021216a8b35ea91ef1f12713ed41da843bbaee7bcristy (void) ConcatenateMagickString(traits,"blend,",MaxTextExtent); 4226021216a8b35ea91ef1f12713ed41da843bbaee7bcristy if ((GetPixelChannelTraits(image,channel) & CopyPixelTrait) != 0) 4227021216a8b35ea91ef1f12713ed41da843bbaee7bcristy (void) ConcatenateMagickString(traits,"copy,",MaxTextExtent); 4228021216a8b35ea91ef1f12713ed41da843bbaee7bcristy if (*traits == '\0') 4229021216a8b35ea91ef1f12713ed41da843bbaee7bcristy (void) ConcatenateMagickString(traits,"undefined,",MaxTextExtent); 4230021216a8b35ea91ef1f12713ed41da843bbaee7bcristy traits[strlen(traits)-1]='\0'; 4231021216a8b35ea91ef1f12713ed41da843bbaee7bcristy (void) LogMagickEvent(PixelEvent,GetMagickModule()," %.20g: %s (%s)", 4232021216a8b35ea91ef1f12713ed41da843bbaee7bcristy (double) i,name,traits); 4233021216a8b35ea91ef1f12713ed41da843bbaee7bcristy } 4234021216a8b35ea91ef1f12713ed41da843bbaee7bcristy} 4235021216a8b35ea91ef1f12713ed41da843bbaee7bcristy 4236e2a912b6c9086c98ec838baa0824cd8deca55538cristyMagickExport void InitializePixelChannelMap(Image *image) 423777c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy{ 4238e2a912b6c9086c98ec838baa0824cd8deca55538cristy PixelTrait 4239e2a912b6c9086c98ec838baa0824cd8deca55538cristy trait; 4240e2a912b6c9086c98ec838baa0824cd8deca55538cristy 424177c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy register ssize_t 424277c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy i; 424377c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy 4244d26338ffb761a86f047d7bbb9a596800f53c8649cristy ssize_t 424577c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy n; 424677c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy 424777c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy assert(image != (Image *) NULL); 424877c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy assert(image->signature == MagickSignature); 4249e2a912b6c9086c98ec838baa0824cd8deca55538cristy (void) ResetMagickMemory(image->channel_map,0,MaxPixelChannels* 4250e2a912b6c9086c98ec838baa0824cd8deca55538cristy sizeof(*image->channel_map)); 4251e2a912b6c9086c98ec838baa0824cd8deca55538cristy trait=UpdatePixelTrait; 42528a46d827a124555f0c48fb2368ec1bba8e079ab6cristy if (image->alpha_trait == BlendPixelTrait) 425361f18adcc41fdd05d57e50544cdb9d321bb18953cristy trait=(PixelTrait) (trait | BlendPixelTrait); 425477c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy n=0; 4255c06c58036e12a41593f1c7a984f1fdb4e9cc434bcristy if (image->colorspace == GRAYColorspace) 425677c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy { 4257cf1296eb467f83fd2106e51d2689ac0afc863ef8cristy SetPixelChannelAttributes(image,BluePixelChannel,trait,n); 4258cf1296eb467f83fd2106e51d2689ac0afc863ef8cristy SetPixelChannelAttributes(image,GreenPixelChannel,trait,n); 4259cf1296eb467f83fd2106e51d2689ac0afc863ef8cristy SetPixelChannelAttributes(image,RedPixelChannel,trait,n++); 42603c3162882db2814a5b709072cd03b8d18c80d6afcristy } 42613c3162882db2814a5b709072cd03b8d18c80d6afcristy else 42623c3162882db2814a5b709072cd03b8d18c80d6afcristy { 4263cf1296eb467f83fd2106e51d2689ac0afc863ef8cristy SetPixelChannelAttributes(image,RedPixelChannel,trait,n++); 4264cf1296eb467f83fd2106e51d2689ac0afc863ef8cristy SetPixelChannelAttributes(image,GreenPixelChannel,trait,n++); 4265cf1296eb467f83fd2106e51d2689ac0afc863ef8cristy SetPixelChannelAttributes(image,BluePixelChannel,trait,n++); 426677c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy } 426777c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy if (image->colorspace == CMYKColorspace) 4268cf1296eb467f83fd2106e51d2689ac0afc863ef8cristy SetPixelChannelAttributes(image,BlackPixelChannel,trait,n++); 42698a46d827a124555f0c48fb2368ec1bba8e079ab6cristy if (image->alpha_trait != UndefinedPixelTrait) 4270cf1296eb467f83fd2106e51d2689ac0afc863ef8cristy SetPixelChannelAttributes(image,AlphaPixelChannel,CopyPixelTrait,n++); 4271bd5a96cd2b69f218f85a7adc306296a736f91a56cristy if (image->storage_class == PseudoClass) 4272cf1296eb467f83fd2106e51d2689ac0afc863ef8cristy SetPixelChannelAttributes(image,IndexPixelChannel,CopyPixelTrait,n++); 4273883fde11debec15cedb05dc5d7228d8588066bc0cristy if (image->read_mask != MagickFalse) 4274883fde11debec15cedb05dc5d7228d8588066bc0cristy SetPixelChannelAttributes(image,ReadMaskPixelChannel,CopyPixelTrait,n++); 4275883fde11debec15cedb05dc5d7228d8588066bc0cristy if (image->write_mask != MagickFalse) 4276883fde11debec15cedb05dc5d7228d8588066bc0cristy SetPixelChannelAttributes(image,WriteMaskPixelChannel,CopyPixelTrait,n++); 4277e2a912b6c9086c98ec838baa0824cd8deca55538cristy assert((n+image->number_meta_channels) < MaxPixelChannels); 4278e2a912b6c9086c98ec838baa0824cd8deca55538cristy for (i=0; i < (ssize_t) image->number_meta_channels; i++) 4279cf1296eb467f83fd2106e51d2689ac0afc863ef8cristy SetPixelChannelAttributes(image,(PixelChannel) (MetaPixelChannel+i), 4280cf1296eb467f83fd2106e51d2689ac0afc863ef8cristy CopyPixelTrait,n++); 4281d26338ffb761a86f047d7bbb9a596800f53c8649cristy image->number_channels=(size_t) n; 42826dcb9b8f58179c62fb386bf2bc02c8ba901dfb15cristy if (image->debug != MagickFalse) 42836dcb9b8f58179c62fb386bf2bc02c8ba901dfb15cristy LogPixelChannels(image); 4284cf1296eb467f83fd2106e51d2689ac0afc863ef8cristy (void) SetImageChannelMask(image,image->channel_mask); 4285bd5a96cd2b69f218f85a7adc306296a736f91a56cristy} 4286bd5a96cd2b69f218f85a7adc306296a736f91a56cristy 4287bd5a96cd2b69f218f85a7adc306296a736f91a56cristy/* 4288bd5a96cd2b69f218f85a7adc306296a736f91a56cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4289bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% % 4290bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% % 4291bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% % 4292a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% I n t e r p o l a t e P i x e l C h a n n e l % 4293a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% % 4294a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% % 4295a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% % 4296a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4297a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 4298884f600898ca6935a7981b4d56bf3d2c4ec17011cristy% InterpolatePixelChannel() applies a pixel interpolation method between a 4299884f600898ca6935a7981b4d56bf3d2c4ec17011cristy% floating point coordinate and the pixels surrounding that coordinate. No 4300884f600898ca6935a7981b4d56bf3d2c4ec17011cristy% pixel area resampling, or scaling of the result is performed. 4301a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 4302cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony% Interpolation is restricted to just the specified channel. 4303cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony% 4304a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% The format of the InterpolatePixelChannel method is: 4305a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 4306a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% MagickBooleanType InterpolatePixelChannel(const Image *image, 4307444eda6285b2191e662c3d375c86770da70a83b0cristy% const CacheView *image_view,const PixelChannel channel, 43085c4e2586d27d4299a742d170d41105de1689aa46cristy% const PixelInterpolateMethod method,const double x,const double y, 4309a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% double *pixel,ExceptionInfo *exception) 4310a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 4311a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% A description of each parameter follows: 4312a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 4313a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% o image: the image. 4314a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 4315a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% o image_view: the image view. 4316a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 4317a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% o channel: the pixel channel to interpolate. 4318a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 4319a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% o method: the pixel color interpolation method. 4320a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 4321a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% o x,y: A double representing the current (x,y) position of the pixel. 4322a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 4323a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% o pixel: return the interpolated pixel here. 4324a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 4325a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% o exception: return any errors or warnings in this structure. 4326a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 4327a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy*/ 432894ea1636709395774d7118ef56162d211904cfd2cristy 4329b0a657e13c4aefba39c51292005427b47277869dcristystatic inline void CatromWeights(const double x,double (*weights)[4]) 4330884f600898ca6935a7981b4d56bf3d2c4ec17011cristy{ 4331a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy double 4332884f600898ca6935a7981b4d56bf3d2c4ec17011cristy alpha, 4333d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas beta, 4334884f600898ca6935a7981b4d56bf3d2c4ec17011cristy gamma; 4335884f600898ca6935a7981b4d56bf3d2c4ec17011cristy 43365a5e4d97bc9afa4660902954d2eed4f23582dfeccristy /* 43375a5e4d97bc9afa4660902954d2eed4f23582dfeccristy Nicolas Robidoux' 10 flops (4* + 5- + 1+) refactoring of the computation 43385a5e4d97bc9afa4660902954d2eed4f23582dfeccristy of the standard four 1D Catmull-Rom weights. The sampling location is 43395a5e4d97bc9afa4660902954d2eed4f23582dfeccristy assumed between the second and third input pixel locations, and x is the 43405a5e4d97bc9afa4660902954d2eed4f23582dfeccristy position relative to the second input pixel location. Formulas originally 43415a5e4d97bc9afa4660902954d2eed4f23582dfeccristy derived for the VIPS (Virtual Image Processing System) library. 43425a5e4d97bc9afa4660902954d2eed4f23582dfeccristy */ 4343a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy alpha=(double) 1.0-x; 4344a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy beta=(double) (-0.5)*x*alpha; 4345d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas (*weights)[0]=alpha*beta; 4346d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas (*weights)[3]=x*beta; 4347d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas /* 43485a5e4d97bc9afa4660902954d2eed4f23582dfeccristy The following computation of the inner weights from the outer ones work 43495a5e4d97bc9afa4660902954d2eed4f23582dfeccristy for all Keys cubics. 4350d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas */ 4351d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas gamma=(*weights)[3]-(*weights)[0]; 4352d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas (*weights)[1]=alpha-(*weights)[0]+gamma; 4353d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas (*weights)[2]=x-(*weights)[3]-gamma; 4354d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas} 4355d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas 4356b0a657e13c4aefba39c51292005427b47277869dcristystatic inline void SplineWeights(const double x,double (*weights)[4]) 4357d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas{ 43585a5e4d97bc9afa4660902954d2eed4f23582dfeccristy double 43595a5e4d97bc9afa4660902954d2eed4f23582dfeccristy alpha, 43605a5e4d97bc9afa4660902954d2eed4f23582dfeccristy beta; 43615a5e4d97bc9afa4660902954d2eed4f23582dfeccristy 4362d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas /* 436358ee5018960b42b80b54398eacabe9ae5da89149cristy Nicolas Robidoux' 12 flops (6* + 5- + 1+) refactoring of the computation 436458ee5018960b42b80b54398eacabe9ae5da89149cristy of the standard four 1D cubic B-spline smoothing weights. The sampling 436558ee5018960b42b80b54398eacabe9ae5da89149cristy location is assumed between the second and third input pixel locations, 436658ee5018960b42b80b54398eacabe9ae5da89149cristy and x is the position relative to the second input pixel location. 4367d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas */ 4368a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy alpha=(double) 1.0-x; 4369a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy (*weights)[3]=(double) (1.0/6.0)*x*x*x; 4370a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy (*weights)[0]=(double) (1.0/6.0)*alpha*alpha*alpha; 4371d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas beta=(*weights)[3]-(*weights)[0]; 4372d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas (*weights)[1]=alpha-(*weights)[0]+beta; 4373d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas (*weights)[2]=x-(*weights)[3]-beta; 4374884f600898ca6935a7981b4d56bf3d2c4ec17011cristy} 4375884f600898ca6935a7981b4d56bf3d2c4ec17011cristy 437694ea1636709395774d7118ef56162d211904cfd2cristystatic inline double MeshInterpolate(const PointInfo *delta,const double p, 437794ea1636709395774d7118ef56162d211904cfd2cristy const double x,const double y) 437894ea1636709395774d7118ef56162d211904cfd2cristy{ 437994ea1636709395774d7118ef56162d211904cfd2cristy return(delta->x*x+delta->y*y+(1.0-delta->x-delta->y)*p); 438094ea1636709395774d7118ef56162d211904cfd2cristy} 438194ea1636709395774d7118ef56162d211904cfd2cristy 4382cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony/* 4383a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristystatic inline ssize_t NearestNeighbor(const double x) 4384884f600898ca6935a7981b4d56bf3d2c4ec17011cristy{ 4385884f600898ca6935a7981b4d56bf3d2c4ec17011cristy if (x >= 0.0) 4386884f600898ca6935a7981b4d56bf3d2c4ec17011cristy return((ssize_t) (x+0.5)); 4387884f600898ca6935a7981b4d56bf3d2c4ec17011cristy return((ssize_t) (x-0.5)); 4388884f600898ca6935a7981b4d56bf3d2c4ec17011cristy} 4389cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony*/ 4390884f600898ca6935a7981b4d56bf3d2c4ec17011cristy 4391a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristyMagickExport MagickBooleanType InterpolatePixelChannel(const Image *image, 4392a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy const CacheView *image_view,const PixelChannel channel, 43935c4e2586d27d4299a742d170d41105de1689aa46cristy const PixelInterpolateMethod method,const double x,const double y, 4394a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy double *pixel,ExceptionInfo *exception) 4395a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy{ 4396a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy double 439794ea1636709395774d7118ef56162d211904cfd2cristy alpha[16], 4398884f600898ca6935a7981b4d56bf3d2c4ec17011cristy gamma, 4399884f600898ca6935a7981b4d56bf3d2c4ec17011cristy pixels[16]; 440094ea1636709395774d7118ef56162d211904cfd2cristy 440158ee5018960b42b80b54398eacabe9ae5da89149cristy MagickBooleanType 440258ee5018960b42b80b54398eacabe9ae5da89149cristy status; 440358ee5018960b42b80b54398eacabe9ae5da89149cristy 440458ee5018960b42b80b54398eacabe9ae5da89149cristy PixelInterpolateMethod 440558ee5018960b42b80b54398eacabe9ae5da89149cristy interpolate; 440658ee5018960b42b80b54398eacabe9ae5da89149cristy 440794ea1636709395774d7118ef56162d211904cfd2cristy PixelTrait 440894ea1636709395774d7118ef56162d211904cfd2cristy traits; 440994ea1636709395774d7118ef56162d211904cfd2cristy 441094ea1636709395774d7118ef56162d211904cfd2cristy register const Quantum 441194ea1636709395774d7118ef56162d211904cfd2cristy *p; 441294ea1636709395774d7118ef56162d211904cfd2cristy 441350e64b85215ce366ca50af1ba16326c784221f92cristy register ssize_t 441494ea1636709395774d7118ef56162d211904cfd2cristy i; 441594ea1636709395774d7118ef56162d211904cfd2cristy 4416a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy ssize_t 4417a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy x_offset, 4418a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy y_offset; 4419a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy 4420a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy assert(image != (Image *) NULL); 4421a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy assert(image != (Image *) NULL); 4422a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy assert(image->signature == MagickSignature); 4423a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy assert(image_view != (CacheView *) NULL); 4424a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy status=MagickTrue; 4425884f600898ca6935a7981b4d56bf3d2c4ec17011cristy *pixel=0.0; 4426cf1296eb467f83fd2106e51d2689ac0afc863ef8cristy traits=GetPixelChannelTraits(image,channel); 4427a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy x_offset=(ssize_t) floor(x); 4428a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy y_offset=(ssize_t) floor(y); 4429cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony interpolate = method; 4430cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony if ( interpolate == UndefinedInterpolatePixel ) 4431cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony interpolate = image->interpolate; 4432cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony switch (interpolate) 4433a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy { 443458ee5018960b42b80b54398eacabe9ae5da89149cristy case AverageInterpolatePixel: /* nearest 4 neighbours */ 443558ee5018960b42b80b54398eacabe9ae5da89149cristy case Average9InterpolatePixel: /* nearest 9 neighbours */ 443658ee5018960b42b80b54398eacabe9ae5da89149cristy case Average16InterpolatePixel: /* nearest 16 neighbours */ 4437884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4438fb12237dd6e4d4d8b92d879661153062eeca0572cristy ssize_t 4439fb12237dd6e4d4d8b92d879661153062eeca0572cristy count; 4440cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony 4441fb12237dd6e4d4d8b92d879661153062eeca0572cristy count=2; /* size of the area to average - default nearest 4 */ 4442cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony if (interpolate == Average9InterpolatePixel) 4443cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 4444cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony count=3; 4445cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony x_offset=(ssize_t) (floor(x+0.5)-1); 4446cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony y_offset=(ssize_t) (floor(y+0.5)-1); 4447cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 4448fb12237dd6e4d4d8b92d879661153062eeca0572cristy else 4449fb12237dd6e4d4d8b92d879661153062eeca0572cristy if (interpolate == Average16InterpolatePixel) 4450fb12237dd6e4d4d8b92d879661153062eeca0572cristy { 4451fb12237dd6e4d4d8b92d879661153062eeca0572cristy count=4; 4452fb12237dd6e4d4d8b92d879661153062eeca0572cristy x_offset--; 4453fb12237dd6e4d4d8b92d879661153062eeca0572cristy y_offset--; 4454fb12237dd6e4d4d8b92d879661153062eeca0572cristy } 4455021216a8b35ea91ef1f12713ed41da843bbaee7bcristy p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,(size_t) count, 4456021216a8b35ea91ef1f12713ed41da843bbaee7bcristy (size_t) count,exception); 4457884f600898ca6935a7981b4d56bf3d2c4ec17011cristy if (p == (const Quantum *) NULL) 4458884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4459884f600898ca6935a7981b4d56bf3d2c4ec17011cristy status=MagickFalse; 4460884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4461884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 446258ee5018960b42b80b54398eacabe9ae5da89149cristy count*=count; /* Number of pixels to average */ 4463222b19c8e5e5ee5287e41d33fea54f2b651741b6cristy if ((traits & BlendPixelTrait) == 0) 446450e64b85215ce366ca50af1ba16326c784221f92cristy for (i=0; i < (ssize_t) count; i++) 4465884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4466884f600898ca6935a7981b4d56bf3d2c4ec17011cristy alpha[i]=1.0; 4467a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixels[i]=(double) p[i*GetPixelChannels(image)+channel]; 4468884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4469884f600898ca6935a7981b4d56bf3d2c4ec17011cristy else 447050e64b85215ce366ca50af1ba16326c784221f92cristy for (i=0; i < (ssize_t) count; i++) 4471884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4472884f600898ca6935a7981b4d56bf3d2c4ec17011cristy alpha[i]=QuantumScale*GetPixelAlpha(image,p+i* 4473884f600898ca6935a7981b4d56bf3d2c4ec17011cristy GetPixelChannels(image)); 4474884f600898ca6935a7981b4d56bf3d2c4ec17011cristy pixels[i]=alpha[i]*p[i*GetPixelChannels(image)+channel]; 4475884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 447650e64b85215ce366ca50af1ba16326c784221f92cristy for (i=0; i < (ssize_t) count; i++) 4477884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 44783e3ec3afbb0782697f201cbe30a56794c10dc7efcristy gamma=PerceptibleReciprocal(alpha[i])/count; 4479cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony *pixel+=gamma*pixels[i]; 4480884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4481884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4482884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4483cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony case BilinearInterpolatePixel: 4484cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony default: 4485cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 4486cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony PointInfo 4487cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony delta, 4488cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony epsilon; 4489cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony 4490cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,2,2,exception); 4491cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony if (p == (const Quantum *) NULL) 4492cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 4493cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony status=MagickFalse; 4494cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony break; 4495cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 4496cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony if ((traits & BlendPixelTrait) == 0) 4497cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony for (i=0; i < 4; i++) 4498cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 4499cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony alpha[i]=1.0; 4500a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixels[i]=(double) p[i*GetPixelChannels(image)+channel]; 4501cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 4502cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony else 4503cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony for (i=0; i < 4; i++) 4504cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 4505cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony alpha[i]=QuantumScale*GetPixelAlpha(image,p+i* 4506cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony GetPixelChannels(image)); 4507cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[i]=alpha[i]*p[i*GetPixelChannels(image)+channel]; 4508cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 4509cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony delta.x=x-x_offset; 4510cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony delta.y=y-y_offset; 4511cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony epsilon.x=1.0-delta.x; 4512cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony epsilon.y=1.0-delta.y; 4513cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony gamma=((epsilon.y*(epsilon.x*alpha[0]+delta.x*alpha[1])+delta.y* 4514cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony (epsilon.x*alpha[2]+delta.x*alpha[3]))); 45153e3ec3afbb0782697f201cbe30a56794c10dc7efcristy gamma=PerceptibleReciprocal(gamma); 4516cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony *pixel=gamma*(epsilon.y*(epsilon.x*pixels[0]+delta.x*pixels[1])+delta.y* 4517cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony (epsilon.x*pixels[2]+delta.x*pixels[3])); 4518cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony break; 4519cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 45205f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony case BlendInterpolatePixel: 45215f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony { 45225f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,2,2,exception); 45235f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony if (p == (const Quantum *) NULL) 45245f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony { 45255f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony status=MagickFalse; 45265f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony break; 45275f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony } 45285f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony if ((traits & BlendPixelTrait) == 0) 45295f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony for (i=0; i < 4; i++) 45305f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony { 45315f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony alpha[i]=1.0; 45325f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony pixels[i]=(MagickRealType) p[i*GetPixelChannels(image)+channel]; 45335f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony } 45345f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony else 45355f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony for (i=0; i < 4; i++) 45365f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony { 45375f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony alpha[i]=QuantumScale*GetPixelAlpha(image,p+i* 45385f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony GetPixelChannels(image)); 45395f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony pixels[i]=alpha[i]*p[i*GetPixelChannels(image)+channel]; 45405f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony } 454158ee5018960b42b80b54398eacabe9ae5da89149cristy gamma=1.0; /* number of pixels blended together (its variable) */ 45425f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony for (i=0; i <= 1L; i++) { 4543fb12237dd6e4d4d8b92d879661153062eeca0572cristy if ((y-y_offset) >= 0.75) 4544fb12237dd6e4d4d8b92d879661153062eeca0572cristy { 4545fb12237dd6e4d4d8b92d879661153062eeca0572cristy alpha[i]=alpha[i+2]; /* take right pixels */ 4546fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[i]=pixels[i+2]; 4547fb12237dd6e4d4d8b92d879661153062eeca0572cristy } 4548fb12237dd6e4d4d8b92d879661153062eeca0572cristy else 4549fb12237dd6e4d4d8b92d879661153062eeca0572cristy if ((y-y_offset) > 0.25) 4550fb12237dd6e4d4d8b92d879661153062eeca0572cristy { 4551fb12237dd6e4d4d8b92d879661153062eeca0572cristy gamma=2.0; /* blend both pixels in row */ 4552fb12237dd6e4d4d8b92d879661153062eeca0572cristy alpha[i]+=alpha[i+2]; /* add up alpha weights */ 4553fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[i]+=pixels[i+2]; 4554fb12237dd6e4d4d8b92d879661153062eeca0572cristy } 45555f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony } 4556fb12237dd6e4d4d8b92d879661153062eeca0572cristy if ((x-x_offset) >= 0.75) 4557fb12237dd6e4d4d8b92d879661153062eeca0572cristy { 4558fb12237dd6e4d4d8b92d879661153062eeca0572cristy alpha[0]=alpha[1]; /* take bottom row blend */ 4559fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[0]=pixels[1]; 4560fb12237dd6e4d4d8b92d879661153062eeca0572cristy } 4561fb12237dd6e4d4d8b92d879661153062eeca0572cristy else 4562fb12237dd6e4d4d8b92d879661153062eeca0572cristy if ((x-x_offset) > 0.25) 4563fb12237dd6e4d4d8b92d879661153062eeca0572cristy { 4564fb12237dd6e4d4d8b92d879661153062eeca0572cristy gamma*=2.0; /* blend both rows */ 4565fb12237dd6e4d4d8b92d879661153062eeca0572cristy alpha[0]+=alpha[1]; /* add up alpha weights */ 4566fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[0]+=pixels[1]; 4567fb12237dd6e4d4d8b92d879661153062eeca0572cristy } 45685f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony if (channel != AlphaPixelChannel) 456958ee5018960b42b80b54398eacabe9ae5da89149cristy gamma=PerceptibleReciprocal(alpha[0]); /* (color) 1/alpha_weights */ 45705f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony else 457158ee5018960b42b80b54398eacabe9ae5da89149cristy gamma=PerceptibleReciprocal(gamma); /* (alpha) 1/number_of_pixels */ 45725f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony *pixel=gamma*pixels[0]; 45735f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony break; 45745f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony } 4575cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony case CatromInterpolatePixel: 4576884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4577a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy double 4578380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy cx[4], 45796676f5a461ba75c5f4a927218cb3577dd29d70aenicolas cy[4]; 4580884f600898ca6935a7981b4d56bf3d2c4ec17011cristy 4581884f600898ca6935a7981b4d56bf3d2c4ec17011cristy p=GetCacheViewVirtualPixels(image_view,x_offset-1,y_offset-1,4,4, 4582884f600898ca6935a7981b4d56bf3d2c4ec17011cristy exception); 4583884f600898ca6935a7981b4d56bf3d2c4ec17011cristy if (p == (const Quantum *) NULL) 4584884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4585884f600898ca6935a7981b4d56bf3d2c4ec17011cristy status=MagickFalse; 4586884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4587884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4588222b19c8e5e5ee5287e41d33fea54f2b651741b6cristy if ((traits & BlendPixelTrait) == 0) 4589884f600898ca6935a7981b4d56bf3d2c4ec17011cristy for (i=0; i < 16; i++) 4590884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4591884f600898ca6935a7981b4d56bf3d2c4ec17011cristy alpha[i]=1.0; 4592a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixels[i]=(double) p[i*GetPixelChannels(image)+channel]; 4593884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4594884f600898ca6935a7981b4d56bf3d2c4ec17011cristy else 4595884f600898ca6935a7981b4d56bf3d2c4ec17011cristy for (i=0; i < 16; i++) 4596884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4597884f600898ca6935a7981b4d56bf3d2c4ec17011cristy alpha[i]=QuantumScale*GetPixelAlpha(image,p+i* 4598884f600898ca6935a7981b4d56bf3d2c4ec17011cristy GetPixelChannels(image)); 4599884f600898ca6935a7981b4d56bf3d2c4ec17011cristy pixels[i]=alpha[i]*p[i*GetPixelChannels(image)+channel]; 4600884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4601a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy CatromWeights((double) (x-x_offset),&cx); 4602a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy CatromWeights((double) (y-y_offset),&cy); 4603a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy gamma=(channel == AlphaPixelChannel ? (double) 1.0 : 46043e3ec3afbb0782697f201cbe30a56794c10dc7efcristy PerceptibleReciprocal(cy[0]*(cx[0]*alpha[0]+cx[1]*alpha[1]+cx[2]* 4605d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas alpha[2]+cx[3]*alpha[3])+cy[1]*(cx[0]*alpha[4]+cx[1]*alpha[5]+cx[2]* 4606d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas alpha[6]+cx[3]*alpha[7])+cy[2]*(cx[0]*alpha[8]+cx[1]*alpha[9]+cx[2]* 4607d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas alpha[10]+cx[3]*alpha[11])+cy[3]*(cx[0]*alpha[12]+cx[1]*alpha[13]+ 4608d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas cx[2]*alpha[14]+cx[3]*alpha[15]))); 4609380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy *pixel=gamma*(cy[0]*(cx[0]*pixels[0]+cx[1]*pixels[1]+cx[2]*pixels[2]+ 4610d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas cx[3]*pixels[3])+cy[1]*(cx[0]*pixels[4]+cx[1]*pixels[5]+cx[2]* 4611d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[6]+cx[3]*pixels[7])+cy[2]*(cx[0]*pixels[8]+cx[1]*pixels[9]+ 4612d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas cx[2]*pixels[10]+cx[3]*pixels[11])+cy[3]*(cx[0]*pixels[12]+cx[1]* 4613d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[13]+cx[2]*pixels[14]+cx[3]*pixels[15])); 4614884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4615884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4616884f600898ca6935a7981b4d56bf3d2c4ec17011cristy case IntegerInterpolatePixel: 4617884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4618884f600898ca6935a7981b4d56bf3d2c4ec17011cristy p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,1,1,exception); 4619884f600898ca6935a7981b4d56bf3d2c4ec17011cristy if (p == (const Quantum *) NULL) 4620884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4621884f600898ca6935a7981b4d56bf3d2c4ec17011cristy status=MagickFalse; 4622884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4623884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 46240beccfa61f43782de2d6ee7edc1ec8301a3bbeeccristy *pixel=(double) GetPixelChannel(image,channel,p); 4625884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4626884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4627cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony case NearestInterpolatePixel: 4628884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4629cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony x_offset=(ssize_t) floor(x+0.5); 4630cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony y_offset=(ssize_t) floor(y+0.5); 4631cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,1,1,exception); 4632884f600898ca6935a7981b4d56bf3d2c4ec17011cristy if (p == (const Quantum *) NULL) 4633884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4634884f600898ca6935a7981b4d56bf3d2c4ec17011cristy status=MagickFalse; 4635884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4636884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 46370beccfa61f43782de2d6ee7edc1ec8301a3bbeeccristy *pixel=(double) GetPixelChannel(image,channel,p); 4638884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4639884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4640884f600898ca6935a7981b4d56bf3d2c4ec17011cristy case MeshInterpolatePixel: 4641884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4642884f600898ca6935a7981b4d56bf3d2c4ec17011cristy PointInfo 4643884f600898ca6935a7981b4d56bf3d2c4ec17011cristy delta, 4644884f600898ca6935a7981b4d56bf3d2c4ec17011cristy luminance; 4645884f600898ca6935a7981b4d56bf3d2c4ec17011cristy 4646884f600898ca6935a7981b4d56bf3d2c4ec17011cristy p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,2,2,exception); 4647884f600898ca6935a7981b4d56bf3d2c4ec17011cristy if (p == (const Quantum *) NULL) 4648884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4649884f600898ca6935a7981b4d56bf3d2c4ec17011cristy status=MagickFalse; 4650884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4651884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4652222b19c8e5e5ee5287e41d33fea54f2b651741b6cristy if ((traits & BlendPixelTrait) == 0) 465394ea1636709395774d7118ef56162d211904cfd2cristy for (i=0; i < 4; i++) 465494ea1636709395774d7118ef56162d211904cfd2cristy { 465594ea1636709395774d7118ef56162d211904cfd2cristy alpha[i]=1.0; 4656a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixels[i]=(double) p[i*GetPixelChannels(image)+channel]; 465794ea1636709395774d7118ef56162d211904cfd2cristy } 465894ea1636709395774d7118ef56162d211904cfd2cristy else 465994ea1636709395774d7118ef56162d211904cfd2cristy for (i=0; i < 4; i++) 466094ea1636709395774d7118ef56162d211904cfd2cristy { 466194ea1636709395774d7118ef56162d211904cfd2cristy alpha[i]=QuantumScale*GetPixelAlpha(image,p+i* 466294ea1636709395774d7118ef56162d211904cfd2cristy GetPixelChannels(image)); 466394ea1636709395774d7118ef56162d211904cfd2cristy pixels[i]=alpha[i]*p[i*GetPixelChannels(image)+channel]; 466494ea1636709395774d7118ef56162d211904cfd2cristy } 4665884f600898ca6935a7981b4d56bf3d2c4ec17011cristy delta.x=x-x_offset; 4666884f600898ca6935a7981b4d56bf3d2c4ec17011cristy delta.y=y-y_offset; 4667884f600898ca6935a7981b4d56bf3d2c4ec17011cristy luminance.x=GetPixelLuminance(image,p)-(double) 4668884f600898ca6935a7981b4d56bf3d2c4ec17011cristy GetPixelLuminance(image,p+3*GetPixelChannels(image)); 466928474bfbda5ee2d4da2eb79f299cf1f692770b99cristy luminance.y=GetPixelLuminance(image,p+GetPixelChannels(image))-(double) 4670884f600898ca6935a7981b4d56bf3d2c4ec17011cristy GetPixelLuminance(image,p+2*GetPixelChannels(image)); 467194ea1636709395774d7118ef56162d211904cfd2cristy if (fabs(luminance.x) < fabs(luminance.y)) 467294ea1636709395774d7118ef56162d211904cfd2cristy { 467394ea1636709395774d7118ef56162d211904cfd2cristy /* 467494ea1636709395774d7118ef56162d211904cfd2cristy Diagonal 0-3 NW-SE. 467594ea1636709395774d7118ef56162d211904cfd2cristy */ 467694ea1636709395774d7118ef56162d211904cfd2cristy if (delta.x <= delta.y) 467794ea1636709395774d7118ef56162d211904cfd2cristy { 467894ea1636709395774d7118ef56162d211904cfd2cristy /* 467994ea1636709395774d7118ef56162d211904cfd2cristy Bottom-left triangle (pixel: 2, diagonal: 0-3). 468094ea1636709395774d7118ef56162d211904cfd2cristy */ 468194ea1636709395774d7118ef56162d211904cfd2cristy delta.y=1.0-delta.y; 468294ea1636709395774d7118ef56162d211904cfd2cristy gamma=MeshInterpolate(&delta,alpha[2],alpha[3],alpha[0]); 46833e3ec3afbb0782697f201cbe30a56794c10dc7efcristy gamma=PerceptibleReciprocal(gamma); 468494ea1636709395774d7118ef56162d211904cfd2cristy *pixel=gamma*MeshInterpolate(&delta,pixels[2],pixels[3], 468594ea1636709395774d7118ef56162d211904cfd2cristy pixels[0]); 468694ea1636709395774d7118ef56162d211904cfd2cristy } 468794ea1636709395774d7118ef56162d211904cfd2cristy else 468894ea1636709395774d7118ef56162d211904cfd2cristy { 468994ea1636709395774d7118ef56162d211904cfd2cristy /* 469094ea1636709395774d7118ef56162d211904cfd2cristy Top-right triangle (pixel: 1, diagonal: 0-3). 469194ea1636709395774d7118ef56162d211904cfd2cristy */ 469294ea1636709395774d7118ef56162d211904cfd2cristy delta.x=1.0-delta.x; 469394ea1636709395774d7118ef56162d211904cfd2cristy gamma=MeshInterpolate(&delta,alpha[1],alpha[0],alpha[3]); 46943e3ec3afbb0782697f201cbe30a56794c10dc7efcristy gamma=PerceptibleReciprocal(gamma); 469594ea1636709395774d7118ef56162d211904cfd2cristy *pixel=gamma*MeshInterpolate(&delta,pixels[1],pixels[0], 469694ea1636709395774d7118ef56162d211904cfd2cristy pixels[3]); 469794ea1636709395774d7118ef56162d211904cfd2cristy } 469894ea1636709395774d7118ef56162d211904cfd2cristy } 469994ea1636709395774d7118ef56162d211904cfd2cristy else 470094ea1636709395774d7118ef56162d211904cfd2cristy { 470194ea1636709395774d7118ef56162d211904cfd2cristy /* 470294ea1636709395774d7118ef56162d211904cfd2cristy Diagonal 1-2 NE-SW. 470394ea1636709395774d7118ef56162d211904cfd2cristy */ 470494ea1636709395774d7118ef56162d211904cfd2cristy if (delta.x <= (1.0-delta.y)) 470594ea1636709395774d7118ef56162d211904cfd2cristy { 470694ea1636709395774d7118ef56162d211904cfd2cristy /* 470794ea1636709395774d7118ef56162d211904cfd2cristy Top-left triangle (pixel: 0, diagonal: 1-2). 470894ea1636709395774d7118ef56162d211904cfd2cristy */ 470994ea1636709395774d7118ef56162d211904cfd2cristy gamma=MeshInterpolate(&delta,alpha[0],alpha[1],alpha[2]); 47103e3ec3afbb0782697f201cbe30a56794c10dc7efcristy gamma=PerceptibleReciprocal(gamma); 471194ea1636709395774d7118ef56162d211904cfd2cristy *pixel=gamma*MeshInterpolate(&delta,pixels[0],pixels[1], 471294ea1636709395774d7118ef56162d211904cfd2cristy pixels[2]); 471394ea1636709395774d7118ef56162d211904cfd2cristy } 471494ea1636709395774d7118ef56162d211904cfd2cristy else 471594ea1636709395774d7118ef56162d211904cfd2cristy { 471694ea1636709395774d7118ef56162d211904cfd2cristy /* 471794ea1636709395774d7118ef56162d211904cfd2cristy Bottom-right triangle (pixel: 3, diagonal: 1-2). 471894ea1636709395774d7118ef56162d211904cfd2cristy */ 471994ea1636709395774d7118ef56162d211904cfd2cristy delta.x=1.0-delta.x; 472094ea1636709395774d7118ef56162d211904cfd2cristy delta.y=1.0-delta.y; 472194ea1636709395774d7118ef56162d211904cfd2cristy gamma=MeshInterpolate(&delta,alpha[3],alpha[2],alpha[1]); 47223e3ec3afbb0782697f201cbe30a56794c10dc7efcristy gamma=PerceptibleReciprocal(gamma); 472394ea1636709395774d7118ef56162d211904cfd2cristy *pixel=gamma*MeshInterpolate(&delta,pixels[3],pixels[2], 472494ea1636709395774d7118ef56162d211904cfd2cristy pixels[1]); 472594ea1636709395774d7118ef56162d211904cfd2cristy } 472694ea1636709395774d7118ef56162d211904cfd2cristy } 4727a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy break; 4728a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy } 4729884f600898ca6935a7981b4d56bf3d2c4ec17011cristy case SplineInterpolatePixel: 4730884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4731a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy double 4732d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas cx[4], 47336676f5a461ba75c5f4a927218cb3577dd29d70aenicolas cy[4]; 4734884f600898ca6935a7981b4d56bf3d2c4ec17011cristy 4735884f600898ca6935a7981b4d56bf3d2c4ec17011cristy p=GetCacheViewVirtualPixels(image_view,x_offset-1,y_offset-1,4,4, 4736884f600898ca6935a7981b4d56bf3d2c4ec17011cristy exception); 4737884f600898ca6935a7981b4d56bf3d2c4ec17011cristy if (p == (const Quantum *) NULL) 4738884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4739884f600898ca6935a7981b4d56bf3d2c4ec17011cristy status=MagickFalse; 4740884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4741884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4742222b19c8e5e5ee5287e41d33fea54f2b651741b6cristy if ((traits & BlendPixelTrait) == 0) 4743884f600898ca6935a7981b4d56bf3d2c4ec17011cristy for (i=0; i < 16; i++) 4744884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4745884f600898ca6935a7981b4d56bf3d2c4ec17011cristy alpha[i]=1.0; 4746a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixels[i]=(double) p[i*GetPixelChannels(image)+channel]; 4747884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4748884f600898ca6935a7981b4d56bf3d2c4ec17011cristy else 4749884f600898ca6935a7981b4d56bf3d2c4ec17011cristy for (i=0; i < 16; i++) 4750884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4751884f600898ca6935a7981b4d56bf3d2c4ec17011cristy alpha[i]=QuantumScale*GetPixelAlpha(image,p+i* 4752884f600898ca6935a7981b4d56bf3d2c4ec17011cristy GetPixelChannels(image)); 4753884f600898ca6935a7981b4d56bf3d2c4ec17011cristy pixels[i]=alpha[i]*p[i*GetPixelChannels(image)+channel]; 4754884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4755a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy SplineWeights((double) (x-x_offset),&cx); 4756a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy SplineWeights((double) (y-y_offset),&cy); 4757a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy gamma=(channel == AlphaPixelChannel ? (double) 1.0 : 47583e3ec3afbb0782697f201cbe30a56794c10dc7efcristy PerceptibleReciprocal(cy[0]*(cx[0]*alpha[0]+cx[1]*alpha[1]+cx[2]* 4759d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas alpha[2]+cx[3]*alpha[3])+cy[1]*(cx[0]*alpha[4]+cx[1]*alpha[5]+cx[2]* 4760d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas alpha[6]+cx[3]*alpha[7])+cy[2]*(cx[0]*alpha[8]+cx[1]*alpha[9]+cx[2]* 4761d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas alpha[10]+cx[3]*alpha[11])+cy[3]*(cx[0]*alpha[12]+cx[1]*alpha[13]+ 4762d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas cx[2]*alpha[14]+cx[3]*alpha[15]))); 4763d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas *pixel=gamma*(cy[0]*(cx[0]*pixels[0]+cx[1]*pixels[1]+cx[2]*pixels[2]+ 4764d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas cx[3]*pixels[3])+cy[1]*(cx[0]*pixels[4]+cx[1]*pixels[5]+cx[2]* 4765d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[6]+cx[3]*pixels[7])+cy[2]*(cx[0]*pixels[8]+cx[1]*pixels[9]+ 4766d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas cx[2]*pixels[10]+cx[3]*pixels[11])+cy[3]*(cx[0]*pixels[12]+cx[1]* 4767d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[13]+cx[2]*pixels[14]+cx[3]*pixels[15])); 4768884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4769884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4770a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy } 4771a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy return(status); 4772a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy} 4773a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy 4774a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy/* 4775a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4776d76c51ed30cf4084f4434ba08925d16001d1e340cristy% % 4777d76c51ed30cf4084f4434ba08925d16001d1e340cristy% % 4778d76c51ed30cf4084f4434ba08925d16001d1e340cristy% % 47795c4e2586d27d4299a742d170d41105de1689aa46cristy% I n t e r p o l a t e P i x e l C h a n n e l s % 47805c4e2586d27d4299a742d170d41105de1689aa46cristy% % 47815c4e2586d27d4299a742d170d41105de1689aa46cristy% % 47825c4e2586d27d4299a742d170d41105de1689aa46cristy% % 47835c4e2586d27d4299a742d170d41105de1689aa46cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 47845c4e2586d27d4299a742d170d41105de1689aa46cristy% 47855c4e2586d27d4299a742d170d41105de1689aa46cristy% InterpolatePixelChannels() applies a pixel interpolation method between a 47865c4e2586d27d4299a742d170d41105de1689aa46cristy% floating point coordinate and the pixels surrounding that coordinate. No 47875c4e2586d27d4299a742d170d41105de1689aa46cristy% pixel area resampling, or scaling of the result is performed. 47885c4e2586d27d4299a742d170d41105de1689aa46cristy% 4789cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony% Interpolation is restricted to just the current channel setting of the 4790cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony% destination image into which the color is to be stored 4791cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony% 47925c4e2586d27d4299a742d170d41105de1689aa46cristy% The format of the InterpolatePixelChannels method is: 47935c4e2586d27d4299a742d170d41105de1689aa46cristy% 47945c4e2586d27d4299a742d170d41105de1689aa46cristy% MagickBooleanType InterpolatePixelChannels(const Image *source, 47955c4e2586d27d4299a742d170d41105de1689aa46cristy% const CacheView *source_view,const Image *destination, 47965c4e2586d27d4299a742d170d41105de1689aa46cristy% const PixelInterpolateMethod method,const double x,const double y, 47975c4e2586d27d4299a742d170d41105de1689aa46cristy% Quantum *pixel,ExceptionInfo *exception) 47985c4e2586d27d4299a742d170d41105de1689aa46cristy% 47995c4e2586d27d4299a742d170d41105de1689aa46cristy% A description of each parameter follows: 48005c4e2586d27d4299a742d170d41105de1689aa46cristy% 48015c4e2586d27d4299a742d170d41105de1689aa46cristy% o source: the source. 48025c4e2586d27d4299a742d170d41105de1689aa46cristy% 48035c4e2586d27d4299a742d170d41105de1689aa46cristy% o source_view: the source view. 48045c4e2586d27d4299a742d170d41105de1689aa46cristy% 4805cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony% o destination: the destination image, for the interpolated color 48065c4e2586d27d4299a742d170d41105de1689aa46cristy% 48075c4e2586d27d4299a742d170d41105de1689aa46cristy% o method: the pixel color interpolation method. 48085c4e2586d27d4299a742d170d41105de1689aa46cristy% 48095c4e2586d27d4299a742d170d41105de1689aa46cristy% o x,y: A double representing the current (x,y) position of the pixel. 48105c4e2586d27d4299a742d170d41105de1689aa46cristy% 48115c4e2586d27d4299a742d170d41105de1689aa46cristy% o pixel: return the interpolated pixel here. 48125c4e2586d27d4299a742d170d41105de1689aa46cristy% 48135c4e2586d27d4299a742d170d41105de1689aa46cristy% o exception: return any errors or warnings in this structure. 48145c4e2586d27d4299a742d170d41105de1689aa46cristy% 48155c4e2586d27d4299a742d170d41105de1689aa46cristy*/ 48165c4e2586d27d4299a742d170d41105de1689aa46cristyMagickExport MagickBooleanType InterpolatePixelChannels(const Image *source, 48175c4e2586d27d4299a742d170d41105de1689aa46cristy const CacheView *source_view,const Image *destination, 48185c4e2586d27d4299a742d170d41105de1689aa46cristy const PixelInterpolateMethod method,const double x,const double y, 48195c4e2586d27d4299a742d170d41105de1689aa46cristy Quantum *pixel,ExceptionInfo *exception) 48205c4e2586d27d4299a742d170d41105de1689aa46cristy{ 48215c4e2586d27d4299a742d170d41105de1689aa46cristy MagickBooleanType 48225c4e2586d27d4299a742d170d41105de1689aa46cristy status; 48235c4e2586d27d4299a742d170d41105de1689aa46cristy 4824a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy double 48255c4e2586d27d4299a742d170d41105de1689aa46cristy alpha[16], 48265c4e2586d27d4299a742d170d41105de1689aa46cristy gamma, 48275c4e2586d27d4299a742d170d41105de1689aa46cristy pixels[16]; 48285c4e2586d27d4299a742d170d41105de1689aa46cristy 48295c4e2586d27d4299a742d170d41105de1689aa46cristy register const Quantum 48305c4e2586d27d4299a742d170d41105de1689aa46cristy *p; 48315c4e2586d27d4299a742d170d41105de1689aa46cristy 483250e64b85215ce366ca50af1ba16326c784221f92cristy register ssize_t 48335c4e2586d27d4299a742d170d41105de1689aa46cristy i; 48345c4e2586d27d4299a742d170d41105de1689aa46cristy 48355c4e2586d27d4299a742d170d41105de1689aa46cristy ssize_t 48365c4e2586d27d4299a742d170d41105de1689aa46cristy x_offset, 48375c4e2586d27d4299a742d170d41105de1689aa46cristy y_offset; 48385c4e2586d27d4299a742d170d41105de1689aa46cristy 4839cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony PixelInterpolateMethod 4840cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony interpolate; 4841cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony 48425c4e2586d27d4299a742d170d41105de1689aa46cristy assert(source != (Image *) NULL); 48435c4e2586d27d4299a742d170d41105de1689aa46cristy assert(source != (Image *) NULL); 48445c4e2586d27d4299a742d170d41105de1689aa46cristy assert(source->signature == MagickSignature); 48455c4e2586d27d4299a742d170d41105de1689aa46cristy assert(source_view != (CacheView *) NULL); 48465c4e2586d27d4299a742d170d41105de1689aa46cristy status=MagickTrue; 48475c4e2586d27d4299a742d170d41105de1689aa46cristy x_offset=(ssize_t) floor(x); 48485c4e2586d27d4299a742d170d41105de1689aa46cristy y_offset=(ssize_t) floor(y); 4849cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony interpolate = method; 4850cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony if ( interpolate == UndefinedInterpolatePixel ) 4851cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony interpolate = source->interpolate; 4852cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony switch (interpolate) 48535c4e2586d27d4299a742d170d41105de1689aa46cristy { 485458ee5018960b42b80b54398eacabe9ae5da89149cristy case AverageInterpolatePixel: /* nearest 4 neighbours */ 485558ee5018960b42b80b54398eacabe9ae5da89149cristy case Average9InterpolatePixel: /* nearest 9 neighbours */ 485658ee5018960b42b80b54398eacabe9ae5da89149cristy case Average16InterpolatePixel: /* nearest 16 neighbours */ 48575c4e2586d27d4299a742d170d41105de1689aa46cristy { 4858fb12237dd6e4d4d8b92d879661153062eeca0572cristy ssize_t 4859fb12237dd6e4d4d8b92d879661153062eeca0572cristy count; 4860cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony 4861fb12237dd6e4d4d8b92d879661153062eeca0572cristy count=2; /* size of the area to average - default nearest 4 */ 4862cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony if (interpolate == Average9InterpolatePixel) 4863cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 4864cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony count=3; 4865cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony x_offset=(ssize_t) (floor(x+0.5)-1); 4866cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony y_offset=(ssize_t) (floor(y+0.5)-1); 4867cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 4868fb12237dd6e4d4d8b92d879661153062eeca0572cristy else 4869fb12237dd6e4d4d8b92d879661153062eeca0572cristy if (interpolate == Average16InterpolatePixel) 4870fb12237dd6e4d4d8b92d879661153062eeca0572cristy { 4871fb12237dd6e4d4d8b92d879661153062eeca0572cristy count=4; 4872fb12237dd6e4d4d8b92d879661153062eeca0572cristy x_offset--; 4873fb12237dd6e4d4d8b92d879661153062eeca0572cristy y_offset--; 4874fb12237dd6e4d4d8b92d879661153062eeca0572cristy } 48751b72b8194b7d3f274bebf9e176192fd29e385481cristy p=GetCacheViewVirtualPixels(source_view,x_offset,y_offset,(size_t) count, 48761b72b8194b7d3f274bebf9e176192fd29e385481cristy (size_t) count,exception); 48775c4e2586d27d4299a742d170d41105de1689aa46cristy if (p == (const Quantum *) NULL) 48785c4e2586d27d4299a742d170d41105de1689aa46cristy { 48795c4e2586d27d4299a742d170d41105de1689aa46cristy status=MagickFalse; 48805c4e2586d27d4299a742d170d41105de1689aa46cristy break; 48815c4e2586d27d4299a742d170d41105de1689aa46cristy } 488258ee5018960b42b80b54398eacabe9ae5da89149cristy count*=count; /* Number of pixels to average */ 488350e64b85215ce366ca50af1ba16326c784221f92cristy for (i=0; i < (ssize_t) GetPixelChannels(source); i++) 48845c4e2586d27d4299a742d170d41105de1689aa46cristy { 48855c4e2586d27d4299a742d170d41105de1689aa46cristy double 48865c4e2586d27d4299a742d170d41105de1689aa46cristy sum; 48875c4e2586d27d4299a742d170d41105de1689aa46cristy 488850e64b85215ce366ca50af1ba16326c784221f92cristy register ssize_t 48895c4e2586d27d4299a742d170d41105de1689aa46cristy j; 48905c4e2586d27d4299a742d170d41105de1689aa46cristy 48915a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelChannel channel=GetPixelChannelChannel(source,i); 48925a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelTrait traits=GetPixelChannelTraits(source,channel); 48935a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelTrait destination_traits=GetPixelChannelTraits(destination, 48945a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy channel); 48955c4e2586d27d4299a742d170d41105de1689aa46cristy if ((traits == UndefinedPixelTrait) || 48965c4e2586d27d4299a742d170d41105de1689aa46cristy (destination_traits == UndefinedPixelTrait)) 48975c4e2586d27d4299a742d170d41105de1689aa46cristy continue; 489850e64b85215ce366ca50af1ba16326c784221f92cristy for (j=0; j < (ssize_t) count; j++) 4899a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixels[j]=(double) p[j*GetPixelChannels(source)+i]; 49004a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy sum=0.0; 49015c4e2586d27d4299a742d170d41105de1689aa46cristy if ((traits & BlendPixelTrait) == 0) 49025c4e2586d27d4299a742d170d41105de1689aa46cristy { 490350e64b85215ce366ca50af1ba16326c784221f92cristy for (j=0; j < (ssize_t) count; j++) 4904cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony sum+=pixels[j]; 4905cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony sum/=count; 49064a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy SetPixelChannel(destination,channel,ClampToQuantum(sum),pixel); 49075c4e2586d27d4299a742d170d41105de1689aa46cristy continue; 49085c4e2586d27d4299a742d170d41105de1689aa46cristy } 490950e64b85215ce366ca50af1ba16326c784221f92cristy for (j=0; j < (ssize_t) count; j++) 49105c4e2586d27d4299a742d170d41105de1689aa46cristy { 49115c4e2586d27d4299a742d170d41105de1689aa46cristy alpha[j]=QuantumScale*GetPixelAlpha(source,p+j* 49125c4e2586d27d4299a742d170d41105de1689aa46cristy GetPixelChannels(source)); 49135c4e2586d27d4299a742d170d41105de1689aa46cristy pixels[j]*=alpha[j]; 49143e3ec3afbb0782697f201cbe30a56794c10dc7efcristy gamma=PerceptibleReciprocal(alpha[j]); 4915cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony sum+=gamma*pixels[j]; 49165c4e2586d27d4299a742d170d41105de1689aa46cristy } 4917cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony sum/=count; 49184a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy SetPixelChannel(destination,channel,ClampToQuantum(sum),pixel); 49195c4e2586d27d4299a742d170d41105de1689aa46cristy } 49205c4e2586d27d4299a742d170d41105de1689aa46cristy break; 49215c4e2586d27d4299a742d170d41105de1689aa46cristy } 4922cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony case BilinearInterpolatePixel: 4923cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony default: 4924cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 4925cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony p=GetCacheViewVirtualPixels(source_view,x_offset,y_offset,2,2,exception); 4926cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony if (p == (const Quantum *) NULL) 4927cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 4928cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony status=MagickFalse; 4929cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony break; 4930cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 493150e64b85215ce366ca50af1ba16326c784221f92cristy for (i=0; i < (ssize_t) GetPixelChannels(source); i++) 4932cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 4933cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony PointInfo 4934cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony delta, 4935cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony epsilon; 4936cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony 49375a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelChannel channel=GetPixelChannelChannel(source,i); 49385a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelTrait traits=GetPixelChannelTraits(source,channel); 49395a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelTrait destination_traits=GetPixelChannelTraits(destination, 49405a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy channel); 4941cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony if ((traits == UndefinedPixelTrait) || 4942cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony (destination_traits == UndefinedPixelTrait)) 4943cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony continue; 4944cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony delta.x=x-x_offset; 4945cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony delta.y=y-y_offset; 4946cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony epsilon.x=1.0-delta.x; 4947cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony epsilon.y=1.0-delta.y; 4948a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixels[0]=(double) p[i]; 4949a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixels[1]=(double) p[GetPixelChannels(source)+i]; 4950a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixels[2]=(double) p[2*GetPixelChannels(source)+i]; 4951a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixels[3]=(double) p[3*GetPixelChannels(source)+i]; 4952cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony if ((traits & BlendPixelTrait) == 0) 4953cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 4954cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony gamma=((epsilon.y*(epsilon.x+delta.x)+delta.y*(epsilon.x+delta.x))); 49553e3ec3afbb0782697f201cbe30a56794c10dc7efcristy gamma=PerceptibleReciprocal(gamma); 4956cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony SetPixelChannel(destination,channel,ClampToQuantum(gamma*(epsilon.y* 4957cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony (epsilon.x*pixels[0]+delta.x*pixels[1])+delta.y*(epsilon.x* 4958cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[2]+delta.x*pixels[3]))),pixel); 4959cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony continue; 4960cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 4961cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony alpha[0]=QuantumScale*GetPixelAlpha(source,p); 4962cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony alpha[1]=QuantumScale*GetPixelAlpha(source,p+GetPixelChannels(source)); 4963cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony alpha[2]=QuantumScale*GetPixelAlpha(source,p+2* 4964cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony GetPixelChannels(source)); 4965cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony alpha[3]=QuantumScale*GetPixelAlpha(source,p+3* 4966cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony GetPixelChannels(source)); 4967cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[0]*=alpha[0]; 4968cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[1]*=alpha[1]; 4969cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[2]*=alpha[2]; 4970cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[3]*=alpha[3]; 4971cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony gamma=((epsilon.y*(epsilon.x*alpha[0]+delta.x*alpha[1])+delta.y* 4972cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony (epsilon.x*alpha[2]+delta.x*alpha[3]))); 49733e3ec3afbb0782697f201cbe30a56794c10dc7efcristy gamma=PerceptibleReciprocal(gamma); 4974cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony SetPixelChannel(destination,channel,ClampToQuantum(gamma*(epsilon.y* 4975cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony (epsilon.x*pixels[0]+delta.x*pixels[1])+delta.y*(epsilon.x*pixels[2]+ 4976cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony delta.x*pixels[3]))),pixel); 4977cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 4978cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony break; 4979cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 49805f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony case BlendInterpolatePixel: 49815f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony { 49825f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony p=GetCacheViewVirtualPixels(source_view,x_offset,y_offset,2,2,exception); 49835f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony if (p == (const Quantum *) NULL) 49845f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony { 49855f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony status=MagickFalse; 49865f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony break; 49875f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony } 49885f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony for (i=0; i < (ssize_t) GetPixelChannels(source); i++) 49895f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony { 49905f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony register ssize_t 49915f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony j; 49925f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony 49935a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelChannel channel=GetPixelChannelChannel(source,i); 49945a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelTrait traits=GetPixelChannelTraits(source,channel); 49955a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelTrait destination_traits=GetPixelChannelTraits(destination, 49965a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy channel); 49975f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony if ((traits == UndefinedPixelTrait) || 49985f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony (destination_traits == UndefinedPixelTrait)) 49995f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony continue; 50005f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony if ((traits & BlendPixelTrait) == 0) 50015f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony for (j=0; j < 4; j++) 50025f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony { 50035f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony alpha[j]=1.0; 50045f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony pixels[j]=(MagickRealType) p[j*GetPixelChannels(source)+channel]; 50055f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony } 50065f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony else 50075f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony for (j=0; j < 4; j++) 50085f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony { 50095f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony alpha[j]=QuantumScale*GetPixelAlpha(source,p+j* 50105f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony GetPixelChannels(source)); 50115f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony pixels[j]=alpha[j]*p[j*GetPixelChannels(source)+channel]; 50125f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony } 5013fb12237dd6e4d4d8b92d879661153062eeca0572cristy gamma=1.0; /* number of pixels blended together (its variable) */ 5014fb12237dd6e4d4d8b92d879661153062eeca0572cristy for (j=0; j <= 1L; j++) 5015fb12237dd6e4d4d8b92d879661153062eeca0572cristy { 5016fb12237dd6e4d4d8b92d879661153062eeca0572cristy if ((y-y_offset) >= 0.75) 5017fb12237dd6e4d4d8b92d879661153062eeca0572cristy { 5018fb12237dd6e4d4d8b92d879661153062eeca0572cristy alpha[j]=alpha[j+2]; /* take right pixels */ 5019fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[j]=pixels[j+2]; 5020fb12237dd6e4d4d8b92d879661153062eeca0572cristy } 5021fb12237dd6e4d4d8b92d879661153062eeca0572cristy else 5022fb12237dd6e4d4d8b92d879661153062eeca0572cristy if ((y-y_offset) > 0.25) 5023fb12237dd6e4d4d8b92d879661153062eeca0572cristy { 502458ee5018960b42b80b54398eacabe9ae5da89149cristy gamma=2.0; /* blend both pixels in row */ 5025fb12237dd6e4d4d8b92d879661153062eeca0572cristy alpha[j]+=alpha[j+2]; /* add up alpha weights */ 5026fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[j]+=pixels[j+2]; 5027fb12237dd6e4d4d8b92d879661153062eeca0572cristy } 50285f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony } 5029fb12237dd6e4d4d8b92d879661153062eeca0572cristy if ((x-x_offset) >= 0.75) 5030fb12237dd6e4d4d8b92d879661153062eeca0572cristy { 5031fb12237dd6e4d4d8b92d879661153062eeca0572cristy alpha[0]=alpha[1]; /* take bottom row blend */ 5032fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[0]=pixels[1]; 5033fb12237dd6e4d4d8b92d879661153062eeca0572cristy } 5034fb12237dd6e4d4d8b92d879661153062eeca0572cristy else 5035fb12237dd6e4d4d8b92d879661153062eeca0572cristy if ((x-x_offset) > 0.25) 5036fb12237dd6e4d4d8b92d879661153062eeca0572cristy { 5037fb12237dd6e4d4d8b92d879661153062eeca0572cristy gamma*=2.0; /* blend both rows */ 5038fb12237dd6e4d4d8b92d879661153062eeca0572cristy alpha[0]+=alpha[1]; /* add up alpha weights */ 5039fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[0]+=pixels[1]; 5040fb12237dd6e4d4d8b92d879661153062eeca0572cristy } 50415f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony if ((traits & BlendPixelTrait) == 0) 504258ee5018960b42b80b54398eacabe9ae5da89149cristy gamma=PerceptibleReciprocal(alpha[0]); /* (color) 1/alpha_weights */ 50435f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony else 504458ee5018960b42b80b54398eacabe9ae5da89149cristy gamma=PerceptibleReciprocal(gamma); /* (alpha) 1/number_of_pixels */ 50455f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony SetPixelChannel(destination,channel,ClampToQuantum(gamma*pixels[0]), 5046fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel); 50475f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony } 50485f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony break; 50495f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony } 5050cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony case CatromInterpolatePixel: 50515c4e2586d27d4299a742d170d41105de1689aa46cristy { 5052a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy double 5053380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy cx[4], 5054380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy cy[4]; 50555c4e2586d27d4299a742d170d41105de1689aa46cristy 50565c4e2586d27d4299a742d170d41105de1689aa46cristy p=GetCacheViewVirtualPixels(source_view,x_offset-1,y_offset-1,4,4, 50575c4e2586d27d4299a742d170d41105de1689aa46cristy exception); 50585c4e2586d27d4299a742d170d41105de1689aa46cristy if (p == (const Quantum *) NULL) 50595c4e2586d27d4299a742d170d41105de1689aa46cristy { 50605c4e2586d27d4299a742d170d41105de1689aa46cristy status=MagickFalse; 50615c4e2586d27d4299a742d170d41105de1689aa46cristy break; 50625c4e2586d27d4299a742d170d41105de1689aa46cristy } 506350e64b85215ce366ca50af1ba16326c784221f92cristy for (i=0; i < (ssize_t) GetPixelChannels(source); i++) 50645c4e2586d27d4299a742d170d41105de1689aa46cristy { 50655c4e2586d27d4299a742d170d41105de1689aa46cristy register ssize_t 50665c4e2586d27d4299a742d170d41105de1689aa46cristy j; 50675c4e2586d27d4299a742d170d41105de1689aa46cristy 50685a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelChannel channel=GetPixelChannelChannel(source,i); 50695a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelTrait traits=GetPixelChannelTraits(source,channel); 50705a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelTrait destination_traits=GetPixelChannelTraits(destination, 50715a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy channel); 50725c4e2586d27d4299a742d170d41105de1689aa46cristy if ((traits == UndefinedPixelTrait) || 50735c4e2586d27d4299a742d170d41105de1689aa46cristy (destination_traits == UndefinedPixelTrait)) 50745c4e2586d27d4299a742d170d41105de1689aa46cristy continue; 50755c4e2586d27d4299a742d170d41105de1689aa46cristy if ((traits & BlendPixelTrait) == 0) 50765c4e2586d27d4299a742d170d41105de1689aa46cristy for (j=0; j < 16; j++) 50775c4e2586d27d4299a742d170d41105de1689aa46cristy { 50785c4e2586d27d4299a742d170d41105de1689aa46cristy alpha[j]=1.0; 5079a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixels[j]=(double) p[j*GetPixelChannels(source)+i]; 50805c4e2586d27d4299a742d170d41105de1689aa46cristy } 50815c4e2586d27d4299a742d170d41105de1689aa46cristy else 50825c4e2586d27d4299a742d170d41105de1689aa46cristy for (j=0; j < 16; j++) 50835c4e2586d27d4299a742d170d41105de1689aa46cristy { 50845c4e2586d27d4299a742d170d41105de1689aa46cristy alpha[j]=QuantumScale*GetPixelAlpha(source,p+j* 50855c4e2586d27d4299a742d170d41105de1689aa46cristy GetPixelChannels(source)); 50865c4e2586d27d4299a742d170d41105de1689aa46cristy pixels[j]=alpha[j]*p[j*GetPixelChannels(source)+i]; 50875c4e2586d27d4299a742d170d41105de1689aa46cristy } 5088a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy CatromWeights((double) (x-x_offset),&cx); 5089a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy CatromWeights((double) (y-y_offset),&cy); 5090a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy gamma=((traits & BlendPixelTrait) ? (double) (1.0) : 50913e3ec3afbb0782697f201cbe30a56794c10dc7efcristy PerceptibleReciprocal(cy[0]*(cx[0]*alpha[0]+cx[1]*alpha[1]+cx[2]* 5092d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas alpha[2]+cx[3]*alpha[3])+cy[1]*(cx[0]*alpha[4]+cx[1]*alpha[5]+cx[2]* 5093d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas alpha[6]+cx[3]*alpha[7])+cy[2]*(cx[0]*alpha[8]+cx[1]*alpha[9]+cx[2]* 5094d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas alpha[10]+cx[3]*alpha[11])+cy[3]*(cx[0]*alpha[12]+cx[1]*alpha[13]+ 5095d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas cx[2]*alpha[14]+cx[3]*alpha[15]))); 5096380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy SetPixelChannel(destination,channel,ClampToQuantum(gamma*(cy[0]*(cx[0]* 5097380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy pixels[0]+cx[1]*pixels[1]+cx[2]*pixels[2]+cx[3]*pixels[3])+cy[1]* 5098380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy (cx[0]*pixels[4]+cx[1]*pixels[5]+cx[2]*pixels[6]+cx[3]*pixels[7])+ 5099380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy cy[2]*(cx[0]*pixels[8]+cx[1]*pixels[9]+cx[2]*pixels[10]+cx[3]* 5100d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[11])+cy[3]*(cx[0]*pixels[12]+cx[1]*pixels[13]+cx[2]* 5101d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[14]+cx[3]*pixels[15]))),pixel); 51025c4e2586d27d4299a742d170d41105de1689aa46cristy } 51035c4e2586d27d4299a742d170d41105de1689aa46cristy break; 51045c4e2586d27d4299a742d170d41105de1689aa46cristy } 51055c4e2586d27d4299a742d170d41105de1689aa46cristy case IntegerInterpolatePixel: 51065c4e2586d27d4299a742d170d41105de1689aa46cristy { 51075c4e2586d27d4299a742d170d41105de1689aa46cristy p=GetCacheViewVirtualPixels(source_view,x_offset,y_offset,1,1,exception); 51085c4e2586d27d4299a742d170d41105de1689aa46cristy if (p == (const Quantum *) NULL) 51095c4e2586d27d4299a742d170d41105de1689aa46cristy { 51105c4e2586d27d4299a742d170d41105de1689aa46cristy status=MagickFalse; 51115c4e2586d27d4299a742d170d41105de1689aa46cristy break; 51125c4e2586d27d4299a742d170d41105de1689aa46cristy } 511350e64b85215ce366ca50af1ba16326c784221f92cristy for (i=0; i < (ssize_t) GetPixelChannels(source); i++) 51145c4e2586d27d4299a742d170d41105de1689aa46cristy { 51155a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelChannel channel=GetPixelChannelChannel(source,i); 51165a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelTrait traits=GetPixelChannelTraits(source,channel); 51175a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelTrait destination_traits=GetPixelChannelTraits(destination, 51185a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy channel); 51195c4e2586d27d4299a742d170d41105de1689aa46cristy if ((traits == UndefinedPixelTrait) || 51205c4e2586d27d4299a742d170d41105de1689aa46cristy (destination_traits == UndefinedPixelTrait)) 51215c4e2586d27d4299a742d170d41105de1689aa46cristy continue; 51224a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy SetPixelChannel(destination,channel,p[i],pixel); 51235c4e2586d27d4299a742d170d41105de1689aa46cristy } 51245c4e2586d27d4299a742d170d41105de1689aa46cristy break; 51255c4e2586d27d4299a742d170d41105de1689aa46cristy } 5126cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony case NearestInterpolatePixel: 51275c4e2586d27d4299a742d170d41105de1689aa46cristy { 5128cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony x_offset=(ssize_t) floor(x+0.5); 5129cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony y_offset=(ssize_t) floor(y+0.5); 5130cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony p=GetCacheViewVirtualPixels(source_view,x_offset,y_offset,1,1,exception); 51315c4e2586d27d4299a742d170d41105de1689aa46cristy if (p == (const Quantum *) NULL) 51325c4e2586d27d4299a742d170d41105de1689aa46cristy { 51335c4e2586d27d4299a742d170d41105de1689aa46cristy status=MagickFalse; 51345c4e2586d27d4299a742d170d41105de1689aa46cristy break; 51355c4e2586d27d4299a742d170d41105de1689aa46cristy } 513650e64b85215ce366ca50af1ba16326c784221f92cristy for (i=0; i < (ssize_t) GetPixelChannels(source); i++) 51375c4e2586d27d4299a742d170d41105de1689aa46cristy { 51385a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelChannel channel=GetPixelChannelChannel(source,i); 51395a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelTrait traits=GetPixelChannelTraits(source,channel); 51405a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelTrait destination_traits=GetPixelChannelTraits(destination, 51415a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy channel); 51425c4e2586d27d4299a742d170d41105de1689aa46cristy if ((traits == UndefinedPixelTrait) || 51435c4e2586d27d4299a742d170d41105de1689aa46cristy (destination_traits == UndefinedPixelTrait)) 51445c4e2586d27d4299a742d170d41105de1689aa46cristy continue; 51454a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy SetPixelChannel(destination,channel,p[i],pixel); 51465c4e2586d27d4299a742d170d41105de1689aa46cristy } 51475c4e2586d27d4299a742d170d41105de1689aa46cristy break; 51485c4e2586d27d4299a742d170d41105de1689aa46cristy } 51495c4e2586d27d4299a742d170d41105de1689aa46cristy case MeshInterpolatePixel: 51505c4e2586d27d4299a742d170d41105de1689aa46cristy { 51515c4e2586d27d4299a742d170d41105de1689aa46cristy p=GetCacheViewVirtualPixels(source_view,x_offset,y_offset,2,2,exception); 51525c4e2586d27d4299a742d170d41105de1689aa46cristy if (p == (const Quantum *) NULL) 51535c4e2586d27d4299a742d170d41105de1689aa46cristy { 51545c4e2586d27d4299a742d170d41105de1689aa46cristy status=MagickFalse; 51555c4e2586d27d4299a742d170d41105de1689aa46cristy break; 51565c4e2586d27d4299a742d170d41105de1689aa46cristy } 515750e64b85215ce366ca50af1ba16326c784221f92cristy for (i=0; i < (ssize_t) GetPixelChannels(source); i++) 51585c4e2586d27d4299a742d170d41105de1689aa46cristy { 51595c4e2586d27d4299a742d170d41105de1689aa46cristy PointInfo 51605c4e2586d27d4299a742d170d41105de1689aa46cristy delta, 51615c4e2586d27d4299a742d170d41105de1689aa46cristy luminance; 51625c4e2586d27d4299a742d170d41105de1689aa46cristy 51635a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelChannel channel=GetPixelChannelChannel(source,i); 51645a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelTrait traits=GetPixelChannelTraits(source,channel); 51655a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelTrait destination_traits=GetPixelChannelTraits(destination, 51665a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy channel); 51675c4e2586d27d4299a742d170d41105de1689aa46cristy if ((traits == UndefinedPixelTrait) || 51685c4e2586d27d4299a742d170d41105de1689aa46cristy (destination_traits == UndefinedPixelTrait)) 51695c4e2586d27d4299a742d170d41105de1689aa46cristy continue; 5170a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixels[0]=(double) p[i]; 5171a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixels[1]=(double) p[GetPixelChannels(source)+i]; 5172a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixels[2]=(double) p[2*GetPixelChannels(source)+i]; 5173a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixels[3]=(double) p[3*GetPixelChannels(source)+i]; 51741861c90c5c8c4ceb56885dd86377412aae0f4526cristy if ((traits & BlendPixelTrait) == 0) 51751861c90c5c8c4ceb56885dd86377412aae0f4526cristy { 51761861c90c5c8c4ceb56885dd86377412aae0f4526cristy alpha[0]=1.0; 51771861c90c5c8c4ceb56885dd86377412aae0f4526cristy alpha[1]=1.0; 51781861c90c5c8c4ceb56885dd86377412aae0f4526cristy alpha[2]=1.0; 51791861c90c5c8c4ceb56885dd86377412aae0f4526cristy alpha[3]=1.0; 51801861c90c5c8c4ceb56885dd86377412aae0f4526cristy } 51811861c90c5c8c4ceb56885dd86377412aae0f4526cristy else 51821861c90c5c8c4ceb56885dd86377412aae0f4526cristy { 51831861c90c5c8c4ceb56885dd86377412aae0f4526cristy alpha[0]=QuantumScale*GetPixelAlpha(source,p); 51841861c90c5c8c4ceb56885dd86377412aae0f4526cristy alpha[1]=QuantumScale*GetPixelAlpha(source,p+ 51851861c90c5c8c4ceb56885dd86377412aae0f4526cristy GetPixelChannels(source)); 51861861c90c5c8c4ceb56885dd86377412aae0f4526cristy alpha[2]=QuantumScale*GetPixelAlpha(source,p+2* 51871861c90c5c8c4ceb56885dd86377412aae0f4526cristy GetPixelChannels(source)); 51881861c90c5c8c4ceb56885dd86377412aae0f4526cristy alpha[3]=QuantumScale*GetPixelAlpha(source,p+3* 51891861c90c5c8c4ceb56885dd86377412aae0f4526cristy GetPixelChannels(source)); 51901861c90c5c8c4ceb56885dd86377412aae0f4526cristy } 51911861c90c5c8c4ceb56885dd86377412aae0f4526cristy delta.x=x-x_offset; 51921861c90c5c8c4ceb56885dd86377412aae0f4526cristy delta.y=y-y_offset; 5193fb12237dd6e4d4d8b92d879661153062eeca0572cristy luminance.x=fabs((double) (GetPixelLuminance(source,p)- 5194fb12237dd6e4d4d8b92d879661153062eeca0572cristy GetPixelLuminance(source,p+3*GetPixelChannels(source)))); 5195fb12237dd6e4d4d8b92d879661153062eeca0572cristy luminance.y=fabs((double) (GetPixelLuminance(source,p+ 5196fb12237dd6e4d4d8b92d879661153062eeca0572cristy GetPixelChannels(source))-GetPixelLuminance(source,p+2* 5197fb12237dd6e4d4d8b92d879661153062eeca0572cristy GetPixelChannels(source)))); 5198cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony if (luminance.x < luminance.y) 51991861c90c5c8c4ceb56885dd86377412aae0f4526cristy { 52001861c90c5c8c4ceb56885dd86377412aae0f4526cristy /* 52011861c90c5c8c4ceb56885dd86377412aae0f4526cristy Diagonal 0-3 NW-SE. 52021861c90c5c8c4ceb56885dd86377412aae0f4526cristy */ 52031861c90c5c8c4ceb56885dd86377412aae0f4526cristy if (delta.x <= delta.y) 52041861c90c5c8c4ceb56885dd86377412aae0f4526cristy { 52051861c90c5c8c4ceb56885dd86377412aae0f4526cristy /* 52061861c90c5c8c4ceb56885dd86377412aae0f4526cristy Bottom-left triangle (pixel: 2, diagonal: 0-3). 52071861c90c5c8c4ceb56885dd86377412aae0f4526cristy */ 52081861c90c5c8c4ceb56885dd86377412aae0f4526cristy delta.y=1.0-delta.y; 52091861c90c5c8c4ceb56885dd86377412aae0f4526cristy gamma=MeshInterpolate(&delta,alpha[2],alpha[3],alpha[0]); 52103e3ec3afbb0782697f201cbe30a56794c10dc7efcristy gamma=PerceptibleReciprocal(gamma); 52114a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy SetPixelChannel(destination,channel,ClampToQuantum(gamma* 52124a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy MeshInterpolate(&delta,pixels[2],pixels[3],pixels[0])),pixel); 52131861c90c5c8c4ceb56885dd86377412aae0f4526cristy } 52141861c90c5c8c4ceb56885dd86377412aae0f4526cristy else 52151861c90c5c8c4ceb56885dd86377412aae0f4526cristy { 52161861c90c5c8c4ceb56885dd86377412aae0f4526cristy /* 52171861c90c5c8c4ceb56885dd86377412aae0f4526cristy Top-right triangle (pixel: 1, diagonal: 0-3). 52181861c90c5c8c4ceb56885dd86377412aae0f4526cristy */ 52191861c90c5c8c4ceb56885dd86377412aae0f4526cristy delta.x=1.0-delta.x; 52201861c90c5c8c4ceb56885dd86377412aae0f4526cristy gamma=MeshInterpolate(&delta,alpha[1],alpha[0],alpha[3]); 52213e3ec3afbb0782697f201cbe30a56794c10dc7efcristy gamma=PerceptibleReciprocal(gamma); 52224a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy SetPixelChannel(destination,channel,ClampToQuantum(gamma* 52234a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy MeshInterpolate(&delta,pixels[1],pixels[0],pixels[3])),pixel); 52241861c90c5c8c4ceb56885dd86377412aae0f4526cristy } 52251861c90c5c8c4ceb56885dd86377412aae0f4526cristy } 52261861c90c5c8c4ceb56885dd86377412aae0f4526cristy else 52271861c90c5c8c4ceb56885dd86377412aae0f4526cristy { 52281861c90c5c8c4ceb56885dd86377412aae0f4526cristy /* 52291861c90c5c8c4ceb56885dd86377412aae0f4526cristy Diagonal 1-2 NE-SW. 52301861c90c5c8c4ceb56885dd86377412aae0f4526cristy */ 52311861c90c5c8c4ceb56885dd86377412aae0f4526cristy if (delta.x <= (1.0-delta.y)) 52321861c90c5c8c4ceb56885dd86377412aae0f4526cristy { 52331861c90c5c8c4ceb56885dd86377412aae0f4526cristy /* 52341861c90c5c8c4ceb56885dd86377412aae0f4526cristy Top-left triangle (pixel: 0, diagonal: 1-2). 52351861c90c5c8c4ceb56885dd86377412aae0f4526cristy */ 52361861c90c5c8c4ceb56885dd86377412aae0f4526cristy gamma=MeshInterpolate(&delta,alpha[0],alpha[1],alpha[2]); 52373e3ec3afbb0782697f201cbe30a56794c10dc7efcristy gamma=PerceptibleReciprocal(gamma); 52384a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy SetPixelChannel(destination,channel,ClampToQuantum(gamma* 52394a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy MeshInterpolate(&delta,pixels[0],pixels[1],pixels[2])),pixel); 52401861c90c5c8c4ceb56885dd86377412aae0f4526cristy } 52411861c90c5c8c4ceb56885dd86377412aae0f4526cristy else 52421861c90c5c8c4ceb56885dd86377412aae0f4526cristy { 52431861c90c5c8c4ceb56885dd86377412aae0f4526cristy /* 52441861c90c5c8c4ceb56885dd86377412aae0f4526cristy Bottom-right triangle (pixel: 3, diagonal: 1-2). 52451861c90c5c8c4ceb56885dd86377412aae0f4526cristy */ 52461861c90c5c8c4ceb56885dd86377412aae0f4526cristy delta.x=1.0-delta.x; 52471861c90c5c8c4ceb56885dd86377412aae0f4526cristy delta.y=1.0-delta.y; 52481861c90c5c8c4ceb56885dd86377412aae0f4526cristy gamma=MeshInterpolate(&delta,alpha[3],alpha[2],alpha[1]); 52493e3ec3afbb0782697f201cbe30a56794c10dc7efcristy gamma=PerceptibleReciprocal(gamma); 52504a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy SetPixelChannel(destination,channel,ClampToQuantum(gamma* 52514a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy MeshInterpolate(&delta,pixels[3],pixels[2],pixels[1])),pixel); 52521861c90c5c8c4ceb56885dd86377412aae0f4526cristy } 52531861c90c5c8c4ceb56885dd86377412aae0f4526cristy } 52545c4e2586d27d4299a742d170d41105de1689aa46cristy } 52555c4e2586d27d4299a742d170d41105de1689aa46cristy break; 52565c4e2586d27d4299a742d170d41105de1689aa46cristy } 52575c4e2586d27d4299a742d170d41105de1689aa46cristy case SplineInterpolatePixel: 52585c4e2586d27d4299a742d170d41105de1689aa46cristy { 5259a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy double 5260d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas cx[4], 5261d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas cy[4]; 5262d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas 52635c4e2586d27d4299a742d170d41105de1689aa46cristy p=GetCacheViewVirtualPixels(source_view,x_offset-1,y_offset-1,4,4, 52645c4e2586d27d4299a742d170d41105de1689aa46cristy exception); 52655c4e2586d27d4299a742d170d41105de1689aa46cristy if (p == (const Quantum *) NULL) 52665c4e2586d27d4299a742d170d41105de1689aa46cristy { 52675c4e2586d27d4299a742d170d41105de1689aa46cristy status=MagickFalse; 52685c4e2586d27d4299a742d170d41105de1689aa46cristy break; 52695c4e2586d27d4299a742d170d41105de1689aa46cristy } 527050e64b85215ce366ca50af1ba16326c784221f92cristy for (i=0; i < (ssize_t) GetPixelChannels(source); i++) 52715c4e2586d27d4299a742d170d41105de1689aa46cristy { 52725c4e2586d27d4299a742d170d41105de1689aa46cristy register ssize_t 52735c4e2586d27d4299a742d170d41105de1689aa46cristy j; 52745c4e2586d27d4299a742d170d41105de1689aa46cristy 52755a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelChannel channel=GetPixelChannelChannel(source,i); 52765a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelTrait traits=GetPixelChannelTraits(source,channel); 52775a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelTrait destination_traits=GetPixelChannelTraits(destination, 52785a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy channel); 52795c4e2586d27d4299a742d170d41105de1689aa46cristy if ((traits == UndefinedPixelTrait) || 52805c4e2586d27d4299a742d170d41105de1689aa46cristy (destination_traits == UndefinedPixelTrait)) 52815c4e2586d27d4299a742d170d41105de1689aa46cristy continue; 52825c4e2586d27d4299a742d170d41105de1689aa46cristy if ((traits & BlendPixelTrait) == 0) 52835c4e2586d27d4299a742d170d41105de1689aa46cristy for (j=0; j < 16; j++) 52845c4e2586d27d4299a742d170d41105de1689aa46cristy { 52855c4e2586d27d4299a742d170d41105de1689aa46cristy alpha[j]=1.0; 5286a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixels[j]=(double) p[j*GetPixelChannels(source)+i]; 52875c4e2586d27d4299a742d170d41105de1689aa46cristy } 52885c4e2586d27d4299a742d170d41105de1689aa46cristy else 52895c4e2586d27d4299a742d170d41105de1689aa46cristy for (j=0; j < 16; j++) 52905c4e2586d27d4299a742d170d41105de1689aa46cristy { 52915c4e2586d27d4299a742d170d41105de1689aa46cristy alpha[j]=QuantumScale*GetPixelAlpha(source,p+j* 52925c4e2586d27d4299a742d170d41105de1689aa46cristy GetPixelChannels(source)); 52935c4e2586d27d4299a742d170d41105de1689aa46cristy pixels[j]=alpha[j]*p[j*GetPixelChannels(source)+i]; 52945c4e2586d27d4299a742d170d41105de1689aa46cristy } 5295a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy SplineWeights((double) (x-x_offset),&cx); 5296a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy SplineWeights((double) (y-y_offset),&cy); 5297a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy gamma=((traits & BlendPixelTrait) ? (double) (1.0) : 52983e3ec3afbb0782697f201cbe30a56794c10dc7efcristy PerceptibleReciprocal(cy[0]*(cx[0]*alpha[0]+cx[1]*alpha[1]+cx[2]* 5299d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas alpha[2]+cx[3]*alpha[3])+cy[1]*(cx[0]*alpha[4]+cx[1]*alpha[5]+cx[2]* 5300d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas alpha[6]+cx[3]*alpha[7])+cy[2]*(cx[0]*alpha[8]+cx[1]*alpha[9]+cx[2]* 5301d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas alpha[10]+cx[3]*alpha[11])+cy[3]*(cx[0]*alpha[12]+cx[1]*alpha[13]+ 5302d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas cx[2]*alpha[14]+cx[3]*alpha[15]))); 5303d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas SetPixelChannel(destination,channel,ClampToQuantum(gamma*(cy[0]*(cx[0]* 5304d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[0]+cx[1]*pixels[1]+cx[2]*pixels[2]+cx[3]*pixels[3])+cy[1]* 5305d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas (cx[0]*pixels[4]+cx[1]*pixels[5]+cx[2]*pixels[6]+cx[3]*pixels[7])+ 5306d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas cy[2]*(cx[0]*pixels[8]+cx[1]*pixels[9]+cx[2]*pixels[10]+cx[3]* 5307d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[11])+cy[3]*(cx[0]*pixels[12]+cx[1]*pixels[13]+cx[2]* 5308d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[14]+cx[3]*pixels[15]))),pixel); 53095c4e2586d27d4299a742d170d41105de1689aa46cristy } 53105c4e2586d27d4299a742d170d41105de1689aa46cristy break; 53115c4e2586d27d4299a742d170d41105de1689aa46cristy } 53125c4e2586d27d4299a742d170d41105de1689aa46cristy } 53135c4e2586d27d4299a742d170d41105de1689aa46cristy return(status); 53145c4e2586d27d4299a742d170d41105de1689aa46cristy} 53155c4e2586d27d4299a742d170d41105de1689aa46cristy 53165c4e2586d27d4299a742d170d41105de1689aa46cristy/* 53175c4e2586d27d4299a742d170d41105de1689aa46cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 53185c4e2586d27d4299a742d170d41105de1689aa46cristy% % 53195c4e2586d27d4299a742d170d41105de1689aa46cristy% % 53205c4e2586d27d4299a742d170d41105de1689aa46cristy% % 53219075cdb062fda00666ab37b0ba7df4b8cc2e8eaccristy% I n t e r p o l a t e P i x e l I n f o % 5322d76c51ed30cf4084f4434ba08925d16001d1e340cristy% % 5323d76c51ed30cf4084f4434ba08925d16001d1e340cristy% % 5324d76c51ed30cf4084f4434ba08925d16001d1e340cristy% % 5325d76c51ed30cf4084f4434ba08925d16001d1e340cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5326d76c51ed30cf4084f4434ba08925d16001d1e340cristy% 5327884f600898ca6935a7981b4d56bf3d2c4ec17011cristy% InterpolatePixelInfo() applies a pixel interpolation method between a 5328884f600898ca6935a7981b4d56bf3d2c4ec17011cristy% floating point coordinate and the pixels surrounding that coordinate. No 5329884f600898ca6935a7981b4d56bf3d2c4ec17011cristy% pixel area resampling, or scaling of the result is performed. 5330d76c51ed30cf4084f4434ba08925d16001d1e340cristy% 5331cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony% Interpolation is restricted to just RGBKA channels. 5332cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony% 53334c08aed51c5899665ade97263692328eea4af106cristy% The format of the InterpolatePixelInfo method is: 5334d76c51ed30cf4084f4434ba08925d16001d1e340cristy% 53354c08aed51c5899665ade97263692328eea4af106cristy% MagickBooleanType InterpolatePixelInfo(const Image *image, 53365c4e2586d27d4299a742d170d41105de1689aa46cristy% const CacheView *image_view,const PixelInterpolateMethod method, 53374c08aed51c5899665ade97263692328eea4af106cristy% const double x,const double y,PixelInfo *pixel, 5338d76c51ed30cf4084f4434ba08925d16001d1e340cristy% ExceptionInfo *exception) 5339d76c51ed30cf4084f4434ba08925d16001d1e340cristy% 5340d76c51ed30cf4084f4434ba08925d16001d1e340cristy% A description of each parameter follows: 5341d76c51ed30cf4084f4434ba08925d16001d1e340cristy% 5342d76c51ed30cf4084f4434ba08925d16001d1e340cristy% o image: the image. 5343d76c51ed30cf4084f4434ba08925d16001d1e340cristy% 5344d76c51ed30cf4084f4434ba08925d16001d1e340cristy% o image_view: the image view. 5345d76c51ed30cf4084f4434ba08925d16001d1e340cristy% 5346d76c51ed30cf4084f4434ba08925d16001d1e340cristy% o method: the pixel color interpolation method. 5347d76c51ed30cf4084f4434ba08925d16001d1e340cristy% 5348d76c51ed30cf4084f4434ba08925d16001d1e340cristy% o x,y: A double representing the current (x,y) position of the pixel. 5349d76c51ed30cf4084f4434ba08925d16001d1e340cristy% 5350d76c51ed30cf4084f4434ba08925d16001d1e340cristy% o pixel: return the interpolated pixel here. 5351d76c51ed30cf4084f4434ba08925d16001d1e340cristy% 5352d76c51ed30cf4084f4434ba08925d16001d1e340cristy% o exception: return any errors or warnings in this structure. 5353d76c51ed30cf4084f4434ba08925d16001d1e340cristy% 5354d76c51ed30cf4084f4434ba08925d16001d1e340cristy*/ 5355d76c51ed30cf4084f4434ba08925d16001d1e340cristy 53564c08aed51c5899665ade97263692328eea4af106cristystatic inline void AlphaBlendPixelInfo(const Image *image, 5357a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy const Quantum *pixel,PixelInfo *pixel_info,double *alpha) 5358d76c51ed30cf4084f4434ba08925d16001d1e340cristy{ 53598a46d827a124555f0c48fb2368ec1bba8e079ab6cristy if (image->alpha_trait != BlendPixelTrait) 5360241310d359ef6893f4d0c1e43eeb39f34991fd2acristy { 5361241310d359ef6893f4d0c1e43eeb39f34991fd2acristy *alpha=1.0; 5362a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixel_info->red=(double) GetPixelRed(image,pixel); 5363a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixel_info->green=(double) GetPixelGreen(image,pixel); 5364a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixel_info->blue=(double) GetPixelBlue(image,pixel); 53654c08aed51c5899665ade97263692328eea4af106cristy pixel_info->black=0.0; 53664c08aed51c5899665ade97263692328eea4af106cristy if (image->colorspace == CMYKColorspace) 5367a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixel_info->black=(double) GetPixelBlack(image,pixel); 5368a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixel_info->alpha=(double) GetPixelAlpha(image,pixel); 5369241310d359ef6893f4d0c1e43eeb39f34991fd2acristy return; 5370241310d359ef6893f4d0c1e43eeb39f34991fd2acristy } 53714c08aed51c5899665ade97263692328eea4af106cristy *alpha=QuantumScale*GetPixelAlpha(image,pixel); 53724c08aed51c5899665ade97263692328eea4af106cristy pixel_info->red=(*alpha*GetPixelRed(image,pixel)); 53734c08aed51c5899665ade97263692328eea4af106cristy pixel_info->green=(*alpha*GetPixelGreen(image,pixel)); 53744c08aed51c5899665ade97263692328eea4af106cristy pixel_info->blue=(*alpha*GetPixelBlue(image,pixel)); 53754c08aed51c5899665ade97263692328eea4af106cristy pixel_info->black=0.0; 53764c08aed51c5899665ade97263692328eea4af106cristy if (image->colorspace == CMYKColorspace) 53774c08aed51c5899665ade97263692328eea4af106cristy pixel_info->black=(*alpha*GetPixelBlack(image,pixel)); 5378a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixel_info->alpha=(double) GetPixelAlpha(image,pixel); 5379d76c51ed30cf4084f4434ba08925d16001d1e340cristy} 5380d76c51ed30cf4084f4434ba08925d16001d1e340cristy 53814c08aed51c5899665ade97263692328eea4af106cristyMagickExport MagickBooleanType InterpolatePixelInfo(const Image *image, 53825c4e2586d27d4299a742d170d41105de1689aa46cristy const CacheView *image_view,const PixelInterpolateMethod method, 53834c08aed51c5899665ade97263692328eea4af106cristy const double x,const double y,PixelInfo *pixel,ExceptionInfo *exception) 5384d76c51ed30cf4084f4434ba08925d16001d1e340cristy{ 5385d76c51ed30cf4084f4434ba08925d16001d1e340cristy MagickBooleanType 5386d76c51ed30cf4084f4434ba08925d16001d1e340cristy status; 5387d76c51ed30cf4084f4434ba08925d16001d1e340cristy 5388a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy double 538942587c577d5b808de94915f2388b88b05c3d43a3cristy alpha[16], 539042587c577d5b808de94915f2388b88b05c3d43a3cristy gamma; 539142587c577d5b808de94915f2388b88b05c3d43a3cristy 5392865d58d60e5fc755d47771eab37ce5159531629dcristy PixelInfo 5393865d58d60e5fc755d47771eab37ce5159531629dcristy pixels[16]; 5394865d58d60e5fc755d47771eab37ce5159531629dcristy 53954c08aed51c5899665ade97263692328eea4af106cristy register const Quantum 5396d76c51ed30cf4084f4434ba08925d16001d1e340cristy *p; 5397d76c51ed30cf4084f4434ba08925d16001d1e340cristy 539850e64b85215ce366ca50af1ba16326c784221f92cristy register ssize_t 5399d76c51ed30cf4084f4434ba08925d16001d1e340cristy i; 5400d76c51ed30cf4084f4434ba08925d16001d1e340cristy 540142587c577d5b808de94915f2388b88b05c3d43a3cristy ssize_t 540242587c577d5b808de94915f2388b88b05c3d43a3cristy x_offset, 540342587c577d5b808de94915f2388b88b05c3d43a3cristy y_offset; 540442587c577d5b808de94915f2388b88b05c3d43a3cristy 5405cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony PixelInterpolateMethod 5406cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony interpolate; 5407cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony 5408d76c51ed30cf4084f4434ba08925d16001d1e340cristy assert(image != (Image *) NULL); 5409d76c51ed30cf4084f4434ba08925d16001d1e340cristy assert(image->signature == MagickSignature); 5410d76c51ed30cf4084f4434ba08925d16001d1e340cristy assert(image_view != (CacheView *) NULL); 5411d76c51ed30cf4084f4434ba08925d16001d1e340cristy status=MagickTrue; 541242587c577d5b808de94915f2388b88b05c3d43a3cristy x_offset=(ssize_t) floor(x); 541342587c577d5b808de94915f2388b88b05c3d43a3cristy y_offset=(ssize_t) floor(y); 5414cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony interpolate = method; 5415cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony if ( interpolate == UndefinedInterpolatePixel ) 5416cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony interpolate = image->interpolate; 5417cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony switch (interpolate) 5418d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 541958ee5018960b42b80b54398eacabe9ae5da89149cristy case AverageInterpolatePixel: /* nearest 4 neighbours */ 542058ee5018960b42b80b54398eacabe9ae5da89149cristy case Average9InterpolatePixel: /* nearest 9 neighbours */ 542158ee5018960b42b80b54398eacabe9ae5da89149cristy case Average16InterpolatePixel: /* nearest 16 neighbours */ 5422d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5423fb12237dd6e4d4d8b92d879661153062eeca0572cristy ssize_t 5424fb12237dd6e4d4d8b92d879661153062eeca0572cristy count; 5425cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony 5426fb12237dd6e4d4d8b92d879661153062eeca0572cristy count=2; /* size of the area to average - default nearest 4 */ 5427cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony if (interpolate == Average9InterpolatePixel) 5428cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 5429cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony count=3; 5430cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony x_offset=(ssize_t) (floor(x+0.5)-1); 5431cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony y_offset=(ssize_t) (floor(y+0.5)-1); 5432cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 5433cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony else if (interpolate == Average16InterpolatePixel) 5434cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 5435cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony count=4; 5436cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony x_offset--; 5437cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony y_offset--; 5438cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 5439021216a8b35ea91ef1f12713ed41da843bbaee7bcristy p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,(size_t) count, 5440021216a8b35ea91ef1f12713ed41da843bbaee7bcristy (size_t) count,exception); 54414c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 5442d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5443d76c51ed30cf4084f4434ba08925d16001d1e340cristy status=MagickFalse; 5444d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5445d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5446241310d359ef6893f4d0c1e43eeb39f34991fd2acristy pixel->red=0.0; 5447241310d359ef6893f4d0c1e43eeb39f34991fd2acristy pixel->green=0.0; 5448241310d359ef6893f4d0c1e43eeb39f34991fd2acristy pixel->blue=0.0; 54494c08aed51c5899665ade97263692328eea4af106cristy pixel->black=0.0; 5450865d58d60e5fc755d47771eab37ce5159531629dcristy pixel->alpha=0.0; 545158ee5018960b42b80b54398eacabe9ae5da89149cristy count*=count; /* number of pixels - square of size */ 545250e64b85215ce366ca50af1ba16326c784221f92cristy for (i=0; i < (ssize_t) count; i++) 5453cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 5454cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony AlphaBlendPixelInfo(image,p,pixels,alpha); 54553e3ec3afbb0782697f201cbe30a56794c10dc7efcristy gamma=PerceptibleReciprocal(alpha[0]); 5456fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->red+=gamma*pixels[0].red; 5457fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->green+=gamma*pixels[0].green; 5458fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->blue+=gamma*pixels[0].blue; 5459fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->black+=gamma*pixels[0].black; 5460fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->alpha+=pixels[0].alpha; 5461cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony p += GetPixelChannels(image); 5462cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 5463cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony gamma=1.0/count; /* average weighting of each pixel in area */ 5464fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->red*=gamma; 5465fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->green*=gamma; 5466fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->blue*=gamma; 5467fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->black*=gamma; 5468fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->alpha*=gamma; 5469cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony break; 5470cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 5471cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony case BackgroundInterpolatePixel: 5472cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 5473fb12237dd6e4d4d8b92d879661153062eeca0572cristy *pixel=image->background_color; /* Copy PixelInfo Structure */ 5474d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5475d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5476cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony case BilinearInterpolatePixel: 5477cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony default: 5478cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 5479cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony PointInfo 5480cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony delta, 5481cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony epsilon; 5482cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony 5483cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,2,2,exception); 5484cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony if (p == (const Quantum *) NULL) 5485cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 5486cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony status=MagickFalse; 5487cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony break; 5488cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 5489cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony for (i=0; i < 4L; i++) 5490cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony AlphaBlendPixelInfo(image,p+i*GetPixelChannels(image),pixels+i,alpha+i); 5491cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony delta.x=x-x_offset; 5492cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony delta.y=y-y_offset; 5493cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony epsilon.x=1.0-delta.x; 5494cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony epsilon.y=1.0-delta.y; 5495cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony gamma=((epsilon.y*(epsilon.x*alpha[0]+delta.x*alpha[1])+delta.y* 5496cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony (epsilon.x*alpha[2]+delta.x*alpha[3]))); 54973e3ec3afbb0782697f201cbe30a56794c10dc7efcristy gamma=PerceptibleReciprocal(gamma); 5498cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixel->red=gamma*(epsilon.y*(epsilon.x*pixels[0].red+delta.x* 5499cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[1].red)+delta.y*(epsilon.x*pixels[2].red+delta.x*pixels[3].red)); 5500cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixel->green=gamma*(epsilon.y*(epsilon.x*pixels[0].green+delta.x* 5501cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[1].green)+delta.y*(epsilon.x*pixels[2].green+delta.x* 5502cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[3].green)); 5503cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixel->blue=gamma*(epsilon.y*(epsilon.x*pixels[0].blue+delta.x* 5504cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[1].blue)+delta.y*(epsilon.x*pixels[2].blue+delta.x* 5505cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[3].blue)); 5506cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony if (image->colorspace == CMYKColorspace) 5507cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixel->black=gamma*(epsilon.y*(epsilon.x*pixels[0].black+delta.x* 5508cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[1].black)+delta.y*(epsilon.x*pixels[2].black+delta.x* 5509cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[3].black)); 5510cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony gamma=((epsilon.y*(epsilon.x+delta.x)+delta.y*(epsilon.x+delta.x))); 55113e3ec3afbb0782697f201cbe30a56794c10dc7efcristy gamma=PerceptibleReciprocal(gamma); 5512cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixel->alpha=(epsilon.y*(epsilon.x*pixels[0].alpha+delta.x* 5513cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[1].alpha)+delta.y*(epsilon.x*pixels[2].alpha+delta.x* 5514cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[3].alpha)); 5515cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony break; 5516cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 5517cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony case BlendInterpolatePixel: 5518cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 5519cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,2,2,exception); 5520cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony if (p == (const Quantum *) NULL) 5521cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 5522cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony status=MagickFalse; 5523cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony break; 5524cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 5525cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony for (i=0; i < 4L; i++) 5526cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony AlphaBlendPixelInfo(image,p+i*GetPixelChannels(image),pixels+i,alpha+i); 5527fb12237dd6e4d4d8b92d879661153062eeca0572cristy gamma=1.0; /* number of pixels blended together (its variable) */ 5528fb12237dd6e4d4d8b92d879661153062eeca0572cristy for (i=0; i <= 1L; i++) 5529fb12237dd6e4d4d8b92d879661153062eeca0572cristy { 5530fb12237dd6e4d4d8b92d879661153062eeca0572cristy if ((y-y_offset) >= 0.75) 5531fb12237dd6e4d4d8b92d879661153062eeca0572cristy { 5532fb12237dd6e4d4d8b92d879661153062eeca0572cristy alpha[i]=alpha[i+2]; /* take right pixels */ 5533fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[i]=pixels[i+2]; 5534fb12237dd6e4d4d8b92d879661153062eeca0572cristy } 5535fb12237dd6e4d4d8b92d879661153062eeca0572cristy else 5536fb12237dd6e4d4d8b92d879661153062eeca0572cristy if ((y-y_offset) > 0.25) 5537fb12237dd6e4d4d8b92d879661153062eeca0572cristy { 5538fb12237dd6e4d4d8b92d879661153062eeca0572cristy gamma=2.0; /* blend both pixels in row */ 5539fb12237dd6e4d4d8b92d879661153062eeca0572cristy alpha[i]+=alpha[i+2]; /* add up alpha weights */ 5540fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[i].red+=pixels[i+2].red; 5541fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[i].green+=pixels[i+2].green; 5542fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[i].blue+=pixels[i+2].blue; 5543fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[i].black+=pixels[i+2].black; 5544fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[i].alpha+=pixels[i+2].alpha; 5545fb12237dd6e4d4d8b92d879661153062eeca0572cristy } 5546fb12237dd6e4d4d8b92d879661153062eeca0572cristy } 5547fb12237dd6e4d4d8b92d879661153062eeca0572cristy if ((x-x_offset) >= 0.75) 5548fb12237dd6e4d4d8b92d879661153062eeca0572cristy { 5549fb12237dd6e4d4d8b92d879661153062eeca0572cristy alpha[0]=alpha[1]; 5550fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[0]=pixels[1]; 5551fb12237dd6e4d4d8b92d879661153062eeca0572cristy } 5552fb12237dd6e4d4d8b92d879661153062eeca0572cristy else 5553fb12237dd6e4d4d8b92d879661153062eeca0572cristy if ((x-x_offset) > 0.25) 5554fb12237dd6e4d4d8b92d879661153062eeca0572cristy { 5555fb12237dd6e4d4d8b92d879661153062eeca0572cristy gamma*=2.0; /* blend both rows */ 555658ee5018960b42b80b54398eacabe9ae5da89149cristy alpha[0]+= alpha[1]; /* add up alpha weights */ 5557fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[0].red+=pixels[1].red; 5558fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[0].green+=pixels[1].green; 5559fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[0].blue+=pixels[1].blue; 5560fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[0].black+=pixels[1].black; 5561fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[0].alpha+=pixels[1].alpha; 5562fb12237dd6e4d4d8b92d879661153062eeca0572cristy } 5563fb12237dd6e4d4d8b92d879661153062eeca0572cristy gamma=1.0/gamma; 55643e3ec3afbb0782697f201cbe30a56794c10dc7efcristy alpha[0]=PerceptibleReciprocal(alpha[0]); 5565fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->red=alpha[0]*pixels[0].red; 5566fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->green=alpha[0]*pixels[0].green; /* divide by sum of alpha */ 5567fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->blue=alpha[0]*pixels[0].blue; 5568fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->black=alpha[0]*pixels[0].black; 5569fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->alpha=gamma*pixels[0].alpha; /* divide by number of pixels */ 5570cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony break; 5571cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 5572cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony case CatromInterpolatePixel: 5573d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5574a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy double 5575380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy cx[4], 5576380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy cy[4]; 5577d76c51ed30cf4084f4434ba08925d16001d1e340cristy 557842587c577d5b808de94915f2388b88b05c3d43a3cristy p=GetCacheViewVirtualPixels(image_view,x_offset-1,y_offset-1,4,4, 557942587c577d5b808de94915f2388b88b05c3d43a3cristy exception); 55804c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 5581d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5582d76c51ed30cf4084f4434ba08925d16001d1e340cristy status=MagickFalse; 5583d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5584d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5585cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony for (i=0; i < 16L; i++) 5586cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony AlphaBlendPixelInfo(image,p+i*GetPixelChannels(image),pixels+i,alpha+i); 5587a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy CatromWeights((double) (x-x_offset),&cx); 5588a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy CatromWeights((double) (y-y_offset),&cy); 5589fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->red=(cy[0]*(cx[0]*pixels[0].red+cx[1]*pixels[1].red+cx[2]* 5590fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[2].red+cx[3]*pixels[3].red)+cy[1]*(cx[0]*pixels[4].red+cx[1]* 5591fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[5].red+cx[2]*pixels[6].red+cx[3]*pixels[7].red)+cy[2]*(cx[0]* 5592fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[8].red+cx[1]*pixels[9].red+cx[2]*pixels[10].red+cx[3]* 5593fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[11].red)+cy[3]*(cx[0]*pixels[12].red+cx[1]*pixels[13].red+cx[2]* 5594fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[14].red+cx[3]*pixels[15].red)); 5595fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->green=(cy[0]*(cx[0]*pixels[0].green+cx[1]*pixels[1].green+cx[2]* 5596fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[2].green+cx[3]*pixels[3].green)+cy[1]*(cx[0]*pixels[4].green+ 5597fb12237dd6e4d4d8b92d879661153062eeca0572cristy cx[1]*pixels[5].green+cx[2]*pixels[6].green+cx[3]*pixels[7].green)+ 5598fb12237dd6e4d4d8b92d879661153062eeca0572cristy cy[2]*(cx[0]*pixels[8].green+cx[1]*pixels[9].green+cx[2]* 5599fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[10].green+cx[3]*pixels[11].green)+cy[3]*(cx[0]* 5600fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[12].green+cx[1]*pixels[13].green+cx[2]*pixels[14].green+cx[3]* 5601fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[15].green)); 5602fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->blue=(cy[0]*(cx[0]*pixels[0].blue+cx[1]*pixels[1].blue+cx[2]* 5603fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[2].blue+cx[3]*pixels[3].blue)+cy[1]*(cx[0]*pixels[4].blue+cx[1]* 5604fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[5].blue+cx[2]*pixels[6].blue+cx[3]*pixels[7].blue)+cy[2]*(cx[0]* 5605fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[8].blue+cx[1]*pixels[9].blue+cx[2]*pixels[10].blue+cx[3]* 5606fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[11].blue)+cy[3]*(cx[0]*pixels[12].blue+cx[1]*pixels[13].blue+ 5607fb12237dd6e4d4d8b92d879661153062eeca0572cristy cx[2]*pixels[14].blue+cx[3]*pixels[15].blue)); 5608380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy if (image->colorspace == CMYKColorspace) 5609fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->black=(cy[0]*(cx[0]*pixels[0].black+cx[1]*pixels[1].black+cx[2]* 5610fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[2].black+cx[3]*pixels[3].black)+cy[1]*(cx[0]*pixels[4].black+ 5611fb12237dd6e4d4d8b92d879661153062eeca0572cristy cx[1]*pixels[5].black+cx[2]*pixels[6].black+cx[3]*pixels[7].black)+ 5612fb12237dd6e4d4d8b92d879661153062eeca0572cristy cy[2]*(cx[0]*pixels[8].black+cx[1]*pixels[9].black+cx[2]* 5613fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[10].black+cx[3]*pixels[11].black)+cy[3]*(cx[0]* 5614fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[12].black+cx[1]*pixels[13].black+cx[2]*pixels[14].black+cx[3]* 5615fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[15].black)); 5616fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->alpha=(cy[0]*(cx[0]*pixels[0].alpha+cx[1]*pixels[1].alpha+cx[2]* 5617fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[2].alpha+cx[3]*pixels[3].alpha)+cy[1]*(cx[0]*pixels[4].alpha+ 5618fb12237dd6e4d4d8b92d879661153062eeca0572cristy cx[1]*pixels[5].alpha+cx[2]*pixels[6].alpha+cx[3]*pixels[7].alpha)+ 5619fb12237dd6e4d4d8b92d879661153062eeca0572cristy cy[2]*(cx[0]*pixels[8].alpha+cx[1]*pixels[9].alpha+cx[2]* 5620fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[10].alpha+cx[3]*pixels[11].alpha)+cy[3]*(cx[0]*pixels[12].alpha+ 5621fb12237dd6e4d4d8b92d879661153062eeca0572cristy cx[1]*pixels[13].alpha+cx[2]*pixels[14].alpha+cx[3]*pixels[15].alpha)); 5622d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5623d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5624d76c51ed30cf4084f4434ba08925d16001d1e340cristy case IntegerInterpolatePixel: 5625d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 562642587c577d5b808de94915f2388b88b05c3d43a3cristy p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,1,1,exception); 56274c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 5628d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5629d76c51ed30cf4084f4434ba08925d16001d1e340cristy status=MagickFalse; 5630d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5631d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5632803640d20a6a664315eddfff6f8531d0c5e0871dcristy GetPixelInfoPixel(image,p,pixel); 5633d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5634d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5635d76c51ed30cf4084f4434ba08925d16001d1e340cristy case MeshInterpolatePixel: 5636d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5637d76c51ed30cf4084f4434ba08925d16001d1e340cristy PointInfo 5638d76c51ed30cf4084f4434ba08925d16001d1e340cristy delta, 5639d76c51ed30cf4084f4434ba08925d16001d1e340cristy luminance; 5640d76c51ed30cf4084f4434ba08925d16001d1e340cristy 564194ea1636709395774d7118ef56162d211904cfd2cristy p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,2,2,exception); 56424c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 5643d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5644d76c51ed30cf4084f4434ba08925d16001d1e340cristy status=MagickFalse; 5645d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5646d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 564794ea1636709395774d7118ef56162d211904cfd2cristy delta.x=x-x_offset; 564894ea1636709395774d7118ef56162d211904cfd2cristy delta.y=y-y_offset; 5649884f600898ca6935a7981b4d56bf3d2c4ec17011cristy luminance.x=GetPixelLuminance(image,p)-(double) 565094ea1636709395774d7118ef56162d211904cfd2cristy GetPixelLuminance(image,p+3*GetPixelChannels(image)); 565128474bfbda5ee2d4da2eb79f299cf1f692770b99cristy luminance.y=GetPixelLuminance(image,p+GetPixelChannels(image))-(double) 565294ea1636709395774d7118ef56162d211904cfd2cristy GetPixelLuminance(image,p+2*GetPixelChannels(image)); 56535ce8df84afcfec6dc33ee61ac2014edb3871c455cristy AlphaBlendPixelInfo(image,p,pixels+0,alpha+0); 565428474bfbda5ee2d4da2eb79f299cf1f692770b99cristy AlphaBlendPixelInfo(image,p+GetPixelChannels(image),pixels+1,alpha+1); 5655ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+2*GetPixelChannels(image),pixels+2,alpha+2); 5656ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+3*GetPixelChannels(image),pixels+3,alpha+3); 5657d76c51ed30cf4084f4434ba08925d16001d1e340cristy if (fabs(luminance.x) < fabs(luminance.y)) 5658d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5659d76c51ed30cf4084f4434ba08925d16001d1e340cristy /* 5660d76c51ed30cf4084f4434ba08925d16001d1e340cristy Diagonal 0-3 NW-SE. 5661d76c51ed30cf4084f4434ba08925d16001d1e340cristy */ 5662d76c51ed30cf4084f4434ba08925d16001d1e340cristy if (delta.x <= delta.y) 5663d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5664d76c51ed30cf4084f4434ba08925d16001d1e340cristy /* 566594ea1636709395774d7118ef56162d211904cfd2cristy Bottom-left triangle (pixel: 2, diagonal: 0-3). 5666d76c51ed30cf4084f4434ba08925d16001d1e340cristy */ 5667d76c51ed30cf4084f4434ba08925d16001d1e340cristy delta.y=1.0-delta.y; 5668d76c51ed30cf4084f4434ba08925d16001d1e340cristy gamma=MeshInterpolate(&delta,alpha[2],alpha[3],alpha[0]); 56693e3ec3afbb0782697f201cbe30a56794c10dc7efcristy gamma=PerceptibleReciprocal(gamma); 5670d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->red=gamma*MeshInterpolate(&delta,pixels[2].red, 5671d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[3].red,pixels[0].red); 5672d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->green=gamma*MeshInterpolate(&delta,pixels[2].green, 5673d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[3].green,pixels[0].green); 5674d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->blue=gamma*MeshInterpolate(&delta,pixels[2].blue, 5675d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[3].blue,pixels[0].blue); 56765af738104f48677012746b82ba0daa0dc59bdbb5cristy if (image->colorspace == CMYKColorspace) 56774c08aed51c5899665ade97263692328eea4af106cristy pixel->black=gamma*MeshInterpolate(&delta,pixels[2].black, 56784c08aed51c5899665ade97263692328eea4af106cristy pixels[3].black,pixels[0].black); 567994ea1636709395774d7118ef56162d211904cfd2cristy gamma=MeshInterpolate(&delta,1.0,1.0,1.0); 5680865d58d60e5fc755d47771eab37ce5159531629dcristy pixel->alpha=gamma*MeshInterpolate(&delta,pixels[2].alpha, 5681865d58d60e5fc755d47771eab37ce5159531629dcristy pixels[3].alpha,pixels[0].alpha); 5682d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5683d76c51ed30cf4084f4434ba08925d16001d1e340cristy else 5684d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5685d76c51ed30cf4084f4434ba08925d16001d1e340cristy /* 568694ea1636709395774d7118ef56162d211904cfd2cristy Top-right triangle (pixel:1 , diagonal: 0-3). 5687d76c51ed30cf4084f4434ba08925d16001d1e340cristy */ 5688d76c51ed30cf4084f4434ba08925d16001d1e340cristy delta.x=1.0-delta.x; 5689d76c51ed30cf4084f4434ba08925d16001d1e340cristy gamma=MeshInterpolate(&delta,alpha[1],alpha[0],alpha[3]); 56903e3ec3afbb0782697f201cbe30a56794c10dc7efcristy gamma=PerceptibleReciprocal(gamma); 5691d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->red=gamma*MeshInterpolate(&delta,pixels[1].red, 5692d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[0].red,pixels[3].red); 5693d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->green=gamma*MeshInterpolate(&delta,pixels[1].green, 5694d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[0].green,pixels[3].green); 5695d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->blue=gamma*MeshInterpolate(&delta,pixels[1].blue, 5696d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[0].blue,pixels[3].blue); 56975af738104f48677012746b82ba0daa0dc59bdbb5cristy if (image->colorspace == CMYKColorspace) 56984c08aed51c5899665ade97263692328eea4af106cristy pixel->black=gamma*MeshInterpolate(&delta,pixels[1].black, 56994c08aed51c5899665ade97263692328eea4af106cristy pixels[0].black,pixels[3].black); 570094ea1636709395774d7118ef56162d211904cfd2cristy gamma=MeshInterpolate(&delta,1.0,1.0,1.0); 5701865d58d60e5fc755d47771eab37ce5159531629dcristy pixel->alpha=gamma*MeshInterpolate(&delta,pixels[1].alpha, 5702865d58d60e5fc755d47771eab37ce5159531629dcristy pixels[0].alpha,pixels[3].alpha); 5703d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5704d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5705d76c51ed30cf4084f4434ba08925d16001d1e340cristy else 5706d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5707d76c51ed30cf4084f4434ba08925d16001d1e340cristy /* 5708d76c51ed30cf4084f4434ba08925d16001d1e340cristy Diagonal 1-2 NE-SW. 5709d76c51ed30cf4084f4434ba08925d16001d1e340cristy */ 5710d76c51ed30cf4084f4434ba08925d16001d1e340cristy if (delta.x <= (1.0-delta.y)) 5711d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5712d76c51ed30cf4084f4434ba08925d16001d1e340cristy /* 571394ea1636709395774d7118ef56162d211904cfd2cristy Top-left triangle (pixel: 0, diagonal: 1-2). 5714d76c51ed30cf4084f4434ba08925d16001d1e340cristy */ 5715d76c51ed30cf4084f4434ba08925d16001d1e340cristy gamma=MeshInterpolate(&delta,alpha[0],alpha[1],alpha[2]); 57163e3ec3afbb0782697f201cbe30a56794c10dc7efcristy gamma=PerceptibleReciprocal(gamma); 5717d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->red=gamma*MeshInterpolate(&delta,pixels[0].red, 5718d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[1].red,pixels[2].red); 5719d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->green=gamma*MeshInterpolate(&delta,pixels[0].green, 5720d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[1].green,pixels[2].green); 5721d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->blue=gamma*MeshInterpolate(&delta,pixels[0].blue, 5722d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[1].blue,pixels[2].blue); 57235af738104f48677012746b82ba0daa0dc59bdbb5cristy if (image->colorspace == CMYKColorspace) 57244c08aed51c5899665ade97263692328eea4af106cristy pixel->black=gamma*MeshInterpolate(&delta,pixels[0].black, 57254c08aed51c5899665ade97263692328eea4af106cristy pixels[1].black,pixels[2].black); 572694ea1636709395774d7118ef56162d211904cfd2cristy gamma=MeshInterpolate(&delta,1.0,1.0,1.0); 5727865d58d60e5fc755d47771eab37ce5159531629dcristy pixel->alpha=gamma*MeshInterpolate(&delta,pixels[0].alpha, 5728865d58d60e5fc755d47771eab37ce5159531629dcristy pixels[1].alpha,pixels[2].alpha); 5729d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5730d76c51ed30cf4084f4434ba08925d16001d1e340cristy else 5731d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5732d76c51ed30cf4084f4434ba08925d16001d1e340cristy /* 5733d76c51ed30cf4084f4434ba08925d16001d1e340cristy Bottom-right triangle (pixel: 3, diagonal: 1-2). 5734d76c51ed30cf4084f4434ba08925d16001d1e340cristy */ 5735d76c51ed30cf4084f4434ba08925d16001d1e340cristy delta.x=1.0-delta.x; 5736d76c51ed30cf4084f4434ba08925d16001d1e340cristy delta.y=1.0-delta.y; 5737d76c51ed30cf4084f4434ba08925d16001d1e340cristy gamma=MeshInterpolate(&delta,alpha[3],alpha[2],alpha[1]); 57383e3ec3afbb0782697f201cbe30a56794c10dc7efcristy gamma=PerceptibleReciprocal(gamma); 5739d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->red=gamma*MeshInterpolate(&delta,pixels[3].red, 5740d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[2].red,pixels[1].red); 5741d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->green=gamma*MeshInterpolate(&delta,pixels[3].green, 5742d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[2].green,pixels[1].green); 5743d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->blue=gamma*MeshInterpolate(&delta,pixels[3].blue, 5744d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[2].blue,pixels[1].blue); 57455af738104f48677012746b82ba0daa0dc59bdbb5cristy if (image->colorspace == CMYKColorspace) 57464c08aed51c5899665ade97263692328eea4af106cristy pixel->black=gamma*MeshInterpolate(&delta,pixels[3].black, 57474c08aed51c5899665ade97263692328eea4af106cristy pixels[2].black,pixels[1].black); 574894ea1636709395774d7118ef56162d211904cfd2cristy gamma=MeshInterpolate(&delta,1.0,1.0,1.0); 5749865d58d60e5fc755d47771eab37ce5159531629dcristy pixel->alpha=gamma*MeshInterpolate(&delta,pixels[3].alpha, 5750865d58d60e5fc755d47771eab37ce5159531629dcristy pixels[2].alpha,pixels[1].alpha); 5751d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5752d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5753d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5754d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5755cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony case NearestInterpolatePixel: 5756d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5757cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony x_offset=(ssize_t) floor(x+0.5); 5758cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony y_offset=(ssize_t) floor(y+0.5); 5759cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,1,1,exception); 57604c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 5761d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5762d76c51ed30cf4084f4434ba08925d16001d1e340cristy status=MagickFalse; 5763d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5764d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5765803640d20a6a664315eddfff6f8531d0c5e0871dcristy GetPixelInfoPixel(image,p,pixel); 5766d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5767d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5768d76c51ed30cf4084f4434ba08925d16001d1e340cristy case SplineInterpolatePixel: 5769d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5770a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy double 5771d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas cx[4], 5772d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas cy[4]; 5773d76c51ed30cf4084f4434ba08925d16001d1e340cristy 577442587c577d5b808de94915f2388b88b05c3d43a3cristy p=GetCacheViewVirtualPixels(image_view,x_offset-1,y_offset-1,4,4, 577542587c577d5b808de94915f2388b88b05c3d43a3cristy exception); 57764c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 5777d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5778d76c51ed30cf4084f4434ba08925d16001d1e340cristy status=MagickFalse; 5779d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5780d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5781cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony for (i=0; i < 16L; i++) 5782cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony AlphaBlendPixelInfo(image,p+i*GetPixelChannels(image),pixels+i,alpha+i); 5783a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy SplineWeights((double) (x-x_offset),&cx); 5784a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy SplineWeights((double) (y-y_offset),&cy); 5785fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->red=(cy[0]*(cx[0]*pixels[0].red+cx[1]*pixels[1].red+cx[2]* 5786fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[2].red+cx[3]*pixels[3].red)+cy[1]*(cx[0]*pixels[4].red+cx[1]* 5787fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[5].red+cx[2]*pixels[6].red+cx[3]*pixels[7].red)+cy[2]*(cx[0]* 5788fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[8].red+cx[1]*pixels[9].red+cx[2]*pixels[10].red+cx[3]* 5789fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[11].red)+cy[3]*(cx[0]*pixels[12].red+cx[1]*pixels[13].red+cx[2]* 5790fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[14].red+cx[3]*pixels[15].red)); 5791fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->green=(cy[0]*(cx[0]*pixels[0].green+cx[1]*pixels[1].green+cx[2]* 5792fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[2].green+cx[3]*pixels[3].green)+cy[1]*(cx[0]*pixels[4].green+ 5793fb12237dd6e4d4d8b92d879661153062eeca0572cristy cx[1]*pixels[5].green+cx[2]*pixels[6].green+cx[3]*pixels[7].green)+ 5794fb12237dd6e4d4d8b92d879661153062eeca0572cristy cy[2]*(cx[0]*pixels[8].green+cx[1]*pixels[9].green+cx[2]* 5795fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[10].green+cx[3]*pixels[11].green)+cy[3]*(cx[0]*pixels[12].green+ 5796fb12237dd6e4d4d8b92d879661153062eeca0572cristy cx[1]*pixels[13].green+cx[2]*pixels[14].green+cx[3]*pixels[15].green)); 5797fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->blue=(cy[0]*(cx[0]*pixels[0].blue+cx[1]*pixels[1].blue+cx[2]* 5798fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[2].blue+cx[3]*pixels[3].blue)+cy[1]*(cx[0]*pixels[4].blue+cx[1]* 5799fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[5].blue+cx[2]*pixels[6].blue+cx[3]*pixels[7].blue)+cy[2]*(cx[0]* 5800fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[8].blue+cx[1]*pixels[9].blue+cx[2]*pixels[10].blue+cx[3]* 5801fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[11].blue)+cy[3]*(cx[0]*pixels[12].blue+cx[1]*pixels[13].blue+ 5802fb12237dd6e4d4d8b92d879661153062eeca0572cristy cx[2]*pixels[14].blue+cx[3]*pixels[15].blue)); 5803d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas if (image->colorspace == CMYKColorspace) 5804fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->black=(cy[0]*(cx[0]*pixels[0].black+cx[1]*pixels[1].black+cx[2]* 5805fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[2].black+cx[3]*pixels[3].black)+cy[1]*(cx[0]*pixels[4].black+ 5806fb12237dd6e4d4d8b92d879661153062eeca0572cristy cx[1]*pixels[5].black+cx[2]*pixels[6].black+cx[3]*pixels[7].black)+ 5807fb12237dd6e4d4d8b92d879661153062eeca0572cristy cy[2]*(cx[0]*pixels[8].black+cx[1]*pixels[9].black+cx[2]* 5808fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[10].black+cx[3]*pixels[11].black)+cy[3]*(cx[0]* 5809fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[12].black+cx[1]*pixels[13].black+cx[2]*pixels[14].black+cx[3]* 5810fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[15].black)); 5811fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->alpha=(cy[0]*(cx[0]*pixels[0].alpha+cx[1]*pixels[1].alpha+cx[2]* 5812fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[2].alpha+cx[3]*pixels[3].alpha)+cy[1]*(cx[0]*pixels[4].alpha+ 5813fb12237dd6e4d4d8b92d879661153062eeca0572cristy cx[1]*pixels[5].alpha+cx[2]*pixels[6].alpha+cx[3]*pixels[7].alpha)+ 5814fb12237dd6e4d4d8b92d879661153062eeca0572cristy cy[2]*(cx[0]*pixels[8].alpha+cx[1]*pixels[9].alpha+cx[2]* 5815fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[10].alpha+cx[3]*pixels[11].alpha)+cy[3]*(cx[0]*pixels[12].alpha+ 5816fb12237dd6e4d4d8b92d879661153062eeca0572cristy cx[1]*pixels[13].alpha+cx[2]*pixels[14].alpha+cx[3]*pixels[15].alpha)); 5817d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5818d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5819d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5820d76c51ed30cf4084f4434ba08925d16001d1e340cristy return(status); 5821d76c51ed30cf4084f4434ba08925d16001d1e340cristy} 58224c08aed51c5899665ade97263692328eea4af106cristy 58234c08aed51c5899665ade97263692328eea4af106cristy/* 58244c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 58254c08aed51c5899665ade97263692328eea4af106cristy% % 58264c08aed51c5899665ade97263692328eea4af106cristy% % 58274c08aed51c5899665ade97263692328eea4af106cristy% % 58284c08aed51c5899665ade97263692328eea4af106cristy+ I s F u z z y E q u i v a l e n c e P i x e l % 58294c08aed51c5899665ade97263692328eea4af106cristy% % 58304c08aed51c5899665ade97263692328eea4af106cristy% % 58314c08aed51c5899665ade97263692328eea4af106cristy% % 58324c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 58334c08aed51c5899665ade97263692328eea4af106cristy% 58344c08aed51c5899665ade97263692328eea4af106cristy% IsFuzzyEquivalencePixel() returns MagickTrue if the distance between two 58354c08aed51c5899665ade97263692328eea4af106cristy% pixels is less than the specified distance in a linear three (or four)u 58364c08aed51c5899665ade97263692328eea4af106cristy% dimensional color space. 58374c08aed51c5899665ade97263692328eea4af106cristy% 58384c08aed51c5899665ade97263692328eea4af106cristy% The format of the IsFuzzyEquivalencePixel method is: 58394c08aed51c5899665ade97263692328eea4af106cristy% 5840e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy% void IsFuzzyEquivalencePixel(const Image *source,const Quantum *p, 5841e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy% const Image *destination,const Quantum *q) 58424c08aed51c5899665ade97263692328eea4af106cristy% 58434c08aed51c5899665ade97263692328eea4af106cristy% A description of each parameter follows: 58444c08aed51c5899665ade97263692328eea4af106cristy% 5845e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy% o source: the source image. 58464c08aed51c5899665ade97263692328eea4af106cristy% 58474c08aed51c5899665ade97263692328eea4af106cristy% o p: Pixel p. 58484c08aed51c5899665ade97263692328eea4af106cristy% 5849e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy% o destination: the destination image. 5850e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy% 58514c08aed51c5899665ade97263692328eea4af106cristy% o q: Pixel q. 58524c08aed51c5899665ade97263692328eea4af106cristy% 58534c08aed51c5899665ade97263692328eea4af106cristy*/ 5854e4a404711bf20d9062d11ab28bc12e5acd307f9ccristyMagickExport MagickBooleanType IsFuzzyEquivalencePixel(const Image *source, 5855e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy const Quantum *p,const Image *destination,const Quantum *q) 58564c08aed51c5899665ade97263692328eea4af106cristy{ 5857a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy double 58584c08aed51c5899665ade97263692328eea4af106cristy fuzz, 58594c08aed51c5899665ade97263692328eea4af106cristy pixel; 58604c08aed51c5899665ade97263692328eea4af106cristy 5861a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy register double 58624c08aed51c5899665ade97263692328eea4af106cristy distance, 58634c08aed51c5899665ade97263692328eea4af106cristy scale; 58644c08aed51c5899665ade97263692328eea4af106cristy 5865a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy fuzz=MagickMax(source->fuzz,(double) MagickSQ1_2)*MagickMax( 5866a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy destination->fuzz,(double) MagickSQ1_2); 58674c08aed51c5899665ade97263692328eea4af106cristy scale=1.0; 58684c08aed51c5899665ade97263692328eea4af106cristy distance=0.0; 58698a46d827a124555f0c48fb2368ec1bba8e079ab6cristy if (source->alpha_trait == BlendPixelTrait) 58704c08aed51c5899665ade97263692328eea4af106cristy { 58714c08aed51c5899665ade97263692328eea4af106cristy /* 58724c08aed51c5899665ade97263692328eea4af106cristy Transparencies are involved - set alpha distance 58734c08aed51c5899665ade97263692328eea4af106cristy */ 587470e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy pixel=GetPixelAlpha(source,p)-(double) GetPixelAlpha(destination,q); 58754c08aed51c5899665ade97263692328eea4af106cristy distance=pixel*pixel; 58764c08aed51c5899665ade97263692328eea4af106cristy if (distance > fuzz) 58774c08aed51c5899665ade97263692328eea4af106cristy return(MagickFalse); 58784c08aed51c5899665ade97263692328eea4af106cristy /* 58794c08aed51c5899665ade97263692328eea4af106cristy Generate a alpha scaling factor to generate a 4D cone on colorspace 58804c08aed51c5899665ade97263692328eea4af106cristy Note that if one color is transparent, distance has no color component. 58814c08aed51c5899665ade97263692328eea4af106cristy */ 5882e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy scale=QuantumScale*GetPixelAlpha(source,p); 5883e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy scale*=QuantumScale*GetPixelAlpha(destination,q); 58844c08aed51c5899665ade97263692328eea4af106cristy if (scale <= MagickEpsilon) 58854c08aed51c5899665ade97263692328eea4af106cristy return(MagickTrue); 58864c08aed51c5899665ade97263692328eea4af106cristy } 58874c08aed51c5899665ade97263692328eea4af106cristy /* 58884c08aed51c5899665ade97263692328eea4af106cristy RGB or CMY color cube 58894c08aed51c5899665ade97263692328eea4af106cristy */ 58904c08aed51c5899665ade97263692328eea4af106cristy distance*=3.0; /* rescale appropriately */ 58914c08aed51c5899665ade97263692328eea4af106cristy fuzz*=3.0; 5892a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixel=GetPixelRed(source,p)-(double) GetPixelRed(destination,q); 5893e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy if ((source->colorspace == HSLColorspace) || 5894e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy (source->colorspace == HSBColorspace) || 5895e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy (source->colorspace == HWBColorspace)) 58964c08aed51c5899665ade97263692328eea4af106cristy { 58974c08aed51c5899665ade97263692328eea4af106cristy /* 58984c08aed51c5899665ade97263692328eea4af106cristy Compute an arc distance for hue. It should be a vector angle of 58994c08aed51c5899665ade97263692328eea4af106cristy 'S'/'W' length with 'L'/'B' forming appropriate cones. 59004c08aed51c5899665ade97263692328eea4af106cristy */ 59014c08aed51c5899665ade97263692328eea4af106cristy if (fabs((double) pixel) > (QuantumRange/2)) 59024c08aed51c5899665ade97263692328eea4af106cristy pixel-=QuantumRange; 59034c08aed51c5899665ade97263692328eea4af106cristy pixel*=2; 59044c08aed51c5899665ade97263692328eea4af106cristy } 59054c08aed51c5899665ade97263692328eea4af106cristy distance+=scale*pixel*pixel; 59064c08aed51c5899665ade97263692328eea4af106cristy if (distance > fuzz) 59074c08aed51c5899665ade97263692328eea4af106cristy return(MagickFalse); 5908a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixel=GetPixelGreen(source,p)-(double) GetPixelGreen(destination,q); 59094c08aed51c5899665ade97263692328eea4af106cristy distance+=scale*pixel*pixel; 59104c08aed51c5899665ade97263692328eea4af106cristy if (distance > fuzz) 59114c08aed51c5899665ade97263692328eea4af106cristy return(MagickFalse); 5912a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixel=GetPixelBlue(source,p)-(double) GetPixelBlue(destination,q); 59134c08aed51c5899665ade97263692328eea4af106cristy distance+=scale*pixel*pixel; 59144c08aed51c5899665ade97263692328eea4af106cristy if (distance > fuzz) 59154c08aed51c5899665ade97263692328eea4af106cristy return(MagickFalse); 59164c08aed51c5899665ade97263692328eea4af106cristy return(MagickTrue); 59174c08aed51c5899665ade97263692328eea4af106cristy} 59184c08aed51c5899665ade97263692328eea4af106cristy 59194c08aed51c5899665ade97263692328eea4af106cristy/* 59204c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 59214c08aed51c5899665ade97263692328eea4af106cristy% % 59224c08aed51c5899665ade97263692328eea4af106cristy% % 59234c08aed51c5899665ade97263692328eea4af106cristy% % 59244c08aed51c5899665ade97263692328eea4af106cristy+ I s F u z z y E q u i v a l e n c e P i x e l I n f o % 59254c08aed51c5899665ade97263692328eea4af106cristy% % 59264c08aed51c5899665ade97263692328eea4af106cristy% % 59274c08aed51c5899665ade97263692328eea4af106cristy% % 59284c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 59294c08aed51c5899665ade97263692328eea4af106cristy% 59304c08aed51c5899665ade97263692328eea4af106cristy% IsFuzzyEquivalencePixelInfo() returns true if the distance between two 59314c08aed51c5899665ade97263692328eea4af106cristy% colors is less than the specified distance in a linear three (or four) 59324c08aed51c5899665ade97263692328eea4af106cristy% dimensional color space. 59334c08aed51c5899665ade97263692328eea4af106cristy% 59345f95f4f77efc46ff53593d750491c8f60698c983cristy% This implements the equivalent of: 59355f95f4f77efc46ff53593d750491c8f60698c983cristy% fuzz < sqrt(color_distance^2 * u.a*v.a + alpha_distance^2) 59364c08aed51c5899665ade97263692328eea4af106cristy% 59374c08aed51c5899665ade97263692328eea4af106cristy% Which produces a multi-dimensional cone for that colorspace along the 59384c08aed51c5899665ade97263692328eea4af106cristy% transparency vector. 59394c08aed51c5899665ade97263692328eea4af106cristy% 59405f95f4f77efc46ff53593d750491c8f60698c983cristy% For example for an RGB: 59414c08aed51c5899665ade97263692328eea4af106cristy% color_distance^2 = ( (u.r-v.r)^2 + (u.g-v.g)^2 + (u.b-v.b)^2 ) / 3 59424c08aed51c5899665ade97263692328eea4af106cristy% 59434c08aed51c5899665ade97263692328eea4af106cristy% See http://www.imagemagick.org/Usage/bugs/fuzz_distance/ 59444c08aed51c5899665ade97263692328eea4af106cristy% 59454c08aed51c5899665ade97263692328eea4af106cristy% Hue colorspace distances need more work. Hue is not a distance, it is an 59464c08aed51c5899665ade97263692328eea4af106cristy% angle! 59474c08aed51c5899665ade97263692328eea4af106cristy% 59484c08aed51c5899665ade97263692328eea4af106cristy% A check that q is in the same color space as p should be made and the 59494c08aed51c5899665ade97263692328eea4af106cristy% appropriate mapping made. -- Anthony Thyssen 8 December 2010 59504c08aed51c5899665ade97263692328eea4af106cristy% 59514c08aed51c5899665ade97263692328eea4af106cristy% The format of the IsFuzzyEquivalencePixelInfo method is: 59524c08aed51c5899665ade97263692328eea4af106cristy% 59534c08aed51c5899665ade97263692328eea4af106cristy% MagickBooleanType IsFuzzyEquivalencePixelInfo(const PixelInfo *p, 59544c08aed51c5899665ade97263692328eea4af106cristy% const PixelInfo *q) 59554c08aed51c5899665ade97263692328eea4af106cristy% 59564c08aed51c5899665ade97263692328eea4af106cristy% A description of each parameter follows: 59574c08aed51c5899665ade97263692328eea4af106cristy% 59584c08aed51c5899665ade97263692328eea4af106cristy% o p: Pixel p. 59594c08aed51c5899665ade97263692328eea4af106cristy% 59604c08aed51c5899665ade97263692328eea4af106cristy% o q: Pixel q. 59614c08aed51c5899665ade97263692328eea4af106cristy% 59624c08aed51c5899665ade97263692328eea4af106cristy*/ 59634c08aed51c5899665ade97263692328eea4af106cristyMagickExport MagickBooleanType IsFuzzyEquivalencePixelInfo(const PixelInfo *p, 59644c08aed51c5899665ade97263692328eea4af106cristy const PixelInfo *q) 59654c08aed51c5899665ade97263692328eea4af106cristy{ 5966a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy double 59674c08aed51c5899665ade97263692328eea4af106cristy fuzz, 59684c08aed51c5899665ade97263692328eea4af106cristy pixel; 59694c08aed51c5899665ade97263692328eea4af106cristy 5970a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy register double 59714c08aed51c5899665ade97263692328eea4af106cristy scale, 59724c08aed51c5899665ade97263692328eea4af106cristy distance; 59734c08aed51c5899665ade97263692328eea4af106cristy 59744c08aed51c5899665ade97263692328eea4af106cristy if ((p->fuzz == 0.0) && (q->fuzz == 0.0)) 59754c08aed51c5899665ade97263692328eea4af106cristy return(IsPixelInfoEquivalent(p,q)); 59764c08aed51c5899665ade97263692328eea4af106cristy if (p->fuzz == 0.0) 597724dc972bafd1a9610638308dea587bc94df338abcristy fuzz=MagickMax(q->fuzz,(double) MagickSQ1_2)*MagickMax(q->fuzz,MagickSQ1_2); 59784c08aed51c5899665ade97263692328eea4af106cristy else if (q->fuzz == 0.0) 597924dc972bafd1a9610638308dea587bc94df338abcristy fuzz=MagickMax(p->fuzz,(double) MagickSQ1_2)*MagickMax(p->fuzz,MagickSQ1_2); 59804c08aed51c5899665ade97263692328eea4af106cristy else 598124dc972bafd1a9610638308dea587bc94df338abcristy fuzz=MagickMax(p->fuzz,(double) MagickSQ1_2)*MagickMax(q->fuzz,MagickSQ1_2); 59824c08aed51c5899665ade97263692328eea4af106cristy scale=1.0; 59834c08aed51c5899665ade97263692328eea4af106cristy distance=0.0; 598424dc972bafd1a9610638308dea587bc94df338abcristy if ((p->alpha_trait == BlendPixelTrait) || 598524dc972bafd1a9610638308dea587bc94df338abcristy (q->alpha_trait == BlendPixelTrait)) 59864c08aed51c5899665ade97263692328eea4af106cristy { 59874c08aed51c5899665ade97263692328eea4af106cristy /* 59884c08aed51c5899665ade97263692328eea4af106cristy Transparencies are involved - set alpha distance. 59894c08aed51c5899665ade97263692328eea4af106cristy */ 59908a46d827a124555f0c48fb2368ec1bba8e079ab6cristy pixel=(p->alpha_trait == BlendPixelTrait ? p->alpha : OpaqueAlpha)- 59918a46d827a124555f0c48fb2368ec1bba8e079ab6cristy (q->alpha_trait == BlendPixelTrait ? q->alpha : OpaqueAlpha); 59924c08aed51c5899665ade97263692328eea4af106cristy distance=pixel*pixel; 59934c08aed51c5899665ade97263692328eea4af106cristy if (distance > fuzz) 59944c08aed51c5899665ade97263692328eea4af106cristy return(MagickFalse); 59954c08aed51c5899665ade97263692328eea4af106cristy /* 59964c08aed51c5899665ade97263692328eea4af106cristy Generate a alpha scaling factor to generate a 4D cone on colorspace. 59975f95f4f77efc46ff53593d750491c8f60698c983cristy If one color is transparent, distance has no color component. 59984c08aed51c5899665ade97263692328eea4af106cristy */ 59998a46d827a124555f0c48fb2368ec1bba8e079ab6cristy if (p->alpha_trait == BlendPixelTrait) 60004c08aed51c5899665ade97263692328eea4af106cristy scale=(QuantumScale*p->alpha); 60018a46d827a124555f0c48fb2368ec1bba8e079ab6cristy if (q->alpha_trait == BlendPixelTrait) 60024c08aed51c5899665ade97263692328eea4af106cristy scale*=(QuantumScale*q->alpha); 60034c08aed51c5899665ade97263692328eea4af106cristy if (scale <= MagickEpsilon ) 60044c08aed51c5899665ade97263692328eea4af106cristy return(MagickTrue); 60054c08aed51c5899665ade97263692328eea4af106cristy } 60064c08aed51c5899665ade97263692328eea4af106cristy /* 60074c08aed51c5899665ade97263692328eea4af106cristy CMYK create a CMY cube with a multi-dimensional cone toward black. 60084c08aed51c5899665ade97263692328eea4af106cristy */ 60094c08aed51c5899665ade97263692328eea4af106cristy if (p->colorspace == CMYKColorspace) 60104c08aed51c5899665ade97263692328eea4af106cristy { 60114c08aed51c5899665ade97263692328eea4af106cristy pixel=p->black-q->black; 60124c08aed51c5899665ade97263692328eea4af106cristy distance+=pixel*pixel*scale; 60134c08aed51c5899665ade97263692328eea4af106cristy if (distance > fuzz) 60144c08aed51c5899665ade97263692328eea4af106cristy return(MagickFalse); 6015a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy scale*=(double) (QuantumScale*(QuantumRange-p->black)); 6016a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy scale*=(double) (QuantumScale*(QuantumRange-q->black)); 60174c08aed51c5899665ade97263692328eea4af106cristy } 60184c08aed51c5899665ade97263692328eea4af106cristy /* 60194c08aed51c5899665ade97263692328eea4af106cristy RGB or CMY color cube. 60204c08aed51c5899665ade97263692328eea4af106cristy */ 60214c08aed51c5899665ade97263692328eea4af106cristy distance*=3.0; /* rescale appropriately */ 60224c08aed51c5899665ade97263692328eea4af106cristy fuzz*=3.0; 60234c08aed51c5899665ade97263692328eea4af106cristy pixel=p->red-q->red; 60244c08aed51c5899665ade97263692328eea4af106cristy if ((p->colorspace == HSLColorspace) || (p->colorspace == HSBColorspace) || 60254c08aed51c5899665ade97263692328eea4af106cristy (p->colorspace == HWBColorspace)) 60264c08aed51c5899665ade97263692328eea4af106cristy { 60275f95f4f77efc46ff53593d750491c8f60698c983cristy /* 602858ee5018960b42b80b54398eacabe9ae5da89149cristy This calculates a arc distance for hue-- it should be a vector 602958ee5018960b42b80b54398eacabe9ae5da89149cristy angle of 'S'/'W' length with 'L'/'B' forming appropriate cones. 603058ee5018960b42b80b54398eacabe9ae5da89149cristy In other words this is a hack - Anthony. 60314c08aed51c5899665ade97263692328eea4af106cristy */ 60324c08aed51c5899665ade97263692328eea4af106cristy if (fabs((double) pixel) > (QuantumRange/2)) 60334c08aed51c5899665ade97263692328eea4af106cristy pixel-=QuantumRange; 60344c08aed51c5899665ade97263692328eea4af106cristy pixel*=2; 60354c08aed51c5899665ade97263692328eea4af106cristy } 60364c08aed51c5899665ade97263692328eea4af106cristy distance+=pixel*pixel*scale; 60374c08aed51c5899665ade97263692328eea4af106cristy if (distance > fuzz) 60384c08aed51c5899665ade97263692328eea4af106cristy return(MagickFalse); 60394c08aed51c5899665ade97263692328eea4af106cristy pixel=p->green-q->green; 60404c08aed51c5899665ade97263692328eea4af106cristy distance+=pixel*pixel*scale; 60414c08aed51c5899665ade97263692328eea4af106cristy if (distance > fuzz) 60424c08aed51c5899665ade97263692328eea4af106cristy return(MagickFalse); 60434c08aed51c5899665ade97263692328eea4af106cristy pixel=p->blue-q->blue; 60444c08aed51c5899665ade97263692328eea4af106cristy distance+=pixel*pixel*scale; 60454c08aed51c5899665ade97263692328eea4af106cristy if (distance > fuzz) 60464c08aed51c5899665ade97263692328eea4af106cristy return(MagickFalse); 60474c08aed51c5899665ade97263692328eea4af106cristy return(MagickTrue); 60484c08aed51c5899665ade97263692328eea4af106cristy} 60492b9582a27910c7baaeb04b7e969638328fa70095cristy 60502b9582a27910c7baaeb04b7e969638328fa70095cristy/* 60512b9582a27910c7baaeb04b7e969638328fa70095cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 60522b9582a27910c7baaeb04b7e969638328fa70095cristy% % 60532b9582a27910c7baaeb04b7e969638328fa70095cristy% % 60542b9582a27910c7baaeb04b7e969638328fa70095cristy% % 60557ae1654e7582dc87637de6302875d81607393efacristy% S e t P i x e l C h a n n e l M a s k % 60562b9582a27910c7baaeb04b7e969638328fa70095cristy% % 60572b9582a27910c7baaeb04b7e969638328fa70095cristy% % 60582b9582a27910c7baaeb04b7e969638328fa70095cristy% % 60592b9582a27910c7baaeb04b7e969638328fa70095cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 60602b9582a27910c7baaeb04b7e969638328fa70095cristy% 60617ae1654e7582dc87637de6302875d81607393efacristy% SetPixelChannelMask() sets the pixel channel map from the specified channel 60627ae1654e7582dc87637de6302875d81607393efacristy% mask. 60632b9582a27910c7baaeb04b7e969638328fa70095cristy% 6064cf1296eb467f83fd2106e51d2689ac0afc863ef8cristy% The format of the SetPixelChannelMask method is: 60652b9582a27910c7baaeb04b7e969638328fa70095cristy% 6066cf1296eb467f83fd2106e51d2689ac0afc863ef8cristy% void SetPixelChannelMask(Image *image,const ChannelType channel_mask) 60672b9582a27910c7baaeb04b7e969638328fa70095cristy% 60682b9582a27910c7baaeb04b7e969638328fa70095cristy% A description of each parameter follows: 60692b9582a27910c7baaeb04b7e969638328fa70095cristy% 60702b9582a27910c7baaeb04b7e969638328fa70095cristy% o image: the image. 60712b9582a27910c7baaeb04b7e969638328fa70095cristy% 6072dfdb19ea2c08296b31fef860352c0a6efe8e9cc6cristy% o channel_mask: the channel mask. 60732b9582a27910c7baaeb04b7e969638328fa70095cristy% 60742b9582a27910c7baaeb04b7e969638328fa70095cristy*/ 6075cf1296eb467f83fd2106e51d2689ac0afc863ef8cristyMagickExport void SetPixelChannelMask(Image *image, 607607a6785ad974f0631a83731fe5d7fb85751ca235cristy const ChannelType channel_mask) 60772b9582a27910c7baaeb04b7e969638328fa70095cristy{ 60786a917d6c8b1695012e26389d2ec303267676815fcristy#define GetChannelBit(mask,bit) (((size_t) (mask) >> (size_t) (bit)) & 0x01) 6079dafd287faca4c8cd5415d13185973add9c02b2c4cristy 60802b9582a27910c7baaeb04b7e969638328fa70095cristy register ssize_t 60812b9582a27910c7baaeb04b7e969638328fa70095cristy i; 60822b9582a27910c7baaeb04b7e969638328fa70095cristy 6083177e41c20ccba692bc4c7797aeb817b2f80c7e8ccristy if (image->debug != MagickFalse) 6084177e41c20ccba692bc4c7797aeb817b2f80c7e8ccristy (void) LogMagickEvent(PixelEvent,GetMagickModule(),"%s[%08x]", \ 6085177e41c20ccba692bc4c7797aeb817b2f80c7e8ccristy image->filename,channel_mask); \ 60863c30981743f8543ca2ccc0d19de8fbda2b3639c6cristy image->channel_mask=channel_mask; 6087dafd287faca4c8cd5415d13185973add9c02b2c4cristy for (i=0; i < (ssize_t) GetPixelChannels(image); i++) 6088e2a912b6c9086c98ec838baa0824cd8deca55538cristy { 60895a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelChannel channel=GetPixelChannelChannel(image,i); 6090297e3a450d4b95328fa0667d4910881e9787e608cristy SetPixelChannelTraits(image,channel, 6091e2a912b6c9086c98ec838baa0824cd8deca55538cristy GetChannelBit(channel_mask,channel) == 0 ? CopyPixelTrait : 60928a46d827a124555f0c48fb2368ec1bba8e079ab6cristy image->alpha_trait != BlendPixelTrait || (channel == AlphaPixelChannel) ? 60938a46d827a124555f0c48fb2368ec1bba8e079ab6cristy UpdatePixelTrait : (PixelTrait) (UpdatePixelTrait | image->alpha_trait)); 6094e2a912b6c9086c98ec838baa0824cd8deca55538cristy } 60951685e7216ce4e5fac701834cd7db6eee6d426234cristy if (image->storage_class == PseudoClass) 6096297e3a450d4b95328fa0667d4910881e9787e608cristy SetPixelChannelTraits(image,IndexPixelChannel,CopyPixelTrait); 6097883fde11debec15cedb05dc5d7228d8588066bc0cristy if (image->read_mask != MagickFalse) 6098883fde11debec15cedb05dc5d7228d8588066bc0cristy SetPixelChannelTraits(image,ReadMaskPixelChannel,CopyPixelTrait); 6099883fde11debec15cedb05dc5d7228d8588066bc0cristy if (image->write_mask != MagickFalse) 6100883fde11debec15cedb05dc5d7228d8588066bc0cristy SetPixelChannelTraits(image,WriteMaskPixelChannel,CopyPixelTrait); 61016dcb9b8f58179c62fb386bf2bc02c8ba901dfb15cristy if (image->debug != MagickFalse) 61026dcb9b8f58179c62fb386bf2bc02c8ba901dfb15cristy LogPixelChannels(image); 61032b9582a27910c7baaeb04b7e969638328fa70095cristy} 61042b9582a27910c7baaeb04b7e969638328fa70095cristy 61052b9582a27910c7baaeb04b7e969638328fa70095cristy/* 61062b9582a27910c7baaeb04b7e969638328fa70095cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 61072b9582a27910c7baaeb04b7e969638328fa70095cristy% % 61082b9582a27910c7baaeb04b7e969638328fa70095cristy% % 61092b9582a27910c7baaeb04b7e969638328fa70095cristy% % 6110322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% S e t P i x e l M e t a C h a n n e l s % 6111322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% % 6112322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% % 6113322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% % 6114322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6115322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% 6116322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% SetPixelMetaChannels() sets the image meta channels. 6117322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% 6118322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% The format of the SetPixelMetaChannels method is: 6119322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% 6120322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% MagickBooleanType SetPixelMetaChannels(Image *image, 6121322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% const size_t number_meta_channels,ExceptionInfo *exception) 6122322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% 6123322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% A description of each parameter follows: 6124322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% 6125322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% o image: the image. 6126322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% 6127322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% o number_meta_channels: the number of meta channels. 6128322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% 6129322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% o exception: return any errors or warnings in this structure. 6130322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% 6131322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy*/ 6132322d07da43d795a7c3b9a2d068d9a9005591cbe4cristyMagickExport MagickBooleanType SetPixelMetaChannels(Image *image, 6133322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy const size_t number_meta_channels,ExceptionInfo *exception) 6134322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy{ 6135322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy image->number_meta_channels=number_meta_channels; 6136322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy return(SyncImagePixelCache(image,exception)); 6137322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy} 6138