pixel.c revision db070957cf6bf959df9283a482377e8854c3d4d2
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% % 191454be7db7a897f42cd40e4165f945d77196a6f8cristy% Copyright 1999-2012 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" 624c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/quantum.h" 634c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/quantum-private.h" 644c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/resource_.h" 654c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/semaphore.h" 664c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/statistic.h" 674c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/stream.h" 684c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/string_.h" 694c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/transform.h" 704c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/utility.h" 714c08aed51c5899665ade97263692328eea4af106cristy 72146a62b25d7466cceec79975894ce812e11f4625cristy#define LogPixelChannels(image) \ 73146a62b25d7466cceec79975894ce812e11f4625cristy{ \ 74146a62b25d7466cceec79975894ce812e11f4625cristy register ssize_t \ 75146a62b25d7466cceec79975894ce812e11f4625cristy i; \ 76146a62b25d7466cceec79975894ce812e11f4625cristy \ 77146a62b25d7466cceec79975894ce812e11f4625cristy (void) LogMagickEvent(PixelEvent,GetMagickModule(),"%s[%.20g]", \ 78146a62b25d7466cceec79975894ce812e11f4625cristy image->filename,(double) image->number_channels); \ 79146a62b25d7466cceec79975894ce812e11f4625cristy for (i=0; i < (ssize_t) image->number_channels; i++) \ 80146a62b25d7466cceec79975894ce812e11f4625cristy { \ 81146a62b25d7466cceec79975894ce812e11f4625cristy char \ 82146a62b25d7466cceec79975894ce812e11f4625cristy traits[MaxTextExtent]; \ 83146a62b25d7466cceec79975894ce812e11f4625cristy \ 84146a62b25d7466cceec79975894ce812e11f4625cristy const char \ 854679572011210c29de1840060a4bf942afe8d29ecristy *name; \ 864679572011210c29de1840060a4bf942afe8d29ecristy \ 874679572011210c29de1840060a4bf942afe8d29ecristy PixelChannel \ 884679572011210c29de1840060a4bf942afe8d29ecristy channel; \ 89146a62b25d7466cceec79975894ce812e11f4625cristy \ 90e2a912b6c9086c98ec838baa0824cd8deca55538cristy switch (GetPixelChannelMapChannel(image,i)) \ 91146a62b25d7466cceec79975894ce812e11f4625cristy { \ 92146a62b25d7466cceec79975894ce812e11f4625cristy case RedPixelChannel: \ 93146a62b25d7466cceec79975894ce812e11f4625cristy { \ 944679572011210c29de1840060a4bf942afe8d29ecristy name="red"; \ 95146a62b25d7466cceec79975894ce812e11f4625cristy if (image->colorspace == CMYKColorspace) \ 964679572011210c29de1840060a4bf942afe8d29ecristy name="cyan"; \ 97146a62b25d7466cceec79975894ce812e11f4625cristy if (image->colorspace == GRAYColorspace) \ 984679572011210c29de1840060a4bf942afe8d29ecristy name="gray"; \ 99146a62b25d7466cceec79975894ce812e11f4625cristy break; \ 100146a62b25d7466cceec79975894ce812e11f4625cristy } \ 101146a62b25d7466cceec79975894ce812e11f4625cristy case GreenPixelChannel: \ 102146a62b25d7466cceec79975894ce812e11f4625cristy { \ 1034679572011210c29de1840060a4bf942afe8d29ecristy name="green"; \ 104146a62b25d7466cceec79975894ce812e11f4625cristy if (image->colorspace == CMYKColorspace) \ 1054679572011210c29de1840060a4bf942afe8d29ecristy name="magenta"; \ 106146a62b25d7466cceec79975894ce812e11f4625cristy break; \ 107146a62b25d7466cceec79975894ce812e11f4625cristy } \ 108146a62b25d7466cceec79975894ce812e11f4625cristy case BluePixelChannel: \ 109146a62b25d7466cceec79975894ce812e11f4625cristy { \ 1104679572011210c29de1840060a4bf942afe8d29ecristy name="blue"; \ 111146a62b25d7466cceec79975894ce812e11f4625cristy if (image->colorspace == CMYKColorspace) \ 1124679572011210c29de1840060a4bf942afe8d29ecristy name="yellow"; \ 113146a62b25d7466cceec79975894ce812e11f4625cristy break; \ 114146a62b25d7466cceec79975894ce812e11f4625cristy } \ 115146a62b25d7466cceec79975894ce812e11f4625cristy case BlackPixelChannel: \ 116146a62b25d7466cceec79975894ce812e11f4625cristy { \ 1174679572011210c29de1840060a4bf942afe8d29ecristy name="black"; \ 118146a62b25d7466cceec79975894ce812e11f4625cristy if (image->storage_class == PseudoClass) \ 1194679572011210c29de1840060a4bf942afe8d29ecristy name="index"; \ 120146a62b25d7466cceec79975894ce812e11f4625cristy break; \ 121146a62b25d7466cceec79975894ce812e11f4625cristy } \ 122e2a912b6c9086c98ec838baa0824cd8deca55538cristy case IndexPixelChannel: \ 123e2a912b6c9086c98ec838baa0824cd8deca55538cristy { \ 1244679572011210c29de1840060a4bf942afe8d29ecristy name="index"; \ 125e2a912b6c9086c98ec838baa0824cd8deca55538cristy break; \ 126e2a912b6c9086c98ec838baa0824cd8deca55538cristy } \ 127146a62b25d7466cceec79975894ce812e11f4625cristy case AlphaPixelChannel: \ 128146a62b25d7466cceec79975894ce812e11f4625cristy { \ 1294679572011210c29de1840060a4bf942afe8d29ecristy name="alpha"; \ 130146a62b25d7466cceec79975894ce812e11f4625cristy break; \ 131146a62b25d7466cceec79975894ce812e11f4625cristy } \ 132146a62b25d7466cceec79975894ce812e11f4625cristy case MaskPixelChannel: \ 133146a62b25d7466cceec79975894ce812e11f4625cristy { \ 1344679572011210c29de1840060a4bf942afe8d29ecristy name="mask"; \ 135146a62b25d7466cceec79975894ce812e11f4625cristy break; \ 136146a62b25d7466cceec79975894ce812e11f4625cristy } \ 137e2a912b6c9086c98ec838baa0824cd8deca55538cristy case MetaPixelChannel: \ 138146a62b25d7466cceec79975894ce812e11f4625cristy { \ 1394679572011210c29de1840060a4bf942afe8d29ecristy name="meta"; \ 140e2a912b6c9086c98ec838baa0824cd8deca55538cristy break; \ 141146a62b25d7466cceec79975894ce812e11f4625cristy } \ 142e2a912b6c9086c98ec838baa0824cd8deca55538cristy default: \ 1434679572011210c29de1840060a4bf942afe8d29ecristy name="undefined"; \ 144146a62b25d7466cceec79975894ce812e11f4625cristy } \ 1454679572011210c29de1840060a4bf942afe8d29ecristy channel=GetPixelChannelMapChannel(image,i); \ 146146a62b25d7466cceec79975894ce812e11f4625cristy *traits='\0'; \ 1474679572011210c29de1840060a4bf942afe8d29ecristy if ((GetPixelChannelMapTraits(image,channel) & UpdatePixelTrait) != 0) \ 148146a62b25d7466cceec79975894ce812e11f4625cristy (void) ConcatenateMagickString(traits,"update,",MaxTextExtent); \ 1494679572011210c29de1840060a4bf942afe8d29ecristy if ((GetPixelChannelMapTraits(image,channel) & BlendPixelTrait) != 0) \ 150146a62b25d7466cceec79975894ce812e11f4625cristy (void) ConcatenateMagickString(traits,"blend,",MaxTextExtent); \ 1514679572011210c29de1840060a4bf942afe8d29ecristy if ((GetPixelChannelMapTraits(image,channel) & CopyPixelTrait) != 0) \ 152146a62b25d7466cceec79975894ce812e11f4625cristy (void) ConcatenateMagickString(traits,"copy,",MaxTextExtent); \ 153146a62b25d7466cceec79975894ce812e11f4625cristy if (*traits == '\0') \ 154146a62b25d7466cceec79975894ce812e11f4625cristy (void) ConcatenateMagickString(traits,"undefined,",MaxTextExtent); \ 155146a62b25d7466cceec79975894ce812e11f4625cristy traits[strlen(traits)-1]='\0'; \ 156146a62b25d7466cceec79975894ce812e11f4625cristy (void) LogMagickEvent(PixelEvent,GetMagickModule()," %.20g: %s (%s)", \ 1574679572011210c29de1840060a4bf942afe8d29ecristy (double) i,name,traits); \ 158146a62b25d7466cceec79975894ce812e11f4625cristy } \ 159146a62b25d7466cceec79975894ce812e11f4625cristy} 160146a62b25d7466cceec79975894ce812e11f4625cristy 161146a62b25d7466cceec79975894ce812e11f4625cristy/* 1624c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1634c08aed51c5899665ade97263692328eea4af106cristy% % 1644c08aed51c5899665ade97263692328eea4af106cristy% % 1654c08aed51c5899665ade97263692328eea4af106cristy% % 166ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy+ A c q u i r e P i x e l C h a n n e l M a p % 1674c08aed51c5899665ade97263692328eea4af106cristy% % 1684c08aed51c5899665ade97263692328eea4af106cristy% % 1694c08aed51c5899665ade97263692328eea4af106cristy% % 1704c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1714c08aed51c5899665ade97263692328eea4af106cristy% 172ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy% AcquirePixelChannelMap() acquires a pixel component map. 1734c08aed51c5899665ade97263692328eea4af106cristy% 174ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy% The format of the AcquirePixelChannelMap() method is: 1754c08aed51c5899665ade97263692328eea4af106cristy% 176bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% PixelChannelMap *AcquirePixelChannelMap(void) 1774c08aed51c5899665ade97263692328eea4af106cristy% 1784c08aed51c5899665ade97263692328eea4af106cristy*/ 179bd5a96cd2b69f218f85a7adc306296a736f91a56cristyMagickExport PixelChannelMap *AcquirePixelChannelMap(void) 1804c08aed51c5899665ade97263692328eea4af106cristy{ 181ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy PixelChannelMap 182bd5a96cd2b69f218f85a7adc306296a736f91a56cristy *channel_map; 1834c08aed51c5899665ade97263692328eea4af106cristy 1844c08aed51c5899665ade97263692328eea4af106cristy register ssize_t 1854c08aed51c5899665ade97263692328eea4af106cristy i; 1864c08aed51c5899665ade97263692328eea4af106cristy 187bd5a96cd2b69f218f85a7adc306296a736f91a56cristy channel_map=(PixelChannelMap *) AcquireQuantumMemory(MaxPixelChannels, 188bd5a96cd2b69f218f85a7adc306296a736f91a56cristy sizeof(*channel_map)); 189bd5a96cd2b69f218f85a7adc306296a736f91a56cristy if (channel_map == (PixelChannelMap *) NULL) 1904c08aed51c5899665ade97263692328eea4af106cristy ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed"); 191bd5a96cd2b69f218f85a7adc306296a736f91a56cristy (void) ResetMagickMemory(channel_map,0,MaxPixelChannels*sizeof(*channel_map)); 192bd5a96cd2b69f218f85a7adc306296a736f91a56cristy for (i=0; i < MaxPixelChannels; i++) 193bd5a96cd2b69f218f85a7adc306296a736f91a56cristy channel_map[i].channel=(PixelChannel) i; 194ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy return(channel_map); 1954c08aed51c5899665ade97263692328eea4af106cristy} 1964c08aed51c5899665ade97263692328eea4af106cristy 1974c08aed51c5899665ade97263692328eea4af106cristy/* 1984c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1994c08aed51c5899665ade97263692328eea4af106cristy% % 2004c08aed51c5899665ade97263692328eea4af106cristy% % 2014c08aed51c5899665ade97263692328eea4af106cristy% % 202ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy+ C l o n e P i x e l C h a n n e l M a p % 2034c08aed51c5899665ade97263692328eea4af106cristy% % 2044c08aed51c5899665ade97263692328eea4af106cristy% % 2054c08aed51c5899665ade97263692328eea4af106cristy% % 2064c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2074c08aed51c5899665ade97263692328eea4af106cristy% 208ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy% ClonePixelChannelMap() clones a pixel component map. 2094c08aed51c5899665ade97263692328eea4af106cristy% 210ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy% The format of the ClonePixelChannelMap() method is: 2114c08aed51c5899665ade97263692328eea4af106cristy% 212bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% PixelChannelMap *ClonePixelChannelMap(PixelChannelMap *channel_map) 2134c08aed51c5899665ade97263692328eea4af106cristy% 2144c08aed51c5899665ade97263692328eea4af106cristy% A description of each parameter follows: 2154c08aed51c5899665ade97263692328eea4af106cristy% 216ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy% o channel_map: the pixel component map. 2174c08aed51c5899665ade97263692328eea4af106cristy% 2184c08aed51c5899665ade97263692328eea4af106cristy*/ 219bd5a96cd2b69f218f85a7adc306296a736f91a56cristyMagickExport PixelChannelMap *ClonePixelChannelMap(PixelChannelMap *channel_map) 2204c08aed51c5899665ade97263692328eea4af106cristy{ 221ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy PixelChannelMap 222bd5a96cd2b69f218f85a7adc306296a736f91a56cristy *clone_map; 2234c08aed51c5899665ade97263692328eea4af106cristy 224bd5a96cd2b69f218f85a7adc306296a736f91a56cristy assert(channel_map != (PixelChannelMap *) NULL); 225ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy clone_map=AcquirePixelChannelMap(); 226bd5a96cd2b69f218f85a7adc306296a736f91a56cristy if (clone_map == (PixelChannelMap *) NULL) 227bd5a96cd2b69f218f85a7adc306296a736f91a56cristy return((PixelChannelMap *) NULL); 228bd5a96cd2b69f218f85a7adc306296a736f91a56cristy (void) CopyMagickMemory(clone_map,channel_map,MaxPixelChannels* 229bd5a96cd2b69f218f85a7adc306296a736f91a56cristy sizeof(*channel_map)); 2304c08aed51c5899665ade97263692328eea4af106cristy return(clone_map); 2314c08aed51c5899665ade97263692328eea4af106cristy} 2324c08aed51c5899665ade97263692328eea4af106cristy 2334c08aed51c5899665ade97263692328eea4af106cristy/* 2344c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2354c08aed51c5899665ade97263692328eea4af106cristy% % 2364c08aed51c5899665ade97263692328eea4af106cristy% % 2374c08aed51c5899665ade97263692328eea4af106cristy% % 2384c08aed51c5899665ade97263692328eea4af106cristy+ C l o n e P i x e l I n f o % 2394c08aed51c5899665ade97263692328eea4af106cristy% % 2404c08aed51c5899665ade97263692328eea4af106cristy% % 2414c08aed51c5899665ade97263692328eea4af106cristy% % 2424c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2434c08aed51c5899665ade97263692328eea4af106cristy% 2444c08aed51c5899665ade97263692328eea4af106cristy% ClonePixelInfo() makes a duplicate of the given pixel info structure, or if 2454c08aed51c5899665ade97263692328eea4af106cristy% pixel info is NULL, a new one. 2464c08aed51c5899665ade97263692328eea4af106cristy% 2474c08aed51c5899665ade97263692328eea4af106cristy% The format of the ClonePixelInfo method is: 2484c08aed51c5899665ade97263692328eea4af106cristy% 2494c08aed51c5899665ade97263692328eea4af106cristy% PixelInfo *ClonePixelInfo(const PixelInfo *pixel_info) 2504c08aed51c5899665ade97263692328eea4af106cristy% 2514c08aed51c5899665ade97263692328eea4af106cristy% A description of each parameter follows: 2524c08aed51c5899665ade97263692328eea4af106cristy% 2534c08aed51c5899665ade97263692328eea4af106cristy% o pixel_info: the pixel info. 2544c08aed51c5899665ade97263692328eea4af106cristy% 2554c08aed51c5899665ade97263692328eea4af106cristy*/ 2564c08aed51c5899665ade97263692328eea4af106cristyMagickExport PixelInfo *ClonePixelInfo(const PixelInfo *pixel) 2574c08aed51c5899665ade97263692328eea4af106cristy{ 2584c08aed51c5899665ade97263692328eea4af106cristy PixelInfo 2594c08aed51c5899665ade97263692328eea4af106cristy *pixel_info; 2604c08aed51c5899665ade97263692328eea4af106cristy 261a64b85d7873d5e540fe6e2941aa98ec7653a4e2dcristy pixel_info=(PixelInfo *) AcquireQuantumMemory(1,sizeof(*pixel_info)); 2624c08aed51c5899665ade97263692328eea4af106cristy if (pixel_info == (PixelInfo *) NULL) 2634c08aed51c5899665ade97263692328eea4af106cristy ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed"); 2644c08aed51c5899665ade97263692328eea4af106cristy *pixel_info=(*pixel); 2654c08aed51c5899665ade97263692328eea4af106cristy return(pixel_info); 2664c08aed51c5899665ade97263692328eea4af106cristy} 2674c08aed51c5899665ade97263692328eea4af106cristy 2684c08aed51c5899665ade97263692328eea4af106cristy/* 2694c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2704c08aed51c5899665ade97263692328eea4af106cristy% % 2714c08aed51c5899665ade97263692328eea4af106cristy% % 2724c08aed51c5899665ade97263692328eea4af106cristy% % 273ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy+ D e s t r o y P i x e l C h a n n e l M a p % 2744c08aed51c5899665ade97263692328eea4af106cristy% % 2754c08aed51c5899665ade97263692328eea4af106cristy% % 2764c08aed51c5899665ade97263692328eea4af106cristy% % 2774c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2784c08aed51c5899665ade97263692328eea4af106cristy% 279ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy% DestroyPixelChannelMap() deallocates memory associated with the pixel 280ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy% channel map. 2814c08aed51c5899665ade97263692328eea4af106cristy% 282ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy% The format of the DestroyPixelChannelMap() method is: 2834c08aed51c5899665ade97263692328eea4af106cristy% 284bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% PixelChannelMap *DestroyPixelChannelMap(PixelChannelMap *channel_map) 2854c08aed51c5899665ade97263692328eea4af106cristy% 2864c08aed51c5899665ade97263692328eea4af106cristy% A description of each parameter follows: 2874c08aed51c5899665ade97263692328eea4af106cristy% 288ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy% o channel_map: the pixel component map. 2894c08aed51c5899665ade97263692328eea4af106cristy% 2904c08aed51c5899665ade97263692328eea4af106cristy*/ 291bd5a96cd2b69f218f85a7adc306296a736f91a56cristyMagickExport PixelChannelMap *DestroyPixelChannelMap( 292bd5a96cd2b69f218f85a7adc306296a736f91a56cristy PixelChannelMap *channel_map) 2934c08aed51c5899665ade97263692328eea4af106cristy{ 294bd5a96cd2b69f218f85a7adc306296a736f91a56cristy assert(channel_map != (PixelChannelMap *) NULL); 295bd5a96cd2b69f218f85a7adc306296a736f91a56cristy channel_map=(PixelChannelMap *) RelinquishMagickMemory(channel_map); 296bd5a96cd2b69f218f85a7adc306296a736f91a56cristy return((PixelChannelMap *) RelinquishMagickMemory(channel_map)); 2974c08aed51c5899665ade97263692328eea4af106cristy} 2983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 3003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% E x p o r t I m a g e P i x e l s % 3053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ExportImagePixels() extracts pixel data from an image and returns it to you. 3113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The method returns MagickTrue on success otherwise MagickFalse if an error is 312b5a45a37a6faa8a3725c814b51a1a86daa4ff21fcristy% encountered. The data is returned as char, short int, Quantum, unsigned int, 313cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy% unsigned long long, float, or double in the order specified by map. 3143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Suppose you want to extract the first scanline of a 640x480 image as 3163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% character data in red-green-blue order: 3173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ExportImagePixels(image,0,0,640,1,"RGB",CharPixel,pixels,exception); 3193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the ExportImagePixels method is: 3213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 322cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy% MagickBooleanType ExportImagePixels(const Image *image,const ssize_t x, 323cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy% const ssize_t y,const size_t width,const size_t height, 324cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy% const char *map,const StorageType type,void *pixels, 32546f4be29828ab7588745336d46ab11611c847933cristy% ExceptionInfo *exception) 3263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 3283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o image: the image. 3303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 331cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy% o x,y,width,height: These values define the perimeter 3323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% of a region of pixels you want to extract. 3333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o map: This string reflects the expected ordering of the pixel array. 3353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% It can be any combination or order of R = red, G = green, B = blue, 3363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A = alpha (0 is transparent), O = opacity (0 is opaque), C = cyan, 3373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Y = yellow, M = magenta, K = black, I = intensity (for grayscale), 3383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% P = pad. 3393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o type: Define the data type of the pixels. Float and double types are 3413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% normalized to [0..1] otherwise [0..QuantumRange]. Choose from these 3426c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy% types: CharPixel (char *), DoublePixel (double *), FloatPixel (float *), 343ff6834e270b99c2747ad5b2f4edeecf862aaf825cristy% LongPixel (unsigned int *), LongLongPixel (unsigned long long *), 3446c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy% QuantumPixel (Quantum *), or ShortPixel (unsigned short *). 3453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o pixels: This array of values contain the pixel components as defined by 3473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% map and type. You must preallocate this array where the expected 3483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% length varies depending on the values of width, height, map, and type. 3493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o exception: return any errors or warnings in this structure. 3513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 353e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 354cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ExportCharPixel(const Image *image,const RectangleInfo *roi, 35546f4be29828ab7588745336d46ab11611c847933cristy const char *restrict map,const QuantumType *quantum_map,void *pixels, 35646f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 3573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 358e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const Quantum 359e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *restrict p; 3603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 361bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 3623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x; 3633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 364e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register unsigned char 3653fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy *restrict q; 3663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3679d314ff2c17a77996c05413c2013880387e50f0ecristy ssize_t 3689d314ff2c17a77996c05413c2013880387e50f0ecristy y; 3699d314ff2c17a77996c05413c2013880387e50f0ecristy 37046f4be29828ab7588745336d46ab11611c847933cristy q=(unsigned char *) pixels; 371e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 3723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 373cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 375cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 376e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 3773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 378cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 379e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 380e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelBlue(image,p)); 381e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelGreen(image,p)); 382e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelRed(image,p)); 383e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 384e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 386e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 387e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 388e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 389e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 390cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 392cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 393e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 3943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 395cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 396e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 397e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelBlue(image,p)); 398e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelGreen(image,p)); 399e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelRed(image,p)); 400e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelAlpha(image,p)); 401e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 402e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 404e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 405e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 406e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 407e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 408cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 4093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 410cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 411e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 4123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 413cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 414e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 415e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelBlue(image,p)); 416e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelGreen(image,p)); 417e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelRed(image,p)); 418e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar((Quantum) 0); 419e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 420e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 422e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 423e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 424e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 425e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 426cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 4273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 428cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 429e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 430e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 431cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 432e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 433e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelIntensity(image,p)); 434e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 435e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 437e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 438e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 439e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 440e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 441cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 4423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 443cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 444e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 445e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 446cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 447e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 448e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelRed(image,p)); 449e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelGreen(image,p)); 450e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelBlue(image,p)); 451e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 452e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 454e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 455e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 456e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 457e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 458cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 4593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 460cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 461e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 4623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 463cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 464e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 465e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelRed(image,p)); 466e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelGreen(image,p)); 467e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelBlue(image,p)); 468e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelAlpha(image,p)); 469e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 470e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 472e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 473e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 474e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 475e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 476cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 4773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 478cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 479e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 480e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 481cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 482e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 483e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelRed(image,p)); 484e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelGreen(image,p)); 485e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelBlue(image,p)); 486e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar((Quantum) 0); 487e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 488e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 490e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 4913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 492cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 4933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 494cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 495e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 496e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 497cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 4983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 499e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 500e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 5013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 502e5370944fabb7afa477ab1325d400731b1e5d5e8cristy for (i=0; i < (ssize_t) strlen(map); i++) 503e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 504e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=0; 505e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 5063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 507e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 508e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 5093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 510e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToChar(GetPixelRed(image,p)); 511e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 5123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 513e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 514e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 5153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 516e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToChar(GetPixelGreen(image,p)); 517e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 5183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 519e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 520e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 5213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 522e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToChar(GetPixelBlue(image,p)); 523e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 5243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 525e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 5263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 527e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToChar(GetPixelAlpha(image,p)); 528e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 5293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 530e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 5313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 532e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToChar(GetPixelAlpha(image,p)); 533e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 5343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 535e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 5363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 537e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->colorspace == CMYKColorspace) 538e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToChar(GetPixelBlack(image,p)); 539e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 5403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 541e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 5423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 543e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToChar(GetPixelIntensity(image,p)); 544e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 5453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 546e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 547e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 5483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 549e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q++; 550e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 551e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 552e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 553e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 554e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 555e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 556cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ExportDoublePixel(const Image *image,const RectangleInfo *roi, 55746f4be29828ab7588745336d46ab11611c847933cristy const char *restrict map,const QuantumType *quantum_map,void *pixels, 55846f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 559e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 560e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const Quantum 561e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *restrict p; 562e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 563e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register double 5643fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy *restrict q; 565e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 566e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 567e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 568e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 569e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 570e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 571e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 572e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q=(double *) pixels; 573e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 574e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 575cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 5763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 577cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 5784c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 5793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 580cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 5813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 582e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelBlue(image,p)); 583e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelGreen(image,p)); 584e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelRed(image,p)); 585ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(image); 5863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 5873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 588e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 5893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 590e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 5913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 592cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 593e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 594cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 595e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 5963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 597cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 5983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 599e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelBlue(image,p)); 600e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelGreen(image,p)); 601e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelRed(image,p)); 602e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelAlpha(image,p)); 603e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 6043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 605e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 606e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 607e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 608e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 609e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 610cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 6113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 612cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 6134c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 6143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 615cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 6163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 617e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelBlue(image,p)); 618e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelGreen(image,p)); 619e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelRed(image,p)); 620e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=0.0; 621ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(image); 6223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 624e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 6253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 626e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 6273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 628cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 629e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 630cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 631e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 6323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 633cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 6343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 635e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelIntensity(image,p)); 636e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 6373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 638e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 639e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 640e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 641e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 642e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 643cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 644e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 645cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 646e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 6473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 648cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 6493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 650e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelRed(image,p)); 651e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelGreen(image,p)); 652e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelBlue(image,p)); 653e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 6543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 655e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 656e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 657e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 658e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 659e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 660cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 661e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 662cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 663e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 6643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 665cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 6663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 667e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelRed(image,p)); 668e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelGreen(image,p)); 669e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelBlue(image,p)); 670e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelAlpha(image,p)); 671e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 6723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 673e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 674e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 675e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 676e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 677e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 678cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 6793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 680cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 6814c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 6823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 683cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 6843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 685e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelRed(image,p)); 686e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelGreen(image,p)); 687e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelBlue(image,p)); 688e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=0.0; 689ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(image); 6903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 692e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 6933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 694cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 695e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 696cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 697e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 698e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 699cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 7003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 701e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 702e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 7033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 704e5370944fabb7afa477ab1325d400731b1e5d5e8cristy for (i=0; i < (ssize_t) strlen(map); i++) 705e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 706e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=0; 707e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 7083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 709e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 710e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 7113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 712e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(double) (QuantumScale*GetPixelRed(image,p)); 713e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 7143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 715e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 716e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 7173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 718e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(double) (QuantumScale*GetPixelGreen(image,p)); 719e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 7203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 721e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 722e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 7233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 724e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(double) (QuantumScale*GetPixelBlue(image,p)); 725e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 7263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 727e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 7283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 729e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(double) (QuantumScale*GetPixelAlpha(image,p)); 730e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 7313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 732e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 7333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 734e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(double) (QuantumScale*GetPixelAlpha(image,p)); 735e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 7363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 737e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 7383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 739e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->colorspace == CMYKColorspace) 740e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(double) (QuantumScale* 741e5370944fabb7afa477ab1325d400731b1e5d5e8cristy GetPixelBlack(image,p)); 742e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 7433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 744e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 7453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 746e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(double) (QuantumScale*GetPixelIntensity(image,p)); 747e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 7483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 749e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 750e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=0; 7513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 752e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q++; 753e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 754e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 755e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 756e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 757e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 758e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 759cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ExportFloatPixel(const Image *image,const RectangleInfo *roi, 76046f4be29828ab7588745336d46ab11611c847933cristy const char *restrict map,const QuantumType *quantum_map,void *pixels, 76146f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 762e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 763e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const Quantum 764e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *restrict p; 765e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 766e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register float 7673fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy *restrict q; 768e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 769e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 770e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 771e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 772e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 773e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 774e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 775e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q=(float *) pixels; 776e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 777e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 778cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 7793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 780cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 7814c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 7823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 783cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 7843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 785e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelBlue(image,p)); 786e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelGreen(image,p)); 787e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelRed(image,p)); 788ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(image); 7893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 7903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 791e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 7923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 793e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 7943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 795cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 796e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 797cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 798e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 7993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 800cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 8013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 802e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelBlue(image,p)); 803e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelGreen(image,p)); 804e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelRed(image,p)); 805e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelAlpha(image,p)); 806e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 8073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 808e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 809e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 810e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 811e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 812e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 813cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 8143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 815cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 8164c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 8173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 818cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 8193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 820e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelBlue(image,p)); 821e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelGreen(image,p)); 822e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelRed(image,p)); 823e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=0.0; 824ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(image); 8253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 8263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 827e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 8283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 829e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 8303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 831cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 832e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 833cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 834e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 8353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 836cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 8373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 838e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelIntensity(image,p)); 839e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 8403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 841e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 842e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 843e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 844e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 845e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 846cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 847e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 848cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 849e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 8503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 851cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 8523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 853e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelRed(image,p)); 854e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelGreen(image,p)); 855e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelBlue(image,p)); 856e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 8573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 858e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 859e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 860e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 861e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 862e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 863cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 864e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 865cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 866e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 8673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 868cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 8693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 870e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelRed(image,p)); 871e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelGreen(image,p)); 872e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelBlue(image,p)); 873e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelAlpha(image,p)); 874e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 8753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 876e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 877e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 878e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 879e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 880e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 881cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 8823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 883cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 8844c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 8853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 886cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 8873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 888e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelRed(image,p)); 889e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelGreen(image,p)); 890e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelBlue(image,p)); 891e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=0.0; 892ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(image); 8933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 8943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 895e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 8963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 897cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 898e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 899cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 900e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 901e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 902cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 9033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 904e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 905e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 9063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 907e5370944fabb7afa477ab1325d400731b1e5d5e8cristy for (i=0; i < (ssize_t) strlen(map); i++) 908e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 909e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=0; 910e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 9113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 912e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 913e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 9143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 915e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(float) (QuantumScale*GetPixelRed(image,p)); 916e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 9173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 918e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 919e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 9203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 921e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(float) (QuantumScale*GetPixelGreen(image,p)); 922e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 9233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 924e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 925e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 9263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 927e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(float) (QuantumScale*GetPixelBlue(image,p)); 928e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 9293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 930e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 9313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 932e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(float) (QuantumScale*((Quantum) (GetPixelAlpha(image,p)))); 933e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 9343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 935e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 9363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 937e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(float) (QuantumScale*GetPixelAlpha(image,p)); 938e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 9393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 940e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 9413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 942e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->colorspace == CMYKColorspace) 943e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(float) (QuantumScale* GetPixelBlack(image,p)); 944e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 9453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 946e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 9473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 948e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(float) (QuantumScale*GetPixelIntensity(image,p)); 949e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 9503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 951e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 952e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=0; 9533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 954e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q++; 955e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 956e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 957e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 958e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 959e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 960e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 961cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ExportLongPixel(const Image *image,const RectangleInfo *roi, 96246f4be29828ab7588745336d46ab11611c847933cristy const char *restrict map,const QuantumType *quantum_map,void *pixels, 96346f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 964e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 965e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const Quantum 966e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *restrict p; 967e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 968e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 969e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 970e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 971e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register unsigned int 9723fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy *restrict q; 973e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 974e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 975e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 976e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 977e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q=(unsigned int *) pixels; 978e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 979e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 980cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 9813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 982cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 9834c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 9843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 985cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 9863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 9876c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelBlue(image,p)); 9886c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelGreen(image,p)); 9896c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelRed(image,p)); 990ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(image); 9913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 9923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 993e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 9943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 995e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 9963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 997cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 998e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 999cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1000e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1001e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1002cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1003e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 10046c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelBlue(image,p)); 10056c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelGreen(image,p)); 10066c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelRed(image,p)); 10076c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelAlpha(image,p)); 1008e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1009e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1010e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1011e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1012e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1013e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 1014e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1015cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1016e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1017cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1018e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1019e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1020cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1021e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 10226c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelBlue(image,p)); 10236c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelGreen(image,p)); 10246c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelRed(image,p)); 10256c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=0; 1026e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1027e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1028e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1029e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1030e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1031e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 1032e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1033cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1034e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1035cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1036e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1037e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1038cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1039e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 10406c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelIntensity(image,p)); 1041e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1042e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1043e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1044e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1045e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1046e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 1047e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1048cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1049e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1050cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1051e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1052e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1053cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1054e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 10556c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelRed(image,p)); 10566c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelGreen(image,p)); 10576c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelBlue(image,p)); 1058e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1059e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1060e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1061e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1062e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1063e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 1064e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1065cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1066e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1067cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1068e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1069e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1070cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1071e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 10726c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelRed(image,p)); 10736c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelGreen(image,p)); 10746c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelBlue(image,p)); 10756c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelAlpha(image,p)); 1076e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1077e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1078e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1079e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1080e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1081e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 1082e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1083cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1084e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1085cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1086e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1087e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1088cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1089e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 10906c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelRed(image,p)); 10916c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelGreen(image,p)); 10926c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelBlue(image,p)); 10936c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=0; 1094e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1095e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1096e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1097e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1098e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1099cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1100e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1101cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1102e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1103e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1104cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1105e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1106e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 1107e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 1108e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1109e5370944fabb7afa477ab1325d400731b1e5d5e8cristy for (i=0; i < (ssize_t) strlen(map); i++) 1110e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1111e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=0; 1112e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 1113e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1114e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 1115e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 1116e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 11176c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q=ScaleQuantumToLong(GetPixelRed(image,p)); 1118e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1119e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1120e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 1121e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 1122e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 11236c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q=ScaleQuantumToLong(GetPixelGreen(image,p)); 1124e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1125e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1126e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 1127e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 1128e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 11296c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q=ScaleQuantumToLong(GetPixelBlue(image,p)); 1130e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1131e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1132e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 1133e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 11346c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q=ScaleQuantumToLong(GetPixelAlpha(image,p)); 1135e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1136e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1137e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 1138e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 11396c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q=ScaleQuantumToLong(GetPixelAlpha(image,p)); 1140e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1141e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1142e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 1143e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1144e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->colorspace == CMYKColorspace) 11456c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q=ScaleQuantumToLong(GetPixelBlack(image,p)); 1146e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1147e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1148e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 1149e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 11506c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q=ScaleQuantumToLong(GetPixelIntensity(image,p)); 1151e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1152e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1153e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 11546c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy break; 1155e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1156e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q++; 1157e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1158e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1159e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1160e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1161e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 1162e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1163cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ExportLongLongPixel(const Image *image,const RectangleInfo *roi, 116446f4be29828ab7588745336d46ab11611c847933cristy const char *restrict map,const QuantumType *quantum_map,void *pixels, 116546f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 1166e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 1167e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const Quantum 1168e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *restrict p; 1169e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1170e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 1171e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 1172e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1173b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy register MagickSizeType 11743fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy *restrict q; 1175e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1176e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 1177e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 1178e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1179b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy q=(MagickSizeType *) pixels; 1180e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 1181e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1182cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1183e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1184cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1185e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1186e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1187cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1188e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1189b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelBlue(image,p)); 1190b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelGreen(image,p)); 1191b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelRed(image,p)); 1192e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1193e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1194e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1195e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1196e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1197e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 1198e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1199cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1200e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1201cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1202e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1203e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1204cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1205e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1206b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelBlue(image,p)); 1207b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelGreen(image,p)); 1208b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelRed(image,p)); 1209b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelAlpha(image,p)); 1210e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1211e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1212e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1213e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1214e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1215e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 1216e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1217cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1218e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1219cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1220e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1221e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1222cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1223e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1224b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelBlue(image,p)); 1225b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelGreen(image,p)); 1226b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelRed(image,p)); 1227e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=0; 1228e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1229e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1230e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1231e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1232e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1233e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 1234e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1235cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1236e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1237cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1238e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1239e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1240cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1241e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1242b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelIntensity(image,p)); 1243e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1244e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1245e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1246e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1247e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1248e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 1249e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1250cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1251e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1252cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1253e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1254e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1255cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1256e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1257b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelRed(image,p)); 1258b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelGreen(image,p)); 1259b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelBlue(image,p)); 1260e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1261e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1262e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1263e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1264e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1265e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 1266e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1267cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1268e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1269cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1270e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1271e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1272cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1273e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1274b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelRed(image,p)); 1275b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelGreen(image,p)); 1276b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelBlue(image,p)); 1277b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelAlpha(image,p)); 1278e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1279e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1280e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1281e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1282e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1283e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 1284e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1285cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1286e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1287cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1288e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1289e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1290cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1291e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1292b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelRed(image,p)); 1293b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelGreen(image,p)); 1294b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelBlue(image,p)); 1295e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=0; 1296e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1297e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1298e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1299e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1300e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1301cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1302e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1303cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1304e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1305e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1306cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1307e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1308e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 1309e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 1310e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1311e5370944fabb7afa477ab1325d400731b1e5d5e8cristy for (i=0; i < (ssize_t) strlen(map); i++) 1312e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1313e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=0; 1314e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 1315e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1316e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 1317e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 1318e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1319b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q=ScaleQuantumToLongLong(GetPixelRed(image,p)); 1320e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1321e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1322e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 1323e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 1324e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1325b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q=ScaleQuantumToLongLong(GetPixelGreen(image,p)); 1326e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1327e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1328e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 1329e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 1330e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1331b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q=ScaleQuantumToLongLong(GetPixelBlue(image,p)); 1332e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1333e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1334e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 1335e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1336b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q=ScaleQuantumToLongLong(GetPixelAlpha(image,p)); 1337e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1338e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1339e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 1340e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1341b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q=ScaleQuantumToLongLong(GetPixelAlpha(image,p)); 1342e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1343e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1344e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 1345e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1346e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->colorspace == CMYKColorspace) 1347b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q=ScaleQuantumToLongLong(GetPixelBlack(image,p)); 1348e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1349e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1350e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 1351e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1352b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q=ScaleQuantumToLongLong(GetPixelIntensity(image,p)); 1353e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1354e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1355e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 1356e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1357e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1358e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q++; 1359e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1360e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1361e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1362e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1363e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 1364e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1365cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ExportQuantumPixel(const Image *image,const RectangleInfo *roi, 136646f4be29828ab7588745336d46ab11611c847933cristy const char *restrict map,const QuantumType *quantum_map,void *pixels, 136746f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 1368e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 1369e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const Quantum 1370e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *restrict p; 1371e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1372e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register Quantum 13733fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy *restrict q; 1374e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1375e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 1376e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 1377e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1378e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 1379e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 1380e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1381e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q=(Quantum *) pixels; 1382e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 1383e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1384cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1385e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1386cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1387e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1388e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1389cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1390e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1391e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelBlue(image,p); 1392e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelGreen(image,p); 1393e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelRed(image,p); 1394e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1395e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1396e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1397e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1398e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1399e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 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 { 1408e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelBlue(image,p); 1409e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelGreen(image,p); 1410e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelRed(image,p); 1411e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(Quantum) (GetPixelAlpha(image,p)); 1412e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1413e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1414e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1415e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1416e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1417e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 1418e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1419cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1420e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1421cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1422e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1423e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1424cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1425e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1426e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelBlue(image,p); 1427e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelGreen(image,p); 1428e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelRed(image,p); 1429e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(Quantum) 0; 1430e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1431e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1432e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1433e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1434e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1435e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 1436e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1437cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1438e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1439cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1440e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1441e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1442cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1443e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1444e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelIntensity(image,p); 1445e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1446e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1447e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1448e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1449e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1450e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 1451e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1452cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1453e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1454cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1455e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1456e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1457cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1458e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1459e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelRed(image,p); 1460e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelGreen(image,p); 1461e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelBlue(image,p); 1462e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1463e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1464e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1465e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1466e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1467e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 1468e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1469cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1470e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1471cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1472e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1473e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1474cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1475e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1476e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelRed(image,p); 1477e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelGreen(image,p); 1478e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelBlue(image,p); 1479e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(Quantum) (GetPixelAlpha(image,p)); 1480e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1481e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1482e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1483e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1484e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1485e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 1486e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1487cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1488e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1489cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1490e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1491e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1492cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1493e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1494e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelRed(image,p); 1495e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelGreen(image,p); 1496e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelBlue(image,p); 1497e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(Quantum) 0; 1498e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1499e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1500e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1501e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1502e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1503cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1504e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1505cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1506e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1507e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1508cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1509e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1510e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 1511e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 1512e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1513e5370944fabb7afa477ab1325d400731b1e5d5e8cristy for (i=0; i < (ssize_t) strlen(map); i++) 1514e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1515e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(Quantum) 0; 1516e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 1517e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1518e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 1519e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 1520e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1521e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=GetPixelRed(image,p); 1522e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1523e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1524e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 1525e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 1526e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1527e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=GetPixelGreen(image,p); 1528e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1529e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1530e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 1531e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 1532e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1533e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=GetPixelBlue(image,p); 1534e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1535e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1536e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 1537e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1538e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=GetPixelAlpha(image,p); 1539e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1540e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1541e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 1542e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1543e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=GetPixelAlpha(image,p); 1544e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1545e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1546e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 1547e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1548e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->colorspace == CMYKColorspace) 1549e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=GetPixelBlack(image,p); 1550e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1551e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1552e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 1553e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1554e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(GetPixelIntensity(image,p)); 1555e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1556e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1557e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 1558e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1559e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(Quantum) 0; 1560e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1561e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1562e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1563e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q++; 1564e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1565e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1566e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1567e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1568e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 1569e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1570cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ExportShortPixel(const Image *image,const RectangleInfo *roi, 157146f4be29828ab7588745336d46ab11611c847933cristy const char *restrict map,const QuantumType *quantum_map,void *pixels, 157246f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 1573e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 1574e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const Quantum 1575e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *restrict p; 1576e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1577e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 1578e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 1579e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1580e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 1581e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 1582e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1583e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register unsigned short 15843fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy *restrict q; 1585e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1586e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q=(unsigned short *) pixels; 1587e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 1588e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1589cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1590e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1591cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1592e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1593e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1594cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1595e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1596e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelBlue(image,p)); 1597e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelGreen(image,p)); 1598e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelRed(image,p)); 1599e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1600e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1601e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1602e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1603e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1604e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 1605e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1606cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1607e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1608cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1609e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1610e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1611cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1612e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1613e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelBlue(image,p)); 1614e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelGreen(image,p)); 1615e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelRed(image,p)); 1616e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelAlpha(image,p)); 1617e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1618e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1619e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1620e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1621e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1622e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 1623e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1624cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1625e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1626cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1627e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1628e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1629cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1630e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1631e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelBlue(image,p)); 1632e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelGreen(image,p)); 1633e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelRed(image,p)); 1634e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=0; 1635e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1636e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1637e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1638e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1639e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1640e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 1641e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1642cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1643e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1644cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1645e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1646e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1647cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1648e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1649e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelIntensity(image,p)); 1650e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1651e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1652e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1653e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1654e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1655e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 1656e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1657cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1658e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1659cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1660e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1661e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1662cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1663e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1664e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelRed(image,p)); 1665e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelGreen(image,p)); 1666e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelBlue(image,p)); 1667e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1668e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1669e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1670e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1671e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1672e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 1673e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1674cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1675e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1676cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1677e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1678e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1679cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1680e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1681e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelRed(image,p)); 1682e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelGreen(image,p)); 1683e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelBlue(image,p)); 1684e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelAlpha(image,p)); 1685e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1686e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1687e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1688e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1689e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1690e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 1691e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1692cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1693e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1694cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1695e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1696e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1697cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1698e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1699e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelRed(image,p)); 1700e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelGreen(image,p)); 1701e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelBlue(image,p)); 1702e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=0; 1703e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1704e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1705e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1706e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1707e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1708cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1709e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1710cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1711e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1712e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1713cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1714e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1715e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 1716e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 1717e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1718e5370944fabb7afa477ab1325d400731b1e5d5e8cristy for (i=0; i < (ssize_t) strlen(map); i++) 1719e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1720e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=0; 1721e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 1722e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1723e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 1724e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 1725e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1726e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToShort(GetPixelRed(image,p)); 1727e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1728e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1729e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 1730e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 1731e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1732e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToShort(GetPixelGreen(image,p)); 1733e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1734e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1735e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 1736e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 1737e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1738e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToShort(GetPixelBlue(image,p)); 1739e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1740e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1741e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 1742e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1743e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToShort(GetPixelAlpha(image,p)); 1744e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1745e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1746e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 1747e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1748e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToShort(GetPixelAlpha(image,p)); 1749e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1750e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1751e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 1752e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1753e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->colorspace == CMYKColorspace) 1754e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToShort(GetPixelBlack(image,p)); 1755e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1756e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1757e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 1758e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1759e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToShort(GetPixelIntensity(image,p)); 1760e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1761e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1762e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 1763e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1764e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1765e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q++; 1766e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1767e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1768e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1769e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1770e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 1771e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1772e5370944fabb7afa477ab1325d400731b1e5d5e8cristyMagickExport MagickBooleanType ExportImagePixels(const Image *image, 1773cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy const ssize_t x,const ssize_t y,const size_t width,const size_t height, 1774cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy const char *map,const StorageType type,void *pixels,ExceptionInfo *exception) 1775e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 1776e5370944fabb7afa477ab1325d400731b1e5d5e8cristy QuantumType 1777e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *quantum_map; 1778e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1779cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy RectangleInfo 1780cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy roi; 1781cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy 1782e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 1783e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 1784e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1785e5370944fabb7afa477ab1325d400731b1e5d5e8cristy assert(image != (Image *) NULL); 1786e5370944fabb7afa477ab1325d400731b1e5d5e8cristy assert(image->signature == MagickSignature); 1787e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->debug != MagickFalse) 1788e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename); 1789e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map=(QuantumType *) AcquireQuantumMemory(strlen(map), 1790e5370944fabb7afa477ab1325d400731b1e5d5e8cristy sizeof(*quantum_map)); 1791e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (quantum_map == (QuantumType *) NULL) 1792e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1793e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) ThrowMagickException(exception,GetMagickModule(), 1794e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ResourceLimitError,"MemoryAllocationFailed","`%s'",image->filename); 1795e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return(MagickFalse); 1796e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1797e5370944fabb7afa477ab1325d400731b1e5d5e8cristy for (i=0; i < (ssize_t) strlen(map); i++) 1798e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1799e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (map[i]) 1800e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1801e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'A': 1802e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'a': 1803e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1804e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=AlphaQuantum; 1805e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1806e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1807e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'B': 1808e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'b': 1809e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1810e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=BlueQuantum; 1811e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1812e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1813e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'C': 1814e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'c': 1815e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1816e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=CyanQuantum; 1817e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->colorspace == CMYKColorspace) 1818e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1819e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map); 1820e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) ThrowMagickException(exception,GetMagickModule(),ImageError, 1821e5370944fabb7afa477ab1325d400731b1e5d5e8cristy "ColorSeparatedImageRequired","`%s'",map); 1822e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return(MagickFalse); 1823e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1824e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'g': 1825e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'G': 1826e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1827e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=GreenQuantum; 1828e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1829e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1830e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'I': 1831e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'i': 1832e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1833e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=IndexQuantum; 1834e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1835e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1836e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'K': 1837e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'k': 1838e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1839e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=BlackQuantum; 1840e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->colorspace == CMYKColorspace) 1841e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1842e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map); 1843e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) ThrowMagickException(exception,GetMagickModule(),ImageError, 1844e5370944fabb7afa477ab1325d400731b1e5d5e8cristy "ColorSeparatedImageRequired","`%s'",map); 1845e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return(MagickFalse); 1846e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1847e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'M': 1848e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'm': 1849e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1850e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=MagentaQuantum; 1851e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->colorspace == CMYKColorspace) 1852e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1853e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map); 1854e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) ThrowMagickException(exception,GetMagickModule(),ImageError, 1855e5370944fabb7afa477ab1325d400731b1e5d5e8cristy "ColorSeparatedImageRequired","`%s'",map); 1856e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return(MagickFalse); 1857e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1858e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'o': 1859e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'O': 1860e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1861e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=OpacityQuantum; 1862e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1863e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1864e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'P': 1865e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'p': 1866e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1867e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=UndefinedQuantum; 1868e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1869e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1870e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'R': 1871e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'r': 1872e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1873e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=RedQuantum; 1874e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1875e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1876e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'Y': 1877e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'y': 1878e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1879e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=YellowQuantum; 1880e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->colorspace == CMYKColorspace) 1881e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1882e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map); 1883e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) ThrowMagickException(exception,GetMagickModule(),ImageError, 1884e5370944fabb7afa477ab1325d400731b1e5d5e8cristy "ColorSeparatedImageRequired","`%s'",map); 1885e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return(MagickFalse); 1886e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1887e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 1888e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1889e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map); 1890e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) ThrowMagickException(exception,GetMagickModule(),OptionError, 1891e5370944fabb7afa477ab1325d400731b1e5d5e8cristy "UnrecognizedPixelMap","`%s'",map); 1892e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return(MagickFalse); 1893e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1894e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1895e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1896cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy roi.width=width; 1897cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy roi.height=height; 1898cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy roi.x=x; 1899cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy roi.y=y; 1900e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (type) 1901e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1902e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CharPixel: 1903e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1904cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ExportCharPixel(image,&roi,map,quantum_map,pixels,exception); 1905e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1906e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1907e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case DoublePixel: 1908e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1909cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ExportDoublePixel(image,&roi,map,quantum_map,pixels,exception); 1910e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1911e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1912e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case FloatPixel: 1913e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1914cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ExportFloatPixel(image,&roi,map,quantum_map,pixels,exception); 1915e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1916e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 19176c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy case LongPixel: 1918e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1919cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ExportLongPixel(image,&roi,map,quantum_map,pixels,exception); 1920e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1921e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 19226c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy case LongLongPixel: 1923e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1924cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ExportLongLongPixel(image,&roi,map,quantum_map,pixels,exception); 1925e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1926e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1927e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case QuantumPixel: 1928e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1929cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ExportQuantumPixel(image,&roi,map,quantum_map,pixels,exception); 1930e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1931e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1932e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case ShortPixel: 1933e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1934cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ExportShortPixel(image,&roi,map,quantum_map,pixels,exception); 1935e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1936e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1937e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 1938e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1939e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map); 1940e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) ThrowMagickException(exception,GetMagickModule(),OptionError, 19413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "UnrecognizedPixelMap","`%s'",map); 19423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 19433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 19443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1945e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map); 1946e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return(MagickTrue); 1947e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 1948e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1949e5370944fabb7afa477ab1325d400731b1e5d5e8cristy/* 1950e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1951e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 1952e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 1953e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 1954e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% G e t P i x e l I n f o % 1955e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 1956e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 1957e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 1958e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1959e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 1960e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% GetPixelInfo() initializes the PixelInfo structure. 1961e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 1962e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% The format of the GetPixelInfo method is: 1963e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 1964e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% GetPixelInfo(const Image *image,PixelInfo *pixel) 1965e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 1966e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% A description of each parameter follows: 1967e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 1968e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% o image: the image. 1969e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 1970e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% o pixel: Specifies a pointer to a PixelInfo structure. 1971e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 1972e5370944fabb7afa477ab1325d400731b1e5d5e8cristy*/ 1973e5370944fabb7afa477ab1325d400731b1e5d5e8cristyMagickExport void GetPixelInfo(const Image *image,PixelInfo *pixel) 1974e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 1975e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->storage_class=DirectClass; 19767020ae6594690c03a4f73784fd41a7131a5b22c6cristy pixel->colorspace=sRGBColorspace; 1977e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->matte=MagickFalse; 1978e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->fuzz=0.0; 1979e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->depth=MAGICKCORE_QUANTUM_DEPTH; 1980e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->red=0.0; 1981e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->green=0.0; 1982e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->blue=0.0; 1983e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->black=0.0; 1984e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->alpha=(MagickRealType) OpaqueAlpha; 1985e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->index=0.0; 1986e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image == (const Image *) NULL) 1987e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1988e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->storage_class=image->storage_class; 1989e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->colorspace=image->colorspace; 1990e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->matte=image->matte; 1991e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->depth=image->depth; 1992e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->fuzz=image->fuzz; 1993e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 1994e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1995e5370944fabb7afa477ab1325d400731b1e5d5e8cristy/* 1996e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1997e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 1998e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 1999e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 2000e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% I m p o r t I m a g e P i x e l s % 2001e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 2002e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 2003e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 2004e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2005e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2006e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% ImportImagePixels() accepts pixel data and stores in the image at the 2007e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% location you specify. The method returns MagickTrue on success otherwise 2008e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% MagickFalse if an error is encountered. The pixel data can be either char, 2009b5a45a37a6faa8a3725c814b51a1a86daa4ff21fcristy% Quantum, short int, unsigned int, unsigned long long, float, or double in 2010b5a45a37a6faa8a3725c814b51a1a86daa4ff21fcristy% the order specified by map. 2011e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2012e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% Suppose your want to upload the first scanline of a 640x480 image from 2013e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% character data in red-green-blue order: 2014e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2015e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% ImportImagePixels(image,0,0,640,1,"RGB",CharPixel,pixels); 2016e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2017e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% The format of the ImportImagePixels method is: 2018e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2019cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy% MagickBooleanType ImportImagePixels(Image *image,const ssize_t x, 2020cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy% const ssize_t y,const size_t width,const size_t height, 2021cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy% const char *map,const StorageType type,const void *pixels, 2022cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy% ExceptionInfo *exception) 2023e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2024e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% A description of each parameter follows: 2025e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2026e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% o image: the image. 2027e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2028cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy% o x,y,width,height: These values define the perimeter 2029e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% of a region of pixels you want to define. 2030e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2031e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% o map: This string reflects the expected ordering of the pixel array. 2032e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% It can be any combination or order of R = red, G = green, B = blue, 2033e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% A = alpha (0 is transparent), O = opacity (0 is opaque), C = cyan, 2034e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% Y = yellow, M = magenta, K = black, I = intensity (for grayscale), 2035e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% P = pad. 2036e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2037e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% o type: Define the data type of the pixels. Float and double types are 2038e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% normalized to [0..1] otherwise [0..QuantumRange]. Choose from these 20396c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy% types: CharPixel (char *), DoublePixel (double *), FloatPixel (float *), 2040ff6834e270b99c2747ad5b2f4edeecf862aaf825cristy% LongPixel (unsigned int *), LongLongPixel (unsigned long long *), 20416c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy% QuantumPixel (Quantum *), or ShortPixel (unsigned short *). 2042e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2043e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% o pixels: This array of values contain the pixel components as defined by 2044e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% map and type. You must preallocate this array where the expected 2045e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% length varies depending on the values of width, height, map, and type. 2046e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2047e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% o exception: return any errors or warnings in this structure. 2048e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2049e5370944fabb7afa477ab1325d400731b1e5d5e8cristy*/ 2050e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2051cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ImportCharPixel(Image *image,const RectangleInfo *roi, 205246f4be29828ab7588745336d46ab11611c847933cristy const char *restrict map,const QuantumType *quantum_map,const void *pixels, 205346f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 2054e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 2055e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const unsigned char 2056e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *restrict p; 2057e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2058e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register Quantum 20593fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy *restrict q; 2060e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2061e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 2062e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 2063e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2064e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 2065e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 2066e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2067e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p=(const unsigned char *) pixels; 2068e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 2069e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2070cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2071e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2072cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2073e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2074e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2075cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2076e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2077e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleCharToQuantum(*p++),q); 2078e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleCharToQuantum(*p++),q); 2079e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleCharToQuantum(*p++),q); 2080e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2081e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2082e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2083e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2084e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2085e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2086e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2087e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 2088e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2089cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2090e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2091cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2092e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2093e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2094cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2095e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2096e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleCharToQuantum(*p++),q); 2097e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleCharToQuantum(*p++),q); 2098e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleCharToQuantum(*p++),q); 2099e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleCharToQuantum(*p++),q); 2100e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2101e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2102e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2103e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2104e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2105e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2106e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2107e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRO") == 0) 2108e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2109cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2110e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2111cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2112e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2113e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2114cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2115e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2116e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleCharToQuantum(*p++),q); 2117e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleCharToQuantum(*p++),q); 2118e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleCharToQuantum(*p++),q); 2119e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleCharToQuantum(*p++),q); 2120e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2121e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2122e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2123e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2124e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2125e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2126e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2127e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 2128e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2129cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2130e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2131cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2132e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2133e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2134cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2135e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2136e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleCharToQuantum(*p++),q); 2137e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleCharToQuantum(*p++),q); 2138e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleCharToQuantum(*p++),q); 2139e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2140e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2141e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2142e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2143e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2144e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2145e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2146e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2147e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 2148e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2149cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2150e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2151cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2152e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2153e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2154cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2155e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2156e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGray(image,ScaleCharToQuantum(*p++),q); 2157e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2158e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2159e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2160e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2161e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2162e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2163e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2164e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 2165e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2166cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2167e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2168cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2169e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2170e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2171cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2172e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2173e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleCharToQuantum(*p++),q); 2174e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleCharToQuantum(*p++),q); 2175e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleCharToQuantum(*p++),q); 2176e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2177e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2178e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2179e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2180e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2181e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2182e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2183e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 2184e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2185cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2186e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2187cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2188e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2189e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2190cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2191e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2192e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleCharToQuantum(*p++),q); 2193e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleCharToQuantum(*p++),q); 2194e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleCharToQuantum(*p++),q); 2195e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleCharToQuantum(*p++),q); 2196e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2197e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2198e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2199e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2200e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2201e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2202e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2203e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBO") == 0) 2204e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2205cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2206e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2207cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2208e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2209e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2210cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2211e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2212e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleCharToQuantum(*p++),q); 2213e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleCharToQuantum(*p++),q); 2214e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleCharToQuantum(*p++),q); 2215e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleCharToQuantum(*p++),q); 2216e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2217e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2218e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2219e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2220e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2221e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2222e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2223e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 2224e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2225cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2226e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2227cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2228e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2229e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2230cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2231e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2232e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleCharToQuantum(*p++),q); 2233e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleCharToQuantum(*p++),q); 2234e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleCharToQuantum(*p++),q); 2235e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2236e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2237e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2238e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2239e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2240e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2241e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2242e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2243cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2244e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2245cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2246e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2247e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2248cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2249e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2250e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 2251e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 2252e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2253e5370944fabb7afa477ab1325d400731b1e5d5e8cristy for (i=0; i < (ssize_t) strlen(map); i++) 2254e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2255e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 2256e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2257e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 2258e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 2259e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2260e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleCharToQuantum(*p),q); 2261e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2262e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2263e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 2264e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 2265e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2266e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleCharToQuantum(*p),q); 2267e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2268e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2269e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 2270e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 2271e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2272e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleCharToQuantum(*p),q); 2273e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2274e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2275e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 2276e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2277e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleCharToQuantum(*p),q); 2278e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2279e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2280e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 2281e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2282e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleCharToQuantum(*p),q); 2283e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2284e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2285e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 2286e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2287e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlack(image,ScaleCharToQuantum(*p),q); 2288e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2289e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2290e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 2291e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2292e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGray(image,ScaleCharToQuantum(*p),q); 2293e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2294e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2295e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 2296e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2297e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2298e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2299e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2300e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2301e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2302e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2303e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2304e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2305e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 2306e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2307cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ImportDoublePixel(Image *image,const RectangleInfo *roi, 230846f4be29828ab7588745336d46ab11611c847933cristy const char *restrict map,const QuantumType *quantum_map,const void *pixels, 230946f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 2310e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 2311e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const double 2312e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *restrict p; 2313e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2314e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register Quantum 23153fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy *restrict q; 2316e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2317e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 2318e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 2319e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2320e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 2321e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 2322e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2323e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p=(const double *) pixels; 2324e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 2325e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2326cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2327e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2328cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2329e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2330e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2331cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2332e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2333e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange* 2334e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2335e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2336e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange* 2337e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2338e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2339e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange* 2340e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2341e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2342e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2343e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2344e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2345e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2346e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2347e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2348e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2349e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 2350e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2351cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2352e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2353cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2354e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2355e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2356cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2357e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2358e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange* 2359e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2360e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2361e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange* 2362e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2363e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2364e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange* 2365e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2366e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2367e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ClampToQuantum((MagickRealType) QuantumRange* 2368e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2369e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2370e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2371e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2372e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2373e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2374e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2375e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2376e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2377e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 2378e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2379cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2380e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2381cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2382e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2383e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2384cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2385e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2386e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange* 2387e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2388e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2389e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange* 2390e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2391e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2392e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange* 2393e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2394e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2395e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2396e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2397e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2398e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2399e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2400e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2401e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2402e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2403e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 2404e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2405cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2406e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2407cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2408e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2409e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2410cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2411e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2412e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGray(image,ClampToQuantum((MagickRealType) QuantumRange* 2413e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2414e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2415e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2416e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2417e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2418e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2419e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2420e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2421e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2422e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 2423e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2424cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2425e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2426cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2427e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2428e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2429cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2430e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2431e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange* 2432e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2433e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2434e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange* 2435e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2436e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2437e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange* 2438e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2439e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2440e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2441e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2442e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2443e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2444e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2445e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2446e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2447e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 2448e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2449cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2450e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2451cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2452e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2453e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2454cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2455e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2456e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange* 2457e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2458e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2459e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange* 2460e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2461e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2462e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange* 2463e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2464e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2465e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ClampToQuantum((MagickRealType) QuantumRange* 2466e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2467e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2468e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2469e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2470e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2471e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2472e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2473e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2474e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2475e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 2476e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2477cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2478e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2479cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2480e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2481e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2482cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2483e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2484e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange* 2485e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2486e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2487e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange* 2488e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2489e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2490e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange* 2491e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2492e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2493e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2494e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2495e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2496e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2497e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2498e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2499e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2500cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2501e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2502cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2503e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2504e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2505cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2506e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2507e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 2508e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 2509e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2510e5370944fabb7afa477ab1325d400731b1e5d5e8cristy for (i=0; i < (ssize_t) strlen(map); i++) 2511e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2512e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 2513e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2514e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 2515e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 2516e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2517e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ClampToQuantum((MagickRealType) 2518e5370944fabb7afa477ab1325d400731b1e5d5e8cristy QuantumRange*(*p)),q); 2519e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2520e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2521e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 2522e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 2523e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2524e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ClampToQuantum((MagickRealType) 2525e5370944fabb7afa477ab1325d400731b1e5d5e8cristy QuantumRange*(*p)),q); 2526e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2527e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2528e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 2529e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 2530e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2531e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ClampToQuantum((MagickRealType) 2532e5370944fabb7afa477ab1325d400731b1e5d5e8cristy QuantumRange*(*p)),q); 2533e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2534e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2535e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 2536e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2537e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ClampToQuantum((MagickRealType) 2538e5370944fabb7afa477ab1325d400731b1e5d5e8cristy QuantumRange*(*p)),q); 2539e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2540e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2541e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 2542e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2543e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ClampToQuantum((MagickRealType) 2544e5370944fabb7afa477ab1325d400731b1e5d5e8cristy QuantumRange*(*p)),q); 2545e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2546e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2547e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 2548e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2549e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlack(image,ClampToQuantum((MagickRealType) 2550e5370944fabb7afa477ab1325d400731b1e5d5e8cristy QuantumRange*(*p)),q); 2551e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2552e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2553e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 2554e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2555e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGray(image,ClampToQuantum((MagickRealType) 2556e5370944fabb7afa477ab1325d400731b1e5d5e8cristy QuantumRange*(*p)),q); 2557e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2558e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2559e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 2560e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2561e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2562e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2563e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2564e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2565e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2566e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2567e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2568e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 25693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 2570e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2571cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ImportFloatPixel(Image *image,const RectangleInfo *roi, 257246f4be29828ab7588745336d46ab11611c847933cristy const char *restrict map,const QuantumType *quantum_map,const void *pixels, 257346f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 25743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 2575e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const float 2576e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *restrict p; 2577e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2578e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register Quantum 25793fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy *restrict q; 2580e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2581e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 2582e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 2583e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2584e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 2585e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 2586e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2587e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p=(const float *) pixels; 2588e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 2589e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2590cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2591e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2592cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2593e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2594e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2595cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2596e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2597e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange* 2598e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2599e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2600e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange* 2601e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2602e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2603e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange* 2604e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2605e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2606e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2607e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2608e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2609e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2610e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2611e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2612e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2613e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 2614e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2615cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2616e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2617cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2618e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2619e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2620cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2621e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2622e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange* 2623e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2624e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2625e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange* 2626e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2627e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2628e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange* 2629e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2630e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2631e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ClampToQuantum((MagickRealType) QuantumRange* 2632e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2633e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2634e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2635e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2636e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2637e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2638e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2639e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2640e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2641e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 2642e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2643cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2644e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2645cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2646e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2647e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2648cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2649e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2650e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange* 2651e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2652e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2653e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange* 2654e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2655e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2656e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange* 2657e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2658e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2659e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2660e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2661e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2662e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2663e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2664e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2665e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2666e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2667e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 2668e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2669cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2670e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2671cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2672e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2673e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2674cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2675e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2676e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGray(image,ClampToQuantum((MagickRealType) QuantumRange* 2677e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2678e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2679e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2680e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2681e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2682e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2683e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2684e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2685e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2686e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 2687e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2688cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2689e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2690cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2691e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2692e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2693cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2694e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2695e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange* 2696e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2697e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2698e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange* 2699e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2700e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2701e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange* 2702e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2703e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2704e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2705e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2706e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2707e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2708e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2709e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2710e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2711e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 2712e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2713cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2714e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2715cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2716e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2717e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2718cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2719e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2720e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ClampToQuantum((MagickRealType) 2721e5370944fabb7afa477ab1325d400731b1e5d5e8cristy QuantumRange*(*p)),q); 2722e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2723e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange* 2724e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2725e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2726e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange* 2727e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2728e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2729e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ClampToQuantum((MagickRealType) QuantumRange* 2730e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2731e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2732e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2733e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2734e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2735e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2736e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2737e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2738e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2739e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 2740e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2741cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2742e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2743cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2744e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2745e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2746cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2747e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2748e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange* 2749e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2750e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2751e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange* 2752e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2753e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2754e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange* 2755e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2756e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2757e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2758e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2759e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2760e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2761e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2762e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2763e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2764cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2765e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2766cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2767e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2768e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2769cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2770e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2771e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 2772e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 2773e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2774e5370944fabb7afa477ab1325d400731b1e5d5e8cristy for (i=0; i < (ssize_t) strlen(map); i++) 2775e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2776e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 2777e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2778e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 2779e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 2780e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2781e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ClampToQuantum((MagickRealType) 2782e5370944fabb7afa477ab1325d400731b1e5d5e8cristy QuantumRange*(*p)),q); 2783e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2784e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2785e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 2786e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 2787e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2788e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ClampToQuantum((MagickRealType) 2789e5370944fabb7afa477ab1325d400731b1e5d5e8cristy QuantumRange*(*p)),q); 2790e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2791e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2792e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 2793e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 2794e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2795e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ClampToQuantum((MagickRealType) 2796e5370944fabb7afa477ab1325d400731b1e5d5e8cristy QuantumRange*(*p)),q); 2797e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2798e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2799e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 2800e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2801e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ClampToQuantum((MagickRealType) 2802e5370944fabb7afa477ab1325d400731b1e5d5e8cristy QuantumRange*(*p)),q); 2803e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2804e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2805e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 2806e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2807e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ClampToQuantum((MagickRealType) 2808e5370944fabb7afa477ab1325d400731b1e5d5e8cristy QuantumRange*(*p)),q); 2809e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2810e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2811e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 2812e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2813e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlack(image,ClampToQuantum((MagickRealType) 2814e5370944fabb7afa477ab1325d400731b1e5d5e8cristy QuantumRange*(*p)),q); 2815e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2816e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2817e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 2818e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2819e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGray(image,ClampToQuantum((MagickRealType) 2820e5370944fabb7afa477ab1325d400731b1e5d5e8cristy QuantumRange*(*p)),q); 2821e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2822e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2823e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 2824e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2825e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2826e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2827e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2828e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2829e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2830e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2831e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2832e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2833e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 2834e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2835cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ImportLongPixel(Image *image,const RectangleInfo *roi, 283646f4be29828ab7588745336d46ab11611c847933cristy const char *restrict map,const QuantumType *quantum_map,const void *pixels, 283746f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 28383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 2839e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const unsigned int 2840e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *restrict p; 28413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 28424c08aed51c5899665ade97263692328eea4af106cristy register Quantum 28433fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy *restrict q; 28443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2845bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 28463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x; 28473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 28489d314ff2c17a77996c05413c2013880387e50f0ecristy ssize_t 28499d314ff2c17a77996c05413c2013880387e50f0ecristy y; 28509d314ff2c17a77996c05413c2013880387e50f0ecristy 2851e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p=(const unsigned int *) pixels; 2852e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 28533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2854cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 28553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2856cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2857e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2858e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2859cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2860e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2861e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleLongToQuantum(*p++),q); 2862e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleLongToQuantum(*p++),q); 2863e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleLongToQuantum(*p++),q); 2864e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2865e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2866e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2867e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 28683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2869e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2870e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2871e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 2872e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2873cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 28743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2875cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2876e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2877e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2878cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2879e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2880e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleLongToQuantum(*p++),q); 2881e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleLongToQuantum(*p++),q); 2882e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleLongToQuantum(*p++),q); 2883e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleLongToQuantum(*p++),q); 2884e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2885e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2886e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2887e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 28883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2889e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2890e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2891e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 2892e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2893cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 28943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2895cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2896e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2897e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2898cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2899e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2900e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleLongToQuantum(*p++),q); 2901e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleLongToQuantum(*p++),q); 2902e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleLongToQuantum(*p++),q); 2903e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2904e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2905e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2906e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2907e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 29083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2909e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2910e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2911e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 2912e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2913cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 29143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2915cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2916e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2917e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2918cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2919e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2920e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGray(image,ScaleLongToQuantum(*p++),q); 2921e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2922e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2923e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2924e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 29253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2926e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2927e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2928e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 2929e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2930cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 29313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2932cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2933e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2934e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2935cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2936e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2937e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleLongToQuantum(*p++),q); 2938e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleLongToQuantum(*p++),q); 2939e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleLongToQuantum(*p++),q); 2940e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2941e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2942e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2943e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 29443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2945e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2946e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2947e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 2948e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2949cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 29503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2951cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2952e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2953e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2954cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2955e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2956e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleLongToQuantum(*p++),q); 2957e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleLongToQuantum(*p++),q); 2958e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleLongToQuantum(*p++),q); 2959e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleLongToQuantum(*p++),q); 2960e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2961e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2962e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2963e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 29643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2965e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2966e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2967e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 2968e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2969cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 29703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2971cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2972e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2973e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2974cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2975e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2976e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleLongToQuantum(*p++),q); 2977e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleLongToQuantum(*p++),q); 2978e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleLongToQuantum(*p++),q); 2979e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2980e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2981e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2982e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2983e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 29843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2985e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2986e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2987cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2988e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2989cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2990e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2991e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2992cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2993e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2994e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 2995e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 2996e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2997e5370944fabb7afa477ab1325d400731b1e5d5e8cristy for (i=0; i < (ssize_t) strlen(map); i++) 29983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2999e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 3000e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3001e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 3002e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 3003e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3004e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleLongToQuantum(*p),q); 3005e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3006e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3007e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 3008e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 3009e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3010e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleLongToQuantum(*p),q); 3011e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3012e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3013e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 3014e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 3015e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3016e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleLongToQuantum(*p),q); 3017e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3018e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3019e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 3020e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3021e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleLongToQuantum(*p),q); 3022e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3023e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3024e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 3025e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3026e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleLongToQuantum(*p),q); 3027e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3028e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3029e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 3030e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3031e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlack(image,ScaleLongToQuantum(*p),q); 3032e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3033e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3034e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 3035e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3036e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGray(image,ScaleLongToQuantum(*p),q); 3037e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3038e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3039e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 3040e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3041e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3042e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3043e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3044e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3045e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3046e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3047e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3048e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3049e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 3050e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3051cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ImportLongLongPixel(Image *image,const RectangleInfo *roi, 305246f4be29828ab7588745336d46ab11611c847933cristy const char *restrict map,const QuantumType *quantum_map,const void *pixels, 305346f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 3054e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 3055b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy register const MagickSizeType 3056e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *restrict p; 3057e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3058e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register Quantum 30593fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy *restrict q; 3060e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3061e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 3062e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 3063e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3064e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 3065e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 3066e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3067b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy p=(const MagickSizeType *) pixels; 3068e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 3069e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3070cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3071e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3072cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3073e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3074e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3075cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3076e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3077b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelBlue(image,ScaleLongLongToQuantum(*p++),q); 3078b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelGreen(image,ScaleLongLongToQuantum(*p++),q); 3079b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelRed(image,ScaleLongLongToQuantum(*p++),q); 3080e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3081e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3082e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3083e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3084e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3085e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3086e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3087e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 3088e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3089cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3090e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 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 { 3096b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelBlue(image,ScaleLongLongToQuantum(*p++),q); 3097b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelGreen(image,ScaleLongLongToQuantum(*p++),q); 3098b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelRed(image,ScaleLongLongToQuantum(*p++),q); 3099b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelAlpha(image,ScaleLongLongToQuantum(*p++),q); 3100e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3101e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3102e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3103e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3104e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3105e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3106e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3107e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 3108e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3109cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3110e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3111cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3112e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3113e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3114cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3115e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3116b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelBlue(image,ScaleLongLongToQuantum(*p++),q); 3117b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelGreen(image,ScaleLongLongToQuantum(*p++),q); 3118b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelRed(image,ScaleLongLongToQuantum(*p++),q); 3119e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3120e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3121e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3122e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3123e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 31243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3125e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3126e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3127e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 3128e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3129cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 31303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3131cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3132e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3133e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3134cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3135e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3136b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelGray(image,ScaleLongLongToQuantum(*p++),q); 3137e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3138e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3139e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3140e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 31413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3142e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3143e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3144e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 3145e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3146cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 31473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3148cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3149e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3150e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3151cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3152e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3153b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelRed(image,ScaleLongLongToQuantum(*p++),q); 3154b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelGreen(image,ScaleLongLongToQuantum(*p++),q); 3155b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelBlue(image,ScaleLongLongToQuantum(*p++),q); 3156e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3157e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3158e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3159e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 31603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3161e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3162e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3163e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 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 { 3172b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelRed(image,ScaleLongLongToQuantum(*p++),q); 3173b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelGreen(image,ScaleLongLongToQuantum(*p++),q); 3174b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelBlue(image,ScaleLongLongToQuantum(*p++),q); 3175b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelAlpha(image,ScaleLongLongToQuantum(*p++),q); 3176e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3177e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3178e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3179e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 31803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3181e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3182e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3183e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 3184e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3185cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 31863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3187cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3188e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3189e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3190cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3191e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3192b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelRed(image,ScaleLongLongToQuantum(*p++),q); 3193b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelGreen(image,ScaleLongLongToQuantum(*p++),q); 3194b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelBlue(image,ScaleLongLongToQuantum(*p++),q); 3195e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3196e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3197e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3198e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3199e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 32003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3201e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 32023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3203cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 32043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3205cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3206e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3207e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3208cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 32093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3210e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 3211e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 32123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3213e5370944fabb7afa477ab1325d400731b1e5d5e8cristy for (i=0; i < (ssize_t) strlen(map); i++) 3214e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3215e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 32163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3217e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 3218e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 32193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3220b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelRed(image,ScaleLongLongToQuantum(*p),q); 3221e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 32223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3223e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 3224e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 32253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3226b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelGreen(image,ScaleLongLongToQuantum(*p),q); 3227e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 32283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3229e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 3230e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 32313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3232b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelBlue(image,ScaleLongLongToQuantum(*p),q); 3233e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 32343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3235e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 32363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3237b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelAlpha(image,ScaleLongLongToQuantum(*p),q); 3238e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 32393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3240e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 32413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3242b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelAlpha(image,ScaleLongLongToQuantum(*p),q); 3243e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 32443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3245e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 32463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3247b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelBlack(image,ScaleLongLongToQuantum(*p),q); 3248e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 32493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3250e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 32513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3252b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelGray(image,ScaleLongLongToQuantum(*p),q); 3253e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 32543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3255e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 3256e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 32573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3258e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3259e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3260e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3261e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3262e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3263e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3264e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3265e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 3266e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3267cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ImportQuantumPixel(Image *image,const RectangleInfo *roi, 326846f4be29828ab7588745336d46ab11611c847933cristy const char *restrict map,const QuantumType *quantum_map,const void *pixels, 326946f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 3270e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 3271e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const Quantum 3272e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *restrict p; 3273e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3274e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register Quantum 32753fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy *restrict q; 3276e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3277e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 3278e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 3279e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3280e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 3281e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 3282e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3283e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p=(const Quantum *) pixels; 3284e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 3285e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3286cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3287e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3288cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3289e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 32903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3291cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 32923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3293e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,*p++,q); 3294e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,*p++,q); 3295e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,*p++,q); 3296e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3297e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3298e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3299e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3300e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3301e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3302e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3303e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 3304e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3305cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3306e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3307cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3308e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 33093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3310cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3311e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3312e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,*p++,q); 3313e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,*p++,q); 3314e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,*p++,q); 3315e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,*p++,q); 3316e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 33173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3318e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3319e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3320e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3321e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3322e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3323e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 3324e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3325cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 33263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3327cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 33284c08aed51c5899665ade97263692328eea4af106cristy if (q == (Quantum *) NULL) 33293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3330cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 33313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3332e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,*p++,q); 3333e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,*p++,q); 3334e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,*p++,q); 3335e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3336ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(image); 33373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 33383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 33393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 33403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3341e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 33423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3343e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 33443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3345cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3346e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3347cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3348e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 33493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3350cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3351e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3352e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGray(image,*p++,q); 3353e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 33543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3355e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3356e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3357e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3358e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3359e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3360e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 3361e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3362cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 33633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3364cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 33654c08aed51c5899665ade97263692328eea4af106cristy if (q == (Quantum *) NULL) 33663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3367cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 33683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3369e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,*p++,q); 3370e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,*p++,q); 3371e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,*p++,q); 3372ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(image); 33733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 33743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 33753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 33763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3377e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 33783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3379e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 33803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3381cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3382e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3383cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3384e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 33853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3386cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3387e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3388e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,*p++,q); 3389e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,*p++,q); 3390e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,*p++,q); 3391e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,*p++,q); 3392e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 33933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3394e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3395e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3396e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3397e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3398e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3399e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 3400e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3401cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 34023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3403cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 34044c08aed51c5899665ade97263692328eea4af106cristy if (q == (Quantum *) NULL) 34053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3406cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 34073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3408e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,*p++,q); 3409e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,*p++,q); 3410e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,*p++,q); 3411e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3412ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(image); 34133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 34143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 34153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 34163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3417e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 34183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3419cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3420e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3421cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3422e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3423e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3424cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 34253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3426e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 3427e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 34283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3429e5370944fabb7afa477ab1325d400731b1e5d5e8cristy for (i=0; i < (ssize_t) strlen(map); i++) 3430e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3431e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 34323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3433e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 3434e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 34353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3436e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,*p,q); 3437e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 34383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3439e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 3440e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 34413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3442e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,*p,q); 3443e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 34443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3445e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 3446e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 34473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3448e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,*p,q); 3449e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 34503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3451e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 34523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3453e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,*p,q); 3454e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 34553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3456e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 34573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3458e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,*p,q); 3459e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 34603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3461e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 34623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3463e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlack(image,*p,q); 3464e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 34653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3466e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 34673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3468e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGray(image,*p,q); 3469e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 34703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3471e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 3472e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 34733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3474e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3475e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3476e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3477e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3478e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3479e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3480e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3481e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 3482e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3483cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ImportShortPixel(Image *image,const RectangleInfo *roi, 348446f4be29828ab7588745336d46ab11611c847933cristy const char *restrict map,const QuantumType *quantum_map,const void *pixels, 348546f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 3486e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 3487e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const unsigned short 3488e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *restrict p; 3489e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3490e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register Quantum 34913fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy *restrict q; 3492e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3493e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 3494e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 3495e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3496e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 3497e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 3498e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3499e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p=(const unsigned short *) pixels; 3500e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 3501e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3502cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 35033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3504cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 35054c08aed51c5899665ade97263692328eea4af106cristy if (q == (Quantum *) NULL) 35063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3507cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 35083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3509e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleShortToQuantum(*p++),q); 3510e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleShortToQuantum(*p++),q); 3511e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleShortToQuantum(*p++),q); 3512ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(image); 35133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 35143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 35153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 35163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3517e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 35183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3519e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 35203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3521cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3522e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3523cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3524e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 35253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3526cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 35273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3528e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleShortToQuantum(*p++),q); 3529e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleShortToQuantum(*p++),q); 3530e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleShortToQuantum(*p++),q); 3531e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleShortToQuantum(*p++),q); 3532e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 35333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3534e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 35353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3536e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3537e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3538e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3539e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 3540e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3541cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 35423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3543cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 35444c08aed51c5899665ade97263692328eea4af106cristy if (q == (Quantum *) NULL) 35453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3546cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 35473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3548e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleShortToQuantum(*p++),q); 3549e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleShortToQuantum(*p++),q); 3550e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleShortToQuantum(*p++),q); 3551e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3552ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(image); 35533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 35543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 35553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 35563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3557e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 35583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3559e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 35603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3561cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3562e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3563cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3564e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 35653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3566cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 35673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3568e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGray(image,ScaleShortToQuantum(*p++),q); 3569e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 35703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3571e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 35723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3573e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3574e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3575e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3576e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 3577e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3578cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3579e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3580cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3581e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 35823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3583cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 35843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3585e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleShortToQuantum(*p++),q); 3586e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleShortToQuantum(*p++),q); 3587e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleShortToQuantum(*p++),q); 3588e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 35893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3590e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 35913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3592e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3593e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3594e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3595e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 3596e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3597cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3598e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3599cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3600e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 36013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3602cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3603e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3604e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleShortToQuantum(*p++),q); 3605e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleShortToQuantum(*p++),q); 3606e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleShortToQuantum(*p++),q); 3607e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleShortToQuantum(*p++),q); 3608e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 36093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3610e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3611e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3612e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3613e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3614e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3615e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 3616e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3617cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 36183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3619cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 36204c08aed51c5899665ade97263692328eea4af106cristy if (q == (Quantum *) NULL) 36213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3622cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 36233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3624e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleShortToQuantum(*p++),q); 3625e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleShortToQuantum(*p++),q); 3626e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleShortToQuantum(*p++),q); 3627e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3628ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(image); 36293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 36303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 36313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 36323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3633e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 36343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3635cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3636e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3637cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3638e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3639e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3640cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 36413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3642e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 3643e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 36443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3645e5370944fabb7afa477ab1325d400731b1e5d5e8cristy for (i=0; i < (ssize_t) strlen(map); i++) 3646e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3647e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 36483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3649e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 3650e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 36513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3652e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleShortToQuantum(*p),q); 3653e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 36543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3655e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 3656e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 36573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3658e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleShortToQuantum(*p),q); 3659e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 36603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3661e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 3662e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 36633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3664e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleShortToQuantum(*p),q); 3665e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 36663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3667e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 36683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3669e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleShortToQuantum(*p),q); 3670e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 36713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3672e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 36733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3674e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleShortToQuantum(*p),q); 3675e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 36763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3677e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 36783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3679e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlack(image,ScaleShortToQuantum(*p),q); 3680e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 36813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3682e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 36833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3684e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGray(image,ScaleShortToQuantum(*p),q); 3685e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 36863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3687e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 3688e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 36893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3690e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3691e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3692e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3693e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3694e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3695e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3696e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3697e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 3698e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3699cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristyMagickExport MagickBooleanType ImportImagePixels(Image *image,const ssize_t x, 3700cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy const ssize_t y,const size_t width,const size_t height,const char *map, 3701cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy const StorageType type,const void *pixels,ExceptionInfo *exception) 3702e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 3703e5370944fabb7afa477ab1325d400731b1e5d5e8cristy QuantumType 3704e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *quantum_map; 3705e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3706cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy RectangleInfo 3707cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy roi; 3708cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy 3709e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 3710e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 3711e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3712e5370944fabb7afa477ab1325d400731b1e5d5e8cristy /* 3713e5370944fabb7afa477ab1325d400731b1e5d5e8cristy Allocate image structure. 3714e5370944fabb7afa477ab1325d400731b1e5d5e8cristy */ 3715e5370944fabb7afa477ab1325d400731b1e5d5e8cristy assert(image != (Image *) NULL); 3716e5370944fabb7afa477ab1325d400731b1e5d5e8cristy assert(image->signature == MagickSignature); 3717e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->debug != MagickFalse) 3718e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename); 3719e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map=(QuantumType *) AcquireQuantumMemory(strlen(map), 3720e5370944fabb7afa477ab1325d400731b1e5d5e8cristy sizeof(*quantum_map)); 3721e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (quantum_map == (QuantumType *) NULL) 3722e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ThrowBinaryException(ResourceLimitError,"MemoryAllocationFailed", 3723e5370944fabb7afa477ab1325d400731b1e5d5e8cristy image->filename); 3724e5370944fabb7afa477ab1325d400731b1e5d5e8cristy for (i=0; i < (ssize_t) strlen(map); i++) 3725e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3726e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (map[i]) 3727e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3728e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'a': 3729e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'A': 37303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3731e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=AlphaQuantum; 3732e5370944fabb7afa477ab1325d400731b1e5d5e8cristy image->matte=MagickTrue; 3733e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3734e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3735e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'B': 3736e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'b': 3737e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3738e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=BlueQuantum; 3739e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3740e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3741e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'C': 3742e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'c': 3743e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3744e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=CyanQuantum; 3745e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) SetImageColorspace(image,CMYKColorspace,exception); 3746e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3747e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3748e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'g': 3749e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'G': 3750e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3751e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=GreenQuantum; 3752e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3753e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3754e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'K': 3755e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'k': 3756e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3757e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=BlackQuantum; 3758e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) SetImageColorspace(image,CMYKColorspace,exception); 3759e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3760e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3761e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'I': 3762e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'i': 3763e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3764e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=IndexQuantum; 3765e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3766e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3767e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'm': 3768e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'M': 3769e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3770e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=MagentaQuantum; 3771e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) SetImageColorspace(image,CMYKColorspace,exception); 3772e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3773e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3774e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'O': 3775e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'o': 3776e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3777e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=OpacityQuantum; 3778e5370944fabb7afa477ab1325d400731b1e5d5e8cristy image->matte=MagickTrue; 3779e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3780e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3781e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'P': 3782e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'p': 3783e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3784e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=UndefinedQuantum; 3785e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3786e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3787e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'R': 3788e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'r': 3789e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3790e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=RedQuantum; 3791e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 37923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3793e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'Y': 3794e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'y': 3795e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3796e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=YellowQuantum; 3797e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) SetImageColorspace(image,CMYKColorspace,exception); 3798e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3799e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3800e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 3801e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3802e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map); 3803e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) ThrowMagickException(exception,GetMagickModule(),OptionError, 3804e5370944fabb7afa477ab1325d400731b1e5d5e8cristy "UnrecognizedPixelMap","`%s'",map); 3805e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return(MagickFalse); 3806e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3807e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3808e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3809e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SetImageStorageClass(image,DirectClass,exception) == MagickFalse) 3810e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return(MagickFalse); 3811e5370944fabb7afa477ab1325d400731b1e5d5e8cristy /* 3812e5370944fabb7afa477ab1325d400731b1e5d5e8cristy Transfer the pixels from the pixel data to the image. 3813e5370944fabb7afa477ab1325d400731b1e5d5e8cristy */ 3814cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy roi.width=width; 3815cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy roi.height=height; 3816cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy roi.x=x; 3817cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy roi.y=y; 3818e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (type) 3819e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3820e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CharPixel: 3821e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3822cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ImportCharPixel(image,&roi,map,quantum_map,pixels,exception); 3823e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3824e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3825e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case DoublePixel: 3826e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3827cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ImportDoublePixel(image,&roi,map,quantum_map,pixels,exception); 3828e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3829e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3830e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case FloatPixel: 3831e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3832cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ImportFloatPixel(image,&roi,map,quantum_map,pixels,exception); 3833e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3834e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 38356c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy case LongPixel: 3836e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3837cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ImportLongPixel(image,&roi,map,quantum_map,pixels,exception); 3838e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3839e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 38406c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy case LongLongPixel: 3841e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3842cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ImportLongLongPixel(image,&roi,map,quantum_map,pixels,exception); 3843e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3844e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3845e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case QuantumPixel: 3846e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3847cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ImportQuantumPixel(image,&roi,map,quantum_map,pixels,exception); 3848e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3849e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3850e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case ShortPixel: 3851e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3852cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ImportShortPixel(image,&roi,map,quantum_map,pixels,exception); 38533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 38543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 38553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 38563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 38573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map); 3858c82a27bb8e3138ff9bbf0f696663bdf3e704cedecristy (void) ThrowMagickException(exception,GetMagickModule(),OptionError, 3859c82a27bb8e3138ff9bbf0f696663bdf3e704cedecristy "UnrecognizedPixelMap","`%s'",map); 38603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 38613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 38623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 38633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map); 38643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickTrue); 38653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 3866d76c51ed30cf4084f4434ba08925d16001d1e340cristy 3867d76c51ed30cf4084f4434ba08925d16001d1e340cristy/* 3868d76c51ed30cf4084f4434ba08925d16001d1e340cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3869a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% % 3870a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% % 3871a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% % 3872bd5a96cd2b69f218f85a7adc306296a736f91a56cristy+ 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 % 3873bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% % 3874bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% % 3875bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% % 3876bd5a96cd2b69f218f85a7adc306296a736f91a56cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3877bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% 3878bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% InitializePixelChannelMap() defines the standard pixel component map. 3879bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% 3880bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% The format of the InitializePixelChannelMap() method is: 3881bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% 3882bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% void InitializePixelChannelMap(Image *image) 3883bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% 3884bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% A description of each parameter follows: 3885bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% 3886bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% o image: the image. 3887bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% 3888bd5a96cd2b69f218f85a7adc306296a736f91a56cristy*/ 3889e2a912b6c9086c98ec838baa0824cd8deca55538cristyMagickExport void InitializePixelChannelMap(Image *image) 389077c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy{ 3891e2a912b6c9086c98ec838baa0824cd8deca55538cristy PixelTrait 3892e2a912b6c9086c98ec838baa0824cd8deca55538cristy trait; 3893e2a912b6c9086c98ec838baa0824cd8deca55538cristy 389477c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy register ssize_t 389577c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy i; 389677c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy 3897d26338ffb761a86f047d7bbb9a596800f53c8649cristy ssize_t 389877c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy n; 389977c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy 390077c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy assert(image != (Image *) NULL); 390177c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy assert(image->signature == MagickSignature); 3902e2a912b6c9086c98ec838baa0824cd8deca55538cristy (void) ResetMagickMemory(image->channel_map,0,MaxPixelChannels* 3903e2a912b6c9086c98ec838baa0824cd8deca55538cristy sizeof(*image->channel_map)); 3904e2a912b6c9086c98ec838baa0824cd8deca55538cristy trait=UpdatePixelTrait; 3905e2a912b6c9086c98ec838baa0824cd8deca55538cristy if (image->matte != MagickFalse) 390661f18adcc41fdd05d57e50544cdb9d321bb18953cristy trait=(PixelTrait) (trait | BlendPixelTrait); 390777c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy n=0; 3908c06c58036e12a41593f1c7a984f1fdb4e9cc434bcristy if (image->colorspace == GRAYColorspace) 390977c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy { 39103c3162882db2814a5b709072cd03b8d18c80d6afcristy SetPixelChannelMap(image,BluePixelChannel,trait,n); 3911e2a912b6c9086c98ec838baa0824cd8deca55538cristy SetPixelChannelMap(image,GreenPixelChannel,trait,n); 39123c3162882db2814a5b709072cd03b8d18c80d6afcristy SetPixelChannelMap(image,RedPixelChannel,trait,n++); 39133c3162882db2814a5b709072cd03b8d18c80d6afcristy } 39143c3162882db2814a5b709072cd03b8d18c80d6afcristy else 39153c3162882db2814a5b709072cd03b8d18c80d6afcristy { 39163c3162882db2814a5b709072cd03b8d18c80d6afcristy SetPixelChannelMap(image,RedPixelChannel,trait,n++); 39173c3162882db2814a5b709072cd03b8d18c80d6afcristy SetPixelChannelMap(image,GreenPixelChannel,trait,n++); 3918e2a912b6c9086c98ec838baa0824cd8deca55538cristy SetPixelChannelMap(image,BluePixelChannel,trait,n++); 391977c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy } 392077c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy if (image->colorspace == CMYKColorspace) 3921e2a912b6c9086c98ec838baa0824cd8deca55538cristy SetPixelChannelMap(image,BlackPixelChannel,trait,n++); 392277c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy if (image->matte != MagickFalse) 3923e2a912b6c9086c98ec838baa0824cd8deca55538cristy SetPixelChannelMap(image,AlphaPixelChannel,CopyPixelTrait,n++); 3924bd5a96cd2b69f218f85a7adc306296a736f91a56cristy if (image->storage_class == PseudoClass) 3925e2a912b6c9086c98ec838baa0824cd8deca55538cristy SetPixelChannelMap(image,IndexPixelChannel,CopyPixelTrait,n++); 3926183a5c7d1c8a9a747766ff9a2ef067853a7066e9cristy if (image->mask != MagickFalse) 392710a6c61544fb48d72f29ec8f9573bdcd52abf1b7cristy SetPixelChannelMap(image,MaskPixelChannel,CopyPixelTrait,n++); 3928e2a912b6c9086c98ec838baa0824cd8deca55538cristy assert((n+image->number_meta_channels) < MaxPixelChannels); 3929e2a912b6c9086c98ec838baa0824cd8deca55538cristy for (i=0; i < (ssize_t) image->number_meta_channels; i++) 393061f18adcc41fdd05d57e50544cdb9d321bb18953cristy SetPixelChannelMap(image,(PixelChannel) (MetaPixelChannel+i),CopyPixelTrait, 3931e2a912b6c9086c98ec838baa0824cd8deca55538cristy n++); 3932d26338ffb761a86f047d7bbb9a596800f53c8649cristy image->number_channels=(size_t) n; 39336dcb9b8f58179c62fb386bf2bc02c8ba901dfb15cristy if (image->debug != MagickFalse) 39346dcb9b8f58179c62fb386bf2bc02c8ba901dfb15cristy LogPixelChannels(image); 3935480f49ff5341726eb0212f2f1f22cfdefac392c4cristy (void) SetPixelChannelMask(image,image->channel_mask); 3936bd5a96cd2b69f218f85a7adc306296a736f91a56cristy} 3937bd5a96cd2b69f218f85a7adc306296a736f91a56cristy 3938bd5a96cd2b69f218f85a7adc306296a736f91a56cristy/* 3939bd5a96cd2b69f218f85a7adc306296a736f91a56cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3940bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% % 3941bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% % 3942bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% % 3943a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% I n t e r p o l a t e P i x e l C h a n n e l % 3944a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% % 3945a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% % 3946a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% % 3947a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3948a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 3949884f600898ca6935a7981b4d56bf3d2c4ec17011cristy% InterpolatePixelChannel() applies a pixel interpolation method between a 3950884f600898ca6935a7981b4d56bf3d2c4ec17011cristy% floating point coordinate and the pixels surrounding that coordinate. No 3951884f600898ca6935a7981b4d56bf3d2c4ec17011cristy% pixel area resampling, or scaling of the result is performed. 3952a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 3953a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% The format of the InterpolatePixelChannel method is: 3954a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 3955a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% MagickBooleanType InterpolatePixelChannel(const Image *image, 3956444eda6285b2191e662c3d375c86770da70a83b0cristy% const CacheView *image_view,const PixelChannel channel, 39575c4e2586d27d4299a742d170d41105de1689aa46cristy% const PixelInterpolateMethod method,const double x,const double y, 3958a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% double *pixel,ExceptionInfo *exception) 3959a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 3960a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% A description of each parameter follows: 3961a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 3962a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% o image: the image. 3963a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 3964a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% o image_view: the image view. 3965a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 3966a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% o channel: the pixel channel to interpolate. 3967a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 3968a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% o method: the pixel color interpolation method. 3969a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 3970a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% o x,y: A double representing the current (x,y) position of the pixel. 3971a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 3972a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% o pixel: return the interpolated pixel here. 3973a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 3974a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% o exception: return any errors or warnings in this structure. 3975a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 3976a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy*/ 397794ea1636709395774d7118ef56162d211904cfd2cristy 3978884f600898ca6935a7981b4d56bf3d2c4ec17011cristystatic inline double MagickMax(const MagickRealType x,const MagickRealType y) 3979884f600898ca6935a7981b4d56bf3d2c4ec17011cristy{ 3980884f600898ca6935a7981b4d56bf3d2c4ec17011cristy if (x > y) 3981884f600898ca6935a7981b4d56bf3d2c4ec17011cristy return(x); 3982884f600898ca6935a7981b4d56bf3d2c4ec17011cristy return(y); 3983884f600898ca6935a7981b4d56bf3d2c4ec17011cristy} 3984884f600898ca6935a7981b4d56bf3d2c4ec17011cristy 3985884f600898ca6935a7981b4d56bf3d2c4ec17011cristystatic inline MagickRealType CubicWeightingFunction(const MagickRealType x) 3986884f600898ca6935a7981b4d56bf3d2c4ec17011cristy{ 3987884f600898ca6935a7981b4d56bf3d2c4ec17011cristy MagickRealType 3988884f600898ca6935a7981b4d56bf3d2c4ec17011cristy alpha, 3989884f600898ca6935a7981b4d56bf3d2c4ec17011cristy gamma; 3990884f600898ca6935a7981b4d56bf3d2c4ec17011cristy 3991884f600898ca6935a7981b4d56bf3d2c4ec17011cristy alpha=MagickMax(x+2.0,0.0); 3992884f600898ca6935a7981b4d56bf3d2c4ec17011cristy gamma=1.0*alpha*alpha*alpha; 3993884f600898ca6935a7981b4d56bf3d2c4ec17011cristy alpha=MagickMax(x+1.0,0.0); 3994884f600898ca6935a7981b4d56bf3d2c4ec17011cristy gamma-=4.0*alpha*alpha*alpha; 3995884f600898ca6935a7981b4d56bf3d2c4ec17011cristy alpha=MagickMax(x+0.0,0.0); 3996884f600898ca6935a7981b4d56bf3d2c4ec17011cristy gamma+=6.0*alpha*alpha*alpha; 3997884f600898ca6935a7981b4d56bf3d2c4ec17011cristy alpha=MagickMax(x-1.0,0.0); 3998884f600898ca6935a7981b4d56bf3d2c4ec17011cristy gamma-=4.0*alpha*alpha*alpha; 3999884f600898ca6935a7981b4d56bf3d2c4ec17011cristy return(gamma/6.0); 4000884f600898ca6935a7981b4d56bf3d2c4ec17011cristy} 4001884f600898ca6935a7981b4d56bf3d2c4ec17011cristy 400294ea1636709395774d7118ef56162d211904cfd2cristystatic inline double MeshInterpolate(const PointInfo *delta,const double p, 400394ea1636709395774d7118ef56162d211904cfd2cristy const double x,const double y) 400494ea1636709395774d7118ef56162d211904cfd2cristy{ 400594ea1636709395774d7118ef56162d211904cfd2cristy return(delta->x*x+delta->y*y+(1.0-delta->x-delta->y)*p); 400694ea1636709395774d7118ef56162d211904cfd2cristy} 400794ea1636709395774d7118ef56162d211904cfd2cristy 4008884f600898ca6935a7981b4d56bf3d2c4ec17011cristystatic inline ssize_t NearestNeighbor(const MagickRealType x) 4009884f600898ca6935a7981b4d56bf3d2c4ec17011cristy{ 4010884f600898ca6935a7981b4d56bf3d2c4ec17011cristy if (x >= 0.0) 4011884f600898ca6935a7981b4d56bf3d2c4ec17011cristy return((ssize_t) (x+0.5)); 4012884f600898ca6935a7981b4d56bf3d2c4ec17011cristy return((ssize_t) (x-0.5)); 4013884f600898ca6935a7981b4d56bf3d2c4ec17011cristy} 4014884f600898ca6935a7981b4d56bf3d2c4ec17011cristy 4015a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristyMagickExport MagickBooleanType InterpolatePixelChannel(const Image *image, 4016a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy const CacheView *image_view,const PixelChannel channel, 40175c4e2586d27d4299a742d170d41105de1689aa46cristy const PixelInterpolateMethod method,const double x,const double y, 4018a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy double *pixel,ExceptionInfo *exception) 4019a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy{ 4020a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy MagickBooleanType 4021a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy status; 4022a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy 402394ea1636709395774d7118ef56162d211904cfd2cristy MagickRealType 402494ea1636709395774d7118ef56162d211904cfd2cristy alpha[16], 4025884f600898ca6935a7981b4d56bf3d2c4ec17011cristy gamma, 4026884f600898ca6935a7981b4d56bf3d2c4ec17011cristy pixels[16]; 402794ea1636709395774d7118ef56162d211904cfd2cristy 402894ea1636709395774d7118ef56162d211904cfd2cristy PixelTrait 402994ea1636709395774d7118ef56162d211904cfd2cristy traits; 403094ea1636709395774d7118ef56162d211904cfd2cristy 403194ea1636709395774d7118ef56162d211904cfd2cristy register const Quantum 403294ea1636709395774d7118ef56162d211904cfd2cristy *p; 403394ea1636709395774d7118ef56162d211904cfd2cristy 403494ea1636709395774d7118ef56162d211904cfd2cristy register ssize_t 403594ea1636709395774d7118ef56162d211904cfd2cristy i; 403694ea1636709395774d7118ef56162d211904cfd2cristy 4037a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy ssize_t 4038a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy x_offset, 4039a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy y_offset; 4040a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy 4041a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy assert(image != (Image *) NULL); 4042a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy assert(image != (Image *) NULL); 4043a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy assert(image->signature == MagickSignature); 4044a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy assert(image_view != (CacheView *) NULL); 4045a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy status=MagickTrue; 4046884f600898ca6935a7981b4d56bf3d2c4ec17011cristy *pixel=0.0; 404794ea1636709395774d7118ef56162d211904cfd2cristy traits=GetPixelChannelMapTraits(image,channel); 4048a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy x_offset=(ssize_t) floor(x); 4049a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy y_offset=(ssize_t) floor(y); 4050a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy switch (method == UndefinedInterpolatePixel ? image->interpolate : method) 4051a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy { 4052884f600898ca6935a7981b4d56bf3d2c4ec17011cristy case AverageInterpolatePixel: 4053884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4054884f600898ca6935a7981b4d56bf3d2c4ec17011cristy p=GetCacheViewVirtualPixels(image_view,x_offset-1,y_offset-1,4,4, 4055884f600898ca6935a7981b4d56bf3d2c4ec17011cristy exception); 4056884f600898ca6935a7981b4d56bf3d2c4ec17011cristy if (p == (const Quantum *) NULL) 4057884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4058884f600898ca6935a7981b4d56bf3d2c4ec17011cristy status=MagickFalse; 4059884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4060884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4061222b19c8e5e5ee5287e41d33fea54f2b651741b6cristy if ((traits & BlendPixelTrait) == 0) 4062884f600898ca6935a7981b4d56bf3d2c4ec17011cristy for (i=0; i < 16; i++) 4063884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4064884f600898ca6935a7981b4d56bf3d2c4ec17011cristy alpha[i]=1.0; 4065884f600898ca6935a7981b4d56bf3d2c4ec17011cristy pixels[i]=(MagickRealType) p[i*GetPixelChannels(image)+channel]; 4066884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4067884f600898ca6935a7981b4d56bf3d2c4ec17011cristy else 4068884f600898ca6935a7981b4d56bf3d2c4ec17011cristy for (i=0; i < 16; i++) 4069884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4070884f600898ca6935a7981b4d56bf3d2c4ec17011cristy alpha[i]=QuantumScale*GetPixelAlpha(image,p+i* 4071884f600898ca6935a7981b4d56bf3d2c4ec17011cristy GetPixelChannels(image)); 4072884f600898ca6935a7981b4d56bf3d2c4ec17011cristy pixels[i]=alpha[i]*p[i*GetPixelChannels(image)+channel]; 4073884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4074884f600898ca6935a7981b4d56bf3d2c4ec17011cristy for (i=0; i < 16; i++) 4075884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4076884f600898ca6935a7981b4d56bf3d2c4ec17011cristy gamma=1.0/(fabs((double) alpha[i]) <= MagickEpsilon ? 1.0 : alpha[i]); 4077884f600898ca6935a7981b4d56bf3d2c4ec17011cristy *pixel+=gamma*0.0625*pixels[i]; 4078884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4079884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4080884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4081884f600898ca6935a7981b4d56bf3d2c4ec17011cristy case BicubicInterpolatePixel: 4082884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4083884f600898ca6935a7981b4d56bf3d2c4ec17011cristy MagickRealType 4084884f600898ca6935a7981b4d56bf3d2c4ec17011cristy u[4], 4085884f600898ca6935a7981b4d56bf3d2c4ec17011cristy v[4]; 4086884f600898ca6935a7981b4d56bf3d2c4ec17011cristy 4087884f600898ca6935a7981b4d56bf3d2c4ec17011cristy PointInfo 4088884f600898ca6935a7981b4d56bf3d2c4ec17011cristy delta; 4089884f600898ca6935a7981b4d56bf3d2c4ec17011cristy 4090884f600898ca6935a7981b4d56bf3d2c4ec17011cristy p=GetCacheViewVirtualPixels(image_view,x_offset-1,y_offset-1,4,4, 4091884f600898ca6935a7981b4d56bf3d2c4ec17011cristy exception); 4092884f600898ca6935a7981b4d56bf3d2c4ec17011cristy if (p == (const Quantum *) NULL) 4093884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4094884f600898ca6935a7981b4d56bf3d2c4ec17011cristy status=MagickFalse; 4095884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4096884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4097222b19c8e5e5ee5287e41d33fea54f2b651741b6cristy if ((traits & BlendPixelTrait) == 0) 4098884f600898ca6935a7981b4d56bf3d2c4ec17011cristy for (i=0; i < 16; i++) 4099884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4100884f600898ca6935a7981b4d56bf3d2c4ec17011cristy alpha[i]=1.0; 4101884f600898ca6935a7981b4d56bf3d2c4ec17011cristy pixels[i]=(MagickRealType) p[i*GetPixelChannels(image)+channel]; 4102884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4103884f600898ca6935a7981b4d56bf3d2c4ec17011cristy else 4104884f600898ca6935a7981b4d56bf3d2c4ec17011cristy for (i=0; i < 16; i++) 4105884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4106884f600898ca6935a7981b4d56bf3d2c4ec17011cristy alpha[i]=QuantumScale*GetPixelAlpha(image,p+i* 4107884f600898ca6935a7981b4d56bf3d2c4ec17011cristy GetPixelChannels(image)); 4108884f600898ca6935a7981b4d56bf3d2c4ec17011cristy pixels[i]=alpha[i]*p[i*GetPixelChannels(image)+channel]; 4109884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4110884f600898ca6935a7981b4d56bf3d2c4ec17011cristy delta.x=x-x_offset; 4111884f600898ca6935a7981b4d56bf3d2c4ec17011cristy delta.y=y-y_offset; 4112884f600898ca6935a7981b4d56bf3d2c4ec17011cristy for (i=0; i < 4; i++) 4113884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4114884f600898ca6935a7981b4d56bf3d2c4ec17011cristy u[0]=(pixels[4*i+3]-pixels[4*i+2])-(pixels[4*i+0]-pixels[4*i+1]); 4115884f600898ca6935a7981b4d56bf3d2c4ec17011cristy u[1]=(pixels[4*i+0]-pixels[4*i+1])-u[0]; 4116884f600898ca6935a7981b4d56bf3d2c4ec17011cristy u[2]=pixels[4*i+2]-pixels[4*i+0]; 4117884f600898ca6935a7981b4d56bf3d2c4ec17011cristy u[3]=pixels[4*i+1]; 4118884f600898ca6935a7981b4d56bf3d2c4ec17011cristy v[i]=(delta.x*delta.x*delta.x*u[0])+(delta.x*delta.x*u[1])+(delta.x* 4119884f600898ca6935a7981b4d56bf3d2c4ec17011cristy u[2])+u[3]; 4120884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4121884f600898ca6935a7981b4d56bf3d2c4ec17011cristy u[0]=(v[3]-v[2])-(v[0]-v[1]); 4122884f600898ca6935a7981b4d56bf3d2c4ec17011cristy u[1]=(v[0]-v[1])-u[0]; 4123884f600898ca6935a7981b4d56bf3d2c4ec17011cristy u[2]=v[2]-v[0]; 4124884f600898ca6935a7981b4d56bf3d2c4ec17011cristy u[3]=v[1]; 4125884f600898ca6935a7981b4d56bf3d2c4ec17011cristy *pixel=(delta.y*delta.y*delta.y*u[0])+(delta.y*delta.y*u[1])+(delta.y* 4126884f600898ca6935a7981b4d56bf3d2c4ec17011cristy u[2])+u[3]; 4127884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4128884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4129884f600898ca6935a7981b4d56bf3d2c4ec17011cristy case BilinearInterpolatePixel: 413094ea1636709395774d7118ef56162d211904cfd2cristy default: 4131a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy { 413294ea1636709395774d7118ef56162d211904cfd2cristy PointInfo 413394ea1636709395774d7118ef56162d211904cfd2cristy delta, 4134884f600898ca6935a7981b4d56bf3d2c4ec17011cristy epsilon; 413594ea1636709395774d7118ef56162d211904cfd2cristy 413694ea1636709395774d7118ef56162d211904cfd2cristy p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,2,2,exception); 413794ea1636709395774d7118ef56162d211904cfd2cristy if (p == (const Quantum *) NULL) 413894ea1636709395774d7118ef56162d211904cfd2cristy { 413994ea1636709395774d7118ef56162d211904cfd2cristy status=MagickFalse; 414094ea1636709395774d7118ef56162d211904cfd2cristy break; 414194ea1636709395774d7118ef56162d211904cfd2cristy } 4142222b19c8e5e5ee5287e41d33fea54f2b651741b6cristy if ((traits & BlendPixelTrait) == 0) 4143884f600898ca6935a7981b4d56bf3d2c4ec17011cristy for (i=0; i < 4; i++) 4144884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4145884f600898ca6935a7981b4d56bf3d2c4ec17011cristy alpha[i]=1.0; 4146884f600898ca6935a7981b4d56bf3d2c4ec17011cristy pixels[i]=(MagickRealType) p[i*GetPixelChannels(image)+channel]; 4147884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4148884f600898ca6935a7981b4d56bf3d2c4ec17011cristy else 4149884f600898ca6935a7981b4d56bf3d2c4ec17011cristy for (i=0; i < 4; i++) 4150884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4151884f600898ca6935a7981b4d56bf3d2c4ec17011cristy alpha[i]=QuantumScale*GetPixelAlpha(image,p+i* 4152884f600898ca6935a7981b4d56bf3d2c4ec17011cristy GetPixelChannels(image)); 4153884f600898ca6935a7981b4d56bf3d2c4ec17011cristy pixels[i]=alpha[i]*p[i*GetPixelChannels(image)+channel]; 4154884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 415594ea1636709395774d7118ef56162d211904cfd2cristy delta.x=x-x_offset; 415694ea1636709395774d7118ef56162d211904cfd2cristy delta.y=y-y_offset; 4157884f600898ca6935a7981b4d56bf3d2c4ec17011cristy epsilon.x=1.0-delta.x; 4158884f600898ca6935a7981b4d56bf3d2c4ec17011cristy epsilon.y=1.0-delta.y; 4159884f600898ca6935a7981b4d56bf3d2c4ec17011cristy gamma=((epsilon.y*(epsilon.x*alpha[0]+delta.x*alpha[1])+delta.y* 4160884f600898ca6935a7981b4d56bf3d2c4ec17011cristy (epsilon.x*alpha[2]+delta.x*alpha[3]))); 4161884f600898ca6935a7981b4d56bf3d2c4ec17011cristy gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma); 4162884f600898ca6935a7981b4d56bf3d2c4ec17011cristy *pixel=gamma*(epsilon.y*(epsilon.x*pixels[0]+delta.x*pixels[1])+delta.y* 4163884f600898ca6935a7981b4d56bf3d2c4ec17011cristy (epsilon.x*pixels[2]+delta.x*pixels[3])); 4164884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4165884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4166884f600898ca6935a7981b4d56bf3d2c4ec17011cristy case FilterInterpolatePixel: 4167884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4168884f600898ca6935a7981b4d56bf3d2c4ec17011cristy CacheView 4169884f600898ca6935a7981b4d56bf3d2c4ec17011cristy *filter_view; 4170884f600898ca6935a7981b4d56bf3d2c4ec17011cristy 4171884f600898ca6935a7981b4d56bf3d2c4ec17011cristy Image 4172884f600898ca6935a7981b4d56bf3d2c4ec17011cristy *excerpt_image, 4173884f600898ca6935a7981b4d56bf3d2c4ec17011cristy *filter_image; 4174884f600898ca6935a7981b4d56bf3d2c4ec17011cristy 4175884f600898ca6935a7981b4d56bf3d2c4ec17011cristy RectangleInfo 4176884f600898ca6935a7981b4d56bf3d2c4ec17011cristy geometry; 4177884f600898ca6935a7981b4d56bf3d2c4ec17011cristy 4178884f600898ca6935a7981b4d56bf3d2c4ec17011cristy geometry.width=4L; 4179884f600898ca6935a7981b4d56bf3d2c4ec17011cristy geometry.height=4L; 4180884f600898ca6935a7981b4d56bf3d2c4ec17011cristy geometry.x=x_offset-1; 4181884f600898ca6935a7981b4d56bf3d2c4ec17011cristy geometry.y=y_offset-1; 4182884f600898ca6935a7981b4d56bf3d2c4ec17011cristy excerpt_image=ExcerptImage(image,&geometry,exception); 4183884f600898ca6935a7981b4d56bf3d2c4ec17011cristy if (excerpt_image == (Image *) NULL) 4184884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4185884f600898ca6935a7981b4d56bf3d2c4ec17011cristy status=MagickFalse; 4186884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4187884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4188aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy filter_image=ResizeImage(excerpt_image,1,1,image->filter,exception); 4189884f600898ca6935a7981b4d56bf3d2c4ec17011cristy excerpt_image=DestroyImage(excerpt_image); 4190884f600898ca6935a7981b4d56bf3d2c4ec17011cristy if (filter_image == (Image *) NULL) 4191884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4192db070957cf6bf959df9283a482377e8854c3d4d2cristy filter_view=AcquireVirtualCacheView(filter_image,exception); 4193884f600898ca6935a7981b4d56bf3d2c4ec17011cristy p=GetCacheViewVirtualPixels(filter_view,0,0,1,1,exception); 4194884f600898ca6935a7981b4d56bf3d2c4ec17011cristy if (p == (const Quantum *) NULL) 4195884f600898ca6935a7981b4d56bf3d2c4ec17011cristy status=MagickFalse; 4196884f600898ca6935a7981b4d56bf3d2c4ec17011cristy else 41970beccfa61f43782de2d6ee7edc1ec8301a3bbeeccristy *pixel=(double) GetPixelChannel(image,channel,p); 4198884f600898ca6935a7981b4d56bf3d2c4ec17011cristy filter_view=DestroyCacheView(filter_view); 4199884f600898ca6935a7981b4d56bf3d2c4ec17011cristy filter_image=DestroyImage(filter_image); 4200884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4201884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4202884f600898ca6935a7981b4d56bf3d2c4ec17011cristy case IntegerInterpolatePixel: 4203884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4204884f600898ca6935a7981b4d56bf3d2c4ec17011cristy p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,1,1,exception); 4205884f600898ca6935a7981b4d56bf3d2c4ec17011cristy if (p == (const Quantum *) NULL) 4206884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4207884f600898ca6935a7981b4d56bf3d2c4ec17011cristy status=MagickFalse; 4208884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4209884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 42100beccfa61f43782de2d6ee7edc1ec8301a3bbeeccristy *pixel=(double) GetPixelChannel(image,channel,p); 4211884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4212884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4213884f600898ca6935a7981b4d56bf3d2c4ec17011cristy case NearestNeighborInterpolatePixel: 4214884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4215884f600898ca6935a7981b4d56bf3d2c4ec17011cristy p=GetCacheViewVirtualPixels(image_view,NearestNeighbor(x), 4216884f600898ca6935a7981b4d56bf3d2c4ec17011cristy NearestNeighbor(y),1,1,exception); 4217884f600898ca6935a7981b4d56bf3d2c4ec17011cristy if (p == (const Quantum *) NULL) 4218884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4219884f600898ca6935a7981b4d56bf3d2c4ec17011cristy status=MagickFalse; 4220884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4221884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 42220beccfa61f43782de2d6ee7edc1ec8301a3bbeeccristy *pixel=(double) GetPixelChannel(image,channel,p); 4223884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4224884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4225884f600898ca6935a7981b4d56bf3d2c4ec17011cristy case MeshInterpolatePixel: 4226884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4227884f600898ca6935a7981b4d56bf3d2c4ec17011cristy PointInfo 4228884f600898ca6935a7981b4d56bf3d2c4ec17011cristy delta, 4229884f600898ca6935a7981b4d56bf3d2c4ec17011cristy luminance; 4230884f600898ca6935a7981b4d56bf3d2c4ec17011cristy 4231884f600898ca6935a7981b4d56bf3d2c4ec17011cristy p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,2,2,exception); 4232884f600898ca6935a7981b4d56bf3d2c4ec17011cristy if (p == (const Quantum *) NULL) 4233884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4234884f600898ca6935a7981b4d56bf3d2c4ec17011cristy status=MagickFalse; 4235884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4236884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4237222b19c8e5e5ee5287e41d33fea54f2b651741b6cristy if ((traits & BlendPixelTrait) == 0) 423894ea1636709395774d7118ef56162d211904cfd2cristy for (i=0; i < 4; i++) 423994ea1636709395774d7118ef56162d211904cfd2cristy { 424094ea1636709395774d7118ef56162d211904cfd2cristy alpha[i]=1.0; 4241884f600898ca6935a7981b4d56bf3d2c4ec17011cristy pixels[i]=(MagickRealType) p[i*GetPixelChannels(image)+channel]; 424294ea1636709395774d7118ef56162d211904cfd2cristy } 424394ea1636709395774d7118ef56162d211904cfd2cristy else 424494ea1636709395774d7118ef56162d211904cfd2cristy for (i=0; i < 4; i++) 424594ea1636709395774d7118ef56162d211904cfd2cristy { 424694ea1636709395774d7118ef56162d211904cfd2cristy alpha[i]=QuantumScale*GetPixelAlpha(image,p+i* 424794ea1636709395774d7118ef56162d211904cfd2cristy GetPixelChannels(image)); 424894ea1636709395774d7118ef56162d211904cfd2cristy pixels[i]=alpha[i]*p[i*GetPixelChannels(image)+channel]; 424994ea1636709395774d7118ef56162d211904cfd2cristy } 4250884f600898ca6935a7981b4d56bf3d2c4ec17011cristy delta.x=x-x_offset; 4251884f600898ca6935a7981b4d56bf3d2c4ec17011cristy delta.y=y-y_offset; 4252884f600898ca6935a7981b4d56bf3d2c4ec17011cristy luminance.x=GetPixelLuminance(image,p)-(double) 4253884f600898ca6935a7981b4d56bf3d2c4ec17011cristy GetPixelLuminance(image,p+3*GetPixelChannels(image)); 425428474bfbda5ee2d4da2eb79f299cf1f692770b99cristy luminance.y=GetPixelLuminance(image,p+GetPixelChannels(image))-(double) 4255884f600898ca6935a7981b4d56bf3d2c4ec17011cristy GetPixelLuminance(image,p+2*GetPixelChannels(image)); 425694ea1636709395774d7118ef56162d211904cfd2cristy if (fabs(luminance.x) < fabs(luminance.y)) 425794ea1636709395774d7118ef56162d211904cfd2cristy { 425894ea1636709395774d7118ef56162d211904cfd2cristy /* 425994ea1636709395774d7118ef56162d211904cfd2cristy Diagonal 0-3 NW-SE. 426094ea1636709395774d7118ef56162d211904cfd2cristy */ 426194ea1636709395774d7118ef56162d211904cfd2cristy if (delta.x <= delta.y) 426294ea1636709395774d7118ef56162d211904cfd2cristy { 426394ea1636709395774d7118ef56162d211904cfd2cristy /* 426494ea1636709395774d7118ef56162d211904cfd2cristy Bottom-left triangle (pixel: 2, diagonal: 0-3). 426594ea1636709395774d7118ef56162d211904cfd2cristy */ 426694ea1636709395774d7118ef56162d211904cfd2cristy delta.y=1.0-delta.y; 426794ea1636709395774d7118ef56162d211904cfd2cristy gamma=MeshInterpolate(&delta,alpha[2],alpha[3],alpha[0]); 426894ea1636709395774d7118ef56162d211904cfd2cristy gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma); 426994ea1636709395774d7118ef56162d211904cfd2cristy *pixel=gamma*MeshInterpolate(&delta,pixels[2],pixels[3], 427094ea1636709395774d7118ef56162d211904cfd2cristy pixels[0]); 427194ea1636709395774d7118ef56162d211904cfd2cristy } 427294ea1636709395774d7118ef56162d211904cfd2cristy else 427394ea1636709395774d7118ef56162d211904cfd2cristy { 427494ea1636709395774d7118ef56162d211904cfd2cristy /* 427594ea1636709395774d7118ef56162d211904cfd2cristy Top-right triangle (pixel: 1, diagonal: 0-3). 427694ea1636709395774d7118ef56162d211904cfd2cristy */ 427794ea1636709395774d7118ef56162d211904cfd2cristy delta.x=1.0-delta.x; 427894ea1636709395774d7118ef56162d211904cfd2cristy gamma=MeshInterpolate(&delta,alpha[1],alpha[0],alpha[3]); 427994ea1636709395774d7118ef56162d211904cfd2cristy gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma); 428094ea1636709395774d7118ef56162d211904cfd2cristy *pixel=gamma*MeshInterpolate(&delta,pixels[1],pixels[0], 428194ea1636709395774d7118ef56162d211904cfd2cristy pixels[3]); 428294ea1636709395774d7118ef56162d211904cfd2cristy } 428394ea1636709395774d7118ef56162d211904cfd2cristy } 428494ea1636709395774d7118ef56162d211904cfd2cristy else 428594ea1636709395774d7118ef56162d211904cfd2cristy { 428694ea1636709395774d7118ef56162d211904cfd2cristy /* 428794ea1636709395774d7118ef56162d211904cfd2cristy Diagonal 1-2 NE-SW. 428894ea1636709395774d7118ef56162d211904cfd2cristy */ 428994ea1636709395774d7118ef56162d211904cfd2cristy if (delta.x <= (1.0-delta.y)) 429094ea1636709395774d7118ef56162d211904cfd2cristy { 429194ea1636709395774d7118ef56162d211904cfd2cristy /* 429294ea1636709395774d7118ef56162d211904cfd2cristy Top-left triangle (pixel: 0, diagonal: 1-2). 429394ea1636709395774d7118ef56162d211904cfd2cristy */ 429494ea1636709395774d7118ef56162d211904cfd2cristy gamma=MeshInterpolate(&delta,alpha[0],alpha[1],alpha[2]); 429594ea1636709395774d7118ef56162d211904cfd2cristy gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma); 429694ea1636709395774d7118ef56162d211904cfd2cristy *pixel=gamma*MeshInterpolate(&delta,pixels[0],pixels[1], 429794ea1636709395774d7118ef56162d211904cfd2cristy pixels[2]); 429894ea1636709395774d7118ef56162d211904cfd2cristy } 429994ea1636709395774d7118ef56162d211904cfd2cristy else 430094ea1636709395774d7118ef56162d211904cfd2cristy { 430194ea1636709395774d7118ef56162d211904cfd2cristy /* 430294ea1636709395774d7118ef56162d211904cfd2cristy Bottom-right triangle (pixel: 3, diagonal: 1-2). 430394ea1636709395774d7118ef56162d211904cfd2cristy */ 430494ea1636709395774d7118ef56162d211904cfd2cristy delta.x=1.0-delta.x; 430594ea1636709395774d7118ef56162d211904cfd2cristy delta.y=1.0-delta.y; 430694ea1636709395774d7118ef56162d211904cfd2cristy gamma=MeshInterpolate(&delta,alpha[3],alpha[2],alpha[1]); 430794ea1636709395774d7118ef56162d211904cfd2cristy gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma); 430894ea1636709395774d7118ef56162d211904cfd2cristy *pixel=gamma*MeshInterpolate(&delta,pixels[3],pixels[2], 430994ea1636709395774d7118ef56162d211904cfd2cristy pixels[1]); 431094ea1636709395774d7118ef56162d211904cfd2cristy } 431194ea1636709395774d7118ef56162d211904cfd2cristy } 4312a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy break; 4313a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy } 4314884f600898ca6935a7981b4d56bf3d2c4ec17011cristy case SplineInterpolatePixel: 4315884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4316884f600898ca6935a7981b4d56bf3d2c4ec17011cristy MagickRealType 4317884f600898ca6935a7981b4d56bf3d2c4ec17011cristy dx, 4318884f600898ca6935a7981b4d56bf3d2c4ec17011cristy dy; 4319884f600898ca6935a7981b4d56bf3d2c4ec17011cristy 4320884f600898ca6935a7981b4d56bf3d2c4ec17011cristy PointInfo 4321884f600898ca6935a7981b4d56bf3d2c4ec17011cristy delta; 4322884f600898ca6935a7981b4d56bf3d2c4ec17011cristy 4323884f600898ca6935a7981b4d56bf3d2c4ec17011cristy ssize_t 4324884f600898ca6935a7981b4d56bf3d2c4ec17011cristy j, 4325884f600898ca6935a7981b4d56bf3d2c4ec17011cristy n; 4326884f600898ca6935a7981b4d56bf3d2c4ec17011cristy 4327884f600898ca6935a7981b4d56bf3d2c4ec17011cristy p=GetCacheViewVirtualPixels(image_view,x_offset-1,y_offset-1,4,4, 4328884f600898ca6935a7981b4d56bf3d2c4ec17011cristy exception); 4329884f600898ca6935a7981b4d56bf3d2c4ec17011cristy if (p == (const Quantum *) NULL) 4330884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4331884f600898ca6935a7981b4d56bf3d2c4ec17011cristy status=MagickFalse; 4332884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4333884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4334222b19c8e5e5ee5287e41d33fea54f2b651741b6cristy if ((traits & BlendPixelTrait) == 0) 4335884f600898ca6935a7981b4d56bf3d2c4ec17011cristy for (i=0; i < 16; i++) 4336884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4337884f600898ca6935a7981b4d56bf3d2c4ec17011cristy alpha[i]=1.0; 4338884f600898ca6935a7981b4d56bf3d2c4ec17011cristy pixels[i]=(MagickRealType) p[i*GetPixelChannels(image)+channel]; 4339884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4340884f600898ca6935a7981b4d56bf3d2c4ec17011cristy else 4341884f600898ca6935a7981b4d56bf3d2c4ec17011cristy for (i=0; i < 16; i++) 4342884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4343884f600898ca6935a7981b4d56bf3d2c4ec17011cristy alpha[i]=QuantumScale*GetPixelAlpha(image,p+i* 4344884f600898ca6935a7981b4d56bf3d2c4ec17011cristy GetPixelChannels(image)); 4345884f600898ca6935a7981b4d56bf3d2c4ec17011cristy pixels[i]=alpha[i]*p[i*GetPixelChannels(image)+channel]; 4346884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4347884f600898ca6935a7981b4d56bf3d2c4ec17011cristy delta.x=x-x_offset; 4348884f600898ca6935a7981b4d56bf3d2c4ec17011cristy delta.y=y-y_offset; 4349884f600898ca6935a7981b4d56bf3d2c4ec17011cristy n=0; 4350884f600898ca6935a7981b4d56bf3d2c4ec17011cristy for (i=(-1); i < 3L; i++) 4351884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4352884f600898ca6935a7981b4d56bf3d2c4ec17011cristy dy=CubicWeightingFunction((MagickRealType) i-delta.y); 4353884f600898ca6935a7981b4d56bf3d2c4ec17011cristy for (j=(-1); j < 3L; j++) 4354884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4355884f600898ca6935a7981b4d56bf3d2c4ec17011cristy dx=CubicWeightingFunction(delta.x-(MagickRealType) j); 4356884f600898ca6935a7981b4d56bf3d2c4ec17011cristy gamma=1.0/(fabs((double) alpha[n]) <= MagickEpsilon ? 1.0 : alpha[n]); 4357884f600898ca6935a7981b4d56bf3d2c4ec17011cristy *pixel+=gamma*dx*dy*pixels[n]; 4358884f600898ca6935a7981b4d56bf3d2c4ec17011cristy n++; 4359884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4360884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4361884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4362884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4363a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy } 4364a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy return(status); 4365a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy} 4366a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy 4367a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy/* 4368a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4369d76c51ed30cf4084f4434ba08925d16001d1e340cristy% % 4370d76c51ed30cf4084f4434ba08925d16001d1e340cristy% % 4371d76c51ed30cf4084f4434ba08925d16001d1e340cristy% % 43725c4e2586d27d4299a742d170d41105de1689aa46cristy% I n t e r p o l a t e P i x e l C h a n n e l s % 43735c4e2586d27d4299a742d170d41105de1689aa46cristy% % 43745c4e2586d27d4299a742d170d41105de1689aa46cristy% % 43755c4e2586d27d4299a742d170d41105de1689aa46cristy% % 43765c4e2586d27d4299a742d170d41105de1689aa46cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 43775c4e2586d27d4299a742d170d41105de1689aa46cristy% 43785c4e2586d27d4299a742d170d41105de1689aa46cristy% InterpolatePixelChannels() applies a pixel interpolation method between a 43795c4e2586d27d4299a742d170d41105de1689aa46cristy% floating point coordinate and the pixels surrounding that coordinate. No 43805c4e2586d27d4299a742d170d41105de1689aa46cristy% pixel area resampling, or scaling of the result is performed. 43815c4e2586d27d4299a742d170d41105de1689aa46cristy% 43825c4e2586d27d4299a742d170d41105de1689aa46cristy% The format of the InterpolatePixelChannels method is: 43835c4e2586d27d4299a742d170d41105de1689aa46cristy% 43845c4e2586d27d4299a742d170d41105de1689aa46cristy% MagickBooleanType InterpolatePixelChannels(const Image *source, 43855c4e2586d27d4299a742d170d41105de1689aa46cristy% const CacheView *source_view,const Image *destination, 43865c4e2586d27d4299a742d170d41105de1689aa46cristy% const PixelInterpolateMethod method,const double x,const double y, 43875c4e2586d27d4299a742d170d41105de1689aa46cristy% Quantum *pixel,ExceptionInfo *exception) 43885c4e2586d27d4299a742d170d41105de1689aa46cristy% 43895c4e2586d27d4299a742d170d41105de1689aa46cristy% A description of each parameter follows: 43905c4e2586d27d4299a742d170d41105de1689aa46cristy% 43915c4e2586d27d4299a742d170d41105de1689aa46cristy% o source: the source. 43925c4e2586d27d4299a742d170d41105de1689aa46cristy% 43935c4e2586d27d4299a742d170d41105de1689aa46cristy% o source_view: the source view. 43945c4e2586d27d4299a742d170d41105de1689aa46cristy% 43955c4e2586d27d4299a742d170d41105de1689aa46cristy% o destination: the destination image. 43965c4e2586d27d4299a742d170d41105de1689aa46cristy% 43975c4e2586d27d4299a742d170d41105de1689aa46cristy% o method: the pixel color interpolation method. 43985c4e2586d27d4299a742d170d41105de1689aa46cristy% 43995c4e2586d27d4299a742d170d41105de1689aa46cristy% o x,y: A double representing the current (x,y) position of the pixel. 44005c4e2586d27d4299a742d170d41105de1689aa46cristy% 44015c4e2586d27d4299a742d170d41105de1689aa46cristy% o pixel: return the interpolated pixel here. 44025c4e2586d27d4299a742d170d41105de1689aa46cristy% 44035c4e2586d27d4299a742d170d41105de1689aa46cristy% o exception: return any errors or warnings in this structure. 44045c4e2586d27d4299a742d170d41105de1689aa46cristy% 44055c4e2586d27d4299a742d170d41105de1689aa46cristy*/ 44065c4e2586d27d4299a742d170d41105de1689aa46cristyMagickExport MagickBooleanType InterpolatePixelChannels(const Image *source, 44075c4e2586d27d4299a742d170d41105de1689aa46cristy const CacheView *source_view,const Image *destination, 44085c4e2586d27d4299a742d170d41105de1689aa46cristy const PixelInterpolateMethod method,const double x,const double y, 44095c4e2586d27d4299a742d170d41105de1689aa46cristy Quantum *pixel,ExceptionInfo *exception) 44105c4e2586d27d4299a742d170d41105de1689aa46cristy{ 44115c4e2586d27d4299a742d170d41105de1689aa46cristy MagickBooleanType 44125c4e2586d27d4299a742d170d41105de1689aa46cristy status; 44135c4e2586d27d4299a742d170d41105de1689aa46cristy 44145c4e2586d27d4299a742d170d41105de1689aa46cristy MagickRealType 44155c4e2586d27d4299a742d170d41105de1689aa46cristy alpha[16], 44165c4e2586d27d4299a742d170d41105de1689aa46cristy gamma, 44175c4e2586d27d4299a742d170d41105de1689aa46cristy pixels[16]; 44185c4e2586d27d4299a742d170d41105de1689aa46cristy 44195c4e2586d27d4299a742d170d41105de1689aa46cristy PixelChannel 44205c4e2586d27d4299a742d170d41105de1689aa46cristy channel; 44215c4e2586d27d4299a742d170d41105de1689aa46cristy 44225c4e2586d27d4299a742d170d41105de1689aa46cristy PixelTrait 44235c4e2586d27d4299a742d170d41105de1689aa46cristy destination_traits, 44245c4e2586d27d4299a742d170d41105de1689aa46cristy traits; 44255c4e2586d27d4299a742d170d41105de1689aa46cristy 44265c4e2586d27d4299a742d170d41105de1689aa46cristy register const Quantum 44275c4e2586d27d4299a742d170d41105de1689aa46cristy *p; 44285c4e2586d27d4299a742d170d41105de1689aa46cristy 44295c4e2586d27d4299a742d170d41105de1689aa46cristy register ssize_t 44305c4e2586d27d4299a742d170d41105de1689aa46cristy i; 44315c4e2586d27d4299a742d170d41105de1689aa46cristy 44325c4e2586d27d4299a742d170d41105de1689aa46cristy ssize_t 44335c4e2586d27d4299a742d170d41105de1689aa46cristy x_offset, 44345c4e2586d27d4299a742d170d41105de1689aa46cristy y_offset; 44355c4e2586d27d4299a742d170d41105de1689aa46cristy 44365c4e2586d27d4299a742d170d41105de1689aa46cristy assert(source != (Image *) NULL); 44375c4e2586d27d4299a742d170d41105de1689aa46cristy assert(source != (Image *) NULL); 44385c4e2586d27d4299a742d170d41105de1689aa46cristy assert(source->signature == MagickSignature); 44395c4e2586d27d4299a742d170d41105de1689aa46cristy assert(source_view != (CacheView *) NULL); 44405c4e2586d27d4299a742d170d41105de1689aa46cristy status=MagickTrue; 44415c4e2586d27d4299a742d170d41105de1689aa46cristy x_offset=(ssize_t) floor(x); 44425c4e2586d27d4299a742d170d41105de1689aa46cristy y_offset=(ssize_t) floor(y); 44435c4e2586d27d4299a742d170d41105de1689aa46cristy switch (method == UndefinedInterpolatePixel ? source->interpolate : method) 44445c4e2586d27d4299a742d170d41105de1689aa46cristy { 44455c4e2586d27d4299a742d170d41105de1689aa46cristy case AverageInterpolatePixel: 44465c4e2586d27d4299a742d170d41105de1689aa46cristy { 44475c4e2586d27d4299a742d170d41105de1689aa46cristy p=GetCacheViewVirtualPixels(source_view,x_offset-1,y_offset-1,4,4, 44485c4e2586d27d4299a742d170d41105de1689aa46cristy exception); 44495c4e2586d27d4299a742d170d41105de1689aa46cristy if (p == (const Quantum *) NULL) 44505c4e2586d27d4299a742d170d41105de1689aa46cristy { 44515c4e2586d27d4299a742d170d41105de1689aa46cristy status=MagickFalse; 44525c4e2586d27d4299a742d170d41105de1689aa46cristy break; 44535c4e2586d27d4299a742d170d41105de1689aa46cristy } 44545c4e2586d27d4299a742d170d41105de1689aa46cristy for (i=0; i < (ssize_t) GetPixelChannels(source); i++) 44555c4e2586d27d4299a742d170d41105de1689aa46cristy { 44565c4e2586d27d4299a742d170d41105de1689aa46cristy double 44575c4e2586d27d4299a742d170d41105de1689aa46cristy sum; 44585c4e2586d27d4299a742d170d41105de1689aa46cristy 44595c4e2586d27d4299a742d170d41105de1689aa46cristy register ssize_t 44605c4e2586d27d4299a742d170d41105de1689aa46cristy j; 44615c4e2586d27d4299a742d170d41105de1689aa46cristy 4462e2a912b6c9086c98ec838baa0824cd8deca55538cristy channel=GetPixelChannelMapChannel(source,i); 4463abace416e67464ca6dac2324410667b05076a9c2cristy traits=GetPixelChannelMapTraits(source,channel); 44645c4e2586d27d4299a742d170d41105de1689aa46cristy destination_traits=GetPixelChannelMapTraits(destination,channel); 44655c4e2586d27d4299a742d170d41105de1689aa46cristy if ((traits == UndefinedPixelTrait) || 44665c4e2586d27d4299a742d170d41105de1689aa46cristy (destination_traits == UndefinedPixelTrait)) 44675c4e2586d27d4299a742d170d41105de1689aa46cristy continue; 44685c4e2586d27d4299a742d170d41105de1689aa46cristy for (j=0; j < 16; j++) 44695c4e2586d27d4299a742d170d41105de1689aa46cristy pixels[j]=(MagickRealType) p[j*GetPixelChannels(source)+i]; 44704a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy sum=0.0; 44715c4e2586d27d4299a742d170d41105de1689aa46cristy if ((traits & BlendPixelTrait) == 0) 44725c4e2586d27d4299a742d170d41105de1689aa46cristy { 44735c4e2586d27d4299a742d170d41105de1689aa46cristy for (j=0; j < 16; j++) 44744a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy sum+=0.0625*pixels[j]; 44754a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy SetPixelChannel(destination,channel,ClampToQuantum(sum),pixel); 44765c4e2586d27d4299a742d170d41105de1689aa46cristy continue; 44775c4e2586d27d4299a742d170d41105de1689aa46cristy } 44785c4e2586d27d4299a742d170d41105de1689aa46cristy for (j=0; j < 16; j++) 44795c4e2586d27d4299a742d170d41105de1689aa46cristy { 44805c4e2586d27d4299a742d170d41105de1689aa46cristy alpha[j]=QuantumScale*GetPixelAlpha(source,p+j* 44815c4e2586d27d4299a742d170d41105de1689aa46cristy GetPixelChannels(source)); 44825c4e2586d27d4299a742d170d41105de1689aa46cristy pixels[j]*=alpha[j]; 44835c4e2586d27d4299a742d170d41105de1689aa46cristy gamma=1.0/(fabs((double) alpha[j]) <= MagickEpsilon ? 1.0 : alpha[j]); 44845c4e2586d27d4299a742d170d41105de1689aa46cristy sum+=gamma*0.0625*pixels[j]; 44855c4e2586d27d4299a742d170d41105de1689aa46cristy } 44864a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy SetPixelChannel(destination,channel,ClampToQuantum(sum),pixel); 44875c4e2586d27d4299a742d170d41105de1689aa46cristy } 44885c4e2586d27d4299a742d170d41105de1689aa46cristy break; 44895c4e2586d27d4299a742d170d41105de1689aa46cristy } 44905c4e2586d27d4299a742d170d41105de1689aa46cristy case BicubicInterpolatePixel: 44915c4e2586d27d4299a742d170d41105de1689aa46cristy { 44925c4e2586d27d4299a742d170d41105de1689aa46cristy MagickRealType 44935c4e2586d27d4299a742d170d41105de1689aa46cristy u[4], 44945c4e2586d27d4299a742d170d41105de1689aa46cristy v[4]; 44955c4e2586d27d4299a742d170d41105de1689aa46cristy 44965c4e2586d27d4299a742d170d41105de1689aa46cristy PointInfo 44975c4e2586d27d4299a742d170d41105de1689aa46cristy delta; 44985c4e2586d27d4299a742d170d41105de1689aa46cristy 44995c4e2586d27d4299a742d170d41105de1689aa46cristy p=GetCacheViewVirtualPixels(source_view,x_offset-1,y_offset-1,4,4, 45005c4e2586d27d4299a742d170d41105de1689aa46cristy exception); 45015c4e2586d27d4299a742d170d41105de1689aa46cristy if (p == (const Quantum *) NULL) 45025c4e2586d27d4299a742d170d41105de1689aa46cristy { 45035c4e2586d27d4299a742d170d41105de1689aa46cristy status=MagickFalse; 45045c4e2586d27d4299a742d170d41105de1689aa46cristy break; 45055c4e2586d27d4299a742d170d41105de1689aa46cristy } 45065c4e2586d27d4299a742d170d41105de1689aa46cristy for (i=0; i < (ssize_t) GetPixelChannels(source); i++) 45075c4e2586d27d4299a742d170d41105de1689aa46cristy { 45085c4e2586d27d4299a742d170d41105de1689aa46cristy register ssize_t 45095c4e2586d27d4299a742d170d41105de1689aa46cristy j; 45105c4e2586d27d4299a742d170d41105de1689aa46cristy 4511e2a912b6c9086c98ec838baa0824cd8deca55538cristy channel=GetPixelChannelMapChannel(source,i); 4512abace416e67464ca6dac2324410667b05076a9c2cristy traits=GetPixelChannelMapTraits(source,channel); 45135c4e2586d27d4299a742d170d41105de1689aa46cristy destination_traits=GetPixelChannelMapTraits(destination,channel); 45145c4e2586d27d4299a742d170d41105de1689aa46cristy if ((traits == UndefinedPixelTrait) || 45155c4e2586d27d4299a742d170d41105de1689aa46cristy (destination_traits == UndefinedPixelTrait)) 45165c4e2586d27d4299a742d170d41105de1689aa46cristy continue; 45175c4e2586d27d4299a742d170d41105de1689aa46cristy if ((traits & BlendPixelTrait) == 0) 45185c4e2586d27d4299a742d170d41105de1689aa46cristy for (j=0; j < 16; j++) 45195c4e2586d27d4299a742d170d41105de1689aa46cristy { 45205c4e2586d27d4299a742d170d41105de1689aa46cristy alpha[j]=1.0; 45215c4e2586d27d4299a742d170d41105de1689aa46cristy pixels[j]=(MagickRealType) p[j*GetPixelChannels(source)+i]; 45225c4e2586d27d4299a742d170d41105de1689aa46cristy } 45235c4e2586d27d4299a742d170d41105de1689aa46cristy else 45245c4e2586d27d4299a742d170d41105de1689aa46cristy for (j=0; j < 16; j++) 45255c4e2586d27d4299a742d170d41105de1689aa46cristy { 45265c4e2586d27d4299a742d170d41105de1689aa46cristy alpha[j]=QuantumScale*GetPixelAlpha(source,p+j* 45275c4e2586d27d4299a742d170d41105de1689aa46cristy GetPixelChannels(source)); 45285c4e2586d27d4299a742d170d41105de1689aa46cristy pixels[j]=alpha[j]*p[j*GetPixelChannels(source)+i]; 45295c4e2586d27d4299a742d170d41105de1689aa46cristy } 45305c4e2586d27d4299a742d170d41105de1689aa46cristy delta.x=x-x_offset; 45315c4e2586d27d4299a742d170d41105de1689aa46cristy delta.y=y-y_offset; 45325c4e2586d27d4299a742d170d41105de1689aa46cristy for (j=0; j < 4; j++) 45335c4e2586d27d4299a742d170d41105de1689aa46cristy { 45345c4e2586d27d4299a742d170d41105de1689aa46cristy u[0]=(pixels[4*j+3]-pixels[4*j+2])-(pixels[4*j+0]-pixels[4*j+1]); 45355c4e2586d27d4299a742d170d41105de1689aa46cristy u[1]=(pixels[4*j+0]-pixels[4*j+1])-u[0]; 45365c4e2586d27d4299a742d170d41105de1689aa46cristy u[2]=pixels[4*j+2]-pixels[4*j+0]; 45375c4e2586d27d4299a742d170d41105de1689aa46cristy u[3]=pixels[4*j+1]; 45385c4e2586d27d4299a742d170d41105de1689aa46cristy v[j]=(delta.x*delta.x*delta.x*u[0])+(delta.x*delta.x*u[1])+(delta.x* 45395c4e2586d27d4299a742d170d41105de1689aa46cristy u[2])+u[3]; 45405c4e2586d27d4299a742d170d41105de1689aa46cristy } 45415c4e2586d27d4299a742d170d41105de1689aa46cristy u[0]=(v[3]-v[2])-(v[0]-v[1]); 45425c4e2586d27d4299a742d170d41105de1689aa46cristy u[1]=(v[0]-v[1])-u[0]; 45435c4e2586d27d4299a742d170d41105de1689aa46cristy u[2]=v[2]-v[0]; 45445c4e2586d27d4299a742d170d41105de1689aa46cristy u[3]=v[1]; 45454a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy SetPixelChannel(destination,channel,ClampToQuantum((delta.y*delta.y* 45464a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy delta.y*u[0])+(delta.y*delta.y*u[1])+(delta.y*u[2])+u[3]),pixel); 45475c4e2586d27d4299a742d170d41105de1689aa46cristy } 45485c4e2586d27d4299a742d170d41105de1689aa46cristy break; 45495c4e2586d27d4299a742d170d41105de1689aa46cristy } 45505c4e2586d27d4299a742d170d41105de1689aa46cristy case BilinearInterpolatePixel: 45515c4e2586d27d4299a742d170d41105de1689aa46cristy default: 45525c4e2586d27d4299a742d170d41105de1689aa46cristy { 45535c4e2586d27d4299a742d170d41105de1689aa46cristy p=GetCacheViewVirtualPixels(source_view,x_offset,y_offset,2,2,exception); 45545c4e2586d27d4299a742d170d41105de1689aa46cristy if (p == (const Quantum *) NULL) 45555c4e2586d27d4299a742d170d41105de1689aa46cristy { 45565c4e2586d27d4299a742d170d41105de1689aa46cristy status=MagickFalse; 45575c4e2586d27d4299a742d170d41105de1689aa46cristy break; 45585c4e2586d27d4299a742d170d41105de1689aa46cristy } 45595c4e2586d27d4299a742d170d41105de1689aa46cristy for (i=0; i < (ssize_t) GetPixelChannels(source); i++) 45605c4e2586d27d4299a742d170d41105de1689aa46cristy { 45615c4e2586d27d4299a742d170d41105de1689aa46cristy PointInfo 45625c4e2586d27d4299a742d170d41105de1689aa46cristy delta, 45635c4e2586d27d4299a742d170d41105de1689aa46cristy epsilon; 45645c4e2586d27d4299a742d170d41105de1689aa46cristy 4565e2a912b6c9086c98ec838baa0824cd8deca55538cristy channel=GetPixelChannelMapChannel(source,i); 4566abace416e67464ca6dac2324410667b05076a9c2cristy traits=GetPixelChannelMapTraits(source,channel); 45675c4e2586d27d4299a742d170d41105de1689aa46cristy destination_traits=GetPixelChannelMapTraits(destination,channel); 45685c4e2586d27d4299a742d170d41105de1689aa46cristy if ((traits == UndefinedPixelTrait) || 45695c4e2586d27d4299a742d170d41105de1689aa46cristy (destination_traits == UndefinedPixelTrait)) 45705c4e2586d27d4299a742d170d41105de1689aa46cristy continue; 45715c4e2586d27d4299a742d170d41105de1689aa46cristy delta.x=x-x_offset; 45725c4e2586d27d4299a742d170d41105de1689aa46cristy delta.y=y-y_offset; 45735c4e2586d27d4299a742d170d41105de1689aa46cristy epsilon.x=1.0-delta.x; 45745c4e2586d27d4299a742d170d41105de1689aa46cristy epsilon.y=1.0-delta.y; 457528474bfbda5ee2d4da2eb79f299cf1f692770b99cristy pixels[0]=(MagickRealType) p[i]; 457628474bfbda5ee2d4da2eb79f299cf1f692770b99cristy pixels[1]=(MagickRealType) p[GetPixelChannels(source)+i]; 45775c4e2586d27d4299a742d170d41105de1689aa46cristy pixels[2]=(MagickRealType) p[2*GetPixelChannels(source)+i]; 45785c4e2586d27d4299a742d170d41105de1689aa46cristy pixels[3]=(MagickRealType) p[3*GetPixelChannels(source)+i]; 45795c4e2586d27d4299a742d170d41105de1689aa46cristy if ((traits & BlendPixelTrait) == 0) 45805c4e2586d27d4299a742d170d41105de1689aa46cristy { 45815c4e2586d27d4299a742d170d41105de1689aa46cristy gamma=((epsilon.y*(epsilon.x+delta.x)+delta.y*(epsilon.x+delta.x))); 45825c4e2586d27d4299a742d170d41105de1689aa46cristy gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma); 45834a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy SetPixelChannel(destination,channel,ClampToQuantum(gamma*(epsilon.y* 45844a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy (epsilon.x*pixels[0]+delta.x*pixels[1])+delta.y*(epsilon.x* 45854a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy pixels[2]+delta.x*pixels[3]))),pixel); 45865c4e2586d27d4299a742d170d41105de1689aa46cristy continue; 45875c4e2586d27d4299a742d170d41105de1689aa46cristy } 458828474bfbda5ee2d4da2eb79f299cf1f692770b99cristy alpha[0]=QuantumScale*GetPixelAlpha(source,p); 458928474bfbda5ee2d4da2eb79f299cf1f692770b99cristy alpha[1]=QuantumScale*GetPixelAlpha(source,p+GetPixelChannels(source)); 45905c4e2586d27d4299a742d170d41105de1689aa46cristy alpha[2]=QuantumScale*GetPixelAlpha(source,p+2* 45915c4e2586d27d4299a742d170d41105de1689aa46cristy GetPixelChannels(source)); 45925c4e2586d27d4299a742d170d41105de1689aa46cristy alpha[3]=QuantumScale*GetPixelAlpha(source,p+3* 45935c4e2586d27d4299a742d170d41105de1689aa46cristy GetPixelChannels(source)); 45945c4e2586d27d4299a742d170d41105de1689aa46cristy pixels[0]*=alpha[0]; 45955c4e2586d27d4299a742d170d41105de1689aa46cristy pixels[1]*=alpha[1]; 45965c4e2586d27d4299a742d170d41105de1689aa46cristy pixels[2]*=alpha[2]; 45975c4e2586d27d4299a742d170d41105de1689aa46cristy pixels[3]*=alpha[3]; 45985c4e2586d27d4299a742d170d41105de1689aa46cristy gamma=((epsilon.y*(epsilon.x*alpha[0]+delta.x*alpha[1])+delta.y* 45995c4e2586d27d4299a742d170d41105de1689aa46cristy (epsilon.x*alpha[2]+delta.x*alpha[3]))); 46005c4e2586d27d4299a742d170d41105de1689aa46cristy gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma); 46014a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy SetPixelChannel(destination,channel,ClampToQuantum(gamma*(epsilon.y* 46024a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy (epsilon.x*pixels[0]+delta.x*pixels[1])+delta.y*(epsilon.x*pixels[2]+ 46034a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy delta.x*pixels[3]))),pixel); 46045c4e2586d27d4299a742d170d41105de1689aa46cristy } 46055c4e2586d27d4299a742d170d41105de1689aa46cristy break; 46065c4e2586d27d4299a742d170d41105de1689aa46cristy } 46075c4e2586d27d4299a742d170d41105de1689aa46cristy case FilterInterpolatePixel: 46085c4e2586d27d4299a742d170d41105de1689aa46cristy { 46095c4e2586d27d4299a742d170d41105de1689aa46cristy for (i=0; i < (ssize_t) GetPixelChannels(source); i++) 46105c4e2586d27d4299a742d170d41105de1689aa46cristy { 46115c4e2586d27d4299a742d170d41105de1689aa46cristy CacheView 46125c4e2586d27d4299a742d170d41105de1689aa46cristy *filter_view; 46135c4e2586d27d4299a742d170d41105de1689aa46cristy 46145c4e2586d27d4299a742d170d41105de1689aa46cristy Image 46155c4e2586d27d4299a742d170d41105de1689aa46cristy *excerpt_source, 46165c4e2586d27d4299a742d170d41105de1689aa46cristy *filter_source; 46175c4e2586d27d4299a742d170d41105de1689aa46cristy 46185c4e2586d27d4299a742d170d41105de1689aa46cristy RectangleInfo 46195c4e2586d27d4299a742d170d41105de1689aa46cristy geometry; 46205c4e2586d27d4299a742d170d41105de1689aa46cristy 4621e2a912b6c9086c98ec838baa0824cd8deca55538cristy channel=GetPixelChannelMapChannel(source,i); 4622abace416e67464ca6dac2324410667b05076a9c2cristy traits=GetPixelChannelMapTraits(source,channel); 46235c4e2586d27d4299a742d170d41105de1689aa46cristy destination_traits=GetPixelChannelMapTraits(destination,channel); 46245c4e2586d27d4299a742d170d41105de1689aa46cristy if ((traits == UndefinedPixelTrait) || 46255c4e2586d27d4299a742d170d41105de1689aa46cristy (destination_traits == UndefinedPixelTrait)) 46265c4e2586d27d4299a742d170d41105de1689aa46cristy continue; 46275c4e2586d27d4299a742d170d41105de1689aa46cristy geometry.width=4L; 46285c4e2586d27d4299a742d170d41105de1689aa46cristy geometry.height=4L; 46295c4e2586d27d4299a742d170d41105de1689aa46cristy geometry.x=x_offset-1; 46305c4e2586d27d4299a742d170d41105de1689aa46cristy geometry.y=y_offset-1; 46315c4e2586d27d4299a742d170d41105de1689aa46cristy excerpt_source=ExcerptImage(source,&geometry,exception); 46325c4e2586d27d4299a742d170d41105de1689aa46cristy if (excerpt_source == (Image *) NULL) 46335c4e2586d27d4299a742d170d41105de1689aa46cristy { 46345c4e2586d27d4299a742d170d41105de1689aa46cristy status=MagickFalse; 46355c4e2586d27d4299a742d170d41105de1689aa46cristy continue; 46365c4e2586d27d4299a742d170d41105de1689aa46cristy } 4637aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy filter_source=ResizeImage(excerpt_source,1,1,source->filter,exception); 46385c4e2586d27d4299a742d170d41105de1689aa46cristy excerpt_source=DestroyImage(excerpt_source); 46395c4e2586d27d4299a742d170d41105de1689aa46cristy if (filter_source == (Image *) NULL) 46405c4e2586d27d4299a742d170d41105de1689aa46cristy continue; 4641db070957cf6bf959df9283a482377e8854c3d4d2cristy filter_view=AcquireVirtualCacheView(filter_source,exception); 46425c4e2586d27d4299a742d170d41105de1689aa46cristy p=GetCacheViewVirtualPixels(filter_view,0,0,1,1,exception); 46435c4e2586d27d4299a742d170d41105de1689aa46cristy if (p == (const Quantum *) NULL) 46445c4e2586d27d4299a742d170d41105de1689aa46cristy status=MagickFalse; 46455c4e2586d27d4299a742d170d41105de1689aa46cristy else 46461861c90c5c8c4ceb56885dd86377412aae0f4526cristy { 46474a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy SetPixelChannel(destination,channel,p[i],pixel); 46481861c90c5c8c4ceb56885dd86377412aae0f4526cristy } 46495c4e2586d27d4299a742d170d41105de1689aa46cristy filter_view=DestroyCacheView(filter_view); 46505c4e2586d27d4299a742d170d41105de1689aa46cristy filter_source=DestroyImage(filter_source); 46515c4e2586d27d4299a742d170d41105de1689aa46cristy } 46525c4e2586d27d4299a742d170d41105de1689aa46cristy break; 46535c4e2586d27d4299a742d170d41105de1689aa46cristy } 46545c4e2586d27d4299a742d170d41105de1689aa46cristy case IntegerInterpolatePixel: 46555c4e2586d27d4299a742d170d41105de1689aa46cristy { 46565c4e2586d27d4299a742d170d41105de1689aa46cristy p=GetCacheViewVirtualPixels(source_view,x_offset,y_offset,1,1,exception); 46575c4e2586d27d4299a742d170d41105de1689aa46cristy if (p == (const Quantum *) NULL) 46585c4e2586d27d4299a742d170d41105de1689aa46cristy { 46595c4e2586d27d4299a742d170d41105de1689aa46cristy status=MagickFalse; 46605c4e2586d27d4299a742d170d41105de1689aa46cristy break; 46615c4e2586d27d4299a742d170d41105de1689aa46cristy } 46625c4e2586d27d4299a742d170d41105de1689aa46cristy for (i=0; i < (ssize_t) GetPixelChannels(source); i++) 46635c4e2586d27d4299a742d170d41105de1689aa46cristy { 4664e2a912b6c9086c98ec838baa0824cd8deca55538cristy channel=GetPixelChannelMapChannel(source,i); 4665abace416e67464ca6dac2324410667b05076a9c2cristy traits=GetPixelChannelMapTraits(source,channel); 46665c4e2586d27d4299a742d170d41105de1689aa46cristy destination_traits=GetPixelChannelMapTraits(destination,channel); 46675c4e2586d27d4299a742d170d41105de1689aa46cristy if ((traits == UndefinedPixelTrait) || 46685c4e2586d27d4299a742d170d41105de1689aa46cristy (destination_traits == UndefinedPixelTrait)) 46695c4e2586d27d4299a742d170d41105de1689aa46cristy continue; 46704a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy SetPixelChannel(destination,channel,p[i],pixel); 46715c4e2586d27d4299a742d170d41105de1689aa46cristy } 46725c4e2586d27d4299a742d170d41105de1689aa46cristy break; 46735c4e2586d27d4299a742d170d41105de1689aa46cristy } 46745c4e2586d27d4299a742d170d41105de1689aa46cristy case NearestNeighborInterpolatePixel: 46755c4e2586d27d4299a742d170d41105de1689aa46cristy { 46765c4e2586d27d4299a742d170d41105de1689aa46cristy p=GetCacheViewVirtualPixels(source_view,NearestNeighbor(x), 46775c4e2586d27d4299a742d170d41105de1689aa46cristy NearestNeighbor(y),1,1,exception); 46785c4e2586d27d4299a742d170d41105de1689aa46cristy if (p == (const Quantum *) NULL) 46795c4e2586d27d4299a742d170d41105de1689aa46cristy { 46805c4e2586d27d4299a742d170d41105de1689aa46cristy status=MagickFalse; 46815c4e2586d27d4299a742d170d41105de1689aa46cristy break; 46825c4e2586d27d4299a742d170d41105de1689aa46cristy } 46835c4e2586d27d4299a742d170d41105de1689aa46cristy for (i=0; i < (ssize_t) GetPixelChannels(source); i++) 46845c4e2586d27d4299a742d170d41105de1689aa46cristy { 4685e2a912b6c9086c98ec838baa0824cd8deca55538cristy channel=GetPixelChannelMapChannel(source,i); 4686abace416e67464ca6dac2324410667b05076a9c2cristy traits=GetPixelChannelMapTraits(source,channel); 46875c4e2586d27d4299a742d170d41105de1689aa46cristy destination_traits=GetPixelChannelMapTraits(destination,channel); 46885c4e2586d27d4299a742d170d41105de1689aa46cristy if ((traits == UndefinedPixelTrait) || 46895c4e2586d27d4299a742d170d41105de1689aa46cristy (destination_traits == UndefinedPixelTrait)) 46905c4e2586d27d4299a742d170d41105de1689aa46cristy continue; 46914a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy SetPixelChannel(destination,channel,p[i],pixel); 46925c4e2586d27d4299a742d170d41105de1689aa46cristy } 46935c4e2586d27d4299a742d170d41105de1689aa46cristy break; 46945c4e2586d27d4299a742d170d41105de1689aa46cristy } 46955c4e2586d27d4299a742d170d41105de1689aa46cristy case MeshInterpolatePixel: 46965c4e2586d27d4299a742d170d41105de1689aa46cristy { 46975c4e2586d27d4299a742d170d41105de1689aa46cristy p=GetCacheViewVirtualPixels(source_view,x_offset,y_offset,2,2,exception); 46985c4e2586d27d4299a742d170d41105de1689aa46cristy if (p == (const Quantum *) NULL) 46995c4e2586d27d4299a742d170d41105de1689aa46cristy { 47005c4e2586d27d4299a742d170d41105de1689aa46cristy status=MagickFalse; 47015c4e2586d27d4299a742d170d41105de1689aa46cristy break; 47025c4e2586d27d4299a742d170d41105de1689aa46cristy } 47035c4e2586d27d4299a742d170d41105de1689aa46cristy for (i=0; i < (ssize_t) GetPixelChannels(source); i++) 47045c4e2586d27d4299a742d170d41105de1689aa46cristy { 47055c4e2586d27d4299a742d170d41105de1689aa46cristy PointInfo 47065c4e2586d27d4299a742d170d41105de1689aa46cristy delta, 47075c4e2586d27d4299a742d170d41105de1689aa46cristy luminance; 47085c4e2586d27d4299a742d170d41105de1689aa46cristy 4709e2a912b6c9086c98ec838baa0824cd8deca55538cristy channel=GetPixelChannelMapChannel(source,i); 4710abace416e67464ca6dac2324410667b05076a9c2cristy traits=GetPixelChannelMapTraits(source,channel); 47115c4e2586d27d4299a742d170d41105de1689aa46cristy destination_traits=GetPixelChannelMapTraits(destination,channel); 47125c4e2586d27d4299a742d170d41105de1689aa46cristy if ((traits == UndefinedPixelTrait) || 47135c4e2586d27d4299a742d170d41105de1689aa46cristy (destination_traits == UndefinedPixelTrait)) 47145c4e2586d27d4299a742d170d41105de1689aa46cristy continue; 47151861c90c5c8c4ceb56885dd86377412aae0f4526cristy pixels[0]=(MagickRealType) p[i]; 47161861c90c5c8c4ceb56885dd86377412aae0f4526cristy pixels[1]=(MagickRealType) p[GetPixelChannels(source)+i]; 47171861c90c5c8c4ceb56885dd86377412aae0f4526cristy pixels[2]=(MagickRealType) p[2*GetPixelChannels(source)+i]; 47181861c90c5c8c4ceb56885dd86377412aae0f4526cristy pixels[3]=(MagickRealType) p[3*GetPixelChannels(source)+i]; 47191861c90c5c8c4ceb56885dd86377412aae0f4526cristy if ((traits & BlendPixelTrait) == 0) 47201861c90c5c8c4ceb56885dd86377412aae0f4526cristy { 47211861c90c5c8c4ceb56885dd86377412aae0f4526cristy alpha[0]=1.0; 47221861c90c5c8c4ceb56885dd86377412aae0f4526cristy alpha[1]=1.0; 47231861c90c5c8c4ceb56885dd86377412aae0f4526cristy alpha[2]=1.0; 47241861c90c5c8c4ceb56885dd86377412aae0f4526cristy alpha[3]=1.0; 47251861c90c5c8c4ceb56885dd86377412aae0f4526cristy } 47261861c90c5c8c4ceb56885dd86377412aae0f4526cristy else 47271861c90c5c8c4ceb56885dd86377412aae0f4526cristy { 47281861c90c5c8c4ceb56885dd86377412aae0f4526cristy alpha[0]=QuantumScale*GetPixelAlpha(source,p); 47291861c90c5c8c4ceb56885dd86377412aae0f4526cristy alpha[1]=QuantumScale*GetPixelAlpha(source,p+ 47301861c90c5c8c4ceb56885dd86377412aae0f4526cristy GetPixelChannels(source)); 47311861c90c5c8c4ceb56885dd86377412aae0f4526cristy alpha[2]=QuantumScale*GetPixelAlpha(source,p+2* 47321861c90c5c8c4ceb56885dd86377412aae0f4526cristy GetPixelChannels(source)); 47331861c90c5c8c4ceb56885dd86377412aae0f4526cristy alpha[3]=QuantumScale*GetPixelAlpha(source,p+3* 47341861c90c5c8c4ceb56885dd86377412aae0f4526cristy GetPixelChannels(source)); 47351861c90c5c8c4ceb56885dd86377412aae0f4526cristy } 47361861c90c5c8c4ceb56885dd86377412aae0f4526cristy delta.x=x-x_offset; 47371861c90c5c8c4ceb56885dd86377412aae0f4526cristy delta.y=y-y_offset; 47381861c90c5c8c4ceb56885dd86377412aae0f4526cristy luminance.x=GetPixelLuminance(source,p)-(double) 47391861c90c5c8c4ceb56885dd86377412aae0f4526cristy GetPixelLuminance(source,p+3*GetPixelChannels(source)); 47401861c90c5c8c4ceb56885dd86377412aae0f4526cristy luminance.y=GetPixelLuminance(source,p+GetPixelChannels(source))- 47411861c90c5c8c4ceb56885dd86377412aae0f4526cristy (double) GetPixelLuminance(source,p+2*GetPixelChannels(source)); 47421861c90c5c8c4ceb56885dd86377412aae0f4526cristy if (fabs(luminance.x) < fabs(luminance.y)) 47431861c90c5c8c4ceb56885dd86377412aae0f4526cristy { 47441861c90c5c8c4ceb56885dd86377412aae0f4526cristy /* 47451861c90c5c8c4ceb56885dd86377412aae0f4526cristy Diagonal 0-3 NW-SE. 47461861c90c5c8c4ceb56885dd86377412aae0f4526cristy */ 47471861c90c5c8c4ceb56885dd86377412aae0f4526cristy if (delta.x <= delta.y) 47481861c90c5c8c4ceb56885dd86377412aae0f4526cristy { 47491861c90c5c8c4ceb56885dd86377412aae0f4526cristy /* 47501861c90c5c8c4ceb56885dd86377412aae0f4526cristy Bottom-left triangle (pixel: 2, diagonal: 0-3). 47511861c90c5c8c4ceb56885dd86377412aae0f4526cristy */ 47521861c90c5c8c4ceb56885dd86377412aae0f4526cristy delta.y=1.0-delta.y; 47531861c90c5c8c4ceb56885dd86377412aae0f4526cristy gamma=MeshInterpolate(&delta,alpha[2],alpha[3],alpha[0]); 47541861c90c5c8c4ceb56885dd86377412aae0f4526cristy gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma); 47554a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy SetPixelChannel(destination,channel,ClampToQuantum(gamma* 47564a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy MeshInterpolate(&delta,pixels[2],pixels[3],pixels[0])),pixel); 47571861c90c5c8c4ceb56885dd86377412aae0f4526cristy } 47581861c90c5c8c4ceb56885dd86377412aae0f4526cristy else 47591861c90c5c8c4ceb56885dd86377412aae0f4526cristy { 47601861c90c5c8c4ceb56885dd86377412aae0f4526cristy /* 47611861c90c5c8c4ceb56885dd86377412aae0f4526cristy Top-right triangle (pixel: 1, diagonal: 0-3). 47621861c90c5c8c4ceb56885dd86377412aae0f4526cristy */ 47631861c90c5c8c4ceb56885dd86377412aae0f4526cristy delta.x=1.0-delta.x; 47641861c90c5c8c4ceb56885dd86377412aae0f4526cristy gamma=MeshInterpolate(&delta,alpha[1],alpha[0],alpha[3]); 47651861c90c5c8c4ceb56885dd86377412aae0f4526cristy gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma); 47664a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy SetPixelChannel(destination,channel,ClampToQuantum(gamma* 47674a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy MeshInterpolate(&delta,pixels[1],pixels[0],pixels[3])),pixel); 47681861c90c5c8c4ceb56885dd86377412aae0f4526cristy } 47691861c90c5c8c4ceb56885dd86377412aae0f4526cristy } 47701861c90c5c8c4ceb56885dd86377412aae0f4526cristy else 47711861c90c5c8c4ceb56885dd86377412aae0f4526cristy { 47721861c90c5c8c4ceb56885dd86377412aae0f4526cristy /* 47731861c90c5c8c4ceb56885dd86377412aae0f4526cristy Diagonal 1-2 NE-SW. 47741861c90c5c8c4ceb56885dd86377412aae0f4526cristy */ 47751861c90c5c8c4ceb56885dd86377412aae0f4526cristy if (delta.x <= (1.0-delta.y)) 47761861c90c5c8c4ceb56885dd86377412aae0f4526cristy { 47771861c90c5c8c4ceb56885dd86377412aae0f4526cristy /* 47781861c90c5c8c4ceb56885dd86377412aae0f4526cristy Top-left triangle (pixel: 0, diagonal: 1-2). 47791861c90c5c8c4ceb56885dd86377412aae0f4526cristy */ 47801861c90c5c8c4ceb56885dd86377412aae0f4526cristy gamma=MeshInterpolate(&delta,alpha[0],alpha[1],alpha[2]); 47811861c90c5c8c4ceb56885dd86377412aae0f4526cristy gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma); 47824a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy SetPixelChannel(destination,channel,ClampToQuantum(gamma* 47834a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy MeshInterpolate(&delta,pixels[0],pixels[1],pixels[2])),pixel); 47841861c90c5c8c4ceb56885dd86377412aae0f4526cristy } 47851861c90c5c8c4ceb56885dd86377412aae0f4526cristy else 47861861c90c5c8c4ceb56885dd86377412aae0f4526cristy { 47871861c90c5c8c4ceb56885dd86377412aae0f4526cristy /* 47881861c90c5c8c4ceb56885dd86377412aae0f4526cristy Bottom-right triangle (pixel: 3, diagonal: 1-2). 47891861c90c5c8c4ceb56885dd86377412aae0f4526cristy */ 47901861c90c5c8c4ceb56885dd86377412aae0f4526cristy delta.x=1.0-delta.x; 47911861c90c5c8c4ceb56885dd86377412aae0f4526cristy delta.y=1.0-delta.y; 47921861c90c5c8c4ceb56885dd86377412aae0f4526cristy gamma=MeshInterpolate(&delta,alpha[3],alpha[2],alpha[1]); 47931861c90c5c8c4ceb56885dd86377412aae0f4526cristy gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma); 47944a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy SetPixelChannel(destination,channel,ClampToQuantum(gamma* 47954a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy MeshInterpolate(&delta,pixels[3],pixels[2],pixels[1])),pixel); 47961861c90c5c8c4ceb56885dd86377412aae0f4526cristy } 47971861c90c5c8c4ceb56885dd86377412aae0f4526cristy } 47985c4e2586d27d4299a742d170d41105de1689aa46cristy } 47995c4e2586d27d4299a742d170d41105de1689aa46cristy break; 48005c4e2586d27d4299a742d170d41105de1689aa46cristy } 48015c4e2586d27d4299a742d170d41105de1689aa46cristy case SplineInterpolatePixel: 48025c4e2586d27d4299a742d170d41105de1689aa46cristy { 48035c4e2586d27d4299a742d170d41105de1689aa46cristy p=GetCacheViewVirtualPixels(source_view,x_offset-1,y_offset-1,4,4, 48045c4e2586d27d4299a742d170d41105de1689aa46cristy exception); 48055c4e2586d27d4299a742d170d41105de1689aa46cristy if (p == (const Quantum *) NULL) 48065c4e2586d27d4299a742d170d41105de1689aa46cristy { 48075c4e2586d27d4299a742d170d41105de1689aa46cristy status=MagickFalse; 48085c4e2586d27d4299a742d170d41105de1689aa46cristy break; 48095c4e2586d27d4299a742d170d41105de1689aa46cristy } 48105c4e2586d27d4299a742d170d41105de1689aa46cristy for (i=0; i < (ssize_t) GetPixelChannels(source); i++) 48115c4e2586d27d4299a742d170d41105de1689aa46cristy { 48125c4e2586d27d4299a742d170d41105de1689aa46cristy double 48135c4e2586d27d4299a742d170d41105de1689aa46cristy sum; 48145c4e2586d27d4299a742d170d41105de1689aa46cristy 48155c4e2586d27d4299a742d170d41105de1689aa46cristy MagickRealType 48165c4e2586d27d4299a742d170d41105de1689aa46cristy dx, 48175c4e2586d27d4299a742d170d41105de1689aa46cristy dy; 48185c4e2586d27d4299a742d170d41105de1689aa46cristy 48195c4e2586d27d4299a742d170d41105de1689aa46cristy PointInfo 48205c4e2586d27d4299a742d170d41105de1689aa46cristy delta; 48215c4e2586d27d4299a742d170d41105de1689aa46cristy 48225c4e2586d27d4299a742d170d41105de1689aa46cristy register ssize_t 48235c4e2586d27d4299a742d170d41105de1689aa46cristy j; 48245c4e2586d27d4299a742d170d41105de1689aa46cristy 48255c4e2586d27d4299a742d170d41105de1689aa46cristy ssize_t 48265c4e2586d27d4299a742d170d41105de1689aa46cristy k, 48275c4e2586d27d4299a742d170d41105de1689aa46cristy n; 48285c4e2586d27d4299a742d170d41105de1689aa46cristy 4829e2a912b6c9086c98ec838baa0824cd8deca55538cristy channel=GetPixelChannelMapChannel(source,i); 4830abace416e67464ca6dac2324410667b05076a9c2cristy traits=GetPixelChannelMapTraits(source,channel); 48315c4e2586d27d4299a742d170d41105de1689aa46cristy destination_traits=GetPixelChannelMapTraits(destination,channel); 48325c4e2586d27d4299a742d170d41105de1689aa46cristy if ((traits == UndefinedPixelTrait) || 48335c4e2586d27d4299a742d170d41105de1689aa46cristy (destination_traits == UndefinedPixelTrait)) 48345c4e2586d27d4299a742d170d41105de1689aa46cristy continue; 48355c4e2586d27d4299a742d170d41105de1689aa46cristy if ((traits & BlendPixelTrait) == 0) 48365c4e2586d27d4299a742d170d41105de1689aa46cristy for (j=0; j < 16; j++) 48375c4e2586d27d4299a742d170d41105de1689aa46cristy { 48385c4e2586d27d4299a742d170d41105de1689aa46cristy alpha[j]=1.0; 48395c4e2586d27d4299a742d170d41105de1689aa46cristy pixels[j]=(MagickRealType) p[j*GetPixelChannels(source)+i]; 48405c4e2586d27d4299a742d170d41105de1689aa46cristy } 48415c4e2586d27d4299a742d170d41105de1689aa46cristy else 48425c4e2586d27d4299a742d170d41105de1689aa46cristy for (j=0; j < 16; j++) 48435c4e2586d27d4299a742d170d41105de1689aa46cristy { 48445c4e2586d27d4299a742d170d41105de1689aa46cristy alpha[j]=QuantumScale*GetPixelAlpha(source,p+j* 48455c4e2586d27d4299a742d170d41105de1689aa46cristy GetPixelChannels(source)); 48465c4e2586d27d4299a742d170d41105de1689aa46cristy pixels[j]=alpha[j]*p[j*GetPixelChannels(source)+i]; 48475c4e2586d27d4299a742d170d41105de1689aa46cristy } 48485c4e2586d27d4299a742d170d41105de1689aa46cristy delta.x=x-x_offset; 48495c4e2586d27d4299a742d170d41105de1689aa46cristy delta.y=y-y_offset; 48505c4e2586d27d4299a742d170d41105de1689aa46cristy sum=0.0; 48515c4e2586d27d4299a742d170d41105de1689aa46cristy n=0; 48525c4e2586d27d4299a742d170d41105de1689aa46cristy for (j=(-1); j < 3L; j++) 48535c4e2586d27d4299a742d170d41105de1689aa46cristy { 48545c4e2586d27d4299a742d170d41105de1689aa46cristy dy=CubicWeightingFunction((MagickRealType) j-delta.y); 48555c4e2586d27d4299a742d170d41105de1689aa46cristy for (k=(-1); k < 3L; k++) 48565c4e2586d27d4299a742d170d41105de1689aa46cristy { 48575c4e2586d27d4299a742d170d41105de1689aa46cristy dx=CubicWeightingFunction(delta.x-(MagickRealType) k); 48585c4e2586d27d4299a742d170d41105de1689aa46cristy gamma=1.0/(fabs((double) alpha[n]) <= MagickEpsilon ? 1.0 : 48595c4e2586d27d4299a742d170d41105de1689aa46cristy alpha[n]); 48605c4e2586d27d4299a742d170d41105de1689aa46cristy sum+=gamma*dx*dy*pixels[n]; 48615c4e2586d27d4299a742d170d41105de1689aa46cristy n++; 48625c4e2586d27d4299a742d170d41105de1689aa46cristy } 48635c4e2586d27d4299a742d170d41105de1689aa46cristy } 48644a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy SetPixelChannel(destination,channel,p[i],pixel); 48655c4e2586d27d4299a742d170d41105de1689aa46cristy } 48665c4e2586d27d4299a742d170d41105de1689aa46cristy break; 48675c4e2586d27d4299a742d170d41105de1689aa46cristy } 48685c4e2586d27d4299a742d170d41105de1689aa46cristy } 48695c4e2586d27d4299a742d170d41105de1689aa46cristy return(status); 48705c4e2586d27d4299a742d170d41105de1689aa46cristy} 48715c4e2586d27d4299a742d170d41105de1689aa46cristy 48725c4e2586d27d4299a742d170d41105de1689aa46cristy/* 48735c4e2586d27d4299a742d170d41105de1689aa46cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 48745c4e2586d27d4299a742d170d41105de1689aa46cristy% % 48755c4e2586d27d4299a742d170d41105de1689aa46cristy% % 48765c4e2586d27d4299a742d170d41105de1689aa46cristy% % 48779075cdb062fda00666ab37b0ba7df4b8cc2e8eaccristy% I n t e r p o l a t e P i x e l I n f o % 4878d76c51ed30cf4084f4434ba08925d16001d1e340cristy% % 4879d76c51ed30cf4084f4434ba08925d16001d1e340cristy% % 4880d76c51ed30cf4084f4434ba08925d16001d1e340cristy% % 4881d76c51ed30cf4084f4434ba08925d16001d1e340cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4882d76c51ed30cf4084f4434ba08925d16001d1e340cristy% 4883884f600898ca6935a7981b4d56bf3d2c4ec17011cristy% InterpolatePixelInfo() applies a pixel interpolation method between a 4884884f600898ca6935a7981b4d56bf3d2c4ec17011cristy% floating point coordinate and the pixels surrounding that coordinate. No 4885884f600898ca6935a7981b4d56bf3d2c4ec17011cristy% pixel area resampling, or scaling of the result is performed. 4886d76c51ed30cf4084f4434ba08925d16001d1e340cristy% 48874c08aed51c5899665ade97263692328eea4af106cristy% The format of the InterpolatePixelInfo method is: 4888d76c51ed30cf4084f4434ba08925d16001d1e340cristy% 48894c08aed51c5899665ade97263692328eea4af106cristy% MagickBooleanType InterpolatePixelInfo(const Image *image, 48905c4e2586d27d4299a742d170d41105de1689aa46cristy% const CacheView *image_view,const PixelInterpolateMethod method, 48914c08aed51c5899665ade97263692328eea4af106cristy% const double x,const double y,PixelInfo *pixel, 4892d76c51ed30cf4084f4434ba08925d16001d1e340cristy% ExceptionInfo *exception) 4893d76c51ed30cf4084f4434ba08925d16001d1e340cristy% 4894d76c51ed30cf4084f4434ba08925d16001d1e340cristy% A description of each parameter follows: 4895d76c51ed30cf4084f4434ba08925d16001d1e340cristy% 4896d76c51ed30cf4084f4434ba08925d16001d1e340cristy% o image: the image. 4897d76c51ed30cf4084f4434ba08925d16001d1e340cristy% 4898d76c51ed30cf4084f4434ba08925d16001d1e340cristy% o image_view: the image view. 4899d76c51ed30cf4084f4434ba08925d16001d1e340cristy% 4900d76c51ed30cf4084f4434ba08925d16001d1e340cristy% o method: the pixel color interpolation method. 4901d76c51ed30cf4084f4434ba08925d16001d1e340cristy% 4902d76c51ed30cf4084f4434ba08925d16001d1e340cristy% o x,y: A double representing the current (x,y) position of the pixel. 4903d76c51ed30cf4084f4434ba08925d16001d1e340cristy% 4904d76c51ed30cf4084f4434ba08925d16001d1e340cristy% o pixel: return the interpolated pixel here. 4905d76c51ed30cf4084f4434ba08925d16001d1e340cristy% 4906d76c51ed30cf4084f4434ba08925d16001d1e340cristy% o exception: return any errors or warnings in this structure. 4907d76c51ed30cf4084f4434ba08925d16001d1e340cristy% 4908d76c51ed30cf4084f4434ba08925d16001d1e340cristy*/ 4909d76c51ed30cf4084f4434ba08925d16001d1e340cristy 49104c08aed51c5899665ade97263692328eea4af106cristystatic inline void AlphaBlendPixelInfo(const Image *image, 49114c08aed51c5899665ade97263692328eea4af106cristy const Quantum *pixel,PixelInfo *pixel_info,MagickRealType *alpha) 4912d76c51ed30cf4084f4434ba08925d16001d1e340cristy{ 4913241310d359ef6893f4d0c1e43eeb39f34991fd2acristy if (image->matte == MagickFalse) 4914241310d359ef6893f4d0c1e43eeb39f34991fd2acristy { 4915241310d359ef6893f4d0c1e43eeb39f34991fd2acristy *alpha=1.0; 49164c08aed51c5899665ade97263692328eea4af106cristy pixel_info->red=(MagickRealType) GetPixelRed(image,pixel); 49174c08aed51c5899665ade97263692328eea4af106cristy pixel_info->green=(MagickRealType) GetPixelGreen(image,pixel); 49184c08aed51c5899665ade97263692328eea4af106cristy pixel_info->blue=(MagickRealType) GetPixelBlue(image,pixel); 49194c08aed51c5899665ade97263692328eea4af106cristy pixel_info->black=0.0; 49204c08aed51c5899665ade97263692328eea4af106cristy if (image->colorspace == CMYKColorspace) 49214c08aed51c5899665ade97263692328eea4af106cristy pixel_info->black=(MagickRealType) GetPixelBlack(image,pixel); 49224c08aed51c5899665ade97263692328eea4af106cristy pixel_info->alpha=(MagickRealType) GetPixelAlpha(image,pixel); 4923241310d359ef6893f4d0c1e43eeb39f34991fd2acristy return; 4924241310d359ef6893f4d0c1e43eeb39f34991fd2acristy } 49254c08aed51c5899665ade97263692328eea4af106cristy *alpha=QuantumScale*GetPixelAlpha(image,pixel); 49264c08aed51c5899665ade97263692328eea4af106cristy pixel_info->red=(*alpha*GetPixelRed(image,pixel)); 49274c08aed51c5899665ade97263692328eea4af106cristy pixel_info->green=(*alpha*GetPixelGreen(image,pixel)); 49284c08aed51c5899665ade97263692328eea4af106cristy pixel_info->blue=(*alpha*GetPixelBlue(image,pixel)); 49294c08aed51c5899665ade97263692328eea4af106cristy pixel_info->black=0.0; 49304c08aed51c5899665ade97263692328eea4af106cristy if (image->colorspace == CMYKColorspace) 49314c08aed51c5899665ade97263692328eea4af106cristy pixel_info->black=(*alpha*GetPixelBlack(image,pixel)); 49324c08aed51c5899665ade97263692328eea4af106cristy pixel_info->alpha=(MagickRealType) GetPixelAlpha(image,pixel); 4933d76c51ed30cf4084f4434ba08925d16001d1e340cristy} 4934d76c51ed30cf4084f4434ba08925d16001d1e340cristy 49354c08aed51c5899665ade97263692328eea4af106cristystatic void BicubicInterpolate(const PixelInfo *pixels,const double dx, 49364c08aed51c5899665ade97263692328eea4af106cristy PixelInfo *pixel) 4937d76c51ed30cf4084f4434ba08925d16001d1e340cristy{ 4938d76c51ed30cf4084f4434ba08925d16001d1e340cristy MagickRealType 4939d76c51ed30cf4084f4434ba08925d16001d1e340cristy dx2, 4940d76c51ed30cf4084f4434ba08925d16001d1e340cristy p, 4941d76c51ed30cf4084f4434ba08925d16001d1e340cristy q, 4942d76c51ed30cf4084f4434ba08925d16001d1e340cristy r, 4943d76c51ed30cf4084f4434ba08925d16001d1e340cristy s; 4944d76c51ed30cf4084f4434ba08925d16001d1e340cristy 4945d76c51ed30cf4084f4434ba08925d16001d1e340cristy dx2=dx*dx; 4946d76c51ed30cf4084f4434ba08925d16001d1e340cristy p=(pixels[3].red-pixels[2].red)-(pixels[0].red-pixels[1].red); 4947d76c51ed30cf4084f4434ba08925d16001d1e340cristy q=(pixels[0].red-pixels[1].red)-p; 4948d76c51ed30cf4084f4434ba08925d16001d1e340cristy r=pixels[2].red-pixels[0].red; 4949d76c51ed30cf4084f4434ba08925d16001d1e340cristy s=pixels[1].red; 4950d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->red=(dx*dx2*p)+(dx2*q)+(dx*r)+s; 4951d76c51ed30cf4084f4434ba08925d16001d1e340cristy p=(pixels[3].green-pixels[2].green)-(pixels[0].green-pixels[1].green); 4952d76c51ed30cf4084f4434ba08925d16001d1e340cristy q=(pixels[0].green-pixels[1].green)-p; 4953d76c51ed30cf4084f4434ba08925d16001d1e340cristy r=pixels[2].green-pixels[0].green; 4954d76c51ed30cf4084f4434ba08925d16001d1e340cristy s=pixels[1].green; 4955d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->green=(dx*dx2*p)+(dx2*q)+(dx*r)+s; 4956d76c51ed30cf4084f4434ba08925d16001d1e340cristy p=(pixels[3].blue-pixels[2].blue)-(pixels[0].blue-pixels[1].blue); 4957d76c51ed30cf4084f4434ba08925d16001d1e340cristy q=(pixels[0].blue-pixels[1].blue)-p; 4958d76c51ed30cf4084f4434ba08925d16001d1e340cristy r=pixels[2].blue-pixels[0].blue; 4959d76c51ed30cf4084f4434ba08925d16001d1e340cristy s=pixels[1].blue; 4960d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->blue=(dx*dx2*p)+(dx2*q)+(dx*r)+s; 49614c08aed51c5899665ade97263692328eea4af106cristy p=(pixels[3].alpha-pixels[2].alpha)-(pixels[0].alpha-pixels[1].alpha); 49624c08aed51c5899665ade97263692328eea4af106cristy q=(pixels[0].alpha-pixels[1].alpha)-p; 49634c08aed51c5899665ade97263692328eea4af106cristy r=pixels[2].alpha-pixels[0].alpha; 49644c08aed51c5899665ade97263692328eea4af106cristy s=pixels[1].alpha; 49654c08aed51c5899665ade97263692328eea4af106cristy pixel->alpha=(dx*dx2*p)+(dx2*q)+(dx*r)+s; 4966d76c51ed30cf4084f4434ba08925d16001d1e340cristy if (pixel->colorspace == CMYKColorspace) 4967d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 49684c08aed51c5899665ade97263692328eea4af106cristy p=(pixels[3].black-pixels[2].black)-(pixels[0].black-pixels[1].black); 49694c08aed51c5899665ade97263692328eea4af106cristy q=(pixels[0].black-pixels[1].black)-p; 49704c08aed51c5899665ade97263692328eea4af106cristy r=pixels[2].black-pixels[0].black; 49714c08aed51c5899665ade97263692328eea4af106cristy s=pixels[1].black; 49724c08aed51c5899665ade97263692328eea4af106cristy pixel->black=(dx*dx2*p)+(dx2*q)+(dx*r)+s; 4973d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 4974d76c51ed30cf4084f4434ba08925d16001d1e340cristy} 4975d76c51ed30cf4084f4434ba08925d16001d1e340cristy 49764c08aed51c5899665ade97263692328eea4af106cristyMagickExport MagickBooleanType InterpolatePixelInfo(const Image *image, 49775c4e2586d27d4299a742d170d41105de1689aa46cristy const CacheView *image_view,const PixelInterpolateMethod method, 49784c08aed51c5899665ade97263692328eea4af106cristy const double x,const double y,PixelInfo *pixel,ExceptionInfo *exception) 4979d76c51ed30cf4084f4434ba08925d16001d1e340cristy{ 4980d76c51ed30cf4084f4434ba08925d16001d1e340cristy MagickBooleanType 4981d76c51ed30cf4084f4434ba08925d16001d1e340cristy status; 4982d76c51ed30cf4084f4434ba08925d16001d1e340cristy 498342587c577d5b808de94915f2388b88b05c3d43a3cristy MagickRealType 498442587c577d5b808de94915f2388b88b05c3d43a3cristy alpha[16], 498542587c577d5b808de94915f2388b88b05c3d43a3cristy gamma; 498642587c577d5b808de94915f2388b88b05c3d43a3cristy 4987865d58d60e5fc755d47771eab37ce5159531629dcristy PixelInfo 4988865d58d60e5fc755d47771eab37ce5159531629dcristy pixels[16]; 4989865d58d60e5fc755d47771eab37ce5159531629dcristy 49904c08aed51c5899665ade97263692328eea4af106cristy register const Quantum 4991d76c51ed30cf4084f4434ba08925d16001d1e340cristy *p; 4992d76c51ed30cf4084f4434ba08925d16001d1e340cristy 4993d76c51ed30cf4084f4434ba08925d16001d1e340cristy register ssize_t 4994d76c51ed30cf4084f4434ba08925d16001d1e340cristy i; 4995d76c51ed30cf4084f4434ba08925d16001d1e340cristy 499642587c577d5b808de94915f2388b88b05c3d43a3cristy ssize_t 499742587c577d5b808de94915f2388b88b05c3d43a3cristy x_offset, 499842587c577d5b808de94915f2388b88b05c3d43a3cristy y_offset; 499942587c577d5b808de94915f2388b88b05c3d43a3cristy 5000d76c51ed30cf4084f4434ba08925d16001d1e340cristy assert(image != (Image *) NULL); 5001d76c51ed30cf4084f4434ba08925d16001d1e340cristy assert(image->signature == MagickSignature); 5002d76c51ed30cf4084f4434ba08925d16001d1e340cristy assert(image_view != (CacheView *) NULL); 5003d76c51ed30cf4084f4434ba08925d16001d1e340cristy status=MagickTrue; 500442587c577d5b808de94915f2388b88b05c3d43a3cristy x_offset=(ssize_t) floor(x); 500542587c577d5b808de94915f2388b88b05c3d43a3cristy y_offset=(ssize_t) floor(y); 50068a7c3e8a6d3d48dc6a4b40485c5f6c13cc2b2075cristy switch (method == UndefinedInterpolatePixel ? image->interpolate : method) 5007d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5008d76c51ed30cf4084f4434ba08925d16001d1e340cristy case AverageInterpolatePixel: 5009d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 501042587c577d5b808de94915f2388b88b05c3d43a3cristy p=GetCacheViewVirtualPixels(image_view,x_offset-1,y_offset-1,4,4, 501142587c577d5b808de94915f2388b88b05c3d43a3cristy exception); 50124c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 5013d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5014d76c51ed30cf4084f4434ba08925d16001d1e340cristy status=MagickFalse; 5015d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5016d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 50175ce8df84afcfec6dc33ee61ac2014edb3871c455cristy AlphaBlendPixelInfo(image,p,pixels+0,alpha+0); 501828474bfbda5ee2d4da2eb79f299cf1f692770b99cristy AlphaBlendPixelInfo(image,p+GetPixelChannels(image),pixels+1,alpha+1); 5019ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+2*GetPixelChannels(image),pixels+2,alpha+2); 5020ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+3*GetPixelChannels(image),pixels+3,alpha+3); 5021ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+4*GetPixelChannels(image),pixels+4,alpha+4); 5022ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+5*GetPixelChannels(image),pixels+5,alpha+5); 5023ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+6*GetPixelChannels(image),pixels+6,alpha+6); 5024ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+7*GetPixelChannels(image),pixels+7,alpha+7); 5025ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+8*GetPixelChannels(image),pixels+8,alpha+8); 5026ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+9*GetPixelChannels(image),pixels+9,alpha+9); 5027ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+10*GetPixelChannels(image),pixels+10,alpha+ 5028865d58d60e5fc755d47771eab37ce5159531629dcristy 10); 5029ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+11*GetPixelChannels(image),pixels+11,alpha+ 5030865d58d60e5fc755d47771eab37ce5159531629dcristy 11); 5031ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+12*GetPixelChannels(image),pixels+12,alpha+ 5032865d58d60e5fc755d47771eab37ce5159531629dcristy 12); 5033ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+13*GetPixelChannels(image),pixels+13,alpha+ 5034865d58d60e5fc755d47771eab37ce5159531629dcristy 13); 5035ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+14*GetPixelChannels(image),pixels+14,alpha+ 5036865d58d60e5fc755d47771eab37ce5159531629dcristy 14); 5037ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+15*GetPixelChannels(image),pixels+15,alpha+ 5038865d58d60e5fc755d47771eab37ce5159531629dcristy 15); 5039241310d359ef6893f4d0c1e43eeb39f34991fd2acristy pixel->red=0.0; 5040241310d359ef6893f4d0c1e43eeb39f34991fd2acristy pixel->green=0.0; 5041241310d359ef6893f4d0c1e43eeb39f34991fd2acristy pixel->blue=0.0; 50424c08aed51c5899665ade97263692328eea4af106cristy pixel->black=0.0; 5043865d58d60e5fc755d47771eab37ce5159531629dcristy pixel->alpha=0.0; 5044d76c51ed30cf4084f4434ba08925d16001d1e340cristy for (i=0; i < 16L; i++) 5045d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5046241310d359ef6893f4d0c1e43eeb39f34991fd2acristy gamma=1.0/(fabs((double) alpha[i]) <= MagickEpsilon ? 1.0 : alpha[i]); 5047d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->red+=gamma*0.0625*pixels[i].red; 5048d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->green+=gamma*0.0625*pixels[i].green; 5049d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->blue+=gamma*0.0625*pixels[i].blue; 50505af738104f48677012746b82ba0daa0dc59bdbb5cristy if (image->colorspace == CMYKColorspace) 50514c08aed51c5899665ade97263692328eea4af106cristy pixel->black+=gamma*0.0625*pixels[i].black; 5052865d58d60e5fc755d47771eab37ce5159531629dcristy pixel->alpha+=0.0625*pixels[i].alpha; 5053d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5054d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5055d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5056d76c51ed30cf4084f4434ba08925d16001d1e340cristy case BicubicInterpolatePixel: 5057d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 50584c08aed51c5899665ade97263692328eea4af106cristy PixelInfo 5059d76c51ed30cf4084f4434ba08925d16001d1e340cristy u[4]; 5060d76c51ed30cf4084f4434ba08925d16001d1e340cristy 5061d76c51ed30cf4084f4434ba08925d16001d1e340cristy PointInfo 5062d76c51ed30cf4084f4434ba08925d16001d1e340cristy delta; 5063d76c51ed30cf4084f4434ba08925d16001d1e340cristy 506442587c577d5b808de94915f2388b88b05c3d43a3cristy p=GetCacheViewVirtualPixels(image_view,x_offset-1,y_offset-1,4,4, 506542587c577d5b808de94915f2388b88b05c3d43a3cristy exception); 50664c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 5067d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5068d76c51ed30cf4084f4434ba08925d16001d1e340cristy status=MagickFalse; 5069d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5070d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 50715ce8df84afcfec6dc33ee61ac2014edb3871c455cristy AlphaBlendPixelInfo(image,p,pixels+0,alpha+0); 507228474bfbda5ee2d4da2eb79f299cf1f692770b99cristy AlphaBlendPixelInfo(image,p+GetPixelChannels(image),pixels+1,alpha+1); 5073ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+2*GetPixelChannels(image),pixels+2,alpha+2); 5074ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+3*GetPixelChannels(image),pixels+3,alpha+3); 5075ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+4*GetPixelChannels(image),pixels+4,alpha+4); 5076ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+5*GetPixelChannels(image),pixels+5,alpha+5); 5077ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+6*GetPixelChannels(image),pixels+6,alpha+6); 5078ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+7*GetPixelChannels(image),pixels+7,alpha+7); 5079ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+8*GetPixelChannels(image),pixels+8,alpha+8); 5080ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+9*GetPixelChannels(image),pixels+9,alpha+9); 5081ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+10*GetPixelChannels(image),pixels+10,alpha+ 5082865d58d60e5fc755d47771eab37ce5159531629dcristy 10); 5083ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+11*GetPixelChannels(image),pixels+11,alpha+ 5084865d58d60e5fc755d47771eab37ce5159531629dcristy 11); 5085ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+12*GetPixelChannels(image),pixels+12,alpha+ 5086865d58d60e5fc755d47771eab37ce5159531629dcristy 12); 5087ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+13*GetPixelChannels(image),pixels+13,alpha+ 5088865d58d60e5fc755d47771eab37ce5159531629dcristy 13); 5089ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+14*GetPixelChannels(image),pixels+14,alpha+ 5090865d58d60e5fc755d47771eab37ce5159531629dcristy 14); 5091ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+15*GetPixelChannels(image),pixels+15,alpha+ 5092865d58d60e5fc755d47771eab37ce5159531629dcristy 15); 509342587c577d5b808de94915f2388b88b05c3d43a3cristy delta.x=x-x_offset; 509442587c577d5b808de94915f2388b88b05c3d43a3cristy delta.y=y-y_offset; 5095d76c51ed30cf4084f4434ba08925d16001d1e340cristy for (i=0; i < 4L; i++) 5096d76c51ed30cf4084f4434ba08925d16001d1e340cristy BicubicInterpolate(pixels+4*i,delta.x,u+i); 5097d76c51ed30cf4084f4434ba08925d16001d1e340cristy BicubicInterpolate(u,delta.y,pixel); 5098d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5099d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5100d76c51ed30cf4084f4434ba08925d16001d1e340cristy case BilinearInterpolatePixel: 5101d76c51ed30cf4084f4434ba08925d16001d1e340cristy default: 5102d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5103d76c51ed30cf4084f4434ba08925d16001d1e340cristy PointInfo 5104d76c51ed30cf4084f4434ba08925d16001d1e340cristy delta, 5105d76c51ed30cf4084f4434ba08925d16001d1e340cristy epsilon; 5106d76c51ed30cf4084f4434ba08925d16001d1e340cristy 510742587c577d5b808de94915f2388b88b05c3d43a3cristy p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,2,2,exception); 51084c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 5109d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5110d76c51ed30cf4084f4434ba08925d16001d1e340cristy status=MagickFalse; 5111d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5112d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 51135ce8df84afcfec6dc33ee61ac2014edb3871c455cristy AlphaBlendPixelInfo(image,p,pixels+0,alpha+0); 511428474bfbda5ee2d4da2eb79f299cf1f692770b99cristy AlphaBlendPixelInfo(image,p+GetPixelChannels(image),pixels+1,alpha+1); 5115ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+2*GetPixelChannels(image),pixels+2,alpha+2); 5116ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+3*GetPixelChannels(image),pixels+3,alpha+3); 511742587c577d5b808de94915f2388b88b05c3d43a3cristy delta.x=x-x_offset; 511842587c577d5b808de94915f2388b88b05c3d43a3cristy delta.y=y-y_offset; 5119d76c51ed30cf4084f4434ba08925d16001d1e340cristy epsilon.x=1.0-delta.x; 5120d76c51ed30cf4084f4434ba08925d16001d1e340cristy epsilon.y=1.0-delta.y; 5121241310d359ef6893f4d0c1e43eeb39f34991fd2acristy gamma=((epsilon.y*(epsilon.x*alpha[0]+delta.x*alpha[1])+delta.y* 5122241310d359ef6893f4d0c1e43eeb39f34991fd2acristy (epsilon.x*alpha[2]+delta.x*alpha[3]))); 5123241310d359ef6893f4d0c1e43eeb39f34991fd2acristy gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma); 5124d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->red=gamma*(epsilon.y*(epsilon.x*pixels[0].red+delta.x* 5125d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[1].red)+delta.y*(epsilon.x*pixels[2].red+delta.x*pixels[3].red)); 5126d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->green=gamma*(epsilon.y*(epsilon.x*pixels[0].green+delta.x* 5127d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[1].green)+delta.y*(epsilon.x*pixels[2].green+delta.x* 5128d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[3].green)); 5129d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->blue=gamma*(epsilon.y*(epsilon.x*pixels[0].blue+delta.x* 5130d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[1].blue)+delta.y*(epsilon.x*pixels[2].blue+delta.x* 5131d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[3].blue)); 51325af738104f48677012746b82ba0daa0dc59bdbb5cristy if (image->colorspace == CMYKColorspace) 51334c08aed51c5899665ade97263692328eea4af106cristy pixel->black=gamma*(epsilon.y*(epsilon.x*pixels[0].black+delta.x* 51344c08aed51c5899665ade97263692328eea4af106cristy pixels[1].black)+delta.y*(epsilon.x*pixels[2].black+delta.x* 51354c08aed51c5899665ade97263692328eea4af106cristy pixels[3].black)); 5136884f600898ca6935a7981b4d56bf3d2c4ec17011cristy gamma=((epsilon.y*(epsilon.x+delta.x)+delta.y*(epsilon.x+delta.x))); 5137884f600898ca6935a7981b4d56bf3d2c4ec17011cristy gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma); 5138865d58d60e5fc755d47771eab37ce5159531629dcristy pixel->alpha=(epsilon.y*(epsilon.x*pixels[0].alpha+delta.x* 5139865d58d60e5fc755d47771eab37ce5159531629dcristy pixels[1].alpha)+delta.y*(epsilon.x*pixels[2].alpha+delta.x* 5140865d58d60e5fc755d47771eab37ce5159531629dcristy pixels[3].alpha)); 5141d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5142d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5143d76c51ed30cf4084f4434ba08925d16001d1e340cristy case FilterInterpolatePixel: 5144d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5145d76c51ed30cf4084f4434ba08925d16001d1e340cristy CacheView 5146d76c51ed30cf4084f4434ba08925d16001d1e340cristy *filter_view; 5147d76c51ed30cf4084f4434ba08925d16001d1e340cristy 5148d76c51ed30cf4084f4434ba08925d16001d1e340cristy Image 5149d76c51ed30cf4084f4434ba08925d16001d1e340cristy *excerpt_image, 5150d76c51ed30cf4084f4434ba08925d16001d1e340cristy *filter_image; 5151d76c51ed30cf4084f4434ba08925d16001d1e340cristy 5152d76c51ed30cf4084f4434ba08925d16001d1e340cristy RectangleInfo 5153d76c51ed30cf4084f4434ba08925d16001d1e340cristy geometry; 5154d76c51ed30cf4084f4434ba08925d16001d1e340cristy 5155d76c51ed30cf4084f4434ba08925d16001d1e340cristy geometry.width=4L; 5156d76c51ed30cf4084f4434ba08925d16001d1e340cristy geometry.height=4L; 515742587c577d5b808de94915f2388b88b05c3d43a3cristy geometry.x=x_offset-1; 515842587c577d5b808de94915f2388b88b05c3d43a3cristy geometry.y=y_offset-1; 5159d76c51ed30cf4084f4434ba08925d16001d1e340cristy excerpt_image=ExcerptImage(image,&geometry,exception); 5160d76c51ed30cf4084f4434ba08925d16001d1e340cristy if (excerpt_image == (Image *) NULL) 5161d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5162d76c51ed30cf4084f4434ba08925d16001d1e340cristy status=MagickFalse; 5163d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5164d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5165aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy filter_image=ResizeImage(excerpt_image,1,1,image->filter,exception); 5166d76c51ed30cf4084f4434ba08925d16001d1e340cristy excerpt_image=DestroyImage(excerpt_image); 5167d76c51ed30cf4084f4434ba08925d16001d1e340cristy if (filter_image == (Image *) NULL) 5168d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5169db070957cf6bf959df9283a482377e8854c3d4d2cristy filter_view=AcquireVirtualCacheView(filter_image,exception); 5170d76c51ed30cf4084f4434ba08925d16001d1e340cristy p=GetCacheViewVirtualPixels(filter_view,0,0,1,1,exception); 51714c08aed51c5899665ade97263692328eea4af106cristy if (p != (const Quantum *) NULL) 5172803640d20a6a664315eddfff6f8531d0c5e0871dcristy GetPixelInfoPixel(image,p,pixel); 5173d76c51ed30cf4084f4434ba08925d16001d1e340cristy filter_view=DestroyCacheView(filter_view); 5174d76c51ed30cf4084f4434ba08925d16001d1e340cristy filter_image=DestroyImage(filter_image); 5175d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5176d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5177d76c51ed30cf4084f4434ba08925d16001d1e340cristy case IntegerInterpolatePixel: 5178d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 517942587c577d5b808de94915f2388b88b05c3d43a3cristy p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,1,1,exception); 51804c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 5181d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5182d76c51ed30cf4084f4434ba08925d16001d1e340cristy status=MagickFalse; 5183d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5184d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5185803640d20a6a664315eddfff6f8531d0c5e0871dcristy GetPixelInfoPixel(image,p,pixel); 5186d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5187d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5188d76c51ed30cf4084f4434ba08925d16001d1e340cristy case MeshInterpolatePixel: 5189d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5190d76c51ed30cf4084f4434ba08925d16001d1e340cristy PointInfo 5191d76c51ed30cf4084f4434ba08925d16001d1e340cristy delta, 5192d76c51ed30cf4084f4434ba08925d16001d1e340cristy luminance; 5193d76c51ed30cf4084f4434ba08925d16001d1e340cristy 519494ea1636709395774d7118ef56162d211904cfd2cristy p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,2,2,exception); 51954c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 5196d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5197d76c51ed30cf4084f4434ba08925d16001d1e340cristy status=MagickFalse; 5198d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5199d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 520094ea1636709395774d7118ef56162d211904cfd2cristy delta.x=x-x_offset; 520194ea1636709395774d7118ef56162d211904cfd2cristy delta.y=y-y_offset; 5202884f600898ca6935a7981b4d56bf3d2c4ec17011cristy luminance.x=GetPixelLuminance(image,p)-(double) 520394ea1636709395774d7118ef56162d211904cfd2cristy GetPixelLuminance(image,p+3*GetPixelChannels(image)); 520428474bfbda5ee2d4da2eb79f299cf1f692770b99cristy luminance.y=GetPixelLuminance(image,p+GetPixelChannels(image))-(double) 520594ea1636709395774d7118ef56162d211904cfd2cristy GetPixelLuminance(image,p+2*GetPixelChannels(image)); 52065ce8df84afcfec6dc33ee61ac2014edb3871c455cristy AlphaBlendPixelInfo(image,p,pixels+0,alpha+0); 520728474bfbda5ee2d4da2eb79f299cf1f692770b99cristy AlphaBlendPixelInfo(image,p+GetPixelChannels(image),pixels+1,alpha+1); 5208ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+2*GetPixelChannels(image),pixels+2,alpha+2); 5209ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+3*GetPixelChannels(image),pixels+3,alpha+3); 5210d76c51ed30cf4084f4434ba08925d16001d1e340cristy if (fabs(luminance.x) < fabs(luminance.y)) 5211d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5212d76c51ed30cf4084f4434ba08925d16001d1e340cristy /* 5213d76c51ed30cf4084f4434ba08925d16001d1e340cristy Diagonal 0-3 NW-SE. 5214d76c51ed30cf4084f4434ba08925d16001d1e340cristy */ 5215d76c51ed30cf4084f4434ba08925d16001d1e340cristy if (delta.x <= delta.y) 5216d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5217d76c51ed30cf4084f4434ba08925d16001d1e340cristy /* 521894ea1636709395774d7118ef56162d211904cfd2cristy Bottom-left triangle (pixel: 2, diagonal: 0-3). 5219d76c51ed30cf4084f4434ba08925d16001d1e340cristy */ 5220d76c51ed30cf4084f4434ba08925d16001d1e340cristy delta.y=1.0-delta.y; 5221d76c51ed30cf4084f4434ba08925d16001d1e340cristy gamma=MeshInterpolate(&delta,alpha[2],alpha[3],alpha[0]); 5222d76c51ed30cf4084f4434ba08925d16001d1e340cristy gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma); 5223d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->red=gamma*MeshInterpolate(&delta,pixels[2].red, 5224d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[3].red,pixels[0].red); 5225d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->green=gamma*MeshInterpolate(&delta,pixels[2].green, 5226d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[3].green,pixels[0].green); 5227d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->blue=gamma*MeshInterpolate(&delta,pixels[2].blue, 5228d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[3].blue,pixels[0].blue); 52295af738104f48677012746b82ba0daa0dc59bdbb5cristy if (image->colorspace == CMYKColorspace) 52304c08aed51c5899665ade97263692328eea4af106cristy pixel->black=gamma*MeshInterpolate(&delta,pixels[2].black, 52314c08aed51c5899665ade97263692328eea4af106cristy pixels[3].black,pixels[0].black); 523294ea1636709395774d7118ef56162d211904cfd2cristy gamma=MeshInterpolate(&delta,1.0,1.0,1.0); 5233865d58d60e5fc755d47771eab37ce5159531629dcristy pixel->alpha=gamma*MeshInterpolate(&delta,pixels[2].alpha, 5234865d58d60e5fc755d47771eab37ce5159531629dcristy pixels[3].alpha,pixels[0].alpha); 5235d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5236d76c51ed30cf4084f4434ba08925d16001d1e340cristy else 5237d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5238d76c51ed30cf4084f4434ba08925d16001d1e340cristy /* 523994ea1636709395774d7118ef56162d211904cfd2cristy Top-right triangle (pixel:1 , diagonal: 0-3). 5240d76c51ed30cf4084f4434ba08925d16001d1e340cristy */ 5241d76c51ed30cf4084f4434ba08925d16001d1e340cristy delta.x=1.0-delta.x; 5242d76c51ed30cf4084f4434ba08925d16001d1e340cristy gamma=MeshInterpolate(&delta,alpha[1],alpha[0],alpha[3]); 5243d76c51ed30cf4084f4434ba08925d16001d1e340cristy gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma); 5244d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->red=gamma*MeshInterpolate(&delta,pixels[1].red, 5245d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[0].red,pixels[3].red); 5246d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->green=gamma*MeshInterpolate(&delta,pixels[1].green, 5247d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[0].green,pixels[3].green); 5248d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->blue=gamma*MeshInterpolate(&delta,pixels[1].blue, 5249d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[0].blue,pixels[3].blue); 52505af738104f48677012746b82ba0daa0dc59bdbb5cristy if (image->colorspace == CMYKColorspace) 52514c08aed51c5899665ade97263692328eea4af106cristy pixel->black=gamma*MeshInterpolate(&delta,pixels[1].black, 52524c08aed51c5899665ade97263692328eea4af106cristy pixels[0].black,pixels[3].black); 525394ea1636709395774d7118ef56162d211904cfd2cristy gamma=MeshInterpolate(&delta,1.0,1.0,1.0); 5254865d58d60e5fc755d47771eab37ce5159531629dcristy pixel->alpha=gamma*MeshInterpolate(&delta,pixels[1].alpha, 5255865d58d60e5fc755d47771eab37ce5159531629dcristy pixels[0].alpha,pixels[3].alpha); 5256d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5257d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5258d76c51ed30cf4084f4434ba08925d16001d1e340cristy else 5259d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5260d76c51ed30cf4084f4434ba08925d16001d1e340cristy /* 5261d76c51ed30cf4084f4434ba08925d16001d1e340cristy Diagonal 1-2 NE-SW. 5262d76c51ed30cf4084f4434ba08925d16001d1e340cristy */ 5263d76c51ed30cf4084f4434ba08925d16001d1e340cristy if (delta.x <= (1.0-delta.y)) 5264d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5265d76c51ed30cf4084f4434ba08925d16001d1e340cristy /* 526694ea1636709395774d7118ef56162d211904cfd2cristy Top-left triangle (pixel: 0, diagonal: 1-2). 5267d76c51ed30cf4084f4434ba08925d16001d1e340cristy */ 5268d76c51ed30cf4084f4434ba08925d16001d1e340cristy gamma=MeshInterpolate(&delta,alpha[0],alpha[1],alpha[2]); 5269d76c51ed30cf4084f4434ba08925d16001d1e340cristy gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma); 5270d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->red=gamma*MeshInterpolate(&delta,pixels[0].red, 5271d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[1].red,pixels[2].red); 5272d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->green=gamma*MeshInterpolate(&delta,pixels[0].green, 5273d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[1].green,pixels[2].green); 5274d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->blue=gamma*MeshInterpolate(&delta,pixels[0].blue, 5275d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[1].blue,pixels[2].blue); 52765af738104f48677012746b82ba0daa0dc59bdbb5cristy if (image->colorspace == CMYKColorspace) 52774c08aed51c5899665ade97263692328eea4af106cristy pixel->black=gamma*MeshInterpolate(&delta,pixels[0].black, 52784c08aed51c5899665ade97263692328eea4af106cristy pixels[1].black,pixels[2].black); 527994ea1636709395774d7118ef56162d211904cfd2cristy gamma=MeshInterpolate(&delta,1.0,1.0,1.0); 5280865d58d60e5fc755d47771eab37ce5159531629dcristy pixel->alpha=gamma*MeshInterpolate(&delta,pixels[0].alpha, 5281865d58d60e5fc755d47771eab37ce5159531629dcristy pixels[1].alpha,pixels[2].alpha); 5282d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5283d76c51ed30cf4084f4434ba08925d16001d1e340cristy else 5284d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5285d76c51ed30cf4084f4434ba08925d16001d1e340cristy /* 5286d76c51ed30cf4084f4434ba08925d16001d1e340cristy Bottom-right triangle (pixel: 3, diagonal: 1-2). 5287d76c51ed30cf4084f4434ba08925d16001d1e340cristy */ 5288d76c51ed30cf4084f4434ba08925d16001d1e340cristy delta.x=1.0-delta.x; 5289d76c51ed30cf4084f4434ba08925d16001d1e340cristy delta.y=1.0-delta.y; 5290d76c51ed30cf4084f4434ba08925d16001d1e340cristy gamma=MeshInterpolate(&delta,alpha[3],alpha[2],alpha[1]); 5291d76c51ed30cf4084f4434ba08925d16001d1e340cristy gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma); 5292d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->red=gamma*MeshInterpolate(&delta,pixels[3].red, 5293d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[2].red,pixels[1].red); 5294d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->green=gamma*MeshInterpolate(&delta,pixels[3].green, 5295d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[2].green,pixels[1].green); 5296d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->blue=gamma*MeshInterpolate(&delta,pixels[3].blue, 5297d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[2].blue,pixels[1].blue); 52985af738104f48677012746b82ba0daa0dc59bdbb5cristy if (image->colorspace == CMYKColorspace) 52994c08aed51c5899665ade97263692328eea4af106cristy pixel->black=gamma*MeshInterpolate(&delta,pixels[3].black, 53004c08aed51c5899665ade97263692328eea4af106cristy pixels[2].black,pixels[1].black); 530194ea1636709395774d7118ef56162d211904cfd2cristy gamma=MeshInterpolate(&delta,1.0,1.0,1.0); 5302865d58d60e5fc755d47771eab37ce5159531629dcristy pixel->alpha=gamma*MeshInterpolate(&delta,pixels[3].alpha, 5303865d58d60e5fc755d47771eab37ce5159531629dcristy pixels[2].alpha,pixels[1].alpha); 5304d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5305d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5306d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5307d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5308d76c51ed30cf4084f4434ba08925d16001d1e340cristy case NearestNeighborInterpolatePixel: 5309d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5310d76c51ed30cf4084f4434ba08925d16001d1e340cristy p=GetCacheViewVirtualPixels(image_view,NearestNeighbor(x), 5311d76c51ed30cf4084f4434ba08925d16001d1e340cristy NearestNeighbor(y),1,1,exception); 53124c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 5313d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5314d76c51ed30cf4084f4434ba08925d16001d1e340cristy status=MagickFalse; 5315d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5316d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5317803640d20a6a664315eddfff6f8531d0c5e0871dcristy GetPixelInfoPixel(image,p,pixel); 5318d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5319d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5320d76c51ed30cf4084f4434ba08925d16001d1e340cristy case SplineInterpolatePixel: 5321d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5322d76c51ed30cf4084f4434ba08925d16001d1e340cristy MagickRealType 5323d76c51ed30cf4084f4434ba08925d16001d1e340cristy dx, 532442587c577d5b808de94915f2388b88b05c3d43a3cristy dy; 5325d76c51ed30cf4084f4434ba08925d16001d1e340cristy 5326d76c51ed30cf4084f4434ba08925d16001d1e340cristy PointInfo 5327d76c51ed30cf4084f4434ba08925d16001d1e340cristy delta; 5328d76c51ed30cf4084f4434ba08925d16001d1e340cristy 5329d76c51ed30cf4084f4434ba08925d16001d1e340cristy ssize_t 5330d76c51ed30cf4084f4434ba08925d16001d1e340cristy j, 5331d76c51ed30cf4084f4434ba08925d16001d1e340cristy n; 5332d76c51ed30cf4084f4434ba08925d16001d1e340cristy 533342587c577d5b808de94915f2388b88b05c3d43a3cristy p=GetCacheViewVirtualPixels(image_view,x_offset-1,y_offset-1,4,4, 533442587c577d5b808de94915f2388b88b05c3d43a3cristy exception); 53354c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 5336d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5337d76c51ed30cf4084f4434ba08925d16001d1e340cristy status=MagickFalse; 5338d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5339d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 53405ce8df84afcfec6dc33ee61ac2014edb3871c455cristy AlphaBlendPixelInfo(image,p,pixels+0,alpha+0); 534128474bfbda5ee2d4da2eb79f299cf1f692770b99cristy AlphaBlendPixelInfo(image,p+GetPixelChannels(image),pixels+1,alpha+1); 5342ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+2*GetPixelChannels(image),pixels+2,alpha+2); 5343ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+3*GetPixelChannels(image),pixels+3,alpha+3); 5344ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+4*GetPixelChannels(image),pixels+4,alpha+4); 5345ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+5*GetPixelChannels(image),pixels+5,alpha+5); 5346ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+6*GetPixelChannels(image),pixels+6,alpha+6); 5347ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+7*GetPixelChannels(image),pixels+7,alpha+7); 5348ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+8*GetPixelChannels(image),pixels+8,alpha+8); 5349ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+9*GetPixelChannels(image),pixels+9,alpha+9); 5350ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+10*GetPixelChannels(image),pixels+10,alpha+ 5351865d58d60e5fc755d47771eab37ce5159531629dcristy 10); 5352ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+11*GetPixelChannels(image),pixels+11,alpha+ 5353865d58d60e5fc755d47771eab37ce5159531629dcristy 11); 5354ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+12*GetPixelChannels(image),pixels+12,alpha+ 5355865d58d60e5fc755d47771eab37ce5159531629dcristy 12); 5356ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+13*GetPixelChannels(image),pixels+13,alpha+ 5357865d58d60e5fc755d47771eab37ce5159531629dcristy 13); 5358ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+14*GetPixelChannels(image),pixels+14,alpha+ 5359865d58d60e5fc755d47771eab37ce5159531629dcristy 14); 5360ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+15*GetPixelChannels(image),pixels+15,alpha+ 5361865d58d60e5fc755d47771eab37ce5159531629dcristy 15); 5362241310d359ef6893f4d0c1e43eeb39f34991fd2acristy pixel->red=0.0; 5363241310d359ef6893f4d0c1e43eeb39f34991fd2acristy pixel->green=0.0; 5364241310d359ef6893f4d0c1e43eeb39f34991fd2acristy pixel->blue=0.0; 53654c08aed51c5899665ade97263692328eea4af106cristy pixel->black=0.0; 5366865d58d60e5fc755d47771eab37ce5159531629dcristy pixel->alpha=0.0; 536742587c577d5b808de94915f2388b88b05c3d43a3cristy delta.x=x-x_offset; 536842587c577d5b808de94915f2388b88b05c3d43a3cristy delta.y=y-y_offset; 5369241310d359ef6893f4d0c1e43eeb39f34991fd2acristy n=0; 5370d76c51ed30cf4084f4434ba08925d16001d1e340cristy for (i=(-1); i < 3L; i++) 5371d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5372d76c51ed30cf4084f4434ba08925d16001d1e340cristy dy=CubicWeightingFunction((MagickRealType) i-delta.y); 5373d76c51ed30cf4084f4434ba08925d16001d1e340cristy for (j=(-1); j < 3L; j++) 5374d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5375d76c51ed30cf4084f4434ba08925d16001d1e340cristy dx=CubicWeightingFunction(delta.x-(MagickRealType) j); 5376241310d359ef6893f4d0c1e43eeb39f34991fd2acristy gamma=1.0/(fabs((double) alpha[n]) <= MagickEpsilon ? 1.0 : alpha[n]); 5377d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->red+=gamma*dx*dy*pixels[n].red; 5378d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->green+=gamma*dx*dy*pixels[n].green; 5379d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->blue+=gamma*dx*dy*pixels[n].blue; 53805af738104f48677012746b82ba0daa0dc59bdbb5cristy if (image->colorspace == CMYKColorspace) 53814c08aed51c5899665ade97263692328eea4af106cristy pixel->black+=gamma*dx*dy*pixels[n].black; 53824c08aed51c5899665ade97263692328eea4af106cristy pixel->alpha+=dx*dy*pixels[n].alpha; 5383d76c51ed30cf4084f4434ba08925d16001d1e340cristy n++; 5384d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5385d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5386d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5387d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5388d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5389d76c51ed30cf4084f4434ba08925d16001d1e340cristy return(status); 5390d76c51ed30cf4084f4434ba08925d16001d1e340cristy} 53914c08aed51c5899665ade97263692328eea4af106cristy 53924c08aed51c5899665ade97263692328eea4af106cristy/* 53934c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 53944c08aed51c5899665ade97263692328eea4af106cristy% % 53954c08aed51c5899665ade97263692328eea4af106cristy% % 53964c08aed51c5899665ade97263692328eea4af106cristy% % 53974c08aed51c5899665ade97263692328eea4af106cristy+ I s F u z z y E q u i v a l e n c e P i x e l % 53984c08aed51c5899665ade97263692328eea4af106cristy% % 53994c08aed51c5899665ade97263692328eea4af106cristy% % 54004c08aed51c5899665ade97263692328eea4af106cristy% % 54014c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 54024c08aed51c5899665ade97263692328eea4af106cristy% 54034c08aed51c5899665ade97263692328eea4af106cristy% IsFuzzyEquivalencePixel() returns MagickTrue if the distance between two 54044c08aed51c5899665ade97263692328eea4af106cristy% pixels is less than the specified distance in a linear three (or four)u 54054c08aed51c5899665ade97263692328eea4af106cristy% dimensional color space. 54064c08aed51c5899665ade97263692328eea4af106cristy% 54074c08aed51c5899665ade97263692328eea4af106cristy% The format of the IsFuzzyEquivalencePixel method is: 54084c08aed51c5899665ade97263692328eea4af106cristy% 5409e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy% void IsFuzzyEquivalencePixel(const Image *source,const Quantum *p, 5410e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy% const Image *destination,const Quantum *q) 54114c08aed51c5899665ade97263692328eea4af106cristy% 54124c08aed51c5899665ade97263692328eea4af106cristy% A description of each parameter follows: 54134c08aed51c5899665ade97263692328eea4af106cristy% 5414e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy% o source: the source image. 54154c08aed51c5899665ade97263692328eea4af106cristy% 54164c08aed51c5899665ade97263692328eea4af106cristy% o p: Pixel p. 54174c08aed51c5899665ade97263692328eea4af106cristy% 5418e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy% o destination: the destination image. 5419e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy% 54204c08aed51c5899665ade97263692328eea4af106cristy% o q: Pixel q. 54214c08aed51c5899665ade97263692328eea4af106cristy% 54224c08aed51c5899665ade97263692328eea4af106cristy*/ 5423e4a404711bf20d9062d11ab28bc12e5acd307f9ccristyMagickExport MagickBooleanType IsFuzzyEquivalencePixel(const Image *source, 5424e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy const Quantum *p,const Image *destination,const Quantum *q) 54254c08aed51c5899665ade97263692328eea4af106cristy{ 54264c08aed51c5899665ade97263692328eea4af106cristy MagickRealType 54274c08aed51c5899665ade97263692328eea4af106cristy fuzz, 54284c08aed51c5899665ade97263692328eea4af106cristy pixel; 54294c08aed51c5899665ade97263692328eea4af106cristy 54304c08aed51c5899665ade97263692328eea4af106cristy register MagickRealType 54314c08aed51c5899665ade97263692328eea4af106cristy distance, 54324c08aed51c5899665ade97263692328eea4af106cristy scale; 54334c08aed51c5899665ade97263692328eea4af106cristy 5434e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy fuzz=MagickMax(source->fuzz,(MagickRealType) MagickSQ1_2)*MagickMax( 5435e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy destination->fuzz,(MagickRealType) MagickSQ1_2); 54364c08aed51c5899665ade97263692328eea4af106cristy scale=1.0; 54374c08aed51c5899665ade97263692328eea4af106cristy distance=0.0; 5438e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy if (source->matte != MagickFalse) 54394c08aed51c5899665ade97263692328eea4af106cristy { 54404c08aed51c5899665ade97263692328eea4af106cristy /* 54414c08aed51c5899665ade97263692328eea4af106cristy Transparencies are involved - set alpha distance 54424c08aed51c5899665ade97263692328eea4af106cristy */ 544399abff36ae5d479bfd76652d166a4894ceada102cristy pixel=GetPixelAlpha(source,p)-(MagickRealType) 544499abff36ae5d479bfd76652d166a4894ceada102cristy GetPixelAlpha(destination,q); 54454c08aed51c5899665ade97263692328eea4af106cristy distance=pixel*pixel; 54464c08aed51c5899665ade97263692328eea4af106cristy if (distance > fuzz) 54474c08aed51c5899665ade97263692328eea4af106cristy return(MagickFalse); 54484c08aed51c5899665ade97263692328eea4af106cristy /* 54494c08aed51c5899665ade97263692328eea4af106cristy Generate a alpha scaling factor to generate a 4D cone on colorspace 54504c08aed51c5899665ade97263692328eea4af106cristy Note that if one color is transparent, distance has no color component. 54514c08aed51c5899665ade97263692328eea4af106cristy */ 5452e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy scale=QuantumScale*GetPixelAlpha(source,p); 5453e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy scale*=QuantumScale*GetPixelAlpha(destination,q); 54544c08aed51c5899665ade97263692328eea4af106cristy if (scale <= MagickEpsilon) 54554c08aed51c5899665ade97263692328eea4af106cristy return(MagickTrue); 54564c08aed51c5899665ade97263692328eea4af106cristy } 54574c08aed51c5899665ade97263692328eea4af106cristy /* 54584c08aed51c5899665ade97263692328eea4af106cristy RGB or CMY color cube 54594c08aed51c5899665ade97263692328eea4af106cristy */ 54604c08aed51c5899665ade97263692328eea4af106cristy distance*=3.0; /* rescale appropriately */ 54614c08aed51c5899665ade97263692328eea4af106cristy fuzz*=3.0; 5462e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy pixel=GetPixelRed(source,p)-(MagickRealType) GetPixelRed(destination,q); 5463e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy if ((source->colorspace == HSLColorspace) || 5464e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy (source->colorspace == HSBColorspace) || 5465e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy (source->colorspace == HWBColorspace)) 54664c08aed51c5899665ade97263692328eea4af106cristy { 54674c08aed51c5899665ade97263692328eea4af106cristy /* 54684c08aed51c5899665ade97263692328eea4af106cristy Compute an arc distance for hue. It should be a vector angle of 54694c08aed51c5899665ade97263692328eea4af106cristy 'S'/'W' length with 'L'/'B' forming appropriate cones. 54704c08aed51c5899665ade97263692328eea4af106cristy */ 54714c08aed51c5899665ade97263692328eea4af106cristy if (fabs((double) pixel) > (QuantumRange/2)) 54724c08aed51c5899665ade97263692328eea4af106cristy pixel-=QuantumRange; 54734c08aed51c5899665ade97263692328eea4af106cristy pixel*=2; 54744c08aed51c5899665ade97263692328eea4af106cristy } 54754c08aed51c5899665ade97263692328eea4af106cristy distance+=scale*pixel*pixel; 54764c08aed51c5899665ade97263692328eea4af106cristy if (distance > fuzz) 54774c08aed51c5899665ade97263692328eea4af106cristy return(MagickFalse); 5478e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy pixel=GetPixelGreen(source,p)-(MagickRealType) GetPixelGreen(destination,q); 54794c08aed51c5899665ade97263692328eea4af106cristy distance+=scale*pixel*pixel; 54804c08aed51c5899665ade97263692328eea4af106cristy if (distance > fuzz) 54814c08aed51c5899665ade97263692328eea4af106cristy return(MagickFalse); 5482e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy pixel=GetPixelBlue(source,p)-(MagickRealType) GetPixelBlue(destination,q); 54834c08aed51c5899665ade97263692328eea4af106cristy distance+=scale*pixel*pixel; 54844c08aed51c5899665ade97263692328eea4af106cristy if (distance > fuzz) 54854c08aed51c5899665ade97263692328eea4af106cristy return(MagickFalse); 54864c08aed51c5899665ade97263692328eea4af106cristy return(MagickTrue); 54874c08aed51c5899665ade97263692328eea4af106cristy} 54884c08aed51c5899665ade97263692328eea4af106cristy 54894c08aed51c5899665ade97263692328eea4af106cristy/* 54904c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 54914c08aed51c5899665ade97263692328eea4af106cristy% % 54924c08aed51c5899665ade97263692328eea4af106cristy% % 54934c08aed51c5899665ade97263692328eea4af106cristy% % 54944c08aed51c5899665ade97263692328eea4af106cristy+ 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 % 54954c08aed51c5899665ade97263692328eea4af106cristy% % 54964c08aed51c5899665ade97263692328eea4af106cristy% % 54974c08aed51c5899665ade97263692328eea4af106cristy% % 54984c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 54994c08aed51c5899665ade97263692328eea4af106cristy% 55004c08aed51c5899665ade97263692328eea4af106cristy% IsFuzzyEquivalencePixelInfo() returns true if the distance between two 55014c08aed51c5899665ade97263692328eea4af106cristy% colors is less than the specified distance in a linear three (or four) 55024c08aed51c5899665ade97263692328eea4af106cristy% dimensional color space. 55034c08aed51c5899665ade97263692328eea4af106cristy% 55045f95f4f77efc46ff53593d750491c8f60698c983cristy% This implements the equivalent of: 55055f95f4f77efc46ff53593d750491c8f60698c983cristy% fuzz < sqrt(color_distance^2 * u.a*v.a + alpha_distance^2) 55064c08aed51c5899665ade97263692328eea4af106cristy% 55074c08aed51c5899665ade97263692328eea4af106cristy% Which produces a multi-dimensional cone for that colorspace along the 55084c08aed51c5899665ade97263692328eea4af106cristy% transparency vector. 55094c08aed51c5899665ade97263692328eea4af106cristy% 55105f95f4f77efc46ff53593d750491c8f60698c983cristy% For example for an RGB: 55114c08aed51c5899665ade97263692328eea4af106cristy% color_distance^2 = ( (u.r-v.r)^2 + (u.g-v.g)^2 + (u.b-v.b)^2 ) / 3 55124c08aed51c5899665ade97263692328eea4af106cristy% 55134c08aed51c5899665ade97263692328eea4af106cristy% See http://www.imagemagick.org/Usage/bugs/fuzz_distance/ 55144c08aed51c5899665ade97263692328eea4af106cristy% 55154c08aed51c5899665ade97263692328eea4af106cristy% Hue colorspace distances need more work. Hue is not a distance, it is an 55164c08aed51c5899665ade97263692328eea4af106cristy% angle! 55174c08aed51c5899665ade97263692328eea4af106cristy% 55184c08aed51c5899665ade97263692328eea4af106cristy% A check that q is in the same color space as p should be made and the 55194c08aed51c5899665ade97263692328eea4af106cristy% appropriate mapping made. -- Anthony Thyssen 8 December 2010 55204c08aed51c5899665ade97263692328eea4af106cristy% 55214c08aed51c5899665ade97263692328eea4af106cristy% The format of the IsFuzzyEquivalencePixelInfo method is: 55224c08aed51c5899665ade97263692328eea4af106cristy% 55234c08aed51c5899665ade97263692328eea4af106cristy% MagickBooleanType IsFuzzyEquivalencePixelInfo(const PixelInfo *p, 55244c08aed51c5899665ade97263692328eea4af106cristy% const PixelInfo *q) 55254c08aed51c5899665ade97263692328eea4af106cristy% 55264c08aed51c5899665ade97263692328eea4af106cristy% A description of each parameter follows: 55274c08aed51c5899665ade97263692328eea4af106cristy% 55284c08aed51c5899665ade97263692328eea4af106cristy% o p: Pixel p. 55294c08aed51c5899665ade97263692328eea4af106cristy% 55304c08aed51c5899665ade97263692328eea4af106cristy% o q: Pixel q. 55314c08aed51c5899665ade97263692328eea4af106cristy% 55324c08aed51c5899665ade97263692328eea4af106cristy*/ 55334c08aed51c5899665ade97263692328eea4af106cristyMagickExport MagickBooleanType IsFuzzyEquivalencePixelInfo(const PixelInfo *p, 55344c08aed51c5899665ade97263692328eea4af106cristy const PixelInfo *q) 55354c08aed51c5899665ade97263692328eea4af106cristy{ 55364c08aed51c5899665ade97263692328eea4af106cristy MagickRealType 55374c08aed51c5899665ade97263692328eea4af106cristy fuzz, 55384c08aed51c5899665ade97263692328eea4af106cristy pixel; 55394c08aed51c5899665ade97263692328eea4af106cristy 55404c08aed51c5899665ade97263692328eea4af106cristy register MagickRealType 55414c08aed51c5899665ade97263692328eea4af106cristy scale, 55424c08aed51c5899665ade97263692328eea4af106cristy distance; 55434c08aed51c5899665ade97263692328eea4af106cristy 55444c08aed51c5899665ade97263692328eea4af106cristy if ((p->fuzz == 0.0) && (q->fuzz == 0.0)) 55454c08aed51c5899665ade97263692328eea4af106cristy return(IsPixelInfoEquivalent(p,q)); 55464c08aed51c5899665ade97263692328eea4af106cristy if (p->fuzz == 0.0) 55475f95f4f77efc46ff53593d750491c8f60698c983cristy fuzz=MagickMax(q->fuzz,(MagickRealType) MagickSQ1_2)*MagickMax(q->fuzz, 55485f95f4f77efc46ff53593d750491c8f60698c983cristy (MagickRealType) MagickSQ1_2); 55494c08aed51c5899665ade97263692328eea4af106cristy else if (q->fuzz == 0.0) 55505f95f4f77efc46ff53593d750491c8f60698c983cristy fuzz=MagickMax(p->fuzz,(MagickRealType) MagickSQ1_2)*MagickMax(p->fuzz, 55515f95f4f77efc46ff53593d750491c8f60698c983cristy (MagickRealType) MagickSQ1_2); 55524c08aed51c5899665ade97263692328eea4af106cristy else 55535f95f4f77efc46ff53593d750491c8f60698c983cristy fuzz=MagickMax(p->fuzz,(MagickRealType) MagickSQ1_2)*MagickMax(q->fuzz, 55545f95f4f77efc46ff53593d750491c8f60698c983cristy (MagickRealType) MagickSQ1_2); 55554c08aed51c5899665ade97263692328eea4af106cristy scale=1.0; 55564c08aed51c5899665ade97263692328eea4af106cristy distance=0.0; 55574c08aed51c5899665ade97263692328eea4af106cristy if ((p->matte != MagickFalse) || (q->matte != MagickFalse)) 55584c08aed51c5899665ade97263692328eea4af106cristy { 55594c08aed51c5899665ade97263692328eea4af106cristy /* 55604c08aed51c5899665ade97263692328eea4af106cristy Transparencies are involved - set alpha distance. 55614c08aed51c5899665ade97263692328eea4af106cristy */ 55624c08aed51c5899665ade97263692328eea4af106cristy pixel=(p->matte != MagickFalse ? p->alpha : OpaqueAlpha)- 55634c08aed51c5899665ade97263692328eea4af106cristy (q->matte != MagickFalse ? q->alpha : OpaqueAlpha); 55644c08aed51c5899665ade97263692328eea4af106cristy distance=pixel*pixel; 55654c08aed51c5899665ade97263692328eea4af106cristy if (distance > fuzz) 55664c08aed51c5899665ade97263692328eea4af106cristy return(MagickFalse); 55674c08aed51c5899665ade97263692328eea4af106cristy /* 55684c08aed51c5899665ade97263692328eea4af106cristy Generate a alpha scaling factor to generate a 4D cone on colorspace. 55695f95f4f77efc46ff53593d750491c8f60698c983cristy If one color is transparent, distance has no color component. 55704c08aed51c5899665ade97263692328eea4af106cristy */ 55714c08aed51c5899665ade97263692328eea4af106cristy if (p->matte != MagickFalse) 55724c08aed51c5899665ade97263692328eea4af106cristy scale=(QuantumScale*p->alpha); 55734c08aed51c5899665ade97263692328eea4af106cristy if (q->matte != MagickFalse) 55744c08aed51c5899665ade97263692328eea4af106cristy scale*=(QuantumScale*q->alpha); 55754c08aed51c5899665ade97263692328eea4af106cristy if (scale <= MagickEpsilon ) 55764c08aed51c5899665ade97263692328eea4af106cristy return(MagickTrue); 55774c08aed51c5899665ade97263692328eea4af106cristy } 55784c08aed51c5899665ade97263692328eea4af106cristy /* 55794c08aed51c5899665ade97263692328eea4af106cristy CMYK create a CMY cube with a multi-dimensional cone toward black. 55804c08aed51c5899665ade97263692328eea4af106cristy */ 55814c08aed51c5899665ade97263692328eea4af106cristy if (p->colorspace == CMYKColorspace) 55824c08aed51c5899665ade97263692328eea4af106cristy { 55834c08aed51c5899665ade97263692328eea4af106cristy pixel=p->black-q->black; 55844c08aed51c5899665ade97263692328eea4af106cristy distance+=pixel*pixel*scale; 55854c08aed51c5899665ade97263692328eea4af106cristy if (distance > fuzz) 55864c08aed51c5899665ade97263692328eea4af106cristy return(MagickFalse); 55874c08aed51c5899665ade97263692328eea4af106cristy scale*=(MagickRealType) (QuantumScale*(QuantumRange-p->black)); 55884c08aed51c5899665ade97263692328eea4af106cristy scale*=(MagickRealType) (QuantumScale*(QuantumRange-q->black)); 55894c08aed51c5899665ade97263692328eea4af106cristy } 55904c08aed51c5899665ade97263692328eea4af106cristy /* 55914c08aed51c5899665ade97263692328eea4af106cristy RGB or CMY color cube. 55924c08aed51c5899665ade97263692328eea4af106cristy */ 55934c08aed51c5899665ade97263692328eea4af106cristy distance*=3.0; /* rescale appropriately */ 55944c08aed51c5899665ade97263692328eea4af106cristy fuzz*=3.0; 55954c08aed51c5899665ade97263692328eea4af106cristy pixel=p->red-q->red; 55964c08aed51c5899665ade97263692328eea4af106cristy if ((p->colorspace == HSLColorspace) || (p->colorspace == HSBColorspace) || 55974c08aed51c5899665ade97263692328eea4af106cristy (p->colorspace == HWBColorspace)) 55984c08aed51c5899665ade97263692328eea4af106cristy { 55995f95f4f77efc46ff53593d750491c8f60698c983cristy /* 56005f95f4f77efc46ff53593d750491c8f60698c983cristy This calculates a arc distance for hue-- it should be a vector angle 56015f95f4f77efc46ff53593d750491c8f60698c983cristy of 'S'/'W' length with 'L'/'B' forming appropriate cones. In other 56025f95f4f77efc46ff53593d750491c8f60698c983cristy words this is a hack - Anthony. 56034c08aed51c5899665ade97263692328eea4af106cristy */ 56044c08aed51c5899665ade97263692328eea4af106cristy if (fabs((double) pixel) > (QuantumRange/2)) 56054c08aed51c5899665ade97263692328eea4af106cristy pixel-=QuantumRange; 56064c08aed51c5899665ade97263692328eea4af106cristy pixel*=2; 56074c08aed51c5899665ade97263692328eea4af106cristy } 56084c08aed51c5899665ade97263692328eea4af106cristy distance+=pixel*pixel*scale; 56094c08aed51c5899665ade97263692328eea4af106cristy if (distance > fuzz) 56104c08aed51c5899665ade97263692328eea4af106cristy return(MagickFalse); 56114c08aed51c5899665ade97263692328eea4af106cristy pixel=p->green-q->green; 56124c08aed51c5899665ade97263692328eea4af106cristy distance+=pixel*pixel*scale; 56134c08aed51c5899665ade97263692328eea4af106cristy if (distance > fuzz) 56144c08aed51c5899665ade97263692328eea4af106cristy return(MagickFalse); 56154c08aed51c5899665ade97263692328eea4af106cristy pixel=p->blue-q->blue; 56164c08aed51c5899665ade97263692328eea4af106cristy distance+=pixel*pixel*scale; 56174c08aed51c5899665ade97263692328eea4af106cristy if (distance > fuzz) 56184c08aed51c5899665ade97263692328eea4af106cristy return(MagickFalse); 56194c08aed51c5899665ade97263692328eea4af106cristy return(MagickTrue); 56204c08aed51c5899665ade97263692328eea4af106cristy} 56212b9582a27910c7baaeb04b7e969638328fa70095cristy 56222b9582a27910c7baaeb04b7e969638328fa70095cristy/* 56232b9582a27910c7baaeb04b7e969638328fa70095cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 56242b9582a27910c7baaeb04b7e969638328fa70095cristy% % 56252b9582a27910c7baaeb04b7e969638328fa70095cristy% % 56262b9582a27910c7baaeb04b7e969638328fa70095cristy% % 5627e2a912b6c9086c98ec838baa0824cd8deca55538cristy% S e t P i x e l C h a n n e l M a p M a s k % 56282b9582a27910c7baaeb04b7e969638328fa70095cristy% % 56292b9582a27910c7baaeb04b7e969638328fa70095cristy% % 56302b9582a27910c7baaeb04b7e969638328fa70095cristy% % 56312b9582a27910c7baaeb04b7e969638328fa70095cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 56322b9582a27910c7baaeb04b7e969638328fa70095cristy% 5633e2a912b6c9086c98ec838baa0824cd8deca55538cristy% SetPixelChannelMapMask() sets the pixel channel map from the specified 5634e2a912b6c9086c98ec838baa0824cd8deca55538cristy% channel mask. 56352b9582a27910c7baaeb04b7e969638328fa70095cristy% 5636e2a912b6c9086c98ec838baa0824cd8deca55538cristy% The format of the SetPixelChannelMapMask method is: 56372b9582a27910c7baaeb04b7e969638328fa70095cristy% 5638e2a912b6c9086c98ec838baa0824cd8deca55538cristy% void SetPixelChannelMapMask(Image *image,const ChannelType channel_mask) 56392b9582a27910c7baaeb04b7e969638328fa70095cristy% 56402b9582a27910c7baaeb04b7e969638328fa70095cristy% A description of each parameter follows: 56412b9582a27910c7baaeb04b7e969638328fa70095cristy% 56422b9582a27910c7baaeb04b7e969638328fa70095cristy% o image: the image. 56432b9582a27910c7baaeb04b7e969638328fa70095cristy% 5644dfdb19ea2c08296b31fef860352c0a6efe8e9cc6cristy% o channel_mask: the channel mask. 56452b9582a27910c7baaeb04b7e969638328fa70095cristy% 56462b9582a27910c7baaeb04b7e969638328fa70095cristy*/ 5647e2a912b6c9086c98ec838baa0824cd8deca55538cristyMagickExport void SetPixelChannelMapMask(Image *image, 564807a6785ad974f0631a83731fe5d7fb85751ca235cristy const ChannelType channel_mask) 56492b9582a27910c7baaeb04b7e969638328fa70095cristy{ 56506a917d6c8b1695012e26389d2ec303267676815fcristy#define GetChannelBit(mask,bit) (((size_t) (mask) >> (size_t) (bit)) & 0x01) 5651dafd287faca4c8cd5415d13185973add9c02b2c4cristy 56522b9582a27910c7baaeb04b7e969638328fa70095cristy register ssize_t 56532b9582a27910c7baaeb04b7e969638328fa70095cristy i; 56542b9582a27910c7baaeb04b7e969638328fa70095cristy 5655177e41c20ccba692bc4c7797aeb817b2f80c7e8ccristy if (image->debug != MagickFalse) 5656177e41c20ccba692bc4c7797aeb817b2f80c7e8ccristy (void) LogMagickEvent(PixelEvent,GetMagickModule(),"%s[%08x]", \ 5657177e41c20ccba692bc4c7797aeb817b2f80c7e8ccristy image->filename,channel_mask); \ 56583c30981743f8543ca2ccc0d19de8fbda2b3639c6cristy image->channel_mask=channel_mask; 5659dafd287faca4c8cd5415d13185973add9c02b2c4cristy for (i=0; i < (ssize_t) GetPixelChannels(image); i++) 5660e2a912b6c9086c98ec838baa0824cd8deca55538cristy { 5661e2a912b6c9086c98ec838baa0824cd8deca55538cristy PixelChannel 5662e2a912b6c9086c98ec838baa0824cd8deca55538cristy channel; 5663e2a912b6c9086c98ec838baa0824cd8deca55538cristy 5664e2a912b6c9086c98ec838baa0824cd8deca55538cristy channel=GetPixelChannelMapChannel(image,i); 5665e2a912b6c9086c98ec838baa0824cd8deca55538cristy SetPixelChannelMapTraits(image,channel, 5666e2a912b6c9086c98ec838baa0824cd8deca55538cristy GetChannelBit(channel_mask,channel) == 0 ? CopyPixelTrait : 56670bbd87c90725154145a972d3efbc4c5124455fe3cristy image->matte == MagickFalse || (channel == AlphaPixelChannel) ? 56680bbd87c90725154145a972d3efbc4c5124455fe3cristy UpdatePixelTrait : (PixelTrait) (UpdatePixelTrait | BlendPixelTrait)); 5669e2a912b6c9086c98ec838baa0824cd8deca55538cristy } 56701685e7216ce4e5fac701834cd7db6eee6d426234cristy if (image->storage_class == PseudoClass) 56711685e7216ce4e5fac701834cd7db6eee6d426234cristy SetPixelChannelMapTraits(image,IndexPixelChannel,CopyPixelTrait); 5672183a5c7d1c8a9a747766ff9a2ef067853a7066e9cristy if (image->mask != MagickFalse) 567310a6c61544fb48d72f29ec8f9573bdcd52abf1b7cristy SetPixelChannelMapTraits(image,MaskPixelChannel,CopyPixelTrait); 56746dcb9b8f58179c62fb386bf2bc02c8ba901dfb15cristy if (image->debug != MagickFalse) 56756dcb9b8f58179c62fb386bf2bc02c8ba901dfb15cristy LogPixelChannels(image); 56762b9582a27910c7baaeb04b7e969638328fa70095cristy} 56772b9582a27910c7baaeb04b7e969638328fa70095cristy 56782b9582a27910c7baaeb04b7e969638328fa70095cristy/* 56792b9582a27910c7baaeb04b7e969638328fa70095cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 56802b9582a27910c7baaeb04b7e969638328fa70095cristy% % 56812b9582a27910c7baaeb04b7e969638328fa70095cristy% % 56822b9582a27910c7baaeb04b7e969638328fa70095cristy% % 5683bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% S e t P i x e l C h a n n e l M a s k % 56842b9582a27910c7baaeb04b7e969638328fa70095cristy% % 56852b9582a27910c7baaeb04b7e969638328fa70095cristy% % 56862b9582a27910c7baaeb04b7e969638328fa70095cristy% % 56872b9582a27910c7baaeb04b7e969638328fa70095cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 56882b9582a27910c7baaeb04b7e969638328fa70095cristy% 56895f95f4f77efc46ff53593d750491c8f60698c983cristy% SetPixelChannelMask() sets the pixel channel mask from the specified channel 56905f95f4f77efc46ff53593d750491c8f60698c983cristy% mask. 56912b9582a27910c7baaeb04b7e969638328fa70095cristy% 5692bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% The format of the SetPixelChannelMask method is: 56932b9582a27910c7baaeb04b7e969638328fa70095cristy% 5694bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% ChannelType SetPixelChannelMask(Image *image, 5695bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% const ChannelType channel_mask) 56962b9582a27910c7baaeb04b7e969638328fa70095cristy% 56972b9582a27910c7baaeb04b7e969638328fa70095cristy% A description of each parameter follows: 56982b9582a27910c7baaeb04b7e969638328fa70095cristy% 56992b9582a27910c7baaeb04b7e969638328fa70095cristy% o image: the image. 57002b9582a27910c7baaeb04b7e969638328fa70095cristy% 5701bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% o channel_mask: the channel mask. 5702bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% 57032b9582a27910c7baaeb04b7e969638328fa70095cristy*/ 5704bd5a96cd2b69f218f85a7adc306296a736f91a56cristyMagickExport ChannelType SetPixelChannelMask(Image *image, 5705bd5a96cd2b69f218f85a7adc306296a736f91a56cristy const ChannelType channel_mask) 57062b9582a27910c7baaeb04b7e969638328fa70095cristy{ 5707bd5a96cd2b69f218f85a7adc306296a736f91a56cristy ChannelType 5708bd5a96cd2b69f218f85a7adc306296a736f91a56cristy mask; 570994c50bac20b1e1070a88b490fd6823fce1de400ecristy 5710bd5a96cd2b69f218f85a7adc306296a736f91a56cristy mask=image->channel_mask; 5711bd5a96cd2b69f218f85a7adc306296a736f91a56cristy image->channel_mask=channel_mask; 5712e2a912b6c9086c98ec838baa0824cd8deca55538cristy SetPixelChannelMapMask(image,channel_mask); 5713bd5a96cd2b69f218f85a7adc306296a736f91a56cristy return(mask); 57142b9582a27910c7baaeb04b7e969638328fa70095cristy} 5715322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy 5716322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy/* 5717322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5718322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% % 5719322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% % 5720322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% % 5721322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% S e t P i x e l M e t a C h a n n e l s % 5722322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% % 5723322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% % 5724322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% % 5725322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5726322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% 5727322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% SetPixelMetaChannels() sets the image meta channels. 5728322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% 5729322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% The format of the SetPixelMetaChannels method is: 5730322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% 5731322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% MagickBooleanType SetPixelMetaChannels(Image *image, 5732322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% const size_t number_meta_channels,ExceptionInfo *exception) 5733322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% 5734322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% A description of each parameter follows: 5735322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% 5736322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% o image: the image. 5737322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% 5738322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% o number_meta_channels: the number of meta channels. 5739322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% 5740322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% o exception: return any errors or warnings in this structure. 5741322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% 5742322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy*/ 5743322d07da43d795a7c3b9a2d068d9a9005591cbe4cristyMagickExport MagickBooleanType SetPixelMetaChannels(Image *image, 5744322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy const size_t number_meta_channels,ExceptionInfo *exception) 5745322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy{ 5746322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy image->number_meta_channels=number_meta_channels; 5747322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy return(SyncImagePixelCache(image,exception)); 5748322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy} 5749