pixel.c revision 2dc655d16d7bc2a04312bc00ad27139d7543b10c
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" 62380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy#include "MagickCore/pixel-private.h" 634c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/quantum.h" 644c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/quantum-private.h" 654c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/resource_.h" 664c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/semaphore.h" 674c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/statistic.h" 684c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/stream.h" 694c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/string_.h" 704c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/transform.h" 714c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/utility.h" 724c08aed51c5899665ade97263692328eea4af106cristy 73146a62b25d7466cceec79975894ce812e11f4625cristy#define LogPixelChannels(image) \ 74146a62b25d7466cceec79975894ce812e11f4625cristy{ \ 75146a62b25d7466cceec79975894ce812e11f4625cristy register ssize_t \ 76146a62b25d7466cceec79975894ce812e11f4625cristy i; \ 77146a62b25d7466cceec79975894ce812e11f4625cristy \ 78146a62b25d7466cceec79975894ce812e11f4625cristy (void) LogMagickEvent(PixelEvent,GetMagickModule(),"%s[%.20g]", \ 79146a62b25d7466cceec79975894ce812e11f4625cristy image->filename,(double) image->number_channels); \ 80146a62b25d7466cceec79975894ce812e11f4625cristy for (i=0; i < (ssize_t) image->number_channels; i++) \ 81146a62b25d7466cceec79975894ce812e11f4625cristy { \ 82146a62b25d7466cceec79975894ce812e11f4625cristy char \ 83146a62b25d7466cceec79975894ce812e11f4625cristy traits[MaxTextExtent]; \ 84146a62b25d7466cceec79975894ce812e11f4625cristy \ 85146a62b25d7466cceec79975894ce812e11f4625cristy const char \ 864679572011210c29de1840060a4bf942afe8d29ecristy *name; \ 874679572011210c29de1840060a4bf942afe8d29ecristy \ 884679572011210c29de1840060a4bf942afe8d29ecristy PixelChannel \ 894679572011210c29de1840060a4bf942afe8d29ecristy channel; \ 90146a62b25d7466cceec79975894ce812e11f4625cristy \ 91e2a912b6c9086c98ec838baa0824cd8deca55538cristy switch (GetPixelChannelMapChannel(image,i)) \ 92146a62b25d7466cceec79975894ce812e11f4625cristy { \ 93146a62b25d7466cceec79975894ce812e11f4625cristy case RedPixelChannel: \ 94146a62b25d7466cceec79975894ce812e11f4625cristy { \ 954679572011210c29de1840060a4bf942afe8d29ecristy name="red"; \ 96146a62b25d7466cceec79975894ce812e11f4625cristy if (image->colorspace == CMYKColorspace) \ 974679572011210c29de1840060a4bf942afe8d29ecristy name="cyan"; \ 98146a62b25d7466cceec79975894ce812e11f4625cristy if (image->colorspace == GRAYColorspace) \ 994679572011210c29de1840060a4bf942afe8d29ecristy name="gray"; \ 100146a62b25d7466cceec79975894ce812e11f4625cristy break; \ 101146a62b25d7466cceec79975894ce812e11f4625cristy } \ 102146a62b25d7466cceec79975894ce812e11f4625cristy case GreenPixelChannel: \ 103146a62b25d7466cceec79975894ce812e11f4625cristy { \ 1044679572011210c29de1840060a4bf942afe8d29ecristy name="green"; \ 105146a62b25d7466cceec79975894ce812e11f4625cristy if (image->colorspace == CMYKColorspace) \ 1064679572011210c29de1840060a4bf942afe8d29ecristy name="magenta"; \ 107146a62b25d7466cceec79975894ce812e11f4625cristy break; \ 108146a62b25d7466cceec79975894ce812e11f4625cristy } \ 109146a62b25d7466cceec79975894ce812e11f4625cristy case BluePixelChannel: \ 110146a62b25d7466cceec79975894ce812e11f4625cristy { \ 1114679572011210c29de1840060a4bf942afe8d29ecristy name="blue"; \ 112146a62b25d7466cceec79975894ce812e11f4625cristy if (image->colorspace == CMYKColorspace) \ 1134679572011210c29de1840060a4bf942afe8d29ecristy name="yellow"; \ 114146a62b25d7466cceec79975894ce812e11f4625cristy break; \ 115146a62b25d7466cceec79975894ce812e11f4625cristy } \ 116146a62b25d7466cceec79975894ce812e11f4625cristy case BlackPixelChannel: \ 117146a62b25d7466cceec79975894ce812e11f4625cristy { \ 1184679572011210c29de1840060a4bf942afe8d29ecristy name="black"; \ 119146a62b25d7466cceec79975894ce812e11f4625cristy if (image->storage_class == PseudoClass) \ 1204679572011210c29de1840060a4bf942afe8d29ecristy name="index"; \ 121146a62b25d7466cceec79975894ce812e11f4625cristy break; \ 122146a62b25d7466cceec79975894ce812e11f4625cristy } \ 123e2a912b6c9086c98ec838baa0824cd8deca55538cristy case IndexPixelChannel: \ 124e2a912b6c9086c98ec838baa0824cd8deca55538cristy { \ 1254679572011210c29de1840060a4bf942afe8d29ecristy name="index"; \ 126e2a912b6c9086c98ec838baa0824cd8deca55538cristy break; \ 127e2a912b6c9086c98ec838baa0824cd8deca55538cristy } \ 128146a62b25d7466cceec79975894ce812e11f4625cristy case AlphaPixelChannel: \ 129146a62b25d7466cceec79975894ce812e11f4625cristy { \ 1304679572011210c29de1840060a4bf942afe8d29ecristy name="alpha"; \ 131146a62b25d7466cceec79975894ce812e11f4625cristy break; \ 132146a62b25d7466cceec79975894ce812e11f4625cristy } \ 133146a62b25d7466cceec79975894ce812e11f4625cristy case MaskPixelChannel: \ 134146a62b25d7466cceec79975894ce812e11f4625cristy { \ 1354679572011210c29de1840060a4bf942afe8d29ecristy name="mask"; \ 136146a62b25d7466cceec79975894ce812e11f4625cristy break; \ 137146a62b25d7466cceec79975894ce812e11f4625cristy } \ 138e2a912b6c9086c98ec838baa0824cd8deca55538cristy case MetaPixelChannel: \ 139146a62b25d7466cceec79975894ce812e11f4625cristy { \ 1404679572011210c29de1840060a4bf942afe8d29ecristy name="meta"; \ 141e2a912b6c9086c98ec838baa0824cd8deca55538cristy break; \ 142146a62b25d7466cceec79975894ce812e11f4625cristy } \ 143e2a912b6c9086c98ec838baa0824cd8deca55538cristy default: \ 1444679572011210c29de1840060a4bf942afe8d29ecristy name="undefined"; \ 145146a62b25d7466cceec79975894ce812e11f4625cristy } \ 1464679572011210c29de1840060a4bf942afe8d29ecristy channel=GetPixelChannelMapChannel(image,i); \ 147146a62b25d7466cceec79975894ce812e11f4625cristy *traits='\0'; \ 1484679572011210c29de1840060a4bf942afe8d29ecristy if ((GetPixelChannelMapTraits(image,channel) & UpdatePixelTrait) != 0) \ 149146a62b25d7466cceec79975894ce812e11f4625cristy (void) ConcatenateMagickString(traits,"update,",MaxTextExtent); \ 1504679572011210c29de1840060a4bf942afe8d29ecristy if ((GetPixelChannelMapTraits(image,channel) & BlendPixelTrait) != 0) \ 151146a62b25d7466cceec79975894ce812e11f4625cristy (void) ConcatenateMagickString(traits,"blend,",MaxTextExtent); \ 1524679572011210c29de1840060a4bf942afe8d29ecristy if ((GetPixelChannelMapTraits(image,channel) & CopyPixelTrait) != 0) \ 153146a62b25d7466cceec79975894ce812e11f4625cristy (void) ConcatenateMagickString(traits,"copy,",MaxTextExtent); \ 154146a62b25d7466cceec79975894ce812e11f4625cristy if (*traits == '\0') \ 155146a62b25d7466cceec79975894ce812e11f4625cristy (void) ConcatenateMagickString(traits,"undefined,",MaxTextExtent); \ 156146a62b25d7466cceec79975894ce812e11f4625cristy traits[strlen(traits)-1]='\0'; \ 157146a62b25d7466cceec79975894ce812e11f4625cristy (void) LogMagickEvent(PixelEvent,GetMagickModule()," %.20g: %s (%s)", \ 1584679572011210c29de1840060a4bf942afe8d29ecristy (double) i,name,traits); \ 159146a62b25d7466cceec79975894ce812e11f4625cristy } \ 160146a62b25d7466cceec79975894ce812e11f4625cristy} 161146a62b25d7466cceec79975894ce812e11f4625cristy 162146a62b25d7466cceec79975894ce812e11f4625cristy/* 1634c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1644c08aed51c5899665ade97263692328eea4af106cristy% % 1654c08aed51c5899665ade97263692328eea4af106cristy% % 1664c08aed51c5899665ade97263692328eea4af106cristy% % 167ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy+ A c q u i r e P i x e l C h a n n e l M a p % 1684c08aed51c5899665ade97263692328eea4af106cristy% % 1694c08aed51c5899665ade97263692328eea4af106cristy% % 1704c08aed51c5899665ade97263692328eea4af106cristy% % 1714c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1724c08aed51c5899665ade97263692328eea4af106cristy% 173ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy% AcquirePixelChannelMap() acquires a pixel component map. 1744c08aed51c5899665ade97263692328eea4af106cristy% 175ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy% The format of the AcquirePixelChannelMap() method is: 1764c08aed51c5899665ade97263692328eea4af106cristy% 177bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% PixelChannelMap *AcquirePixelChannelMap(void) 1784c08aed51c5899665ade97263692328eea4af106cristy% 1794c08aed51c5899665ade97263692328eea4af106cristy*/ 180bd5a96cd2b69f218f85a7adc306296a736f91a56cristyMagickExport PixelChannelMap *AcquirePixelChannelMap(void) 1814c08aed51c5899665ade97263692328eea4af106cristy{ 182ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy PixelChannelMap 183bd5a96cd2b69f218f85a7adc306296a736f91a56cristy *channel_map; 1844c08aed51c5899665ade97263692328eea4af106cristy 1854c08aed51c5899665ade97263692328eea4af106cristy register ssize_t 1864c08aed51c5899665ade97263692328eea4af106cristy i; 1874c08aed51c5899665ade97263692328eea4af106cristy 188bd5a96cd2b69f218f85a7adc306296a736f91a56cristy channel_map=(PixelChannelMap *) AcquireQuantumMemory(MaxPixelChannels, 189bd5a96cd2b69f218f85a7adc306296a736f91a56cristy sizeof(*channel_map)); 190bd5a96cd2b69f218f85a7adc306296a736f91a56cristy if (channel_map == (PixelChannelMap *) NULL) 1914c08aed51c5899665ade97263692328eea4af106cristy ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed"); 192bd5a96cd2b69f218f85a7adc306296a736f91a56cristy (void) ResetMagickMemory(channel_map,0,MaxPixelChannels*sizeof(*channel_map)); 193bd5a96cd2b69f218f85a7adc306296a736f91a56cristy for (i=0; i < MaxPixelChannels; i++) 194bd5a96cd2b69f218f85a7adc306296a736f91a56cristy channel_map[i].channel=(PixelChannel) i; 195ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy return(channel_map); 1964c08aed51c5899665ade97263692328eea4af106cristy} 1974c08aed51c5899665ade97263692328eea4af106cristy 1984c08aed51c5899665ade97263692328eea4af106cristy/* 1994c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2004c08aed51c5899665ade97263692328eea4af106cristy% % 2014c08aed51c5899665ade97263692328eea4af106cristy% % 2024c08aed51c5899665ade97263692328eea4af106cristy% % 203ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy+ C l o n e P i x e l C h a n n e l M a p % 2044c08aed51c5899665ade97263692328eea4af106cristy% % 2054c08aed51c5899665ade97263692328eea4af106cristy% % 2064c08aed51c5899665ade97263692328eea4af106cristy% % 2074c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2084c08aed51c5899665ade97263692328eea4af106cristy% 209ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy% ClonePixelChannelMap() clones a pixel component map. 2104c08aed51c5899665ade97263692328eea4af106cristy% 211ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy% The format of the ClonePixelChannelMap() method is: 2124c08aed51c5899665ade97263692328eea4af106cristy% 213bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% PixelChannelMap *ClonePixelChannelMap(PixelChannelMap *channel_map) 2144c08aed51c5899665ade97263692328eea4af106cristy% 2154c08aed51c5899665ade97263692328eea4af106cristy% A description of each parameter follows: 2164c08aed51c5899665ade97263692328eea4af106cristy% 217ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy% o channel_map: the pixel component map. 2184c08aed51c5899665ade97263692328eea4af106cristy% 2194c08aed51c5899665ade97263692328eea4af106cristy*/ 220bd5a96cd2b69f218f85a7adc306296a736f91a56cristyMagickExport PixelChannelMap *ClonePixelChannelMap(PixelChannelMap *channel_map) 2214c08aed51c5899665ade97263692328eea4af106cristy{ 222ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy PixelChannelMap 223bd5a96cd2b69f218f85a7adc306296a736f91a56cristy *clone_map; 2244c08aed51c5899665ade97263692328eea4af106cristy 225bd5a96cd2b69f218f85a7adc306296a736f91a56cristy assert(channel_map != (PixelChannelMap *) NULL); 226ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy clone_map=AcquirePixelChannelMap(); 227bd5a96cd2b69f218f85a7adc306296a736f91a56cristy if (clone_map == (PixelChannelMap *) NULL) 228bd5a96cd2b69f218f85a7adc306296a736f91a56cristy return((PixelChannelMap *) NULL); 229bd5a96cd2b69f218f85a7adc306296a736f91a56cristy (void) CopyMagickMemory(clone_map,channel_map,MaxPixelChannels* 230bd5a96cd2b69f218f85a7adc306296a736f91a56cristy sizeof(*channel_map)); 2314c08aed51c5899665ade97263692328eea4af106cristy return(clone_map); 2324c08aed51c5899665ade97263692328eea4af106cristy} 2334c08aed51c5899665ade97263692328eea4af106cristy 2344c08aed51c5899665ade97263692328eea4af106cristy/* 2354c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2364c08aed51c5899665ade97263692328eea4af106cristy% % 2374c08aed51c5899665ade97263692328eea4af106cristy% % 2384c08aed51c5899665ade97263692328eea4af106cristy% % 2394c08aed51c5899665ade97263692328eea4af106cristy+ C l o n e P i x e l I n f o % 2404c08aed51c5899665ade97263692328eea4af106cristy% % 2414c08aed51c5899665ade97263692328eea4af106cristy% % 2424c08aed51c5899665ade97263692328eea4af106cristy% % 2434c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2444c08aed51c5899665ade97263692328eea4af106cristy% 2454c08aed51c5899665ade97263692328eea4af106cristy% ClonePixelInfo() makes a duplicate of the given pixel info structure, or if 2464c08aed51c5899665ade97263692328eea4af106cristy% pixel info is NULL, a new one. 2474c08aed51c5899665ade97263692328eea4af106cristy% 2484c08aed51c5899665ade97263692328eea4af106cristy% The format of the ClonePixelInfo method is: 2494c08aed51c5899665ade97263692328eea4af106cristy% 2504c08aed51c5899665ade97263692328eea4af106cristy% PixelInfo *ClonePixelInfo(const PixelInfo *pixel_info) 2514c08aed51c5899665ade97263692328eea4af106cristy% 2524c08aed51c5899665ade97263692328eea4af106cristy% A description of each parameter follows: 2534c08aed51c5899665ade97263692328eea4af106cristy% 2544c08aed51c5899665ade97263692328eea4af106cristy% o pixel_info: the pixel info. 2554c08aed51c5899665ade97263692328eea4af106cristy% 2564c08aed51c5899665ade97263692328eea4af106cristy*/ 2574c08aed51c5899665ade97263692328eea4af106cristyMagickExport PixelInfo *ClonePixelInfo(const PixelInfo *pixel) 2584c08aed51c5899665ade97263692328eea4af106cristy{ 2594c08aed51c5899665ade97263692328eea4af106cristy PixelInfo 2604c08aed51c5899665ade97263692328eea4af106cristy *pixel_info; 2614c08aed51c5899665ade97263692328eea4af106cristy 262a64b85d7873d5e540fe6e2941aa98ec7653a4e2dcristy pixel_info=(PixelInfo *) AcquireQuantumMemory(1,sizeof(*pixel_info)); 2634c08aed51c5899665ade97263692328eea4af106cristy if (pixel_info == (PixelInfo *) NULL) 2644c08aed51c5899665ade97263692328eea4af106cristy ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed"); 2654c08aed51c5899665ade97263692328eea4af106cristy *pixel_info=(*pixel); 2664c08aed51c5899665ade97263692328eea4af106cristy return(pixel_info); 2674c08aed51c5899665ade97263692328eea4af106cristy} 2684c08aed51c5899665ade97263692328eea4af106cristy 2694c08aed51c5899665ade97263692328eea4af106cristy/* 2704c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2714c08aed51c5899665ade97263692328eea4af106cristy% % 2724c08aed51c5899665ade97263692328eea4af106cristy% % 2734c08aed51c5899665ade97263692328eea4af106cristy% % 274ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy+ D e s t r o y P i x e l C h a n n e l M a p % 2754c08aed51c5899665ade97263692328eea4af106cristy% % 2764c08aed51c5899665ade97263692328eea4af106cristy% % 2774c08aed51c5899665ade97263692328eea4af106cristy% % 2784c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2794c08aed51c5899665ade97263692328eea4af106cristy% 280ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy% DestroyPixelChannelMap() deallocates memory associated with the pixel 281ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy% channel map. 2824c08aed51c5899665ade97263692328eea4af106cristy% 283ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy% The format of the DestroyPixelChannelMap() method is: 2844c08aed51c5899665ade97263692328eea4af106cristy% 285bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% PixelChannelMap *DestroyPixelChannelMap(PixelChannelMap *channel_map) 2864c08aed51c5899665ade97263692328eea4af106cristy% 2874c08aed51c5899665ade97263692328eea4af106cristy% A description of each parameter follows: 2884c08aed51c5899665ade97263692328eea4af106cristy% 289ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy% o channel_map: the pixel component map. 2904c08aed51c5899665ade97263692328eea4af106cristy% 2914c08aed51c5899665ade97263692328eea4af106cristy*/ 292bd5a96cd2b69f218f85a7adc306296a736f91a56cristyMagickExport PixelChannelMap *DestroyPixelChannelMap( 293bd5a96cd2b69f218f85a7adc306296a736f91a56cristy PixelChannelMap *channel_map) 2944c08aed51c5899665ade97263692328eea4af106cristy{ 295bd5a96cd2b69f218f85a7adc306296a736f91a56cristy assert(channel_map != (PixelChannelMap *) NULL); 296bd5a96cd2b69f218f85a7adc306296a736f91a56cristy channel_map=(PixelChannelMap *) RelinquishMagickMemory(channel_map); 297bd5a96cd2b69f218f85a7adc306296a736f91a56cristy return((PixelChannelMap *) RelinquishMagickMemory(channel_map)); 2984c08aed51c5899665ade97263692328eea4af106cristy} 2993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 3013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% E x p o r t I m a g e P i x e l s % 3063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ExportImagePixels() extracts pixel data from an image and returns it to you. 3123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The method returns MagickTrue on success otherwise MagickFalse if an error is 313b5a45a37a6faa8a3725c814b51a1a86daa4ff21fcristy% encountered. The data is returned as char, short int, Quantum, unsigned int, 314cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy% unsigned long long, float, or double in the order specified by map. 3153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Suppose you want to extract the first scanline of a 640x480 image as 3173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% character data in red-green-blue order: 3183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ExportImagePixels(image,0,0,640,1,"RGB",CharPixel,pixels,exception); 3203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the ExportImagePixels method is: 3223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 323cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy% MagickBooleanType ExportImagePixels(const Image *image,const ssize_t x, 324cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy% const ssize_t y,const size_t width,const size_t height, 325cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy% const char *map,const StorageType type,void *pixels, 32646f4be29828ab7588745336d46ab11611c847933cristy% ExceptionInfo *exception) 3273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 3293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o image: the image. 3313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 332cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy% o x,y,width,height: These values define the perimeter 3333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% of a region of pixels you want to extract. 3343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o map: This string reflects the expected ordering of the pixel array. 3363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% It can be any combination or order of R = red, G = green, B = blue, 3373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A = alpha (0 is transparent), O = opacity (0 is opaque), C = cyan, 3383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Y = yellow, M = magenta, K = black, I = intensity (for grayscale), 3393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% P = pad. 3403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o type: Define the data type of the pixels. Float and double types are 3423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% normalized to [0..1] otherwise [0..QuantumRange]. Choose from these 3436c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy% types: CharPixel (char *), DoublePixel (double *), FloatPixel (float *), 344ff6834e270b99c2747ad5b2f4edeecf862aaf825cristy% LongPixel (unsigned int *), LongLongPixel (unsigned long long *), 3456c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy% QuantumPixel (Quantum *), or ShortPixel (unsigned short *). 3463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o pixels: This array of values contain the pixel components as defined by 3483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% map and type. You must preallocate this array where the expected 3493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% length varies depending on the values of width, height, map, and type. 3503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o exception: return any errors or warnings in this structure. 3523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 354e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3552dc655d16d7bc2a04312bc00ad27139d7543b10ccristystatic void ExportCharPixel(Image *image,const RectangleInfo *roi, 35646f4be29828ab7588745336d46ab11611c847933cristy const char *restrict map,const QuantumType *quantum_map,void *pixels, 35746f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 3583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 359e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const Quantum 360e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *restrict p; 3613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 362bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 3633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x; 3643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 365e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register unsigned char 3663fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy *restrict q; 3673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 36814d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 36914d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 37014d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 3719d314ff2c17a77996c05413c2013880387e50f0ecristy ssize_t 3729d314ff2c17a77996c05413c2013880387e50f0ecristy y; 3739d314ff2c17a77996c05413c2013880387e50f0ecristy 37446f4be29828ab7588745336d46ab11611c847933cristy q=(unsigned char *) pixels; 375e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 3763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 377cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 379cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 380e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 3813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 382cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 383e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 384e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelBlue(image,p)); 385e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelGreen(image,p)); 386e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelRed(image,p)); 387e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 388e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 390e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 391e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 392e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 393e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 394cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 396cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 397e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 3983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 399cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 400e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 401e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelBlue(image,p)); 402e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelGreen(image,p)); 403e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelRed(image,p)); 404e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelAlpha(image,p)); 405e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 406e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 408e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 409e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 410e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 411e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 412cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 4133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 414cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 415e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 4163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 417cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 418e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 419e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelBlue(image,p)); 420e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelGreen(image,p)); 421e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelRed(image,p)); 422e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar((Quantum) 0); 423e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 424e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 426e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 427e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 428e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 429e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4302dc655d16d7bc2a04312bc00ad27139d7543b10ccristy (void) SetImageColorspace(image,GRAYColorspace,exception); 431cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 4323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 433cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 434e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 435e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 436cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 437e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 438e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelIntensity(image,p)); 439e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 440e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 442e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 443e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 444e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 445e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 446cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 4473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 448cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 449e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 450e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 451cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 452e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 453e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelRed(image,p)); 454e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelGreen(image,p)); 455e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelBlue(image,p)); 456e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 457e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 459e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 460e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 461e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 462e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 463cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 4643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 465cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 466e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 4673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 468cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 469e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 470e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelRed(image,p)); 471e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelGreen(image,p)); 472e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelBlue(image,p)); 473e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelAlpha(image,p)); 474e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 475e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 477e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 478e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 479e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 480e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 481cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 4823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 483cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 484e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 485e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 486cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 487e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 488e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelRed(image,p)); 489e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelGreen(image,p)); 490e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelBlue(image,p)); 491e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar((Quantum) 0); 492e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 493e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 495e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 4963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 49714d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 498cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 4993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 500cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 501e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 502e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 503cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 5043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 505e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 506e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 5073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 50814d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 509e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 510e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=0; 511e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 5123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 513e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 514e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 5153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 516e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToChar(GetPixelRed(image,p)); 517e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 5183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 519e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 520e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 5213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 522e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToChar(GetPixelGreen(image,p)); 523e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 5243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 525e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 526e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 5273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 528e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToChar(GetPixelBlue(image,p)); 529e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 5303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 531e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 5323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 533e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToChar(GetPixelAlpha(image,p)); 534e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 5353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 536e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 5373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 538e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToChar(GetPixelAlpha(image,p)); 539e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 5403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 541e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 5423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 543e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->colorspace == CMYKColorspace) 544e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToChar(GetPixelBlack(image,p)); 545e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 5463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 547e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 5483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 549e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToChar(GetPixelIntensity(image,p)); 550e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 5513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 552e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 553e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 5543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 555e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q++; 556e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 557e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 558e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 559e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 560e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 561e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 5622dc655d16d7bc2a04312bc00ad27139d7543b10ccristystatic void ExportDoublePixel(Image *image,const RectangleInfo *roi, 56346f4be29828ab7588745336d46ab11611c847933cristy const char *restrict map,const QuantumType *quantum_map,void *pixels, 56446f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 565e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 566e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const Quantum 567e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *restrict p; 568e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 569e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register double 5703fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy *restrict q; 571e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 572e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 573e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 574e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 57514d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 57614d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 57714d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 578e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 579e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 580e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 581e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q=(double *) pixels; 582e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 583e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 584cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 5853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 586cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 5874c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 5883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 589cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 5903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 591e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelBlue(image,p)); 592e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelGreen(image,p)); 593e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelRed(image,p)); 594ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(image); 5953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 5963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 597e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 5983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 599e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 6003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 601cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 602e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 603cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 604e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 6053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 606cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 6073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 608e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelBlue(image,p)); 609e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelGreen(image,p)); 610e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelRed(image,p)); 611e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelAlpha(image,p)); 612e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 6133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 614e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 615e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 616e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 617e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 618e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 619cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 6203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 621cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 6224c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 6233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 624cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 6253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 626e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelBlue(image,p)); 627e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelGreen(image,p)); 628e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelRed(image,p)); 629e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=0.0; 630ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(image); 6313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 633e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 6343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 635e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 6363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6372dc655d16d7bc2a04312bc00ad27139d7543b10ccristy (void) SetImageColorspace(image,GRAYColorspace,exception); 638cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 639e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 640cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 641e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 6423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 643cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 6443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 645e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelIntensity(image,p)); 646e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 6473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 648e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 649e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 650e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 651e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 652e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 653cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 654e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 655cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 656e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 6573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 658cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 6593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 660e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelRed(image,p)); 661e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelGreen(image,p)); 662e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelBlue(image,p)); 663e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 6643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 665e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 666e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 667e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 668e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 669e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 670cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 671e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 672cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 673e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 6743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 675cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 6763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 677e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelRed(image,p)); 678e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelGreen(image,p)); 679e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelBlue(image,p)); 680e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelAlpha(image,p)); 681e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 6823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 683e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 684e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 685e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 686e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 687e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 688cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 6893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 690cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 6914c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 6923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 693cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 6943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 695e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelRed(image,p)); 696e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelGreen(image,p)); 697e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelBlue(image,p)); 698e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=0.0; 699ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(image); 7003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 7013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 702e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 7033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 70414d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 705cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 706e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 707cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 708e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 709e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 710cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 7113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 712e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 713e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 7143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 71514d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 716e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 717e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=0; 718e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 7193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 720e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 721e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 7223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 723e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(double) (QuantumScale*GetPixelRed(image,p)); 724e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 7253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 726e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 727e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 7283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 729e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(double) (QuantumScale*GetPixelGreen(image,p)); 730e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 7313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 732e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 733e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 7343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 735e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(double) (QuantumScale*GetPixelBlue(image,p)); 736e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 7373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 738e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 7393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 740e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(double) (QuantumScale*GetPixelAlpha(image,p)); 741e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 7423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 743e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 7443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 745e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(double) (QuantumScale*GetPixelAlpha(image,p)); 746e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 7473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 748e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 7493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 750e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->colorspace == CMYKColorspace) 751e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(double) (QuantumScale* 752e5370944fabb7afa477ab1325d400731b1e5d5e8cristy GetPixelBlack(image,p)); 753e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 7543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 755e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 7563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 757e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(double) (QuantumScale*GetPixelIntensity(image,p)); 758e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 7593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 760e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 761e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=0; 7623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 763e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q++; 764e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 765e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 766e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 767e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 768e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 769e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 7702dc655d16d7bc2a04312bc00ad27139d7543b10ccristystatic void ExportFloatPixel(Image *image,const RectangleInfo *roi, 77146f4be29828ab7588745336d46ab11611c847933cristy const char *restrict map,const QuantumType *quantum_map,void *pixels, 77246f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 773e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 774e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const Quantum 775e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *restrict p; 776e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 777e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register float 7783fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy *restrict q; 779e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 780e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 781e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 782e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 78314d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 78414d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 78514d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 786e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 787e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 788e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 789e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q=(float *) pixels; 790e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 791e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 792cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 7933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 794cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 7954c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 7963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 797cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 7983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 799e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelBlue(image,p)); 800e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelGreen(image,p)); 801e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelRed(image,p)); 802ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(image); 8033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 8043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 805e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 8063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 807e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 8083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 809cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 810e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 811cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 812e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 8133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 814cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 8153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 816e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelBlue(image,p)); 817e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelGreen(image,p)); 818e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelRed(image,p)); 819e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelAlpha(image,p)); 820e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 8213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 822e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 823e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 824e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 825e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 826e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 827cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 8283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 829cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 8304c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 8313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 832cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 8333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 834e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelBlue(image,p)); 835e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelGreen(image,p)); 836e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelRed(image,p)); 837e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=0.0; 838ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(image); 8393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 8403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 841e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 8423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 843e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 8443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 8452dc655d16d7bc2a04312bc00ad27139d7543b10ccristy (void) SetImageColorspace(image,GRAYColorspace,exception); 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*GetPixelIntensity(image,p)); 854e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 8553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 856e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 857e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 858e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 859e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 860e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 861cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 862e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 863cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 864e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 8653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 866cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 8673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 868e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelRed(image,p)); 869e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelGreen(image,p)); 870e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelBlue(image,p)); 871e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 8723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 873e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 874e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 875e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 876e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 877e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 878cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 879e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 880cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 881e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 8823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 883cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 8843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 885e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelRed(image,p)); 886e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelGreen(image,p)); 887e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelBlue(image,p)); 888e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelAlpha(image,p)); 889e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 8903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 891e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 892e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 893e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 894e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 895e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 896cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 8973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 898cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 8994c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 9003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 901cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 9023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 903e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelRed(image,p)); 904e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelGreen(image,p)); 905e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelBlue(image,p)); 906e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=0.0; 907ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(image); 9083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 9093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 910e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 9113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 91214d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 913cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 914e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 915cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 916e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 917e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 918cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 9193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 920e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 921e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 9223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 92314d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 924e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 925e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=0; 926e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 9273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 928e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 929e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 9303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 931e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(float) (QuantumScale*GetPixelRed(image,p)); 932e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 9333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 934e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 935e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 9363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 937e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(float) (QuantumScale*GetPixelGreen(image,p)); 938e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 9393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 940e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 941e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 9423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 943e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(float) (QuantumScale*GetPixelBlue(image,p)); 944e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 9453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 946e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 9473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 948e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(float) (QuantumScale*((Quantum) (GetPixelAlpha(image,p)))); 949e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 9503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 951e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 9523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 953e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(float) (QuantumScale*GetPixelAlpha(image,p)); 954e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 9553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 956e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 9573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 958e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->colorspace == CMYKColorspace) 959e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(float) (QuantumScale* GetPixelBlack(image,p)); 960e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 9613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 962e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 9633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 964e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(float) (QuantumScale*GetPixelIntensity(image,p)); 965e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 9663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 967e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 968e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=0; 9693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 970e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q++; 971e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 972e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 973e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 974e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 975e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 976e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 9772dc655d16d7bc2a04312bc00ad27139d7543b10ccristystatic void ExportLongPixel(Image *image,const RectangleInfo *roi, 97846f4be29828ab7588745336d46ab11611c847933cristy const char *restrict map,const QuantumType *quantum_map,void *pixels, 97946f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 980e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 981e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const Quantum 982e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *restrict p; 983e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 984e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 985e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 986e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 987e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register unsigned int 9883fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy *restrict q; 989e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 99014d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 99114d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 99214d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 993e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 994e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 995e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 996e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q=(unsigned int *) pixels; 997e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 998e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 999cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 10003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1001cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 10024c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 10033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 1004cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 10053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 10066c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelBlue(image,p)); 10076c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelGreen(image,p)); 10086c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelRed(image,p)); 1009ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(image); 10103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 10113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1012e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 10133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1014e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 10153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1016cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1017e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1018cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1019e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1020e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1021cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1022e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 10236c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelBlue(image,p)); 10246c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelGreen(image,p)); 10256c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelRed(image,p)); 10266c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelAlpha(image,p)); 1027e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1028e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1029e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1030e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1031e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1032e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 1033e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1034cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1035e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1036cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1037e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1038e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1039cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1040e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 10416c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelBlue(image,p)); 10426c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelGreen(image,p)); 10436c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelRed(image,p)); 10446c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=0; 1045e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1046e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1047e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1048e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1049e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1050e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 1051e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 10522dc655d16d7bc2a04312bc00ad27139d7543b10ccristy (void) SetImageColorspace(image,GRAYColorspace,exception); 1053cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1054e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1055cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1056e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1057e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1058cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1059e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 10606c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelIntensity(image,p)); 1061e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1062e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1063e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1064e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1065e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1066e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 1067e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1068cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1069e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1070cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1071e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1072e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1073cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1074e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 10756c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelRed(image,p)); 10766c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelGreen(image,p)); 10776c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelBlue(image,p)); 1078e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1079e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1080e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1081e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1082e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1083e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 1084e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1085cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1086e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1087cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1088e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1089e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1090cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1091e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 10926c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelRed(image,p)); 10936c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelGreen(image,p)); 10946c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelBlue(image,p)); 10956c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelAlpha(image,p)); 1096e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1097e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1098e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1099e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1100e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1101e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 1102e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1103cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1104e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1105cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1106e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1107e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1108cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1109e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 11106c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelRed(image,p)); 11116c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelGreen(image,p)); 11126c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelBlue(image,p)); 11136c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=0; 1114e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1115e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1116e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1117e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1118e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 111914d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 1120cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1121e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1122cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1123e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1124e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1125cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1126e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1127e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 1128e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 1129e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 113014d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 1131e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1132e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=0; 1133e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 1134e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1135e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 1136e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 1137e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 11386c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q=ScaleQuantumToLong(GetPixelRed(image,p)); 1139e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1140e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1141e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 1142e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 1143e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 11446c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q=ScaleQuantumToLong(GetPixelGreen(image,p)); 1145e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1146e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1147e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 1148e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 1149e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 11506c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q=ScaleQuantumToLong(GetPixelBlue(image,p)); 1151e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1152e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1153e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 1154e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 11556c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q=ScaleQuantumToLong(GetPixelAlpha(image,p)); 1156e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1157e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1158e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 1159e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 11606c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q=ScaleQuantumToLong(GetPixelAlpha(image,p)); 1161e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1162e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1163e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 1164e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1165e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->colorspace == CMYKColorspace) 11666c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q=ScaleQuantumToLong(GetPixelBlack(image,p)); 1167e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1168e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1169e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 1170e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 11716c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q=ScaleQuantumToLong(GetPixelIntensity(image,p)); 1172e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1173e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1174e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 11756c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy break; 1176e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1177e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q++; 1178e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1179e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1180e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1181e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1182e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 1183e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 11842dc655d16d7bc2a04312bc00ad27139d7543b10ccristystatic void ExportLongLongPixel(Image *image,const RectangleInfo *roi, 118546f4be29828ab7588745336d46ab11611c847933cristy const char *restrict map,const QuantumType *quantum_map,void *pixels, 118646f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 1187e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 1188e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const Quantum 1189e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *restrict p; 1190e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1191e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 1192e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 1193e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1194b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy register MagickSizeType 11953fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy *restrict q; 1196e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 119714d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 119814d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 119914d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 1200e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 1201e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 1202e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1203b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy q=(MagickSizeType *) pixels; 1204e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 1205e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1206cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1207e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1208cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1209e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1210e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1211cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1212e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1213b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelBlue(image,p)); 1214b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelGreen(image,p)); 1215b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelRed(image,p)); 1216e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1217e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1218e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1219e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1220e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1221e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 1222e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1223cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1224e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1225cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1226e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1227e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1228cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1229e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1230b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelBlue(image,p)); 1231b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelGreen(image,p)); 1232b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelRed(image,p)); 1233b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelAlpha(image,p)); 1234e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1235e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1236e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1237e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1238e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1239e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 1240e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1241cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1242e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1243cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1244e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1245e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1246cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1247e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1248b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelBlue(image,p)); 1249b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelGreen(image,p)); 1250b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelRed(image,p)); 1251e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=0; 1252e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1253e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1254e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1255e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1256e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1257e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 1258e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 12592dc655d16d7bc2a04312bc00ad27139d7543b10ccristy (void) SetImageColorspace(image,GRAYColorspace,exception); 1260cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1261e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1262cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1263e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1264e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1265cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1266e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1267b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelIntensity(image,p)); 1268e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1269e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1270e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1271e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1272e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1273e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 1274e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1275cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1276e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1277cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1278e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1279e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1280cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1281e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1282b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelRed(image,p)); 1283b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelGreen(image,p)); 1284b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelBlue(image,p)); 1285e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1286e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1287e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1288e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1289e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1290e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 1291e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1292cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1293e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1294cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1295e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1296e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1297cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1298e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1299b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelRed(image,p)); 1300b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelGreen(image,p)); 1301b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelBlue(image,p)); 1302b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelAlpha(image,p)); 1303e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1304e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1305e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1306e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1307e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1308e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 1309e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1310cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1311e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1312cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1313e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1314e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1315cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1316e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1317b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelRed(image,p)); 1318b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelGreen(image,p)); 1319b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelBlue(image,p)); 1320e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=0; 1321e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1322e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1323e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1324e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1325e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 132614d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 1327cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1328e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1329cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1330e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1331e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1332cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1333e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1334e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 1335e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 1336e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 133714d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 1338e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1339e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=0; 1340e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 1341e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1342e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 1343e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 1344e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1345b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q=ScaleQuantumToLongLong(GetPixelRed(image,p)); 1346e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1347e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1348e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 1349e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 1350e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1351b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q=ScaleQuantumToLongLong(GetPixelGreen(image,p)); 1352e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1353e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1354e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 1355e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 1356e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1357b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q=ScaleQuantumToLongLong(GetPixelBlue(image,p)); 1358e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1359e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1360e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 1361e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1362b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q=ScaleQuantumToLongLong(GetPixelAlpha(image,p)); 1363e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1364e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1365e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 1366e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1367b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q=ScaleQuantumToLongLong(GetPixelAlpha(image,p)); 1368e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1369e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1370e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 1371e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1372e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->colorspace == CMYKColorspace) 1373b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q=ScaleQuantumToLongLong(GetPixelBlack(image,p)); 1374e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1375e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1376e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 1377e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1378b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q=ScaleQuantumToLongLong(GetPixelIntensity(image,p)); 1379e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1380e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1381e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 1382e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1383e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1384e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q++; 1385e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1386e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1387e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1388e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1389e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 1390e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 13912dc655d16d7bc2a04312bc00ad27139d7543b10ccristystatic void ExportQuantumPixel(Image *image,const RectangleInfo *roi, 139246f4be29828ab7588745336d46ab11611c847933cristy const char *restrict map,const QuantumType *quantum_map,void *pixels, 139346f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 1394e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 1395e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const Quantum 1396e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *restrict p; 1397e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1398e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register Quantum 13993fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy *restrict q; 1400e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1401e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 1402e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 1403e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 140414d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 140514d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 140614d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 1407e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 1408e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 1409e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1410e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q=(Quantum *) pixels; 1411e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 1412e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1413cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1414e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1415cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1416e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1417e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1418cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1419e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1420e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelBlue(image,p); 1421e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelGreen(image,p); 1422e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelRed(image,p); 1423e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1424e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1425e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1426e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1427e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1428e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 1429e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1430cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1431e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1432cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1433e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1434e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1435cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1436e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1437e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelBlue(image,p); 1438e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelGreen(image,p); 1439e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelRed(image,p); 1440e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(Quantum) (GetPixelAlpha(image,p)); 1441e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1442e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1443e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1444e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1445e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1446e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 1447e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1448cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1449e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1450cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1451e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1452e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1453cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1454e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1455e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelBlue(image,p); 1456e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelGreen(image,p); 1457e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelRed(image,p); 1458e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(Quantum) 0; 1459e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1460e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1461e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1462e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1463e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1464e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 1465e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 14662dc655d16d7bc2a04312bc00ad27139d7543b10ccristy (void) SetImageColorspace(image,GRAYColorspace,exception); 1467cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1468e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1469cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1470e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1471e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1472cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1473e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1474e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelIntensity(image,p); 1475e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1476e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1477e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1478e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1479e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1480e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 1481e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1482cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1483e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1484cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1485e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1486e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1487cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1488e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1489e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelRed(image,p); 1490e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelGreen(image,p); 1491e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelBlue(image,p); 1492e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1493e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1494e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1495e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1496e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1497e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 1498e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1499cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1500e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1501cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1502e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1503e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1504cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1505e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1506e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelRed(image,p); 1507e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelGreen(image,p); 1508e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelBlue(image,p); 1509e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(Quantum) (GetPixelAlpha(image,p)); 1510e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1511e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1512e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1513e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1514e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1515e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 1516e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1517cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1518e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1519cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1520e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1521e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1522cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1523e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1524e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelRed(image,p); 1525e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelGreen(image,p); 1526e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelBlue(image,p); 1527e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(Quantum) 0; 1528e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1529e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1530e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1531e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1532e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 153314d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 1534cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1535e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1536cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1537e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1538e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1539cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1540e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1541e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 1542e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 1543e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 154414d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 1545e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1546e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(Quantum) 0; 1547e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 1548e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1549e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 1550e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 1551e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1552e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=GetPixelRed(image,p); 1553e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1554e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1555e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 1556e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 1557e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1558e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=GetPixelGreen(image,p); 1559e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1560e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1561e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 1562e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 1563e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1564e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=GetPixelBlue(image,p); 1565e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1566e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1567e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 1568e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1569e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=GetPixelAlpha(image,p); 1570e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1571e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1572e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 1573e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1574e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=GetPixelAlpha(image,p); 1575e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1576e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1577e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 1578e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1579e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->colorspace == CMYKColorspace) 1580e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=GetPixelBlack(image,p); 1581e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1582e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1583e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 1584e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1585e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(GetPixelIntensity(image,p)); 1586e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1587e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1588e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 1589e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1590e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(Quantum) 0; 1591e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1592e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1593e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1594e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q++; 1595e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1596e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1597e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1598e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1599e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 1600e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 16012dc655d16d7bc2a04312bc00ad27139d7543b10ccristystatic void ExportShortPixel(Image *image,const RectangleInfo *roi, 160246f4be29828ab7588745336d46ab11611c847933cristy const char *restrict map,const QuantumType *quantum_map,void *pixels, 160346f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 1604e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 1605e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const Quantum 1606e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *restrict p; 1607e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1608e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 1609e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 1610e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1611e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register unsigned short 16123fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy *restrict q; 1613e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 161414d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 161514d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 161614d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 161714d712974a2c2cd2aebf8db11c7ca686bb67596fcristy ssize_t 161814d712974a2c2cd2aebf8db11c7ca686bb67596fcristy y; 161914d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 1620e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q=(unsigned short *) pixels; 1621e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 1622e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1623cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1624e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1625cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1626e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1627e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1628cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1629e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1630e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelBlue(image,p)); 1631e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelGreen(image,p)); 1632e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelRed(image,p)); 1633e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1634e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1635e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1636e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1637e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1638e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 1639e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1640cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1641e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1642cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1643e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1644e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1645cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1646e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1647e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelBlue(image,p)); 1648e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelGreen(image,p)); 1649e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelRed(image,p)); 1650e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelAlpha(image,p)); 1651e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1652e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1653e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1654e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1655e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1656e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 1657e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1658cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1659e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1660cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1661e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1662e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1663cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1664e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1665e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelBlue(image,p)); 1666e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelGreen(image,p)); 1667e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelRed(image,p)); 1668e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=0; 1669e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1670e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1671e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1672e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1673e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1674e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 1675e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 16762dc655d16d7bc2a04312bc00ad27139d7543b10ccristy (void) SetImageColorspace(image,GRAYColorspace,exception); 1677cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1678e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1679cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1680e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1681e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1682cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1683e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1684e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelIntensity(image,p)); 1685e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1686e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1687e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1688e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1689e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1690e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 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 p+=GetPixelChannels(image); 1703e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1704e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1705e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1706e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1707e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 1708e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1709cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1710e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1711cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1712e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1713e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1714cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1715e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1716e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelRed(image,p)); 1717e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelGreen(image,p)); 1718e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelBlue(image,p)); 1719e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelAlpha(image,p)); 1720e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1721e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1722e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1723e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1724e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1725e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 1726e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1727cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1728e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1729cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1730e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1731e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1732cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1733e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1734e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelRed(image,p)); 1735e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelGreen(image,p)); 1736e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelBlue(image,p)); 1737e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=0; 1738e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1739e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1740e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1741e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1742e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 174314d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 1744cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1745e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1746cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1747e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1748e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1749cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1750e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1751e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 1752e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 1753e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 175414d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 1755e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1756e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=0; 1757e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 1758e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1759e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 1760e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 1761e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1762e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToShort(GetPixelRed(image,p)); 1763e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1764e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1765e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 1766e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 1767e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1768e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToShort(GetPixelGreen(image,p)); 1769e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1770e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1771e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 1772e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 1773e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1774e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToShort(GetPixelBlue(image,p)); 1775e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1776e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1777e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 1778e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1779e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToShort(GetPixelAlpha(image,p)); 1780e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1781e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1782e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 1783e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1784e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToShort(GetPixelAlpha(image,p)); 1785e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1786e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1787e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 1788e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1789e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->colorspace == CMYKColorspace) 1790e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToShort(GetPixelBlack(image,p)); 1791e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1792e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1793e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 1794e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1795e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToShort(GetPixelIntensity(image,p)); 1796e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1797e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1798e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 1799e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1800e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1801e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q++; 1802e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1803e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1804e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1805e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1806e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 1807e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 18082dc655d16d7bc2a04312bc00ad27139d7543b10ccristyMagickExport MagickBooleanType ExportImagePixels(Image *image, 1809cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy const ssize_t x,const ssize_t y,const size_t width,const size_t height, 1810cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy const char *map,const StorageType type,void *pixels,ExceptionInfo *exception) 1811e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 1812e5370944fabb7afa477ab1325d400731b1e5d5e8cristy QuantumType 1813e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *quantum_map; 1814e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1815cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy RectangleInfo 1816cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy roi; 1817cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy 1818e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 1819e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 1820e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 182114d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 182214d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 182314d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 1824e5370944fabb7afa477ab1325d400731b1e5d5e8cristy assert(image != (Image *) NULL); 1825e5370944fabb7afa477ab1325d400731b1e5d5e8cristy assert(image->signature == MagickSignature); 1826e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->debug != MagickFalse) 1827e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename); 182814d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 182914d712974a2c2cd2aebf8db11c7ca686bb67596fcristy quantum_map=(QuantumType *) AcquireQuantumMemory(length,sizeof(*quantum_map)); 1830e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (quantum_map == (QuantumType *) NULL) 1831e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1832e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) ThrowMagickException(exception,GetMagickModule(), 1833e5b39652d8d21bc3940d83b8d6088d4070a8a34aanthony ResourceLimitError,"MemoryAllocationFailed","'%s'",image->filename); 1834e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return(MagickFalse); 1835e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 183614d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 1837e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1838e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (map[i]) 1839e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1840e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'A': 1841e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'a': 1842e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1843e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=AlphaQuantum; 1844e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1845e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1846e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'B': 1847e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'b': 1848e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1849e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=BlueQuantum; 1850e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1851e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1852e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'C': 1853e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'c': 1854e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1855e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=CyanQuantum; 1856e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->colorspace == CMYKColorspace) 1857e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1858e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map); 1859e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) ThrowMagickException(exception,GetMagickModule(),ImageError, 1860e5b39652d8d21bc3940d83b8d6088d4070a8a34aanthony "ColorSeparatedImageRequired","'%s'",map); 1861e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return(MagickFalse); 1862e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1863e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'g': 1864e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'G': 1865e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1866e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=GreenQuantum; 1867e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1868e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1869e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'I': 1870e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'i': 1871e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1872e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=IndexQuantum; 1873e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1874e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1875e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'K': 1876e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'k': 1877e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1878e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=BlackQuantum; 1879e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->colorspace == CMYKColorspace) 1880e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1881e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map); 1882e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) ThrowMagickException(exception,GetMagickModule(),ImageError, 1883e5b39652d8d21bc3940d83b8d6088d4070a8a34aanthony "ColorSeparatedImageRequired","'%s'",map); 1884e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return(MagickFalse); 1885e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1886e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'M': 1887e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'm': 1888e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1889e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=MagentaQuantum; 1890e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->colorspace == CMYKColorspace) 1891e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1892e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map); 1893e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) ThrowMagickException(exception,GetMagickModule(),ImageError, 1894e5b39652d8d21bc3940d83b8d6088d4070a8a34aanthony "ColorSeparatedImageRequired","'%s'",map); 1895e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return(MagickFalse); 1896e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1897e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'o': 1898e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'O': 1899e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1900e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=OpacityQuantum; 1901e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1902e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1903e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'P': 1904e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'p': 1905e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1906e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=UndefinedQuantum; 1907e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1908e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1909e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'R': 1910e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'r': 1911e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1912e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=RedQuantum; 1913e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1914e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1915e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'Y': 1916e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'y': 1917e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1918e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=YellowQuantum; 1919e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->colorspace == CMYKColorspace) 1920e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1921e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map); 1922e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) ThrowMagickException(exception,GetMagickModule(),ImageError, 1923e5b39652d8d21bc3940d83b8d6088d4070a8a34aanthony "ColorSeparatedImageRequired","'%s'",map); 1924e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return(MagickFalse); 1925e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1926e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 1927e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1928e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map); 1929e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) ThrowMagickException(exception,GetMagickModule(),OptionError, 1930e5b39652d8d21bc3940d83b8d6088d4070a8a34aanthony "UnrecognizedPixelMap","'%s'",map); 1931e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return(MagickFalse); 1932e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1933e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1934e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1935cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy roi.width=width; 1936cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy roi.height=height; 1937cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy roi.x=x; 1938cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy roi.y=y; 1939e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (type) 1940e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1941e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CharPixel: 1942e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1943cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ExportCharPixel(image,&roi,map,quantum_map,pixels,exception); 1944e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1945e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1946e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case DoublePixel: 1947e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1948cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ExportDoublePixel(image,&roi,map,quantum_map,pixels,exception); 1949e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1950e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1951e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case FloatPixel: 1952e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1953cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ExportFloatPixel(image,&roi,map,quantum_map,pixels,exception); 1954e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1955e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 19566c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy case LongPixel: 1957e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1958cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ExportLongPixel(image,&roi,map,quantum_map,pixels,exception); 1959e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1960e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 19616c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy case LongLongPixel: 1962e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1963cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ExportLongLongPixel(image,&roi,map,quantum_map,pixels,exception); 1964e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1965e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1966e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case QuantumPixel: 1967e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1968cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ExportQuantumPixel(image,&roi,map,quantum_map,pixels,exception); 1969e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1970e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1971e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case ShortPixel: 1972e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1973cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ExportShortPixel(image,&roi,map,quantum_map,pixels,exception); 1974e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1975e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1976e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 1977e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1978e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map); 1979e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) ThrowMagickException(exception,GetMagickModule(),OptionError, 1980e5b39652d8d21bc3940d83b8d6088d4070a8a34aanthony "UnrecognizedPixelMap","'%s'",map); 19813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 19823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 19833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1984e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map); 1985e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return(MagickTrue); 1986e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 1987e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1988e5370944fabb7afa477ab1325d400731b1e5d5e8cristy/* 1989e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1990e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 1991e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 1992e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 1993e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% G e t P i x e l I n f o % 1994e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 1995e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 1996e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 1997e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1998e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 1999e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% GetPixelInfo() initializes the PixelInfo structure. 2000e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2001e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% The format of the GetPixelInfo method is: 2002e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2003e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% GetPixelInfo(const Image *image,PixelInfo *pixel) 2004e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2005e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% A description of each parameter follows: 2006e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2007e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% o image: the image. 2008e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2009e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% o pixel: Specifies a pointer to a PixelInfo structure. 2010e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2011e5370944fabb7afa477ab1325d400731b1e5d5e8cristy*/ 2012e5370944fabb7afa477ab1325d400731b1e5d5e8cristyMagickExport void GetPixelInfo(const Image *image,PixelInfo *pixel) 2013e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 2014e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->storage_class=DirectClass; 20157020ae6594690c03a4f73784fd41a7131a5b22c6cristy pixel->colorspace=sRGBColorspace; 2016e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->matte=MagickFalse; 2017e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->fuzz=0.0; 2018e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->depth=MAGICKCORE_QUANTUM_DEPTH; 2019e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->red=0.0; 2020e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->green=0.0; 2021e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->blue=0.0; 2022e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->black=0.0; 2023e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->alpha=(MagickRealType) OpaqueAlpha; 2024e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->index=0.0; 2025e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image == (const Image *) NULL) 2026e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2027e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->storage_class=image->storage_class; 2028e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->colorspace=image->colorspace; 2029e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->matte=image->matte; 2030e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->depth=image->depth; 2031e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->fuzz=image->fuzz; 2032e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 2033e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2034e5370944fabb7afa477ab1325d400731b1e5d5e8cristy/* 2035e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2036e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 2037e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 2038e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 2039e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% I m p o r t I m a g e P i x e l s % 2040e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 2041e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 2042e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 2043e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2044e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2045e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% ImportImagePixels() accepts pixel data and stores in the image at the 2046e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% location you specify. The method returns MagickTrue on success otherwise 2047e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% MagickFalse if an error is encountered. The pixel data can be either char, 2048b5a45a37a6faa8a3725c814b51a1a86daa4ff21fcristy% Quantum, short int, unsigned int, unsigned long long, float, or double in 2049b5a45a37a6faa8a3725c814b51a1a86daa4ff21fcristy% the order specified by map. 2050e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2051e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% Suppose your want to upload the first scanline of a 640x480 image from 2052e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% character data in red-green-blue order: 2053e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2054e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% ImportImagePixels(image,0,0,640,1,"RGB",CharPixel,pixels); 2055e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2056e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% The format of the ImportImagePixels method is: 2057e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2058cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy% MagickBooleanType ImportImagePixels(Image *image,const ssize_t x, 2059cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy% const ssize_t y,const size_t width,const size_t height, 2060cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy% const char *map,const StorageType type,const void *pixels, 2061cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy% ExceptionInfo *exception) 2062e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2063e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% A description of each parameter follows: 2064e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2065e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% o image: the image. 2066e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2067cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy% o x,y,width,height: These values define the perimeter 2068e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% of a region of pixels you want to define. 2069e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2070e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% o map: This string reflects the expected ordering of the pixel array. 2071e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% It can be any combination or order of R = red, G = green, B = blue, 2072e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% A = alpha (0 is transparent), O = opacity (0 is opaque), C = cyan, 2073e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% Y = yellow, M = magenta, K = black, I = intensity (for grayscale), 2074e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% P = pad. 2075e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2076e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% o type: Define the data type of the pixels. Float and double types are 2077e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% normalized to [0..1] otherwise [0..QuantumRange]. Choose from these 20786c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy% types: CharPixel (char *), DoublePixel (double *), FloatPixel (float *), 2079ff6834e270b99c2747ad5b2f4edeecf862aaf825cristy% LongPixel (unsigned int *), LongLongPixel (unsigned long long *), 20806c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy% QuantumPixel (Quantum *), or ShortPixel (unsigned short *). 2081e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2082e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% o pixels: This array of values contain the pixel components as defined by 2083e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% map and type. You must preallocate this array where the expected 2084e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% length varies depending on the values of width, height, map, and type. 2085e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2086e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% o exception: return any errors or warnings in this structure. 2087e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2088e5370944fabb7afa477ab1325d400731b1e5d5e8cristy*/ 2089e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2090cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ImportCharPixel(Image *image,const RectangleInfo *roi, 209146f4be29828ab7588745336d46ab11611c847933cristy const char *restrict map,const QuantumType *quantum_map,const void *pixels, 209246f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 2093e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 2094e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const unsigned char 2095e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *restrict p; 2096e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2097e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register Quantum 20983fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy *restrict q; 2099e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2100e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 2101e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 2102e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 210314d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 210414d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 210514d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 2106e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 2107e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 2108e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2109e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p=(const unsigned char *) pixels; 2110e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 2111e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2112cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2113e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2114cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2115e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2116e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2117cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2118e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2119e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleCharToQuantum(*p++),q); 2120e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleCharToQuantum(*p++),q); 2121e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleCharToQuantum(*p++),q); 2122e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2123e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2124e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2125e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2126e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2127e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2128e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2129e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 2130e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2131cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2132e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2133cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2134e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2135e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2136cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2137e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2138e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleCharToQuantum(*p++),q); 2139e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleCharToQuantum(*p++),q); 2140e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleCharToQuantum(*p++),q); 2141e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleCharToQuantum(*p++),q); 2142e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2143e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2144e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2145e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2146e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2147e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2148e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2149e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRO") == 0) 2150e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2151cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2152e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2153cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2154e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2155e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2156cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2157e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2158e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleCharToQuantum(*p++),q); 2159e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleCharToQuantum(*p++),q); 2160e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleCharToQuantum(*p++),q); 2161e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleCharToQuantum(*p++),q); 2162e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2163e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2164e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2165e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2166e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2167e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2168e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2169e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 2170e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2171cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2172e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2173cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2174e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2175e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2176cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2177e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2178e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleCharToQuantum(*p++),q); 2179e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleCharToQuantum(*p++),q); 2180e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleCharToQuantum(*p++),q); 2181e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2182e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2183e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2184e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2185e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2186e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2187e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2188e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2189e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 2190e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 21912dc655d16d7bc2a04312bc00ad27139d7543b10ccristy (void) SetImageColorspace(image,GRAYColorspace,exception); 2192cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2193e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2194cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2195e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2196e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2197cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2198e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2199e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGray(image,ScaleCharToQuantum(*p++),q); 2200e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2201e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2202e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2203e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2204e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2205e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2206e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2207e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 2208e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2209cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2210e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2211cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2212e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2213e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2214cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2215e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2216e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleCharToQuantum(*p++),q); 2217e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleCharToQuantum(*p++),q); 2218e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleCharToQuantum(*p++),q); 2219e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2220e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2221e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2222e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2223e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2224e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2225e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2226e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 2227e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2228cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2229e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2230cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2231e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2232e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2233cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2234e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2235e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleCharToQuantum(*p++),q); 2236e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleCharToQuantum(*p++),q); 2237e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleCharToQuantum(*p++),q); 2238e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleCharToQuantum(*p++),q); 2239e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2240e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2241e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2242e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2243e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2244e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2245e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2246e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBO") == 0) 2247e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2248cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2249e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2250cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2251e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2252e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2253cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2254e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2255e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleCharToQuantum(*p++),q); 2256e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleCharToQuantum(*p++),q); 2257e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleCharToQuantum(*p++),q); 2258e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleCharToQuantum(*p++),q); 2259e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2260e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2261e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2262e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2263e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2264e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2265e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2266e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 2267e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2268cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2269e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2270cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2271e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2272e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2273cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2274e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2275e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleCharToQuantum(*p++),q); 2276e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleCharToQuantum(*p++),q); 2277e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleCharToQuantum(*p++),q); 2278e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2279e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2280e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2281e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2282e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2283e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2284e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2285e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 228614d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 2287cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2288e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2289cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2290e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2291e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2292cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2293e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2294e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 2295e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 2296e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 229714d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 2298e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2299e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 2300e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2301e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 2302e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 2303e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2304e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleCharToQuantum(*p),q); 2305e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2306e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2307e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 2308e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 2309e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2310e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleCharToQuantum(*p),q); 2311e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2312e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2313e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 2314e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 2315e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2316e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleCharToQuantum(*p),q); 2317e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2318e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2319e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 2320e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2321e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleCharToQuantum(*p),q); 2322e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2323e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2324e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 2325e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2326e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleCharToQuantum(*p),q); 2327e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2328e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2329e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 2330e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2331e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlack(image,ScaleCharToQuantum(*p),q); 2332e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2333e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2334e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 2335e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2336e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGray(image,ScaleCharToQuantum(*p),q); 2337e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2338e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2339e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 2340e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2341e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2342e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2343e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2344e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2345e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2346e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2347e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2348e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2349e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 2350e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2351cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ImportDoublePixel(Image *image,const RectangleInfo *roi, 235246f4be29828ab7588745336d46ab11611c847933cristy const char *restrict map,const QuantumType *quantum_map,const void *pixels, 235346f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 2354e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 2355e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const double 2356e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *restrict p; 2357e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2358e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register Quantum 23593fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy *restrict q; 2360e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2361e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 2362e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 2363e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 236414d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 236514d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 236614d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 2367e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 2368e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 2369e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2370e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p=(const double *) pixels; 2371e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 2372e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2373cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2374e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2375cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2376e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2377e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2378cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2379e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2380e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange* 2381e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2382e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2383e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange* 2384e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2385e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2386e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange* 2387e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2388e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2389e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2390e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2391e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2392e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2393e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2394e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2395e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2396e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 2397e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2398cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2399e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2400cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2401e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2402e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2403cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2404e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2405e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange* 2406e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2407e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2408e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange* 2409e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2410e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2411e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange* 2412e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2413e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2414e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ClampToQuantum((MagickRealType) QuantumRange* 2415e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2416e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2417e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2418e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2419e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2420e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2421e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2422e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2423e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2424e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 2425e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2426cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2427e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2428cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2429e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2430e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2431cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2432e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2433e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange* 2434e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2435e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2436e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange* 2437e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2438e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2439e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange* 2440e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2441e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2442e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2443e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2444e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2445e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2446e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2447e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2448e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2449e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2450e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 2451e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 24522dc655d16d7bc2a04312bc00ad27139d7543b10ccristy (void) SetImageColorspace(image,GRAYColorspace,exception); 2453cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2454e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2455cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2456e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2457e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2458cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2459e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2460e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGray(image,ClampToQuantum((MagickRealType) QuantumRange* 2461e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2462e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2463e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2464e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2465e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2466e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2467e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2468e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2469e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2470e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 2471e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2472cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2473e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2474cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2475e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2476e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2477cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2478e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2479e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange* 2480e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2481e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2482e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange* 2483e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2484e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2485e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange* 2486e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2487e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2488e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2489e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2490e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2491e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2492e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2493e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2494e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2495e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 2496e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2497cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2498e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2499cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2500e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2501e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2502cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2503e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2504e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange* 2505e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2506e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2507e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange* 2508e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2509e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2510e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange* 2511e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2512e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2513e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ClampToQuantum((MagickRealType) QuantumRange* 2514e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2515e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2516e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2517e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2518e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2519e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2520e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2521e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2522e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2523e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 2524e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2525cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2526e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2527cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2528e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2529e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2530cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2531e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2532e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange* 2533e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2534e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2535e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange* 2536e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2537e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2538e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange* 2539e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2540e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2541e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2542e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2543e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2544e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2545e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2546e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2547e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 254814d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 2549cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2550e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2551cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2552e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2553e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2554cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2555e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2556e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 2557e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 2558e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 255914d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 2560e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2561e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 2562e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2563e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 2564e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 2565e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2566e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ClampToQuantum((MagickRealType) 2567e5370944fabb7afa477ab1325d400731b1e5d5e8cristy QuantumRange*(*p)),q); 2568e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2569e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2570e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 2571e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 2572e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2573e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ClampToQuantum((MagickRealType) 2574e5370944fabb7afa477ab1325d400731b1e5d5e8cristy QuantumRange*(*p)),q); 2575e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2576e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2577e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 2578e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 2579e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2580e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ClampToQuantum((MagickRealType) 2581e5370944fabb7afa477ab1325d400731b1e5d5e8cristy QuantumRange*(*p)),q); 2582e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2583e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2584e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 2585e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2586e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ClampToQuantum((MagickRealType) 2587e5370944fabb7afa477ab1325d400731b1e5d5e8cristy QuantumRange*(*p)),q); 2588e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2589e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2590e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 2591e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2592e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ClampToQuantum((MagickRealType) 2593e5370944fabb7afa477ab1325d400731b1e5d5e8cristy QuantumRange*(*p)),q); 2594e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2595e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2596e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 2597e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2598e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlack(image,ClampToQuantum((MagickRealType) 2599e5370944fabb7afa477ab1325d400731b1e5d5e8cristy QuantumRange*(*p)),q); 2600e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2601e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2602e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 2603e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2604e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGray(image,ClampToQuantum((MagickRealType) 2605e5370944fabb7afa477ab1325d400731b1e5d5e8cristy QuantumRange*(*p)),q); 2606e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2607e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2608e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 2609e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2610e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2611e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2612e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2613e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2614e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2615e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2616e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2617e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 26183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 2619e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2620cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ImportFloatPixel(Image *image,const RectangleInfo *roi, 262146f4be29828ab7588745336d46ab11611c847933cristy const char *restrict map,const QuantumType *quantum_map,const void *pixels, 262246f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 26233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 2624e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const float 2625e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *restrict p; 2626e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2627e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register Quantum 26283fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy *restrict q; 2629e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2630e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 2631e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 2632e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 263314d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 263414d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 263514d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 2636e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 2637e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 2638e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2639e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p=(const float *) pixels; 2640e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 2641e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2642cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2643e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2644cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2645e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2646e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2647cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2648e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2649e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange* 2650e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2651e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2652e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange* 2653e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2654e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2655e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange* 2656e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2657e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2658e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2659e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2660e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2661e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2662e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2663e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2664e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2665e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 2666e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2667cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2668e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2669cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2670e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2671e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2672cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2673e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2674e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange* 2675e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2676e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2677e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange* 2678e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2679e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2680e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange* 2681e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2682e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2683e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ClampToQuantum((MagickRealType) QuantumRange* 2684e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2685e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2686e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2687e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2688e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2689e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2690e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2691e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2692e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2693e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 2694e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2695cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2696e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2697cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2698e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2699e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2700cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2701e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2702e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange* 2703e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2704e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2705e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange* 2706e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2707e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2708e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange* 2709e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2710e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2711e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2712e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2713e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2714e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2715e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2716e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2717e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2718e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2719e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 2720e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 27212dc655d16d7bc2a04312bc00ad27139d7543b10ccristy (void) SetImageColorspace(image,GRAYColorspace,exception); 2722cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2723e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2724cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2725e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2726e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2727cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2728e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2729e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGray(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,"RGB") == 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 } 2764e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 2765e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2766cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2767e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2768cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2769e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2770e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2771cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2772e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2773e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ClampToQuantum((MagickRealType) 2774e5370944fabb7afa477ab1325d400731b1e5d5e8cristy QuantumRange*(*p)),q); 2775e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2776e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange* 2777e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2778e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2779e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange* 2780e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2781e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2782e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ClampToQuantum((MagickRealType) QuantumRange* 2783e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2784e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2785e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2786e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2787e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2788e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2789e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2790e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2791e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2792e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 2793e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2794cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2795e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2796cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2797e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2798e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2799cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2800e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2801e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange* 2802e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2803e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2804e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange* 2805e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2806e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2807e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange* 2808e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (*p)),q); 2809e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2810e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2811e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2812e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2813e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2814e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2815e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2816e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 281714d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 2818cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2819e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2820cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2821e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2822e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2823cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2824e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2825e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 2826e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 2827e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 282814d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 2829e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2830e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 2831e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2832e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 2833e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 2834e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2835e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ClampToQuantum((MagickRealType) 2836e5370944fabb7afa477ab1325d400731b1e5d5e8cristy QuantumRange*(*p)),q); 2837e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2838e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2839e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 2840e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 2841e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2842e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ClampToQuantum((MagickRealType) 2843e5370944fabb7afa477ab1325d400731b1e5d5e8cristy QuantumRange*(*p)),q); 2844e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2845e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2846e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 2847e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 2848e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2849e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ClampToQuantum((MagickRealType) 2850e5370944fabb7afa477ab1325d400731b1e5d5e8cristy QuantumRange*(*p)),q); 2851e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2852e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2853e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 2854e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2855e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ClampToQuantum((MagickRealType) 2856e5370944fabb7afa477ab1325d400731b1e5d5e8cristy QuantumRange*(*p)),q); 2857e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2858e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2859e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 2860e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2861e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ClampToQuantum((MagickRealType) 2862e5370944fabb7afa477ab1325d400731b1e5d5e8cristy QuantumRange*(*p)),q); 2863e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2864e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2865e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 2866e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2867e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlack(image,ClampToQuantum((MagickRealType) 2868e5370944fabb7afa477ab1325d400731b1e5d5e8cristy QuantumRange*(*p)),q); 2869e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2870e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2871e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 2872e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2873e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGray(image,ClampToQuantum((MagickRealType) 2874e5370944fabb7afa477ab1325d400731b1e5d5e8cristy QuantumRange*(*p)),q); 2875e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2876e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2877e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 2878e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2879e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2880e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2881e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2882e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2883e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2884e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2885e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2886e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2887e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 2888e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2889cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ImportLongPixel(Image *image,const RectangleInfo *roi, 289046f4be29828ab7588745336d46ab11611c847933cristy const char *restrict map,const QuantumType *quantum_map,const void *pixels, 289146f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 28923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 2893e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const unsigned int 2894e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *restrict p; 28953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 28964c08aed51c5899665ade97263692328eea4af106cristy register Quantum 28973fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy *restrict q; 28983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2899bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 29003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x; 29013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 290214d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 290314d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 290414d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 29059d314ff2c17a77996c05413c2013880387e50f0ecristy ssize_t 29069d314ff2c17a77996c05413c2013880387e50f0ecristy y; 29079d314ff2c17a77996c05413c2013880387e50f0ecristy 2908e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p=(const unsigned int *) pixels; 2909e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 29103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2911cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 29123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2913cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2914e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2915e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2916cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2917e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2918e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleLongToQuantum(*p++),q); 2919e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleLongToQuantum(*p++),q); 2920e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(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,"BGRA") == 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 SetPixelBlue(image,ScaleLongToQuantum(*p++),q); 2938e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleLongToQuantum(*p++),q); 2939e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleLongToQuantum(*p++),q); 2940e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleLongToQuantum(*p++),q); 2941e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2942e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2943e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2944e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 29453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2946e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2947e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2948e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 2949e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2950cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 29513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2952cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2953e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2954e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2955cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2956e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2957e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleLongToQuantum(*p++),q); 2958e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleLongToQuantum(*p++),q); 2959e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleLongToQuantum(*p++),q); 2960e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2961e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2962e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2963e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2964e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 29653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2966e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2967e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2968e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 2969e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 29702dc655d16d7bc2a04312bc00ad27139d7543b10ccristy (void) SetImageColorspace(image,GRAYColorspace,exception); 2971cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 29723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2973cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2974e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2975e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2976cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2977e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2978e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGray(image,ScaleLongToQuantum(*p++),q); 2979e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2980e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2981e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2982e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 29833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2984e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2985e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2986e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 2987e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2988cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 29893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2990cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2991e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2992e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2993cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2994e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2995e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleLongToQuantum(*p++),q); 2996e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleLongToQuantum(*p++),q); 2997e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleLongToQuantum(*p++),q); 2998e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2999e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3000e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3001e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 30023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3003e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3004e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3005e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 3006e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3007cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 30083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3009cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3010e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3011e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3012cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3013e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3014e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleLongToQuantum(*p++),q); 3015e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleLongToQuantum(*p++),q); 3016e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleLongToQuantum(*p++),q); 3017e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleLongToQuantum(*p++),q); 3018e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3019e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3020e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3021e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 30223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3023e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3024e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3025e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 3026e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3027cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 30283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3029cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3030e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3031e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3032cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3033e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3034e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleLongToQuantum(*p++),q); 3035e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleLongToQuantum(*p++),q); 3036e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleLongToQuantum(*p++),q); 3037e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3038e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3039e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3040e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3041e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 30423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3043e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3044e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 304514d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 3046cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3047e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3048cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3049e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3050e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3051cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3052e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3053e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 3054e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 3055e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 305614d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 30573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3058e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 3059e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3060e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 3061e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 3062e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3063e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleLongToQuantum(*p),q); 3064e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3065e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3066e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 3067e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 3068e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3069e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleLongToQuantum(*p),q); 3070e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3071e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3072e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 3073e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 3074e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3075e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleLongToQuantum(*p),q); 3076e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3077e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3078e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 3079e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3080e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleLongToQuantum(*p),q); 3081e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3082e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3083e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 3084e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3085e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleLongToQuantum(*p),q); 3086e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3087e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3088e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 3089e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3090e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlack(image,ScaleLongToQuantum(*p),q); 3091e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3092e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3093e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 3094e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3095e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGray(image,ScaleLongToQuantum(*p),q); 3096e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3097e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3098e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 3099e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3100e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3101e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3102e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3103e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3104e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3105e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3106e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3107e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3108e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 3109e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3110cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ImportLongLongPixel(Image *image,const RectangleInfo *roi, 311146f4be29828ab7588745336d46ab11611c847933cristy const char *restrict map,const QuantumType *quantum_map,const void *pixels, 311246f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 3113e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 3114b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy register const MagickSizeType 3115e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *restrict p; 3116e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3117e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register Quantum 31183fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy *restrict q; 3119e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3120e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 3121e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 3122e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 312314d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 312414d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 312514d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 3126e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 3127e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 3128e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3129b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy p=(const MagickSizeType *) pixels; 3130e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 3131e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3132cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3133e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3134cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3135e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3136e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3137cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3138e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3139b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelBlue(image,ScaleLongLongToQuantum(*p++),q); 3140b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelGreen(image,ScaleLongLongToQuantum(*p++),q); 3141b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelRed(image,ScaleLongLongToQuantum(*p++),q); 3142e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3143e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3144e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3145e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3146e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3147e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3148e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3149e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 3150e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3151cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3152e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3153cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3154e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3155e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3156cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3157e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3158b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelBlue(image,ScaleLongLongToQuantum(*p++),q); 3159b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelGreen(image,ScaleLongLongToQuantum(*p++),q); 3160b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelRed(image,ScaleLongLongToQuantum(*p++),q); 3161b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelAlpha(image,ScaleLongLongToQuantum(*p++),q); 3162e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3163e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3164e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3165e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3166e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3167e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3168e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3169e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 3170e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3171cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3172e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3173cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3174e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3175e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3176cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3177e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3178b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelBlue(image,ScaleLongLongToQuantum(*p++),q); 3179b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelGreen(image,ScaleLongLongToQuantum(*p++),q); 3180b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelRed(image,ScaleLongLongToQuantum(*p++),q); 3181e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3182e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3183e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3184e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3185e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 31863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3187e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3188e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3189e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 3190e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 31912dc655d16d7bc2a04312bc00ad27139d7543b10ccristy (void) SetImageColorspace(image,GRAYColorspace,exception); 3192cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 31933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3194cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3195e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3196e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3197cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3198e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3199b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelGray(image,ScaleLongLongToQuantum(*p++),q); 3200e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3201e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3202e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3203e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 32043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3205e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3206e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3207e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 3208e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3209cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 32103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3211cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3212e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3213e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3214cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3215e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3216b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelRed(image,ScaleLongLongToQuantum(*p++),q); 3217b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelGreen(image,ScaleLongLongToQuantum(*p++),q); 3218b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelBlue(image,ScaleLongLongToQuantum(*p++),q); 3219e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3220e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3221e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3222e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 32233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3224e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3225e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3226e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 3227e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3228cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 32293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3230cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3231e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3232e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3233cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3234e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3235b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelRed(image,ScaleLongLongToQuantum(*p++),q); 3236b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelGreen(image,ScaleLongLongToQuantum(*p++),q); 3237b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelBlue(image,ScaleLongLongToQuantum(*p++),q); 3238b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelAlpha(image,ScaleLongLongToQuantum(*p++),q); 3239e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3240e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3241e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3242e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 32433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3244e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3245e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3246e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 3247e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3248cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 32493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3250cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3251e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3252e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3253cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3254e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3255b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelRed(image,ScaleLongLongToQuantum(*p++),q); 3256b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelGreen(image,ScaleLongLongToQuantum(*p++),q); 3257b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelBlue(image,ScaleLongLongToQuantum(*p++),q); 3258e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3259e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3260e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3261e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3262e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 32633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3264e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 32653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 326614d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 3267cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 32683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3269cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3270e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3271e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3272cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 32733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3274e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 3275e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 32763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 327714d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 3278e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3279e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 32803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3281e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 3282e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 32833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3284b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelRed(image,ScaleLongLongToQuantum(*p),q); 3285e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 32863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3287e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 3288e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 32893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3290b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelGreen(image,ScaleLongLongToQuantum(*p),q); 3291e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 32923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3293e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 3294e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 32953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3296b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelBlue(image,ScaleLongLongToQuantum(*p),q); 3297e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 32983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3299e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 33003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3301b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelAlpha(image,ScaleLongLongToQuantum(*p),q); 3302e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 33033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3304e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 33053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3306b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelAlpha(image,ScaleLongLongToQuantum(*p),q); 3307e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 33083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3309e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 33103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3311b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelBlack(image,ScaleLongLongToQuantum(*p),q); 3312e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 33133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3314e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 33153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3316b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelGray(image,ScaleLongLongToQuantum(*p),q); 3317e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 33183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3319e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 3320e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 33213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3322e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3323e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3324e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3325e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3326e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3327e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3328e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3329e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 3330e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3331cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ImportQuantumPixel(Image *image,const RectangleInfo *roi, 333246f4be29828ab7588745336d46ab11611c847933cristy const char *restrict map,const QuantumType *quantum_map,const void *pixels, 333346f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 3334e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 3335e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const Quantum 3336e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *restrict p; 3337e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3338e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register Quantum 33393fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy *restrict q; 3340e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3341e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 3342e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 3343e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 334414d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 334514d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 334614d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 3347e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 3348e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 3349e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3350e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p=(const Quantum *) pixels; 3351e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 3352e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3353cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3354e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3355cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3356e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 33573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3358cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 33593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3360e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,*p++,q); 3361e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,*p++,q); 3362e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,*p++,q); 3363e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3364e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3365e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3366e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3367e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3368e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3369e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3370e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 3371e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3372cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3373e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3374cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3375e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 33763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3377cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3378e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3379e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,*p++,q); 3380e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,*p++,q); 3381e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,*p++,q); 3382e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,*p++,q); 3383e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 33843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3385e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3386e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3387e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3388e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3389e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3390e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 3391e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3392cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 33933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3394cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 33954c08aed51c5899665ade97263692328eea4af106cristy if (q == (Quantum *) NULL) 33963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3397cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 33983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3399e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,*p++,q); 3400e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,*p++,q); 3401e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,*p++,q); 3402e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3403ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(image); 34043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 34053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 34063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 34073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3408e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 34093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3410e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 34113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 34122dc655d16d7bc2a04312bc00ad27139d7543b10ccristy (void) SetImageColorspace(image,GRAYColorspace,exception); 3413cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3414e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3415cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3416e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 34173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3418cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3419e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3420e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGray(image,*p++,q); 3421e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 34223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3423e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3424e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3425e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3426e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3427e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3428e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 3429e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3430cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 34313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3432cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 34334c08aed51c5899665ade97263692328eea4af106cristy if (q == (Quantum *) NULL) 34343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3435cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 34363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3437e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,*p++,q); 3438e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,*p++,q); 3439e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,*p++,q); 3440ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(image); 34413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 34423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 34433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 34443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3445e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 34463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3447e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 34483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3449cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3450e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3451cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3452e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 34533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3454cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3455e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3456e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,*p++,q); 3457e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,*p++,q); 3458e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,*p++,q); 3459e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,*p++,q); 3460e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 34613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3462e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3463e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3464e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3465e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3466e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3467e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 3468e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3469cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 34703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3471cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 34724c08aed51c5899665ade97263692328eea4af106cristy if (q == (Quantum *) NULL) 34733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3474cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 34753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3476e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,*p++,q); 3477e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,*p++,q); 3478e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,*p++,q); 3479e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3480ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(image); 34813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 34823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 34833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 34843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3485e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 34863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 348714d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 3488cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3489e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3490cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3491e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3492e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3493cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 34943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3495e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 3496e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 34973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 349814d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 3499e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3500e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 35013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3502e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 3503e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 35043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3505e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,*p,q); 3506e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 35073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3508e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 3509e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 35103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3511e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,*p,q); 3512e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 35133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3514e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 3515e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 35163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3517e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,*p,q); 3518e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 35193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3520e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 35213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3522e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,*p,q); 3523e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 35243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3525e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 35263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3527e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,*p,q); 3528e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 35293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3530e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 35313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3532e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlack(image,*p,q); 3533e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 35343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3535e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 35363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3537e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGray(image,*p,q); 3538e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 35393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3540e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 3541e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 35423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3543e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3544e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3545e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3546e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3547e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3548e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3549e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3550e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 3551e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3552cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ImportShortPixel(Image *image,const RectangleInfo *roi, 355346f4be29828ab7588745336d46ab11611c847933cristy const char *restrict map,const QuantumType *quantum_map,const void *pixels, 355446f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 3555e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 3556e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const unsigned short 3557e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *restrict p; 3558e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3559e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register Quantum 35603fe1145f1b441b8addc92dfbe86c80d6999b2c76cristy *restrict q; 3561e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3562e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 3563e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 3564e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 356514d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 356614d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 356714d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 3568e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 3569e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 3570e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3571e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p=(const unsigned short *) pixels; 3572e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 3573e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3574cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 35753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3576cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 35774c08aed51c5899665ade97263692328eea4af106cristy if (q == (Quantum *) NULL) 35783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3579cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 35803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3581e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleShortToQuantum(*p++),q); 3582e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleShortToQuantum(*p++),q); 3583e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleShortToQuantum(*p++),q); 3584ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(image); 35853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 35863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 35873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 35883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3589e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 35903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3591e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 35923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3593cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3594e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3595cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3596e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 35973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3598cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 35993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3600e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleShortToQuantum(*p++),q); 3601e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleShortToQuantum(*p++),q); 3602e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleShortToQuantum(*p++),q); 3603e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleShortToQuantum(*p++),q); 3604e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 36053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3606e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 36073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3608e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3609e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3610e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3611e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 3612e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3613cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 36143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3615cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 36164c08aed51c5899665ade97263692328eea4af106cristy if (q == (Quantum *) NULL) 36173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3618cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 36193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3620e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleShortToQuantum(*p++),q); 3621e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleShortToQuantum(*p++),q); 3622e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleShortToQuantum(*p++),q); 3623e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3624ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(image); 36253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 36263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 36273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 36283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3629e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 36303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3631e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 36323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 36332dc655d16d7bc2a04312bc00ad27139d7543b10ccristy (void) SetImageColorspace(image,GRAYColorspace,exception); 3634cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3635e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3636cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3637e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 36383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3639cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 36403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3641e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGray(image,ScaleShortToQuantum(*p++),q); 3642e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 36433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3644e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 36453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3646e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3647e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3648e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3649e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 3650e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3651cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3652e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3653cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3654e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 36553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3656cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 36573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3658e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleShortToQuantum(*p++),q); 3659e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleShortToQuantum(*p++),q); 3660e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleShortToQuantum(*p++),q); 3661e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 36623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3663e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 36643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3665e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3666e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3667e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3668e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 3669e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3670cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3671e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3672cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3673e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 36743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3675cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3676e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3677e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleShortToQuantum(*p++),q); 3678e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleShortToQuantum(*p++),q); 3679e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleShortToQuantum(*p++),q); 3680e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleShortToQuantum(*p++),q); 3681e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 36823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3683e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3684e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3685e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3686e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3687e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3688e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 3689e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3690cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 36913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3692cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 36934c08aed51c5899665ade97263692328eea4af106cristy if (q == (Quantum *) NULL) 36943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3695cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 36963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3697e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleShortToQuantum(*p++),q); 3698e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleShortToQuantum(*p++),q); 3699e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleShortToQuantum(*p++),q); 3700e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3701ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(image); 37023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 37033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 37043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 37053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3706e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 37073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 370814d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 3709cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3710e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3711cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3712e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3713e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3714cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 37153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3716e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 3717e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 37183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 371914d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 3720e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3721e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 37223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3723e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 3724e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 37253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3726e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleShortToQuantum(*p),q); 3727e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 37283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3729e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 3730e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 37313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3732e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleShortToQuantum(*p),q); 3733e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 37343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3735e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 3736e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 37373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3738e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleShortToQuantum(*p),q); 3739e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 37403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3741e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 37423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3743e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleShortToQuantum(*p),q); 3744e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 37453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3746e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 37473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3748e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleShortToQuantum(*p),q); 3749e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 37503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3751e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 37523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3753e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlack(image,ScaleShortToQuantum(*p),q); 3754e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 37553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3756e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 37573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3758e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGray(image,ScaleShortToQuantum(*p),q); 3759e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 37603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3761e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 3762e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 37633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3764e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3765e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3766e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3767e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3768e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3769e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3770e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3771e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 3772e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3773cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristyMagickExport MagickBooleanType ImportImagePixels(Image *image,const ssize_t x, 3774cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy const ssize_t y,const size_t width,const size_t height,const char *map, 3775cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy const StorageType type,const void *pixels,ExceptionInfo *exception) 3776e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 3777e5370944fabb7afa477ab1325d400731b1e5d5e8cristy QuantumType 3778e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *quantum_map; 3779e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3780cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy RectangleInfo 3781cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy roi; 3782cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy 3783e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 3784e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 3785e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 378614d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 378714d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 378814d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 3789e5370944fabb7afa477ab1325d400731b1e5d5e8cristy /* 3790e5370944fabb7afa477ab1325d400731b1e5d5e8cristy Allocate image structure. 3791e5370944fabb7afa477ab1325d400731b1e5d5e8cristy */ 3792e5370944fabb7afa477ab1325d400731b1e5d5e8cristy assert(image != (Image *) NULL); 3793e5370944fabb7afa477ab1325d400731b1e5d5e8cristy assert(image->signature == MagickSignature); 3794e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->debug != MagickFalse) 3795e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename); 379614d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 379714d712974a2c2cd2aebf8db11c7ca686bb67596fcristy quantum_map=(QuantumType *) AcquireQuantumMemory(length,sizeof(*quantum_map)); 3798e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (quantum_map == (QuantumType *) NULL) 3799e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ThrowBinaryException(ResourceLimitError,"MemoryAllocationFailed", 3800e5370944fabb7afa477ab1325d400731b1e5d5e8cristy image->filename); 380114d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 3802e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3803e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (map[i]) 3804e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3805e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'a': 3806e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'A': 38073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3808e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=AlphaQuantum; 3809e5370944fabb7afa477ab1325d400731b1e5d5e8cristy image->matte=MagickTrue; 3810e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3811e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3812e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'B': 3813e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'b': 3814e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3815e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=BlueQuantum; 3816e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3817e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3818e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'C': 3819e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'c': 3820e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3821e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=CyanQuantum; 3822e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) SetImageColorspace(image,CMYKColorspace,exception); 3823e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3824e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3825e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'g': 3826e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'G': 3827e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3828e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=GreenQuantum; 3829e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3830e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3831e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'K': 3832e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'k': 3833e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3834e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=BlackQuantum; 3835e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) SetImageColorspace(image,CMYKColorspace,exception); 3836e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3837e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3838e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'I': 3839e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'i': 3840e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3841e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=IndexQuantum; 3842e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3843e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3844e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'm': 3845e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'M': 3846e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3847e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=MagentaQuantum; 3848e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) SetImageColorspace(image,CMYKColorspace,exception); 3849e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3850e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3851e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'O': 3852e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'o': 3853e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3854e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=OpacityQuantum; 3855e5370944fabb7afa477ab1325d400731b1e5d5e8cristy image->matte=MagickTrue; 3856e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3857e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3858e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'P': 3859e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'p': 3860e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3861e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=UndefinedQuantum; 3862e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3863e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3864e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'R': 3865e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'r': 3866e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3867e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=RedQuantum; 3868e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 38693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3870e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'Y': 3871e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'y': 3872e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3873e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=YellowQuantum; 3874e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) SetImageColorspace(image,CMYKColorspace,exception); 3875e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3876e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3877e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 3878e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3879e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map); 3880e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) ThrowMagickException(exception,GetMagickModule(),OptionError, 3881e5b39652d8d21bc3940d83b8d6088d4070a8a34aanthony "UnrecognizedPixelMap","'%s'",map); 3882e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return(MagickFalse); 3883e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3884e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3885e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3886e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SetImageStorageClass(image,DirectClass,exception) == MagickFalse) 3887e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return(MagickFalse); 3888e5370944fabb7afa477ab1325d400731b1e5d5e8cristy /* 3889e5370944fabb7afa477ab1325d400731b1e5d5e8cristy Transfer the pixels from the pixel data to the image. 3890e5370944fabb7afa477ab1325d400731b1e5d5e8cristy */ 3891cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy roi.width=width; 3892cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy roi.height=height; 3893cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy roi.x=x; 3894cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy roi.y=y; 3895e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (type) 3896e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3897e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CharPixel: 3898e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3899cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ImportCharPixel(image,&roi,map,quantum_map,pixels,exception); 3900e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3901e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3902e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case DoublePixel: 3903e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3904cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ImportDoublePixel(image,&roi,map,quantum_map,pixels,exception); 3905e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3906e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3907e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case FloatPixel: 3908e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3909cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ImportFloatPixel(image,&roi,map,quantum_map,pixels,exception); 3910e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3911e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 39126c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy case LongPixel: 3913e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3914cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ImportLongPixel(image,&roi,map,quantum_map,pixels,exception); 3915e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3916e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 39176c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy case LongLongPixel: 3918e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3919cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ImportLongLongPixel(image,&roi,map,quantum_map,pixels,exception); 3920e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3921e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3922e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case QuantumPixel: 3923e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3924cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ImportQuantumPixel(image,&roi,map,quantum_map,pixels,exception); 3925e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3926e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3927e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case ShortPixel: 3928e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3929cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ImportShortPixel(image,&roi,map,quantum_map,pixels,exception); 39303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 39313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 39323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 39333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 39343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map); 3935c82a27bb8e3138ff9bbf0f696663bdf3e704cedecristy (void) ThrowMagickException(exception,GetMagickModule(),OptionError, 3936e5b39652d8d21bc3940d83b8d6088d4070a8a34aanthony "UnrecognizedPixelMap","'%s'",map); 39373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 39383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 39393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 39403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map); 39413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickTrue); 39423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 3943d76c51ed30cf4084f4434ba08925d16001d1e340cristy 3944d76c51ed30cf4084f4434ba08925d16001d1e340cristy/* 3945d76c51ed30cf4084f4434ba08925d16001d1e340cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3946a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% % 3947a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% % 3948a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% % 3949bd5a96cd2b69f218f85a7adc306296a736f91a56cristy+ 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 % 3950bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% % 3951bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% % 3952bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% % 3953bd5a96cd2b69f218f85a7adc306296a736f91a56cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3954bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% 3955bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% InitializePixelChannelMap() defines the standard pixel component map. 3956bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% 3957bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% The format of the InitializePixelChannelMap() method is: 3958bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% 3959bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% void InitializePixelChannelMap(Image *image) 3960bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% 3961bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% A description of each parameter follows: 3962bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% 3963bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% o image: the image. 3964bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% 3965bd5a96cd2b69f218f85a7adc306296a736f91a56cristy*/ 3966e2a912b6c9086c98ec838baa0824cd8deca55538cristyMagickExport void InitializePixelChannelMap(Image *image) 396777c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy{ 3968e2a912b6c9086c98ec838baa0824cd8deca55538cristy PixelTrait 3969e2a912b6c9086c98ec838baa0824cd8deca55538cristy trait; 3970e2a912b6c9086c98ec838baa0824cd8deca55538cristy 397177c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy register ssize_t 397277c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy i; 397377c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy 3974d26338ffb761a86f047d7bbb9a596800f53c8649cristy ssize_t 397577c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy n; 397677c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy 397777c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy assert(image != (Image *) NULL); 397877c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy assert(image->signature == MagickSignature); 3979e2a912b6c9086c98ec838baa0824cd8deca55538cristy (void) ResetMagickMemory(image->channel_map,0,MaxPixelChannels* 3980e2a912b6c9086c98ec838baa0824cd8deca55538cristy sizeof(*image->channel_map)); 3981e2a912b6c9086c98ec838baa0824cd8deca55538cristy trait=UpdatePixelTrait; 3982e2a912b6c9086c98ec838baa0824cd8deca55538cristy if (image->matte != MagickFalse) 398361f18adcc41fdd05d57e50544cdb9d321bb18953cristy trait=(PixelTrait) (trait | BlendPixelTrait); 398477c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy n=0; 3985c06c58036e12a41593f1c7a984f1fdb4e9cc434bcristy if (image->colorspace == GRAYColorspace) 398677c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy { 39873c3162882db2814a5b709072cd03b8d18c80d6afcristy SetPixelChannelMap(image,BluePixelChannel,trait,n); 3988e2a912b6c9086c98ec838baa0824cd8deca55538cristy SetPixelChannelMap(image,GreenPixelChannel,trait,n); 39893c3162882db2814a5b709072cd03b8d18c80d6afcristy SetPixelChannelMap(image,RedPixelChannel,trait,n++); 39903c3162882db2814a5b709072cd03b8d18c80d6afcristy } 39913c3162882db2814a5b709072cd03b8d18c80d6afcristy else 39923c3162882db2814a5b709072cd03b8d18c80d6afcristy { 39933c3162882db2814a5b709072cd03b8d18c80d6afcristy SetPixelChannelMap(image,RedPixelChannel,trait,n++); 39943c3162882db2814a5b709072cd03b8d18c80d6afcristy SetPixelChannelMap(image,GreenPixelChannel,trait,n++); 3995e2a912b6c9086c98ec838baa0824cd8deca55538cristy SetPixelChannelMap(image,BluePixelChannel,trait,n++); 399677c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy } 399777c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy if (image->colorspace == CMYKColorspace) 3998e2a912b6c9086c98ec838baa0824cd8deca55538cristy SetPixelChannelMap(image,BlackPixelChannel,trait,n++); 399977c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy if (image->matte != MagickFalse) 4000e2a912b6c9086c98ec838baa0824cd8deca55538cristy SetPixelChannelMap(image,AlphaPixelChannel,CopyPixelTrait,n++); 4001bd5a96cd2b69f218f85a7adc306296a736f91a56cristy if (image->storage_class == PseudoClass) 4002e2a912b6c9086c98ec838baa0824cd8deca55538cristy SetPixelChannelMap(image,IndexPixelChannel,CopyPixelTrait,n++); 4003183a5c7d1c8a9a747766ff9a2ef067853a7066e9cristy if (image->mask != MagickFalse) 400410a6c61544fb48d72f29ec8f9573bdcd52abf1b7cristy SetPixelChannelMap(image,MaskPixelChannel,CopyPixelTrait,n++); 4005e2a912b6c9086c98ec838baa0824cd8deca55538cristy assert((n+image->number_meta_channels) < MaxPixelChannels); 4006e2a912b6c9086c98ec838baa0824cd8deca55538cristy for (i=0; i < (ssize_t) image->number_meta_channels; i++) 400761f18adcc41fdd05d57e50544cdb9d321bb18953cristy SetPixelChannelMap(image,(PixelChannel) (MetaPixelChannel+i),CopyPixelTrait, 4008e2a912b6c9086c98ec838baa0824cd8deca55538cristy n++); 4009d26338ffb761a86f047d7bbb9a596800f53c8649cristy image->number_channels=(size_t) n; 40106dcb9b8f58179c62fb386bf2bc02c8ba901dfb15cristy if (image->debug != MagickFalse) 40116dcb9b8f58179c62fb386bf2bc02c8ba901dfb15cristy LogPixelChannels(image); 4012480f49ff5341726eb0212f2f1f22cfdefac392c4cristy (void) SetPixelChannelMask(image,image->channel_mask); 4013bd5a96cd2b69f218f85a7adc306296a736f91a56cristy} 4014bd5a96cd2b69f218f85a7adc306296a736f91a56cristy 4015bd5a96cd2b69f218f85a7adc306296a736f91a56cristy/* 4016bd5a96cd2b69f218f85a7adc306296a736f91a56cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4017bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% % 4018bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% % 4019bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% % 4020a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% I n t e r p o l a t e P i x e l C h a n n e l % 4021a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% % 4022a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% % 4023a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% % 4024a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4025a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 4026884f600898ca6935a7981b4d56bf3d2c4ec17011cristy% InterpolatePixelChannel() applies a pixel interpolation method between a 4027884f600898ca6935a7981b4d56bf3d2c4ec17011cristy% floating point coordinate and the pixels surrounding that coordinate. No 4028884f600898ca6935a7981b4d56bf3d2c4ec17011cristy% pixel area resampling, or scaling of the result is performed. 4029a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 4030cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony% Interpolation is restricted to just the specified channel. 4031cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony% 4032a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% The format of the InterpolatePixelChannel method is: 4033a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 4034a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% MagickBooleanType InterpolatePixelChannel(const Image *image, 4035444eda6285b2191e662c3d375c86770da70a83b0cristy% const CacheView *image_view,const PixelChannel channel, 40365c4e2586d27d4299a742d170d41105de1689aa46cristy% const PixelInterpolateMethod method,const double x,const double y, 4037a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% double *pixel,ExceptionInfo *exception) 4038a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 4039a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% A description of each parameter follows: 4040a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 4041a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% o image: the image. 4042a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 4043a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% o image_view: the image view. 4044a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 4045a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% o channel: the pixel channel to interpolate. 4046a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 4047a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% o method: the pixel color interpolation method. 4048a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 4049a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% o x,y: A double representing the current (x,y) position of the pixel. 4050a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 4051a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% o pixel: return the interpolated pixel here. 4052a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 4053a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% o exception: return any errors or warnings in this structure. 4054a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 4055a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy*/ 405694ea1636709395774d7118ef56162d211904cfd2cristy 4057884f600898ca6935a7981b4d56bf3d2c4ec17011cristystatic inline double MagickMax(const MagickRealType x,const MagickRealType y) 4058884f600898ca6935a7981b4d56bf3d2c4ec17011cristy{ 4059884f600898ca6935a7981b4d56bf3d2c4ec17011cristy if (x > y) 4060884f600898ca6935a7981b4d56bf3d2c4ec17011cristy return(x); 4061884f600898ca6935a7981b4d56bf3d2c4ec17011cristy return(y); 4062884f600898ca6935a7981b4d56bf3d2c4ec17011cristy} 4063884f600898ca6935a7981b4d56bf3d2c4ec17011cristy 4064d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolasstatic inline void CatromWeights(const MagickRealType x, 4065d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas MagickRealType (*weights)[4]) 4066884f600898ca6935a7981b4d56bf3d2c4ec17011cristy{ 4067d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas /* 4068d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas Nicolas Robidoux' 10 flops (4* + 5- + 1+) refactoring of the 4069d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas computation of the standard four 1D Catmull-Rom weights. The 4070d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas sampling location is assumed between the second and third input 4071d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixel locations, and x is the position relative to the second 4072d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas input pixel location. Formulas originally derived for the VIPS 4073d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas (Virtual Image Processing System) library. 4074d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas */ 4075884f600898ca6935a7981b4d56bf3d2c4ec17011cristy MagickRealType 4076884f600898ca6935a7981b4d56bf3d2c4ec17011cristy alpha, 4077d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas beta, 4078884f600898ca6935a7981b4d56bf3d2c4ec17011cristy gamma; 4079884f600898ca6935a7981b4d56bf3d2c4ec17011cristy 4080d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas alpha=(MagickRealType) 1.0-x; 4081d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas beta=(MagickRealType) (-0.5)*x*alpha; 4082d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas (*weights)[0]=alpha*beta; 4083d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas (*weights)[3]=x*beta; 4084d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas /* 4085d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas The following computation of the inner weights from the outer ones 4086d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas works for all Keys cubics. 4087d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas */ 4088d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas gamma=(*weights)[3]-(*weights)[0]; 4089d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas (*weights)[1]=alpha-(*weights)[0]+gamma; 4090d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas (*weights)[2]=x-(*weights)[3]-gamma; 4091d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas} 4092d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas 4093d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolasstatic inline void SplineWeights(const MagickRealType x, 4094d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas MagickRealType (*weights)[4]) 4095d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas{ 4096d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas /* 4097d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas Nicolas Robidoux' 12 flops (6* + 5- + 1+) refactoring of the 4098d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas computation of the standard four 1D cubic B-spline smoothing 4099d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas weights. The sampling location is assumed between the second and 4100d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas third input pixel locations, and x is the position relative to the 4101d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas second input pixel location. 4102d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas */ 4103d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas MagickRealType 4104d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas alpha, 4105d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas beta; 4106d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas 4107d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas alpha=(MagickRealType) 1.0-x; 4108d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas (*weights)[3]=(MagickRealType) (1.0/6.0)*x*x*x; 4109d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas (*weights)[0]=(MagickRealType) (1.0/6.0)*alpha*alpha*alpha; 4110d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas beta=(*weights)[3]-(*weights)[0]; 4111d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas (*weights)[1]=alpha-(*weights)[0]+beta; 4112d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas (*weights)[2]=x-(*weights)[3]-beta; 4113884f600898ca6935a7981b4d56bf3d2c4ec17011cristy} 4114884f600898ca6935a7981b4d56bf3d2c4ec17011cristy 411594ea1636709395774d7118ef56162d211904cfd2cristystatic inline double MeshInterpolate(const PointInfo *delta,const double p, 411694ea1636709395774d7118ef56162d211904cfd2cristy const double x,const double y) 411794ea1636709395774d7118ef56162d211904cfd2cristy{ 411894ea1636709395774d7118ef56162d211904cfd2cristy return(delta->x*x+delta->y*y+(1.0-delta->x-delta->y)*p); 411994ea1636709395774d7118ef56162d211904cfd2cristy} 412094ea1636709395774d7118ef56162d211904cfd2cristy 4121cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony/* 4122884f600898ca6935a7981b4d56bf3d2c4ec17011cristystatic inline ssize_t NearestNeighbor(const MagickRealType x) 4123884f600898ca6935a7981b4d56bf3d2c4ec17011cristy{ 4124884f600898ca6935a7981b4d56bf3d2c4ec17011cristy if (x >= 0.0) 4125884f600898ca6935a7981b4d56bf3d2c4ec17011cristy return((ssize_t) (x+0.5)); 4126884f600898ca6935a7981b4d56bf3d2c4ec17011cristy return((ssize_t) (x-0.5)); 4127884f600898ca6935a7981b4d56bf3d2c4ec17011cristy} 4128cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony*/ 4129884f600898ca6935a7981b4d56bf3d2c4ec17011cristy 4130a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristyMagickExport MagickBooleanType InterpolatePixelChannel(const Image *image, 4131a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy const CacheView *image_view,const PixelChannel channel, 41325c4e2586d27d4299a742d170d41105de1689aa46cristy const PixelInterpolateMethod method,const double x,const double y, 4133a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy double *pixel,ExceptionInfo *exception) 4134a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy{ 4135a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy MagickBooleanType 4136a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy status; 4137a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy 413894ea1636709395774d7118ef56162d211904cfd2cristy MagickRealType 413994ea1636709395774d7118ef56162d211904cfd2cristy alpha[16], 4140884f600898ca6935a7981b4d56bf3d2c4ec17011cristy gamma, 4141884f600898ca6935a7981b4d56bf3d2c4ec17011cristy pixels[16]; 414294ea1636709395774d7118ef56162d211904cfd2cristy 414394ea1636709395774d7118ef56162d211904cfd2cristy PixelTrait 414494ea1636709395774d7118ef56162d211904cfd2cristy traits; 414594ea1636709395774d7118ef56162d211904cfd2cristy 414694ea1636709395774d7118ef56162d211904cfd2cristy register const Quantum 414794ea1636709395774d7118ef56162d211904cfd2cristy *p; 414894ea1636709395774d7118ef56162d211904cfd2cristy 414950e64b85215ce366ca50af1ba16326c784221f92cristy register ssize_t 415094ea1636709395774d7118ef56162d211904cfd2cristy i; 415194ea1636709395774d7118ef56162d211904cfd2cristy 4152a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy ssize_t 4153a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy x_offset, 4154a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy y_offset; 4155a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy 4156cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony PixelInterpolateMethod 4157cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony interpolate; 4158cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony 4159a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy assert(image != (Image *) NULL); 4160a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy assert(image != (Image *) NULL); 4161a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy assert(image->signature == MagickSignature); 4162a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy assert(image_view != (CacheView *) NULL); 4163a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy status=MagickTrue; 4164884f600898ca6935a7981b4d56bf3d2c4ec17011cristy *pixel=0.0; 416594ea1636709395774d7118ef56162d211904cfd2cristy traits=GetPixelChannelMapTraits(image,channel); 4166a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy x_offset=(ssize_t) floor(x); 4167a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy y_offset=(ssize_t) floor(y); 4168cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony interpolate = method; 4169cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony if ( interpolate == UndefinedInterpolatePixel ) 4170cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony interpolate = image->interpolate; 4171cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony switch (interpolate) 4172a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy { 4173cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony case AverageInterpolatePixel: /* nearest 4 neighbours */ 4174cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony case Average9InterpolatePixel: /* nearest 9 neighbours */ 4175cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony case Average16InterpolatePixel: /* nearest 16 neighbours */ 4176884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4177cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony size_t 4178cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony count=2; /* size of the area to average - default nearest 4 */ 4179cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony 4180cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony if (interpolate == Average9InterpolatePixel) 4181cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 4182cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony count=3; 4183cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony x_offset=(ssize_t) (floor(x+0.5)-1); 4184cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony y_offset=(ssize_t) (floor(y+0.5)-1); 4185cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 4186cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony else if (interpolate == Average16InterpolatePixel) 4187cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 4188cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony count=4; 4189cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony x_offset--; 4190cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony y_offset--; 4191cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 4192cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,count,count, 4193884f600898ca6935a7981b4d56bf3d2c4ec17011cristy exception); 4194884f600898ca6935a7981b4d56bf3d2c4ec17011cristy if (p == (const Quantum *) NULL) 4195884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4196884f600898ca6935a7981b4d56bf3d2c4ec17011cristy status=MagickFalse; 4197884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4198884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4199cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony 4200cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony count*=count; /* Number of pixels to Average */ 4201222b19c8e5e5ee5287e41d33fea54f2b651741b6cristy if ((traits & BlendPixelTrait) == 0) 420250e64b85215ce366ca50af1ba16326c784221f92cristy for (i=0; i < (ssize_t) count; i++) 4203884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4204884f600898ca6935a7981b4d56bf3d2c4ec17011cristy alpha[i]=1.0; 4205884f600898ca6935a7981b4d56bf3d2c4ec17011cristy pixels[i]=(MagickRealType) p[i*GetPixelChannels(image)+channel]; 4206884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4207884f600898ca6935a7981b4d56bf3d2c4ec17011cristy else 420850e64b85215ce366ca50af1ba16326c784221f92cristy for (i=0; i < (ssize_t) count; i++) 4209884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4210884f600898ca6935a7981b4d56bf3d2c4ec17011cristy alpha[i]=QuantumScale*GetPixelAlpha(image,p+i* 4211884f600898ca6935a7981b4d56bf3d2c4ec17011cristy GetPixelChannels(image)); 4212884f600898ca6935a7981b4d56bf3d2c4ec17011cristy pixels[i]=alpha[i]*p[i*GetPixelChannels(image)+channel]; 4213884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 421450e64b85215ce366ca50af1ba16326c784221f92cristy for (i=0; i < (ssize_t) count; i++) 4215884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4216cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony gamma=MagickEpsilonReciprocal(alpha[i])/count; 4217cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony *pixel+=gamma*pixels[i]; 4218884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4219884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4220884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4221cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony case BilinearInterpolatePixel: 4222cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony default: 4223cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 4224cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony PointInfo 4225cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony delta, 4226cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony epsilon; 4227cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony 4228cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,2,2,exception); 4229cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony if (p == (const Quantum *) NULL) 4230cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 4231cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony status=MagickFalse; 4232cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony break; 4233cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 4234cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony if ((traits & BlendPixelTrait) == 0) 4235cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony for (i=0; i < 4; i++) 4236cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 4237cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony alpha[i]=1.0; 4238cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[i]=(MagickRealType) p[i*GetPixelChannels(image)+channel]; 4239cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 4240cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony else 4241cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony for (i=0; i < 4; i++) 4242cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 4243cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony alpha[i]=QuantumScale*GetPixelAlpha(image,p+i* 4244cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony GetPixelChannels(image)); 4245cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[i]=alpha[i]*p[i*GetPixelChannels(image)+channel]; 4246cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 4247cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony delta.x=x-x_offset; 4248cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony delta.y=y-y_offset; 4249cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony epsilon.x=1.0-delta.x; 4250cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony epsilon.y=1.0-delta.y; 4251cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony gamma=((epsilon.y*(epsilon.x*alpha[0]+delta.x*alpha[1])+delta.y* 4252cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony (epsilon.x*alpha[2]+delta.x*alpha[3]))); 4253cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony gamma=MagickEpsilonReciprocal(gamma); 4254cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony *pixel=gamma*(epsilon.y*(epsilon.x*pixels[0]+delta.x*pixels[1])+delta.y* 4255cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony (epsilon.x*pixels[2]+delta.x*pixels[3])); 4256cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony break; 4257cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 4258cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony case CatromInterpolatePixel: 4259884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4260884f600898ca6935a7981b4d56bf3d2c4ec17011cristy MagickRealType 4261380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy cx[4], 42626676f5a461ba75c5f4a927218cb3577dd29d70aenicolas cy[4]; 4263884f600898ca6935a7981b4d56bf3d2c4ec17011cristy 4264884f600898ca6935a7981b4d56bf3d2c4ec17011cristy p=GetCacheViewVirtualPixels(image_view,x_offset-1,y_offset-1,4,4, 4265884f600898ca6935a7981b4d56bf3d2c4ec17011cristy exception); 4266884f600898ca6935a7981b4d56bf3d2c4ec17011cristy if (p == (const Quantum *) NULL) 4267884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4268884f600898ca6935a7981b4d56bf3d2c4ec17011cristy status=MagickFalse; 4269884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4270884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4271222b19c8e5e5ee5287e41d33fea54f2b651741b6cristy if ((traits & BlendPixelTrait) == 0) 4272884f600898ca6935a7981b4d56bf3d2c4ec17011cristy for (i=0; i < 16; i++) 4273884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4274884f600898ca6935a7981b4d56bf3d2c4ec17011cristy alpha[i]=1.0; 4275884f600898ca6935a7981b4d56bf3d2c4ec17011cristy pixels[i]=(MagickRealType) p[i*GetPixelChannels(image)+channel]; 4276884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4277884f600898ca6935a7981b4d56bf3d2c4ec17011cristy else 4278884f600898ca6935a7981b4d56bf3d2c4ec17011cristy for (i=0; i < 16; i++) 4279884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4280884f600898ca6935a7981b4d56bf3d2c4ec17011cristy alpha[i]=QuantumScale*GetPixelAlpha(image,p+i* 4281884f600898ca6935a7981b4d56bf3d2c4ec17011cristy GetPixelChannels(image)); 4282884f600898ca6935a7981b4d56bf3d2c4ec17011cristy pixels[i]=alpha[i]*p[i*GetPixelChannels(image)+channel]; 4283884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4284d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas CatromWeights((MagickRealType) (x-x_offset),&cx); 4285d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas CatromWeights((MagickRealType) (y-y_offset),&cy); 4286d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas gamma=(channel == AlphaPixelChannel ? (MagickRealType) 1.0 : 4287d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas MagickEpsilonReciprocal(cy[0]*(cx[0]*alpha[0]+cx[1]*alpha[1]+cx[2]* 4288d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas alpha[2]+cx[3]*alpha[3])+cy[1]*(cx[0]*alpha[4]+cx[1]*alpha[5]+cx[2]* 4289d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas alpha[6]+cx[3]*alpha[7])+cy[2]*(cx[0]*alpha[8]+cx[1]*alpha[9]+cx[2]* 4290d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas alpha[10]+cx[3]*alpha[11])+cy[3]*(cx[0]*alpha[12]+cx[1]*alpha[13]+ 4291d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas cx[2]*alpha[14]+cx[3]*alpha[15]))); 4292380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy *pixel=gamma*(cy[0]*(cx[0]*pixels[0]+cx[1]*pixels[1]+cx[2]*pixels[2]+ 4293d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas cx[3]*pixels[3])+cy[1]*(cx[0]*pixels[4]+cx[1]*pixels[5]+cx[2]* 4294d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[6]+cx[3]*pixels[7])+cy[2]*(cx[0]*pixels[8]+cx[1]*pixels[9]+ 4295d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas cx[2]*pixels[10]+cx[3]*pixels[11])+cy[3]*(cx[0]*pixels[12]+cx[1]* 4296d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[13]+cx[2]*pixels[14]+cx[3]*pixels[15])); 4297884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4298884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4299cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony#if 0 430020075dc279f25ae4cc7291a7e54f076a61a1f068nicolas /* deprecated useless and very slow interpolator */ 4301884f600898ca6935a7981b4d56bf3d2c4ec17011cristy case FilterInterpolatePixel: 4302884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4303884f600898ca6935a7981b4d56bf3d2c4ec17011cristy CacheView 4304884f600898ca6935a7981b4d56bf3d2c4ec17011cristy *filter_view; 4305884f600898ca6935a7981b4d56bf3d2c4ec17011cristy 4306884f600898ca6935a7981b4d56bf3d2c4ec17011cristy Image 4307884f600898ca6935a7981b4d56bf3d2c4ec17011cristy *excerpt_image, 4308884f600898ca6935a7981b4d56bf3d2c4ec17011cristy *filter_image; 4309884f600898ca6935a7981b4d56bf3d2c4ec17011cristy 4310884f600898ca6935a7981b4d56bf3d2c4ec17011cristy RectangleInfo 4311884f600898ca6935a7981b4d56bf3d2c4ec17011cristy geometry; 4312884f600898ca6935a7981b4d56bf3d2c4ec17011cristy 4313884f600898ca6935a7981b4d56bf3d2c4ec17011cristy geometry.width=4L; 4314884f600898ca6935a7981b4d56bf3d2c4ec17011cristy geometry.height=4L; 4315884f600898ca6935a7981b4d56bf3d2c4ec17011cristy geometry.x=x_offset-1; 4316884f600898ca6935a7981b4d56bf3d2c4ec17011cristy geometry.y=y_offset-1; 4317884f600898ca6935a7981b4d56bf3d2c4ec17011cristy excerpt_image=ExcerptImage(image,&geometry,exception); 4318884f600898ca6935a7981b4d56bf3d2c4ec17011cristy if (excerpt_image == (Image *) NULL) 4319884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4320884f600898ca6935a7981b4d56bf3d2c4ec17011cristy status=MagickFalse; 4321884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4322884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4323aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy filter_image=ResizeImage(excerpt_image,1,1,image->filter,exception); 4324884f600898ca6935a7981b4d56bf3d2c4ec17011cristy excerpt_image=DestroyImage(excerpt_image); 4325884f600898ca6935a7981b4d56bf3d2c4ec17011cristy if (filter_image == (Image *) NULL) 4326884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4327db070957cf6bf959df9283a482377e8854c3d4d2cristy filter_view=AcquireVirtualCacheView(filter_image,exception); 4328884f600898ca6935a7981b4d56bf3d2c4ec17011cristy p=GetCacheViewVirtualPixels(filter_view,0,0,1,1,exception); 4329884f600898ca6935a7981b4d56bf3d2c4ec17011cristy if (p == (const Quantum *) NULL) 4330884f600898ca6935a7981b4d56bf3d2c4ec17011cristy status=MagickFalse; 4331884f600898ca6935a7981b4d56bf3d2c4ec17011cristy else 43320beccfa61f43782de2d6ee7edc1ec8301a3bbeeccristy *pixel=(double) GetPixelChannel(image,channel,p); 4333884f600898ca6935a7981b4d56bf3d2c4ec17011cristy filter_view=DestroyCacheView(filter_view); 4334884f600898ca6935a7981b4d56bf3d2c4ec17011cristy filter_image=DestroyImage(filter_image); 4335884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4336884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4337cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony#endif 4338884f600898ca6935a7981b4d56bf3d2c4ec17011cristy case IntegerInterpolatePixel: 4339884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4340884f600898ca6935a7981b4d56bf3d2c4ec17011cristy p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,1,1,exception); 4341884f600898ca6935a7981b4d56bf3d2c4ec17011cristy if (p == (const Quantum *) NULL) 4342884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4343884f600898ca6935a7981b4d56bf3d2c4ec17011cristy status=MagickFalse; 4344884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4345884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 43460beccfa61f43782de2d6ee7edc1ec8301a3bbeeccristy *pixel=(double) GetPixelChannel(image,channel,p); 4347884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4348884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4349cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony case NearestInterpolatePixel: 4350884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4351cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony x_offset=(ssize_t) floor(x+0.5); 4352cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony y_offset=(ssize_t) floor(y+0.5); 4353cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,1,1,exception); 4354884f600898ca6935a7981b4d56bf3d2c4ec17011cristy if (p == (const Quantum *) NULL) 4355884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4356884f600898ca6935a7981b4d56bf3d2c4ec17011cristy status=MagickFalse; 4357884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4358884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 43590beccfa61f43782de2d6ee7edc1ec8301a3bbeeccristy *pixel=(double) GetPixelChannel(image,channel,p); 4360884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4361884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4362884f600898ca6935a7981b4d56bf3d2c4ec17011cristy case MeshInterpolatePixel: 4363884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4364884f600898ca6935a7981b4d56bf3d2c4ec17011cristy PointInfo 4365884f600898ca6935a7981b4d56bf3d2c4ec17011cristy delta, 4366884f600898ca6935a7981b4d56bf3d2c4ec17011cristy luminance; 4367884f600898ca6935a7981b4d56bf3d2c4ec17011cristy 4368884f600898ca6935a7981b4d56bf3d2c4ec17011cristy p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,2,2,exception); 4369884f600898ca6935a7981b4d56bf3d2c4ec17011cristy if (p == (const Quantum *) NULL) 4370884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4371884f600898ca6935a7981b4d56bf3d2c4ec17011cristy status=MagickFalse; 4372884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4373884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4374222b19c8e5e5ee5287e41d33fea54f2b651741b6cristy if ((traits & BlendPixelTrait) == 0) 437594ea1636709395774d7118ef56162d211904cfd2cristy for (i=0; i < 4; i++) 437694ea1636709395774d7118ef56162d211904cfd2cristy { 437794ea1636709395774d7118ef56162d211904cfd2cristy alpha[i]=1.0; 4378884f600898ca6935a7981b4d56bf3d2c4ec17011cristy pixels[i]=(MagickRealType) p[i*GetPixelChannels(image)+channel]; 437994ea1636709395774d7118ef56162d211904cfd2cristy } 438094ea1636709395774d7118ef56162d211904cfd2cristy else 438194ea1636709395774d7118ef56162d211904cfd2cristy for (i=0; i < 4; i++) 438294ea1636709395774d7118ef56162d211904cfd2cristy { 438394ea1636709395774d7118ef56162d211904cfd2cristy alpha[i]=QuantumScale*GetPixelAlpha(image,p+i* 438494ea1636709395774d7118ef56162d211904cfd2cristy GetPixelChannels(image)); 438594ea1636709395774d7118ef56162d211904cfd2cristy pixels[i]=alpha[i]*p[i*GetPixelChannels(image)+channel]; 438694ea1636709395774d7118ef56162d211904cfd2cristy } 4387884f600898ca6935a7981b4d56bf3d2c4ec17011cristy delta.x=x-x_offset; 4388884f600898ca6935a7981b4d56bf3d2c4ec17011cristy delta.y=y-y_offset; 4389884f600898ca6935a7981b4d56bf3d2c4ec17011cristy luminance.x=GetPixelLuminance(image,p)-(double) 4390884f600898ca6935a7981b4d56bf3d2c4ec17011cristy GetPixelLuminance(image,p+3*GetPixelChannels(image)); 439128474bfbda5ee2d4da2eb79f299cf1f692770b99cristy luminance.y=GetPixelLuminance(image,p+GetPixelChannels(image))-(double) 4392884f600898ca6935a7981b4d56bf3d2c4ec17011cristy GetPixelLuminance(image,p+2*GetPixelChannels(image)); 439394ea1636709395774d7118ef56162d211904cfd2cristy if (fabs(luminance.x) < fabs(luminance.y)) 439494ea1636709395774d7118ef56162d211904cfd2cristy { 439594ea1636709395774d7118ef56162d211904cfd2cristy /* 439694ea1636709395774d7118ef56162d211904cfd2cristy Diagonal 0-3 NW-SE. 439794ea1636709395774d7118ef56162d211904cfd2cristy */ 439894ea1636709395774d7118ef56162d211904cfd2cristy if (delta.x <= delta.y) 439994ea1636709395774d7118ef56162d211904cfd2cristy { 440094ea1636709395774d7118ef56162d211904cfd2cristy /* 440194ea1636709395774d7118ef56162d211904cfd2cristy Bottom-left triangle (pixel: 2, diagonal: 0-3). 440294ea1636709395774d7118ef56162d211904cfd2cristy */ 440394ea1636709395774d7118ef56162d211904cfd2cristy delta.y=1.0-delta.y; 440494ea1636709395774d7118ef56162d211904cfd2cristy gamma=MeshInterpolate(&delta,alpha[2],alpha[3],alpha[0]); 4405c58380ae9cfade8bdda88414145d2ef44b13348fcristy gamma=MagickEpsilonReciprocal(gamma); 440694ea1636709395774d7118ef56162d211904cfd2cristy *pixel=gamma*MeshInterpolate(&delta,pixels[2],pixels[3], 440794ea1636709395774d7118ef56162d211904cfd2cristy pixels[0]); 440894ea1636709395774d7118ef56162d211904cfd2cristy } 440994ea1636709395774d7118ef56162d211904cfd2cristy else 441094ea1636709395774d7118ef56162d211904cfd2cristy { 441194ea1636709395774d7118ef56162d211904cfd2cristy /* 441294ea1636709395774d7118ef56162d211904cfd2cristy Top-right triangle (pixel: 1, diagonal: 0-3). 441394ea1636709395774d7118ef56162d211904cfd2cristy */ 441494ea1636709395774d7118ef56162d211904cfd2cristy delta.x=1.0-delta.x; 441594ea1636709395774d7118ef56162d211904cfd2cristy gamma=MeshInterpolate(&delta,alpha[1],alpha[0],alpha[3]); 4416c58380ae9cfade8bdda88414145d2ef44b13348fcristy gamma=MagickEpsilonReciprocal(gamma); 441794ea1636709395774d7118ef56162d211904cfd2cristy *pixel=gamma*MeshInterpolate(&delta,pixels[1],pixels[0], 441894ea1636709395774d7118ef56162d211904cfd2cristy pixels[3]); 441994ea1636709395774d7118ef56162d211904cfd2cristy } 442094ea1636709395774d7118ef56162d211904cfd2cristy } 442194ea1636709395774d7118ef56162d211904cfd2cristy else 442294ea1636709395774d7118ef56162d211904cfd2cristy { 442394ea1636709395774d7118ef56162d211904cfd2cristy /* 442494ea1636709395774d7118ef56162d211904cfd2cristy Diagonal 1-2 NE-SW. 442594ea1636709395774d7118ef56162d211904cfd2cristy */ 442694ea1636709395774d7118ef56162d211904cfd2cristy if (delta.x <= (1.0-delta.y)) 442794ea1636709395774d7118ef56162d211904cfd2cristy { 442894ea1636709395774d7118ef56162d211904cfd2cristy /* 442994ea1636709395774d7118ef56162d211904cfd2cristy Top-left triangle (pixel: 0, diagonal: 1-2). 443094ea1636709395774d7118ef56162d211904cfd2cristy */ 443194ea1636709395774d7118ef56162d211904cfd2cristy gamma=MeshInterpolate(&delta,alpha[0],alpha[1],alpha[2]); 4432c58380ae9cfade8bdda88414145d2ef44b13348fcristy gamma=MagickEpsilonReciprocal(gamma); 443394ea1636709395774d7118ef56162d211904cfd2cristy *pixel=gamma*MeshInterpolate(&delta,pixels[0],pixels[1], 443494ea1636709395774d7118ef56162d211904cfd2cristy pixels[2]); 443594ea1636709395774d7118ef56162d211904cfd2cristy } 443694ea1636709395774d7118ef56162d211904cfd2cristy else 443794ea1636709395774d7118ef56162d211904cfd2cristy { 443894ea1636709395774d7118ef56162d211904cfd2cristy /* 443994ea1636709395774d7118ef56162d211904cfd2cristy Bottom-right triangle (pixel: 3, diagonal: 1-2). 444094ea1636709395774d7118ef56162d211904cfd2cristy */ 444194ea1636709395774d7118ef56162d211904cfd2cristy delta.x=1.0-delta.x; 444294ea1636709395774d7118ef56162d211904cfd2cristy delta.y=1.0-delta.y; 444394ea1636709395774d7118ef56162d211904cfd2cristy gamma=MeshInterpolate(&delta,alpha[3],alpha[2],alpha[1]); 4444c58380ae9cfade8bdda88414145d2ef44b13348fcristy gamma=MagickEpsilonReciprocal(gamma); 444594ea1636709395774d7118ef56162d211904cfd2cristy *pixel=gamma*MeshInterpolate(&delta,pixels[3],pixels[2], 444694ea1636709395774d7118ef56162d211904cfd2cristy pixels[1]); 444794ea1636709395774d7118ef56162d211904cfd2cristy } 444894ea1636709395774d7118ef56162d211904cfd2cristy } 4449a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy break; 4450a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy } 4451884f600898ca6935a7981b4d56bf3d2c4ec17011cristy case SplineInterpolatePixel: 4452884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4453884f600898ca6935a7981b4d56bf3d2c4ec17011cristy MagickRealType 4454d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas cx[4], 44556676f5a461ba75c5f4a927218cb3577dd29d70aenicolas cy[4]; 4456884f600898ca6935a7981b4d56bf3d2c4ec17011cristy 4457884f600898ca6935a7981b4d56bf3d2c4ec17011cristy p=GetCacheViewVirtualPixels(image_view,x_offset-1,y_offset-1,4,4, 4458884f600898ca6935a7981b4d56bf3d2c4ec17011cristy exception); 4459884f600898ca6935a7981b4d56bf3d2c4ec17011cristy if (p == (const Quantum *) NULL) 4460884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4461884f600898ca6935a7981b4d56bf3d2c4ec17011cristy status=MagickFalse; 4462884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4463884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4464222b19c8e5e5ee5287e41d33fea54f2b651741b6cristy if ((traits & BlendPixelTrait) == 0) 4465884f600898ca6935a7981b4d56bf3d2c4ec17011cristy for (i=0; i < 16; i++) 4466884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4467884f600898ca6935a7981b4d56bf3d2c4ec17011cristy alpha[i]=1.0; 4468884f600898ca6935a7981b4d56bf3d2c4ec17011cristy pixels[i]=(MagickRealType) p[i*GetPixelChannels(image)+channel]; 4469884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4470884f600898ca6935a7981b4d56bf3d2c4ec17011cristy else 4471884f600898ca6935a7981b4d56bf3d2c4ec17011cristy for (i=0; i < 16; i++) 4472884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4473884f600898ca6935a7981b4d56bf3d2c4ec17011cristy alpha[i]=QuantumScale*GetPixelAlpha(image,p+i* 4474884f600898ca6935a7981b4d56bf3d2c4ec17011cristy GetPixelChannels(image)); 4475884f600898ca6935a7981b4d56bf3d2c4ec17011cristy pixels[i]=alpha[i]*p[i*GetPixelChannels(image)+channel]; 4476884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4477d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas SplineWeights((MagickRealType) (x-x_offset),&cx); 4478d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas SplineWeights((MagickRealType) (y-y_offset),&cy); 4479d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas gamma=(channel == AlphaPixelChannel ? (MagickRealType) 1.0 : 4480d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas MagickEpsilonReciprocal(cy[0]*(cx[0]*alpha[0]+cx[1]*alpha[1]+cx[2]* 4481d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas alpha[2]+cx[3]*alpha[3])+cy[1]*(cx[0]*alpha[4]+cx[1]*alpha[5]+cx[2]* 4482d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas alpha[6]+cx[3]*alpha[7])+cy[2]*(cx[0]*alpha[8]+cx[1]*alpha[9]+cx[2]* 4483d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas alpha[10]+cx[3]*alpha[11])+cy[3]*(cx[0]*alpha[12]+cx[1]*alpha[13]+ 4484d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas cx[2]*alpha[14]+cx[3]*alpha[15]))); 4485d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas *pixel=gamma*(cy[0]*(cx[0]*pixels[0]+cx[1]*pixels[1]+cx[2]*pixels[2]+ 4486d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas cx[3]*pixels[3])+cy[1]*(cx[0]*pixels[4]+cx[1]*pixels[5]+cx[2]* 4487d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[6]+cx[3]*pixels[7])+cy[2]*(cx[0]*pixels[8]+cx[1]*pixels[9]+ 4488d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas cx[2]*pixels[10]+cx[3]*pixels[11])+cy[3]*(cx[0]*pixels[12]+cx[1]* 4489d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[13]+cx[2]*pixels[14]+cx[3]*pixels[15])); 4490884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4491884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4492a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy } 4493a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy return(status); 4494a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy} 4495a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy 4496a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy/* 4497a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4498d76c51ed30cf4084f4434ba08925d16001d1e340cristy% % 4499d76c51ed30cf4084f4434ba08925d16001d1e340cristy% % 4500d76c51ed30cf4084f4434ba08925d16001d1e340cristy% % 45015c4e2586d27d4299a742d170d41105de1689aa46cristy% I n t e r p o l a t e P i x e l C h a n n e l s % 45025c4e2586d27d4299a742d170d41105de1689aa46cristy% % 45035c4e2586d27d4299a742d170d41105de1689aa46cristy% % 45045c4e2586d27d4299a742d170d41105de1689aa46cristy% % 45055c4e2586d27d4299a742d170d41105de1689aa46cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 45065c4e2586d27d4299a742d170d41105de1689aa46cristy% 45075c4e2586d27d4299a742d170d41105de1689aa46cristy% InterpolatePixelChannels() applies a pixel interpolation method between a 45085c4e2586d27d4299a742d170d41105de1689aa46cristy% floating point coordinate and the pixels surrounding that coordinate. No 45095c4e2586d27d4299a742d170d41105de1689aa46cristy% pixel area resampling, or scaling of the result is performed. 45105c4e2586d27d4299a742d170d41105de1689aa46cristy% 4511cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony% Interpolation is restricted to just the current channel setting of the 4512cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony% destination image into which the color is to be stored 4513cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony% 45145c4e2586d27d4299a742d170d41105de1689aa46cristy% The format of the InterpolatePixelChannels method is: 45155c4e2586d27d4299a742d170d41105de1689aa46cristy% 45165c4e2586d27d4299a742d170d41105de1689aa46cristy% MagickBooleanType InterpolatePixelChannels(const Image *source, 45175c4e2586d27d4299a742d170d41105de1689aa46cristy% const CacheView *source_view,const Image *destination, 45185c4e2586d27d4299a742d170d41105de1689aa46cristy% const PixelInterpolateMethod method,const double x,const double y, 45195c4e2586d27d4299a742d170d41105de1689aa46cristy% Quantum *pixel,ExceptionInfo *exception) 45205c4e2586d27d4299a742d170d41105de1689aa46cristy% 45215c4e2586d27d4299a742d170d41105de1689aa46cristy% A description of each parameter follows: 45225c4e2586d27d4299a742d170d41105de1689aa46cristy% 45235c4e2586d27d4299a742d170d41105de1689aa46cristy% o source: the source. 45245c4e2586d27d4299a742d170d41105de1689aa46cristy% 45255c4e2586d27d4299a742d170d41105de1689aa46cristy% o source_view: the source view. 45265c4e2586d27d4299a742d170d41105de1689aa46cristy% 4527cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony% o destination: the destination image, for the interpolated color 45285c4e2586d27d4299a742d170d41105de1689aa46cristy% 45295c4e2586d27d4299a742d170d41105de1689aa46cristy% o method: the pixel color interpolation method. 45305c4e2586d27d4299a742d170d41105de1689aa46cristy% 45315c4e2586d27d4299a742d170d41105de1689aa46cristy% o x,y: A double representing the current (x,y) position of the pixel. 45325c4e2586d27d4299a742d170d41105de1689aa46cristy% 45335c4e2586d27d4299a742d170d41105de1689aa46cristy% o pixel: return the interpolated pixel here. 45345c4e2586d27d4299a742d170d41105de1689aa46cristy% 45355c4e2586d27d4299a742d170d41105de1689aa46cristy% o exception: return any errors or warnings in this structure. 45365c4e2586d27d4299a742d170d41105de1689aa46cristy% 45375c4e2586d27d4299a742d170d41105de1689aa46cristy*/ 45385c4e2586d27d4299a742d170d41105de1689aa46cristyMagickExport MagickBooleanType InterpolatePixelChannels(const Image *source, 45395c4e2586d27d4299a742d170d41105de1689aa46cristy const CacheView *source_view,const Image *destination, 45405c4e2586d27d4299a742d170d41105de1689aa46cristy const PixelInterpolateMethod method,const double x,const double y, 45415c4e2586d27d4299a742d170d41105de1689aa46cristy Quantum *pixel,ExceptionInfo *exception) 45425c4e2586d27d4299a742d170d41105de1689aa46cristy{ 45435c4e2586d27d4299a742d170d41105de1689aa46cristy MagickBooleanType 45445c4e2586d27d4299a742d170d41105de1689aa46cristy status; 45455c4e2586d27d4299a742d170d41105de1689aa46cristy 45465c4e2586d27d4299a742d170d41105de1689aa46cristy MagickRealType 45475c4e2586d27d4299a742d170d41105de1689aa46cristy alpha[16], 45485c4e2586d27d4299a742d170d41105de1689aa46cristy gamma, 45495c4e2586d27d4299a742d170d41105de1689aa46cristy pixels[16]; 45505c4e2586d27d4299a742d170d41105de1689aa46cristy 45515c4e2586d27d4299a742d170d41105de1689aa46cristy PixelChannel 45525c4e2586d27d4299a742d170d41105de1689aa46cristy channel; 45535c4e2586d27d4299a742d170d41105de1689aa46cristy 45545c4e2586d27d4299a742d170d41105de1689aa46cristy PixelTrait 45555c4e2586d27d4299a742d170d41105de1689aa46cristy destination_traits, 45565c4e2586d27d4299a742d170d41105de1689aa46cristy traits; 45575c4e2586d27d4299a742d170d41105de1689aa46cristy 45585c4e2586d27d4299a742d170d41105de1689aa46cristy register const Quantum 45595c4e2586d27d4299a742d170d41105de1689aa46cristy *p; 45605c4e2586d27d4299a742d170d41105de1689aa46cristy 456150e64b85215ce366ca50af1ba16326c784221f92cristy register ssize_t 45625c4e2586d27d4299a742d170d41105de1689aa46cristy i; 45635c4e2586d27d4299a742d170d41105de1689aa46cristy 45645c4e2586d27d4299a742d170d41105de1689aa46cristy ssize_t 45655c4e2586d27d4299a742d170d41105de1689aa46cristy x_offset, 45665c4e2586d27d4299a742d170d41105de1689aa46cristy y_offset; 45675c4e2586d27d4299a742d170d41105de1689aa46cristy 4568cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony PixelInterpolateMethod 4569cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony interpolate; 4570cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony 45715c4e2586d27d4299a742d170d41105de1689aa46cristy assert(source != (Image *) NULL); 45725c4e2586d27d4299a742d170d41105de1689aa46cristy assert(source != (Image *) NULL); 45735c4e2586d27d4299a742d170d41105de1689aa46cristy assert(source->signature == MagickSignature); 45745c4e2586d27d4299a742d170d41105de1689aa46cristy assert(source_view != (CacheView *) NULL); 45755c4e2586d27d4299a742d170d41105de1689aa46cristy status=MagickTrue; 45765c4e2586d27d4299a742d170d41105de1689aa46cristy x_offset=(ssize_t) floor(x); 45775c4e2586d27d4299a742d170d41105de1689aa46cristy y_offset=(ssize_t) floor(y); 4578cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony interpolate = method; 4579cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony if ( interpolate == UndefinedInterpolatePixel ) 4580cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony interpolate = source->interpolate; 4581cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony switch (interpolate) 45825c4e2586d27d4299a742d170d41105de1689aa46cristy { 4583cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony case AverageInterpolatePixel: /* nearest 4 neighbours */ 4584cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony case Average9InterpolatePixel: /* nearest 9 neighbours */ 4585cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony case Average16InterpolatePixel: /* nearest 16 neighbours */ 45865c4e2586d27d4299a742d170d41105de1689aa46cristy { 4587cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony size_t 4588cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony count=2; /* size of the area to average - default nearest 4 */ 4589cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony 4590cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony if (interpolate == Average9InterpolatePixel) 4591cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 4592cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony count=3; 4593cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony x_offset=(ssize_t) (floor(x+0.5)-1); 4594cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony y_offset=(ssize_t) (floor(y+0.5)-1); 4595cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 4596cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony else if (interpolate == Average16InterpolatePixel) 4597cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 4598cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony count=4; 4599cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony x_offset--; 4600cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony y_offset--; 4601cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 4602cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony p=GetCacheViewVirtualPixels(source_view,x_offset,y_offset,count,count, 46035c4e2586d27d4299a742d170d41105de1689aa46cristy exception); 46045c4e2586d27d4299a742d170d41105de1689aa46cristy if (p == (const Quantum *) NULL) 46055c4e2586d27d4299a742d170d41105de1689aa46cristy { 46065c4e2586d27d4299a742d170d41105de1689aa46cristy status=MagickFalse; 46075c4e2586d27d4299a742d170d41105de1689aa46cristy break; 46085c4e2586d27d4299a742d170d41105de1689aa46cristy } 4609cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony count*=count; /* Number of pixels to Average */ 461050e64b85215ce366ca50af1ba16326c784221f92cristy for (i=0; i < (ssize_t) GetPixelChannels(source); i++) 46115c4e2586d27d4299a742d170d41105de1689aa46cristy { 46125c4e2586d27d4299a742d170d41105de1689aa46cristy double 46135c4e2586d27d4299a742d170d41105de1689aa46cristy sum; 46145c4e2586d27d4299a742d170d41105de1689aa46cristy 461550e64b85215ce366ca50af1ba16326c784221f92cristy register ssize_t 46165c4e2586d27d4299a742d170d41105de1689aa46cristy j; 46175c4e2586d27d4299a742d170d41105de1689aa46cristy 4618e2a912b6c9086c98ec838baa0824cd8deca55538cristy channel=GetPixelChannelMapChannel(source,i); 4619abace416e67464ca6dac2324410667b05076a9c2cristy traits=GetPixelChannelMapTraits(source,channel); 46205c4e2586d27d4299a742d170d41105de1689aa46cristy destination_traits=GetPixelChannelMapTraits(destination,channel); 46215c4e2586d27d4299a742d170d41105de1689aa46cristy if ((traits == UndefinedPixelTrait) || 46225c4e2586d27d4299a742d170d41105de1689aa46cristy (destination_traits == UndefinedPixelTrait)) 46235c4e2586d27d4299a742d170d41105de1689aa46cristy continue; 462450e64b85215ce366ca50af1ba16326c784221f92cristy for (j=0; j < (ssize_t) count; j++) 46255c4e2586d27d4299a742d170d41105de1689aa46cristy pixels[j]=(MagickRealType) p[j*GetPixelChannels(source)+i]; 46264a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy sum=0.0; 46275c4e2586d27d4299a742d170d41105de1689aa46cristy if ((traits & BlendPixelTrait) == 0) 46285c4e2586d27d4299a742d170d41105de1689aa46cristy { 462950e64b85215ce366ca50af1ba16326c784221f92cristy for (j=0; j < (ssize_t) count; j++) 4630cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony sum+=pixels[j]; 4631cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony sum/=count; 46324a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy SetPixelChannel(destination,channel,ClampToQuantum(sum),pixel); 46335c4e2586d27d4299a742d170d41105de1689aa46cristy continue; 46345c4e2586d27d4299a742d170d41105de1689aa46cristy } 463550e64b85215ce366ca50af1ba16326c784221f92cristy for (j=0; j < (ssize_t) count; j++) 46365c4e2586d27d4299a742d170d41105de1689aa46cristy { 46375c4e2586d27d4299a742d170d41105de1689aa46cristy alpha[j]=QuantumScale*GetPixelAlpha(source,p+j* 46385c4e2586d27d4299a742d170d41105de1689aa46cristy GetPixelChannels(source)); 46395c4e2586d27d4299a742d170d41105de1689aa46cristy pixels[j]*=alpha[j]; 4640c58380ae9cfade8bdda88414145d2ef44b13348fcristy gamma=MagickEpsilonReciprocal(alpha[j]); 4641cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony sum+=gamma*pixels[j]; 46425c4e2586d27d4299a742d170d41105de1689aa46cristy } 4643cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony sum/=count; 46444a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy SetPixelChannel(destination,channel,ClampToQuantum(sum),pixel); 46455c4e2586d27d4299a742d170d41105de1689aa46cristy } 46465c4e2586d27d4299a742d170d41105de1689aa46cristy break; 46475c4e2586d27d4299a742d170d41105de1689aa46cristy } 4648cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony case BilinearInterpolatePixel: 4649cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony default: 4650cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 4651cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony p=GetCacheViewVirtualPixels(source_view,x_offset,y_offset,2,2,exception); 4652cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony if (p == (const Quantum *) NULL) 4653cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 4654cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony status=MagickFalse; 4655cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony break; 4656cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 465750e64b85215ce366ca50af1ba16326c784221f92cristy for (i=0; i < (ssize_t) GetPixelChannels(source); i++) 4658cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 4659cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony PointInfo 4660cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony delta, 4661cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony epsilon; 4662cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony 4663cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony channel=GetPixelChannelMapChannel(source,i); 4664cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony traits=GetPixelChannelMapTraits(source,channel); 4665cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony destination_traits=GetPixelChannelMapTraits(destination,channel); 4666cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony if ((traits == UndefinedPixelTrait) || 4667cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony (destination_traits == UndefinedPixelTrait)) 4668cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony continue; 4669cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony delta.x=x-x_offset; 4670cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony delta.y=y-y_offset; 4671cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony epsilon.x=1.0-delta.x; 4672cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony epsilon.y=1.0-delta.y; 4673cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[0]=(MagickRealType) p[i]; 4674cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[1]=(MagickRealType) p[GetPixelChannels(source)+i]; 4675cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[2]=(MagickRealType) p[2*GetPixelChannels(source)+i]; 4676cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[3]=(MagickRealType) p[3*GetPixelChannels(source)+i]; 4677cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony if ((traits & BlendPixelTrait) == 0) 4678cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 4679cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony gamma=((epsilon.y*(epsilon.x+delta.x)+delta.y*(epsilon.x+delta.x))); 4680cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony gamma=MagickEpsilonReciprocal(gamma); 4681cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony SetPixelChannel(destination,channel,ClampToQuantum(gamma*(epsilon.y* 4682cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony (epsilon.x*pixels[0]+delta.x*pixels[1])+delta.y*(epsilon.x* 4683cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[2]+delta.x*pixels[3]))),pixel); 4684cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony continue; 4685cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 4686cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony alpha[0]=QuantumScale*GetPixelAlpha(source,p); 4687cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony alpha[1]=QuantumScale*GetPixelAlpha(source,p+GetPixelChannels(source)); 4688cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony alpha[2]=QuantumScale*GetPixelAlpha(source,p+2* 4689cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony GetPixelChannels(source)); 4690cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony alpha[3]=QuantumScale*GetPixelAlpha(source,p+3* 4691cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony GetPixelChannels(source)); 4692cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[0]*=alpha[0]; 4693cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[1]*=alpha[1]; 4694cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[2]*=alpha[2]; 4695cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[3]*=alpha[3]; 4696cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony gamma=((epsilon.y*(epsilon.x*alpha[0]+delta.x*alpha[1])+delta.y* 4697cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony (epsilon.x*alpha[2]+delta.x*alpha[3]))); 4698cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony gamma=MagickEpsilonReciprocal(gamma); 4699cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony SetPixelChannel(destination,channel,ClampToQuantum(gamma*(epsilon.y* 4700cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony (epsilon.x*pixels[0]+delta.x*pixels[1])+delta.y*(epsilon.x*pixels[2]+ 4701cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony delta.x*pixels[3]))),pixel); 4702cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 4703cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony break; 4704cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 4705cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony case CatromInterpolatePixel: 47065c4e2586d27d4299a742d170d41105de1689aa46cristy { 47075c4e2586d27d4299a742d170d41105de1689aa46cristy MagickRealType 4708380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy cx[4], 4709380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy cy[4]; 47105c4e2586d27d4299a742d170d41105de1689aa46cristy 47115c4e2586d27d4299a742d170d41105de1689aa46cristy p=GetCacheViewVirtualPixels(source_view,x_offset-1,y_offset-1,4,4, 47125c4e2586d27d4299a742d170d41105de1689aa46cristy exception); 47135c4e2586d27d4299a742d170d41105de1689aa46cristy if (p == (const Quantum *) NULL) 47145c4e2586d27d4299a742d170d41105de1689aa46cristy { 47155c4e2586d27d4299a742d170d41105de1689aa46cristy status=MagickFalse; 47165c4e2586d27d4299a742d170d41105de1689aa46cristy break; 47175c4e2586d27d4299a742d170d41105de1689aa46cristy } 471850e64b85215ce366ca50af1ba16326c784221f92cristy for (i=0; i < (ssize_t) GetPixelChannels(source); i++) 47195c4e2586d27d4299a742d170d41105de1689aa46cristy { 47205c4e2586d27d4299a742d170d41105de1689aa46cristy register ssize_t 47215c4e2586d27d4299a742d170d41105de1689aa46cristy j; 47225c4e2586d27d4299a742d170d41105de1689aa46cristy 4723e2a912b6c9086c98ec838baa0824cd8deca55538cristy channel=GetPixelChannelMapChannel(source,i); 4724abace416e67464ca6dac2324410667b05076a9c2cristy traits=GetPixelChannelMapTraits(source,channel); 47255c4e2586d27d4299a742d170d41105de1689aa46cristy destination_traits=GetPixelChannelMapTraits(destination,channel); 47265c4e2586d27d4299a742d170d41105de1689aa46cristy if ((traits == UndefinedPixelTrait) || 47275c4e2586d27d4299a742d170d41105de1689aa46cristy (destination_traits == UndefinedPixelTrait)) 47285c4e2586d27d4299a742d170d41105de1689aa46cristy continue; 47295c4e2586d27d4299a742d170d41105de1689aa46cristy if ((traits & BlendPixelTrait) == 0) 47305c4e2586d27d4299a742d170d41105de1689aa46cristy for (j=0; j < 16; j++) 47315c4e2586d27d4299a742d170d41105de1689aa46cristy { 47325c4e2586d27d4299a742d170d41105de1689aa46cristy alpha[j]=1.0; 47335c4e2586d27d4299a742d170d41105de1689aa46cristy pixels[j]=(MagickRealType) p[j*GetPixelChannels(source)+i]; 47345c4e2586d27d4299a742d170d41105de1689aa46cristy } 47355c4e2586d27d4299a742d170d41105de1689aa46cristy else 47365c4e2586d27d4299a742d170d41105de1689aa46cristy for (j=0; j < 16; j++) 47375c4e2586d27d4299a742d170d41105de1689aa46cristy { 47385c4e2586d27d4299a742d170d41105de1689aa46cristy alpha[j]=QuantumScale*GetPixelAlpha(source,p+j* 47395c4e2586d27d4299a742d170d41105de1689aa46cristy GetPixelChannels(source)); 47405c4e2586d27d4299a742d170d41105de1689aa46cristy pixels[j]=alpha[j]*p[j*GetPixelChannels(source)+i]; 47415c4e2586d27d4299a742d170d41105de1689aa46cristy } 4742d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas CatromWeights((MagickRealType) (x-x_offset),&cx); 4743d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas CatromWeights((MagickRealType) (y-y_offset),&cy); 4744d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas gamma=((traits & BlendPixelTrait) ? (MagickRealType) (1.0) : 4745d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas MagickEpsilonReciprocal(cy[0]*(cx[0]*alpha[0]+cx[1]*alpha[1]+cx[2]* 4746d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas alpha[2]+cx[3]*alpha[3])+cy[1]*(cx[0]*alpha[4]+cx[1]*alpha[5]+cx[2]* 4747d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas alpha[6]+cx[3]*alpha[7])+cy[2]*(cx[0]*alpha[8]+cx[1]*alpha[9]+cx[2]* 4748d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas alpha[10]+cx[3]*alpha[11])+cy[3]*(cx[0]*alpha[12]+cx[1]*alpha[13]+ 4749d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas cx[2]*alpha[14]+cx[3]*alpha[15]))); 4750380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy SetPixelChannel(destination,channel,ClampToQuantum(gamma*(cy[0]*(cx[0]* 4751380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy pixels[0]+cx[1]*pixels[1]+cx[2]*pixels[2]+cx[3]*pixels[3])+cy[1]* 4752380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy (cx[0]*pixels[4]+cx[1]*pixels[5]+cx[2]*pixels[6]+cx[3]*pixels[7])+ 4753380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy cy[2]*(cx[0]*pixels[8]+cx[1]*pixels[9]+cx[2]*pixels[10]+cx[3]* 4754d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[11])+cy[3]*(cx[0]*pixels[12]+cx[1]*pixels[13]+cx[2]* 4755d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[14]+cx[3]*pixels[15]))),pixel); 47565c4e2586d27d4299a742d170d41105de1689aa46cristy } 47575c4e2586d27d4299a742d170d41105de1689aa46cristy break; 47585c4e2586d27d4299a742d170d41105de1689aa46cristy } 4759cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony#if 0 476020075dc279f25ae4cc7291a7e54f076a61a1f068nicolas /* deprecated useless and very slow interpolator */ 47615c4e2586d27d4299a742d170d41105de1689aa46cristy case FilterInterpolatePixel: 47625c4e2586d27d4299a742d170d41105de1689aa46cristy { 476350e64b85215ce366ca50af1ba16326c784221f92cristy for (i=0; i < (ssize_t) GetPixelChannels(source); i++) 47645c4e2586d27d4299a742d170d41105de1689aa46cristy { 47655c4e2586d27d4299a742d170d41105de1689aa46cristy CacheView 47665c4e2586d27d4299a742d170d41105de1689aa46cristy *filter_view; 47675c4e2586d27d4299a742d170d41105de1689aa46cristy 47685c4e2586d27d4299a742d170d41105de1689aa46cristy Image 47695c4e2586d27d4299a742d170d41105de1689aa46cristy *excerpt_source, 47705c4e2586d27d4299a742d170d41105de1689aa46cristy *filter_source; 47715c4e2586d27d4299a742d170d41105de1689aa46cristy 47725c4e2586d27d4299a742d170d41105de1689aa46cristy RectangleInfo 47735c4e2586d27d4299a742d170d41105de1689aa46cristy geometry; 47745c4e2586d27d4299a742d170d41105de1689aa46cristy 4775e2a912b6c9086c98ec838baa0824cd8deca55538cristy channel=GetPixelChannelMapChannel(source,i); 4776abace416e67464ca6dac2324410667b05076a9c2cristy traits=GetPixelChannelMapTraits(source,channel); 47775c4e2586d27d4299a742d170d41105de1689aa46cristy destination_traits=GetPixelChannelMapTraits(destination,channel); 47785c4e2586d27d4299a742d170d41105de1689aa46cristy if ((traits == UndefinedPixelTrait) || 47795c4e2586d27d4299a742d170d41105de1689aa46cristy (destination_traits == UndefinedPixelTrait)) 47805c4e2586d27d4299a742d170d41105de1689aa46cristy continue; 47815c4e2586d27d4299a742d170d41105de1689aa46cristy geometry.width=4L; 47825c4e2586d27d4299a742d170d41105de1689aa46cristy geometry.height=4L; 47835c4e2586d27d4299a742d170d41105de1689aa46cristy geometry.x=x_offset-1; 47845c4e2586d27d4299a742d170d41105de1689aa46cristy geometry.y=y_offset-1; 47855c4e2586d27d4299a742d170d41105de1689aa46cristy excerpt_source=ExcerptImage(source,&geometry,exception); 47865c4e2586d27d4299a742d170d41105de1689aa46cristy if (excerpt_source == (Image *) NULL) 47875c4e2586d27d4299a742d170d41105de1689aa46cristy { 47885c4e2586d27d4299a742d170d41105de1689aa46cristy status=MagickFalse; 47895c4e2586d27d4299a742d170d41105de1689aa46cristy continue; 47905c4e2586d27d4299a742d170d41105de1689aa46cristy } 4791aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy filter_source=ResizeImage(excerpt_source,1,1,source->filter,exception); 47925c4e2586d27d4299a742d170d41105de1689aa46cristy excerpt_source=DestroyImage(excerpt_source); 47935c4e2586d27d4299a742d170d41105de1689aa46cristy if (filter_source == (Image *) NULL) 47945c4e2586d27d4299a742d170d41105de1689aa46cristy continue; 4795db070957cf6bf959df9283a482377e8854c3d4d2cristy filter_view=AcquireVirtualCacheView(filter_source,exception); 47965c4e2586d27d4299a742d170d41105de1689aa46cristy p=GetCacheViewVirtualPixels(filter_view,0,0,1,1,exception); 47975c4e2586d27d4299a742d170d41105de1689aa46cristy if (p == (const Quantum *) NULL) 47985c4e2586d27d4299a742d170d41105de1689aa46cristy status=MagickFalse; 47995c4e2586d27d4299a742d170d41105de1689aa46cristy else 48001861c90c5c8c4ceb56885dd86377412aae0f4526cristy { 48014a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy SetPixelChannel(destination,channel,p[i],pixel); 48021861c90c5c8c4ceb56885dd86377412aae0f4526cristy } 48035c4e2586d27d4299a742d170d41105de1689aa46cristy filter_view=DestroyCacheView(filter_view); 48045c4e2586d27d4299a742d170d41105de1689aa46cristy filter_source=DestroyImage(filter_source); 48055c4e2586d27d4299a742d170d41105de1689aa46cristy } 48065c4e2586d27d4299a742d170d41105de1689aa46cristy break; 48075c4e2586d27d4299a742d170d41105de1689aa46cristy } 4808cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony#endif 48095c4e2586d27d4299a742d170d41105de1689aa46cristy case IntegerInterpolatePixel: 48105c4e2586d27d4299a742d170d41105de1689aa46cristy { 48115c4e2586d27d4299a742d170d41105de1689aa46cristy p=GetCacheViewVirtualPixels(source_view,x_offset,y_offset,1,1,exception); 48125c4e2586d27d4299a742d170d41105de1689aa46cristy if (p == (const Quantum *) NULL) 48135c4e2586d27d4299a742d170d41105de1689aa46cristy { 48145c4e2586d27d4299a742d170d41105de1689aa46cristy status=MagickFalse; 48155c4e2586d27d4299a742d170d41105de1689aa46cristy break; 48165c4e2586d27d4299a742d170d41105de1689aa46cristy } 481750e64b85215ce366ca50af1ba16326c784221f92cristy for (i=0; i < (ssize_t) GetPixelChannels(source); i++) 48185c4e2586d27d4299a742d170d41105de1689aa46cristy { 4819e2a912b6c9086c98ec838baa0824cd8deca55538cristy channel=GetPixelChannelMapChannel(source,i); 4820abace416e67464ca6dac2324410667b05076a9c2cristy traits=GetPixelChannelMapTraits(source,channel); 48215c4e2586d27d4299a742d170d41105de1689aa46cristy destination_traits=GetPixelChannelMapTraits(destination,channel); 48225c4e2586d27d4299a742d170d41105de1689aa46cristy if ((traits == UndefinedPixelTrait) || 48235c4e2586d27d4299a742d170d41105de1689aa46cristy (destination_traits == UndefinedPixelTrait)) 48245c4e2586d27d4299a742d170d41105de1689aa46cristy continue; 48254a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy SetPixelChannel(destination,channel,p[i],pixel); 48265c4e2586d27d4299a742d170d41105de1689aa46cristy } 48275c4e2586d27d4299a742d170d41105de1689aa46cristy break; 48285c4e2586d27d4299a742d170d41105de1689aa46cristy } 4829cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony case NearestInterpolatePixel: 48305c4e2586d27d4299a742d170d41105de1689aa46cristy { 4831cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony x_offset=(ssize_t) floor(x+0.5); 4832cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony y_offset=(ssize_t) floor(y+0.5); 4833cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony p=GetCacheViewVirtualPixels(source_view,x_offset,y_offset,1,1,exception); 48345c4e2586d27d4299a742d170d41105de1689aa46cristy if (p == (const Quantum *) NULL) 48355c4e2586d27d4299a742d170d41105de1689aa46cristy { 48365c4e2586d27d4299a742d170d41105de1689aa46cristy status=MagickFalse; 48375c4e2586d27d4299a742d170d41105de1689aa46cristy break; 48385c4e2586d27d4299a742d170d41105de1689aa46cristy } 483950e64b85215ce366ca50af1ba16326c784221f92cristy for (i=0; i < (ssize_t) GetPixelChannels(source); i++) 48405c4e2586d27d4299a742d170d41105de1689aa46cristy { 4841e2a912b6c9086c98ec838baa0824cd8deca55538cristy channel=GetPixelChannelMapChannel(source,i); 4842abace416e67464ca6dac2324410667b05076a9c2cristy traits=GetPixelChannelMapTraits(source,channel); 48435c4e2586d27d4299a742d170d41105de1689aa46cristy destination_traits=GetPixelChannelMapTraits(destination,channel); 48445c4e2586d27d4299a742d170d41105de1689aa46cristy if ((traits == UndefinedPixelTrait) || 48455c4e2586d27d4299a742d170d41105de1689aa46cristy (destination_traits == UndefinedPixelTrait)) 48465c4e2586d27d4299a742d170d41105de1689aa46cristy continue; 48474a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy SetPixelChannel(destination,channel,p[i],pixel); 48485c4e2586d27d4299a742d170d41105de1689aa46cristy } 48495c4e2586d27d4299a742d170d41105de1689aa46cristy break; 48505c4e2586d27d4299a742d170d41105de1689aa46cristy } 48515c4e2586d27d4299a742d170d41105de1689aa46cristy case MeshInterpolatePixel: 48525c4e2586d27d4299a742d170d41105de1689aa46cristy { 48535c4e2586d27d4299a742d170d41105de1689aa46cristy p=GetCacheViewVirtualPixels(source_view,x_offset,y_offset,2,2,exception); 48545c4e2586d27d4299a742d170d41105de1689aa46cristy if (p == (const Quantum *) NULL) 48555c4e2586d27d4299a742d170d41105de1689aa46cristy { 48565c4e2586d27d4299a742d170d41105de1689aa46cristy status=MagickFalse; 48575c4e2586d27d4299a742d170d41105de1689aa46cristy break; 48585c4e2586d27d4299a742d170d41105de1689aa46cristy } 485950e64b85215ce366ca50af1ba16326c784221f92cristy for (i=0; i < (ssize_t) GetPixelChannels(source); i++) 48605c4e2586d27d4299a742d170d41105de1689aa46cristy { 48615c4e2586d27d4299a742d170d41105de1689aa46cristy PointInfo 48625c4e2586d27d4299a742d170d41105de1689aa46cristy delta, 48635c4e2586d27d4299a742d170d41105de1689aa46cristy luminance; 48645c4e2586d27d4299a742d170d41105de1689aa46cristy 4865e2a912b6c9086c98ec838baa0824cd8deca55538cristy channel=GetPixelChannelMapChannel(source,i); 4866abace416e67464ca6dac2324410667b05076a9c2cristy traits=GetPixelChannelMapTraits(source,channel); 48675c4e2586d27d4299a742d170d41105de1689aa46cristy destination_traits=GetPixelChannelMapTraits(destination,channel); 48685c4e2586d27d4299a742d170d41105de1689aa46cristy if ((traits == UndefinedPixelTrait) || 48695c4e2586d27d4299a742d170d41105de1689aa46cristy (destination_traits == UndefinedPixelTrait)) 48705c4e2586d27d4299a742d170d41105de1689aa46cristy continue; 48711861c90c5c8c4ceb56885dd86377412aae0f4526cristy pixels[0]=(MagickRealType) p[i]; 48721861c90c5c8c4ceb56885dd86377412aae0f4526cristy pixels[1]=(MagickRealType) p[GetPixelChannels(source)+i]; 48731861c90c5c8c4ceb56885dd86377412aae0f4526cristy pixels[2]=(MagickRealType) p[2*GetPixelChannels(source)+i]; 48741861c90c5c8c4ceb56885dd86377412aae0f4526cristy pixels[3]=(MagickRealType) p[3*GetPixelChannels(source)+i]; 48751861c90c5c8c4ceb56885dd86377412aae0f4526cristy if ((traits & BlendPixelTrait) == 0) 48761861c90c5c8c4ceb56885dd86377412aae0f4526cristy { 48771861c90c5c8c4ceb56885dd86377412aae0f4526cristy alpha[0]=1.0; 48781861c90c5c8c4ceb56885dd86377412aae0f4526cristy alpha[1]=1.0; 48791861c90c5c8c4ceb56885dd86377412aae0f4526cristy alpha[2]=1.0; 48801861c90c5c8c4ceb56885dd86377412aae0f4526cristy alpha[3]=1.0; 48811861c90c5c8c4ceb56885dd86377412aae0f4526cristy } 48821861c90c5c8c4ceb56885dd86377412aae0f4526cristy else 48831861c90c5c8c4ceb56885dd86377412aae0f4526cristy { 48841861c90c5c8c4ceb56885dd86377412aae0f4526cristy alpha[0]=QuantumScale*GetPixelAlpha(source,p); 48851861c90c5c8c4ceb56885dd86377412aae0f4526cristy alpha[1]=QuantumScale*GetPixelAlpha(source,p+ 48861861c90c5c8c4ceb56885dd86377412aae0f4526cristy GetPixelChannels(source)); 48871861c90c5c8c4ceb56885dd86377412aae0f4526cristy alpha[2]=QuantumScale*GetPixelAlpha(source,p+2* 48881861c90c5c8c4ceb56885dd86377412aae0f4526cristy GetPixelChannels(source)); 48891861c90c5c8c4ceb56885dd86377412aae0f4526cristy alpha[3]=QuantumScale*GetPixelAlpha(source,p+3* 48901861c90c5c8c4ceb56885dd86377412aae0f4526cristy GetPixelChannels(source)); 48911861c90c5c8c4ceb56885dd86377412aae0f4526cristy } 48921861c90c5c8c4ceb56885dd86377412aae0f4526cristy delta.x=x-x_offset; 48931861c90c5c8c4ceb56885dd86377412aae0f4526cristy delta.y=y-y_offset; 4894cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony luminance.x=fabs((double)( 4895cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony GetPixelLuminance(source,p) 4896cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony -GetPixelLuminance(source,p+3*GetPixelChannels(source)))); 4897cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony luminance.y=fabs((double)( 4898cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony GetPixelLuminance(source,p+GetPixelChannels(source)) 4899cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony -GetPixelLuminance(source,p+2*GetPixelChannels(source)))); 4900cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony if (luminance.x < luminance.y) 49011861c90c5c8c4ceb56885dd86377412aae0f4526cristy { 49021861c90c5c8c4ceb56885dd86377412aae0f4526cristy /* 49031861c90c5c8c4ceb56885dd86377412aae0f4526cristy Diagonal 0-3 NW-SE. 49041861c90c5c8c4ceb56885dd86377412aae0f4526cristy */ 49051861c90c5c8c4ceb56885dd86377412aae0f4526cristy if (delta.x <= delta.y) 49061861c90c5c8c4ceb56885dd86377412aae0f4526cristy { 49071861c90c5c8c4ceb56885dd86377412aae0f4526cristy /* 49081861c90c5c8c4ceb56885dd86377412aae0f4526cristy Bottom-left triangle (pixel: 2, diagonal: 0-3). 49091861c90c5c8c4ceb56885dd86377412aae0f4526cristy */ 49101861c90c5c8c4ceb56885dd86377412aae0f4526cristy delta.y=1.0-delta.y; 49111861c90c5c8c4ceb56885dd86377412aae0f4526cristy gamma=MeshInterpolate(&delta,alpha[2],alpha[3],alpha[0]); 4912c58380ae9cfade8bdda88414145d2ef44b13348fcristy gamma=MagickEpsilonReciprocal(gamma); 49134a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy SetPixelChannel(destination,channel,ClampToQuantum(gamma* 49144a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy MeshInterpolate(&delta,pixels[2],pixels[3],pixels[0])),pixel); 49151861c90c5c8c4ceb56885dd86377412aae0f4526cristy } 49161861c90c5c8c4ceb56885dd86377412aae0f4526cristy else 49171861c90c5c8c4ceb56885dd86377412aae0f4526cristy { 49181861c90c5c8c4ceb56885dd86377412aae0f4526cristy /* 49191861c90c5c8c4ceb56885dd86377412aae0f4526cristy Top-right triangle (pixel: 1, diagonal: 0-3). 49201861c90c5c8c4ceb56885dd86377412aae0f4526cristy */ 49211861c90c5c8c4ceb56885dd86377412aae0f4526cristy delta.x=1.0-delta.x; 49221861c90c5c8c4ceb56885dd86377412aae0f4526cristy gamma=MeshInterpolate(&delta,alpha[1],alpha[0],alpha[3]); 4923c58380ae9cfade8bdda88414145d2ef44b13348fcristy gamma=MagickEpsilonReciprocal(gamma); 49244a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy SetPixelChannel(destination,channel,ClampToQuantum(gamma* 49254a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy MeshInterpolate(&delta,pixels[1],pixels[0],pixels[3])),pixel); 49261861c90c5c8c4ceb56885dd86377412aae0f4526cristy } 49271861c90c5c8c4ceb56885dd86377412aae0f4526cristy } 49281861c90c5c8c4ceb56885dd86377412aae0f4526cristy else 49291861c90c5c8c4ceb56885dd86377412aae0f4526cristy { 49301861c90c5c8c4ceb56885dd86377412aae0f4526cristy /* 49311861c90c5c8c4ceb56885dd86377412aae0f4526cristy Diagonal 1-2 NE-SW. 49321861c90c5c8c4ceb56885dd86377412aae0f4526cristy */ 49331861c90c5c8c4ceb56885dd86377412aae0f4526cristy if (delta.x <= (1.0-delta.y)) 49341861c90c5c8c4ceb56885dd86377412aae0f4526cristy { 49351861c90c5c8c4ceb56885dd86377412aae0f4526cristy /* 49361861c90c5c8c4ceb56885dd86377412aae0f4526cristy Top-left triangle (pixel: 0, diagonal: 1-2). 49371861c90c5c8c4ceb56885dd86377412aae0f4526cristy */ 49381861c90c5c8c4ceb56885dd86377412aae0f4526cristy gamma=MeshInterpolate(&delta,alpha[0],alpha[1],alpha[2]); 4939c58380ae9cfade8bdda88414145d2ef44b13348fcristy gamma=MagickEpsilonReciprocal(gamma); 49404a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy SetPixelChannel(destination,channel,ClampToQuantum(gamma* 49414a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy MeshInterpolate(&delta,pixels[0],pixels[1],pixels[2])),pixel); 49421861c90c5c8c4ceb56885dd86377412aae0f4526cristy } 49431861c90c5c8c4ceb56885dd86377412aae0f4526cristy else 49441861c90c5c8c4ceb56885dd86377412aae0f4526cristy { 49451861c90c5c8c4ceb56885dd86377412aae0f4526cristy /* 49461861c90c5c8c4ceb56885dd86377412aae0f4526cristy Bottom-right triangle (pixel: 3, diagonal: 1-2). 49471861c90c5c8c4ceb56885dd86377412aae0f4526cristy */ 49481861c90c5c8c4ceb56885dd86377412aae0f4526cristy delta.x=1.0-delta.x; 49491861c90c5c8c4ceb56885dd86377412aae0f4526cristy delta.y=1.0-delta.y; 49501861c90c5c8c4ceb56885dd86377412aae0f4526cristy gamma=MeshInterpolate(&delta,alpha[3],alpha[2],alpha[1]); 4951c58380ae9cfade8bdda88414145d2ef44b13348fcristy gamma=MagickEpsilonReciprocal(gamma); 49524a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy SetPixelChannel(destination,channel,ClampToQuantum(gamma* 49534a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy MeshInterpolate(&delta,pixels[3],pixels[2],pixels[1])),pixel); 49541861c90c5c8c4ceb56885dd86377412aae0f4526cristy } 49551861c90c5c8c4ceb56885dd86377412aae0f4526cristy } 49565c4e2586d27d4299a742d170d41105de1689aa46cristy } 49575c4e2586d27d4299a742d170d41105de1689aa46cristy break; 49585c4e2586d27d4299a742d170d41105de1689aa46cristy } 49595c4e2586d27d4299a742d170d41105de1689aa46cristy case SplineInterpolatePixel: 49605c4e2586d27d4299a742d170d41105de1689aa46cristy { 4961d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas MagickRealType 4962d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas cx[4], 4963d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas cy[4]; 4964d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas 49655c4e2586d27d4299a742d170d41105de1689aa46cristy p=GetCacheViewVirtualPixels(source_view,x_offset-1,y_offset-1,4,4, 49665c4e2586d27d4299a742d170d41105de1689aa46cristy exception); 49675c4e2586d27d4299a742d170d41105de1689aa46cristy if (p == (const Quantum *) NULL) 49685c4e2586d27d4299a742d170d41105de1689aa46cristy { 49695c4e2586d27d4299a742d170d41105de1689aa46cristy status=MagickFalse; 49705c4e2586d27d4299a742d170d41105de1689aa46cristy break; 49715c4e2586d27d4299a742d170d41105de1689aa46cristy } 497250e64b85215ce366ca50af1ba16326c784221f92cristy for (i=0; i < (ssize_t) GetPixelChannels(source); i++) 49735c4e2586d27d4299a742d170d41105de1689aa46cristy { 49745c4e2586d27d4299a742d170d41105de1689aa46cristy register ssize_t 49755c4e2586d27d4299a742d170d41105de1689aa46cristy j; 49765c4e2586d27d4299a742d170d41105de1689aa46cristy 4977e2a912b6c9086c98ec838baa0824cd8deca55538cristy channel=GetPixelChannelMapChannel(source,i); 4978abace416e67464ca6dac2324410667b05076a9c2cristy traits=GetPixelChannelMapTraits(source,channel); 49795c4e2586d27d4299a742d170d41105de1689aa46cristy destination_traits=GetPixelChannelMapTraits(destination,channel); 49805c4e2586d27d4299a742d170d41105de1689aa46cristy if ((traits == UndefinedPixelTrait) || 49815c4e2586d27d4299a742d170d41105de1689aa46cristy (destination_traits == UndefinedPixelTrait)) 49825c4e2586d27d4299a742d170d41105de1689aa46cristy continue; 49835c4e2586d27d4299a742d170d41105de1689aa46cristy if ((traits & BlendPixelTrait) == 0) 49845c4e2586d27d4299a742d170d41105de1689aa46cristy for (j=0; j < 16; j++) 49855c4e2586d27d4299a742d170d41105de1689aa46cristy { 49865c4e2586d27d4299a742d170d41105de1689aa46cristy alpha[j]=1.0; 49875c4e2586d27d4299a742d170d41105de1689aa46cristy pixels[j]=(MagickRealType) p[j*GetPixelChannels(source)+i]; 49885c4e2586d27d4299a742d170d41105de1689aa46cristy } 49895c4e2586d27d4299a742d170d41105de1689aa46cristy else 49905c4e2586d27d4299a742d170d41105de1689aa46cristy for (j=0; j < 16; j++) 49915c4e2586d27d4299a742d170d41105de1689aa46cristy { 49925c4e2586d27d4299a742d170d41105de1689aa46cristy alpha[j]=QuantumScale*GetPixelAlpha(source,p+j* 49935c4e2586d27d4299a742d170d41105de1689aa46cristy GetPixelChannels(source)); 49945c4e2586d27d4299a742d170d41105de1689aa46cristy pixels[j]=alpha[j]*p[j*GetPixelChannels(source)+i]; 49955c4e2586d27d4299a742d170d41105de1689aa46cristy } 4996d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas SplineWeights((MagickRealType) (x-x_offset),&cx); 4997d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas SplineWeights((MagickRealType) (y-y_offset),&cy); 4998d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas gamma=((traits & BlendPixelTrait) ? (MagickRealType) (1.0) : 4999d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas MagickEpsilonReciprocal(cy[0]*(cx[0]*alpha[0]+cx[1]*alpha[1]+cx[2]* 5000d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas alpha[2]+cx[3]*alpha[3])+cy[1]*(cx[0]*alpha[4]+cx[1]*alpha[5]+cx[2]* 5001d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas alpha[6]+cx[3]*alpha[7])+cy[2]*(cx[0]*alpha[8]+cx[1]*alpha[9]+cx[2]* 5002d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas alpha[10]+cx[3]*alpha[11])+cy[3]*(cx[0]*alpha[12]+cx[1]*alpha[13]+ 5003d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas cx[2]*alpha[14]+cx[3]*alpha[15]))); 5004d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas SetPixelChannel(destination,channel,ClampToQuantum(gamma*(cy[0]*(cx[0]* 5005d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[0]+cx[1]*pixels[1]+cx[2]*pixels[2]+cx[3]*pixels[3])+cy[1]* 5006d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas (cx[0]*pixels[4]+cx[1]*pixels[5]+cx[2]*pixels[6]+cx[3]*pixels[7])+ 5007d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas cy[2]*(cx[0]*pixels[8]+cx[1]*pixels[9]+cx[2]*pixels[10]+cx[3]* 5008d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[11])+cy[3]*(cx[0]*pixels[12]+cx[1]*pixels[13]+cx[2]* 5009d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[14]+cx[3]*pixels[15]))),pixel); 50105c4e2586d27d4299a742d170d41105de1689aa46cristy } 50115c4e2586d27d4299a742d170d41105de1689aa46cristy break; 50125c4e2586d27d4299a742d170d41105de1689aa46cristy } 50135c4e2586d27d4299a742d170d41105de1689aa46cristy } 50145c4e2586d27d4299a742d170d41105de1689aa46cristy return(status); 50155c4e2586d27d4299a742d170d41105de1689aa46cristy} 50165c4e2586d27d4299a742d170d41105de1689aa46cristy 50175c4e2586d27d4299a742d170d41105de1689aa46cristy/* 50185c4e2586d27d4299a742d170d41105de1689aa46cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50195c4e2586d27d4299a742d170d41105de1689aa46cristy% % 50205c4e2586d27d4299a742d170d41105de1689aa46cristy% % 50215c4e2586d27d4299a742d170d41105de1689aa46cristy% % 50229075cdb062fda00666ab37b0ba7df4b8cc2e8eaccristy% I n t e r p o l a t e P i x e l I n f o % 5023d76c51ed30cf4084f4434ba08925d16001d1e340cristy% % 5024d76c51ed30cf4084f4434ba08925d16001d1e340cristy% % 5025d76c51ed30cf4084f4434ba08925d16001d1e340cristy% % 5026d76c51ed30cf4084f4434ba08925d16001d1e340cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5027d76c51ed30cf4084f4434ba08925d16001d1e340cristy% 5028884f600898ca6935a7981b4d56bf3d2c4ec17011cristy% InterpolatePixelInfo() applies a pixel interpolation method between a 5029884f600898ca6935a7981b4d56bf3d2c4ec17011cristy% floating point coordinate and the pixels surrounding that coordinate. No 5030884f600898ca6935a7981b4d56bf3d2c4ec17011cristy% pixel area resampling, or scaling of the result is performed. 5031d76c51ed30cf4084f4434ba08925d16001d1e340cristy% 5032cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony% Interpolation is restricted to just RGBKA channels. 5033cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony% 50344c08aed51c5899665ade97263692328eea4af106cristy% The format of the InterpolatePixelInfo method is: 5035d76c51ed30cf4084f4434ba08925d16001d1e340cristy% 50364c08aed51c5899665ade97263692328eea4af106cristy% MagickBooleanType InterpolatePixelInfo(const Image *image, 50375c4e2586d27d4299a742d170d41105de1689aa46cristy% const CacheView *image_view,const PixelInterpolateMethod method, 50384c08aed51c5899665ade97263692328eea4af106cristy% const double x,const double y,PixelInfo *pixel, 5039d76c51ed30cf4084f4434ba08925d16001d1e340cristy% ExceptionInfo *exception) 5040d76c51ed30cf4084f4434ba08925d16001d1e340cristy% 5041d76c51ed30cf4084f4434ba08925d16001d1e340cristy% A description of each parameter follows: 5042d76c51ed30cf4084f4434ba08925d16001d1e340cristy% 5043d76c51ed30cf4084f4434ba08925d16001d1e340cristy% o image: the image. 5044d76c51ed30cf4084f4434ba08925d16001d1e340cristy% 5045d76c51ed30cf4084f4434ba08925d16001d1e340cristy% o image_view: the image view. 5046d76c51ed30cf4084f4434ba08925d16001d1e340cristy% 5047d76c51ed30cf4084f4434ba08925d16001d1e340cristy% o method: the pixel color interpolation method. 5048d76c51ed30cf4084f4434ba08925d16001d1e340cristy% 5049d76c51ed30cf4084f4434ba08925d16001d1e340cristy% o x,y: A double representing the current (x,y) position of the pixel. 5050d76c51ed30cf4084f4434ba08925d16001d1e340cristy% 5051d76c51ed30cf4084f4434ba08925d16001d1e340cristy% o pixel: return the interpolated pixel here. 5052d76c51ed30cf4084f4434ba08925d16001d1e340cristy% 5053d76c51ed30cf4084f4434ba08925d16001d1e340cristy% o exception: return any errors or warnings in this structure. 5054d76c51ed30cf4084f4434ba08925d16001d1e340cristy% 5055d76c51ed30cf4084f4434ba08925d16001d1e340cristy*/ 5056d76c51ed30cf4084f4434ba08925d16001d1e340cristy 50574c08aed51c5899665ade97263692328eea4af106cristystatic inline void AlphaBlendPixelInfo(const Image *image, 50584c08aed51c5899665ade97263692328eea4af106cristy const Quantum *pixel,PixelInfo *pixel_info,MagickRealType *alpha) 5059d76c51ed30cf4084f4434ba08925d16001d1e340cristy{ 5060241310d359ef6893f4d0c1e43eeb39f34991fd2acristy if (image->matte == MagickFalse) 5061241310d359ef6893f4d0c1e43eeb39f34991fd2acristy { 5062241310d359ef6893f4d0c1e43eeb39f34991fd2acristy *alpha=1.0; 50634c08aed51c5899665ade97263692328eea4af106cristy pixel_info->red=(MagickRealType) GetPixelRed(image,pixel); 50644c08aed51c5899665ade97263692328eea4af106cristy pixel_info->green=(MagickRealType) GetPixelGreen(image,pixel); 50654c08aed51c5899665ade97263692328eea4af106cristy pixel_info->blue=(MagickRealType) GetPixelBlue(image,pixel); 50664c08aed51c5899665ade97263692328eea4af106cristy pixel_info->black=0.0; 50674c08aed51c5899665ade97263692328eea4af106cristy if (image->colorspace == CMYKColorspace) 50684c08aed51c5899665ade97263692328eea4af106cristy pixel_info->black=(MagickRealType) GetPixelBlack(image,pixel); 50694c08aed51c5899665ade97263692328eea4af106cristy pixel_info->alpha=(MagickRealType) GetPixelAlpha(image,pixel); 5070241310d359ef6893f4d0c1e43eeb39f34991fd2acristy return; 5071241310d359ef6893f4d0c1e43eeb39f34991fd2acristy } 50724c08aed51c5899665ade97263692328eea4af106cristy *alpha=QuantumScale*GetPixelAlpha(image,pixel); 50734c08aed51c5899665ade97263692328eea4af106cristy pixel_info->red=(*alpha*GetPixelRed(image,pixel)); 50744c08aed51c5899665ade97263692328eea4af106cristy pixel_info->green=(*alpha*GetPixelGreen(image,pixel)); 50754c08aed51c5899665ade97263692328eea4af106cristy pixel_info->blue=(*alpha*GetPixelBlue(image,pixel)); 50764c08aed51c5899665ade97263692328eea4af106cristy pixel_info->black=0.0; 50774c08aed51c5899665ade97263692328eea4af106cristy if (image->colorspace == CMYKColorspace) 50784c08aed51c5899665ade97263692328eea4af106cristy pixel_info->black=(*alpha*GetPixelBlack(image,pixel)); 50794c08aed51c5899665ade97263692328eea4af106cristy pixel_info->alpha=(MagickRealType) GetPixelAlpha(image,pixel); 5080d76c51ed30cf4084f4434ba08925d16001d1e340cristy} 5081d76c51ed30cf4084f4434ba08925d16001d1e340cristy 50824c08aed51c5899665ade97263692328eea4af106cristyMagickExport MagickBooleanType InterpolatePixelInfo(const Image *image, 50835c4e2586d27d4299a742d170d41105de1689aa46cristy const CacheView *image_view,const PixelInterpolateMethod method, 50844c08aed51c5899665ade97263692328eea4af106cristy const double x,const double y,PixelInfo *pixel,ExceptionInfo *exception) 5085d76c51ed30cf4084f4434ba08925d16001d1e340cristy{ 5086d76c51ed30cf4084f4434ba08925d16001d1e340cristy MagickBooleanType 5087d76c51ed30cf4084f4434ba08925d16001d1e340cristy status; 5088d76c51ed30cf4084f4434ba08925d16001d1e340cristy 508942587c577d5b808de94915f2388b88b05c3d43a3cristy MagickRealType 509042587c577d5b808de94915f2388b88b05c3d43a3cristy alpha[16], 509142587c577d5b808de94915f2388b88b05c3d43a3cristy gamma; 509242587c577d5b808de94915f2388b88b05c3d43a3cristy 5093865d58d60e5fc755d47771eab37ce5159531629dcristy PixelInfo 5094865d58d60e5fc755d47771eab37ce5159531629dcristy pixels[16]; 5095865d58d60e5fc755d47771eab37ce5159531629dcristy 50964c08aed51c5899665ade97263692328eea4af106cristy register const Quantum 5097d76c51ed30cf4084f4434ba08925d16001d1e340cristy *p; 5098d76c51ed30cf4084f4434ba08925d16001d1e340cristy 509950e64b85215ce366ca50af1ba16326c784221f92cristy register ssize_t 5100d76c51ed30cf4084f4434ba08925d16001d1e340cristy i; 5101d76c51ed30cf4084f4434ba08925d16001d1e340cristy 510242587c577d5b808de94915f2388b88b05c3d43a3cristy ssize_t 510342587c577d5b808de94915f2388b88b05c3d43a3cristy x_offset, 510442587c577d5b808de94915f2388b88b05c3d43a3cristy y_offset; 510542587c577d5b808de94915f2388b88b05c3d43a3cristy 5106cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony PixelInterpolateMethod 5107cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony interpolate; 5108cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony 5109d76c51ed30cf4084f4434ba08925d16001d1e340cristy assert(image != (Image *) NULL); 5110d76c51ed30cf4084f4434ba08925d16001d1e340cristy assert(image->signature == MagickSignature); 5111d76c51ed30cf4084f4434ba08925d16001d1e340cristy assert(image_view != (CacheView *) NULL); 5112d76c51ed30cf4084f4434ba08925d16001d1e340cristy status=MagickTrue; 511342587c577d5b808de94915f2388b88b05c3d43a3cristy x_offset=(ssize_t) floor(x); 511442587c577d5b808de94915f2388b88b05c3d43a3cristy y_offset=(ssize_t) floor(y); 5115cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony interpolate = method; 5116cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony if ( interpolate == UndefinedInterpolatePixel ) 5117cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony interpolate = image->interpolate; 5118cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony switch (interpolate) 5119d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5120cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony case AverageInterpolatePixel: /* nearest 4 neighbours */ 5121cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony case Average9InterpolatePixel: /* nearest 9 neighbours */ 5122cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony case Average16InterpolatePixel: /* nearest 16 neighbours */ 5123d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5124cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony size_t 5125cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony count=2; /* size of the area to average - default nearest 4 */ 5126cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony 5127cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony if (interpolate == Average9InterpolatePixel) 5128cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 5129cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony count=3; 5130cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony x_offset=(ssize_t) (floor(x+0.5)-1); 5131cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony y_offset=(ssize_t) (floor(y+0.5)-1); 5132cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 5133cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony else if (interpolate == Average16InterpolatePixel) 5134cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 5135cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony count=4; 5136cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony x_offset--; 5137cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony y_offset--; 5138cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 5139cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,count,count, 514042587c577d5b808de94915f2388b88b05c3d43a3cristy exception); 51414c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 5142d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5143d76c51ed30cf4084f4434ba08925d16001d1e340cristy status=MagickFalse; 5144d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5145d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5146241310d359ef6893f4d0c1e43eeb39f34991fd2acristy pixel->red=0.0; 5147241310d359ef6893f4d0c1e43eeb39f34991fd2acristy pixel->green=0.0; 5148241310d359ef6893f4d0c1e43eeb39f34991fd2acristy pixel->blue=0.0; 51494c08aed51c5899665ade97263692328eea4af106cristy pixel->black=0.0; 5150865d58d60e5fc755d47771eab37ce5159531629dcristy pixel->alpha=0.0; 5151cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony count*=count; /* number of pixels - square of size */ 515250e64b85215ce366ca50af1ba16326c784221f92cristy for (i=0; i < (ssize_t) count; i++) 5153cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 5154cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony AlphaBlendPixelInfo(image,p,pixels,alpha); 5155cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony gamma=MagickEpsilonReciprocal(alpha[0]); 5156cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixel->red += gamma*pixels[0].red; 5157cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixel->green += gamma*pixels[0].green; 5158cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixel->blue += gamma*pixels[0].blue; 5159cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixel->black += gamma*pixels[0].black; 5160cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixel->alpha += pixels[0].alpha; 5161cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony p += GetPixelChannels(image); 5162cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 5163cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony gamma=1.0/count; /* average weighting of each pixel in area */ 5164cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixel->red *= gamma; 5165cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixel->green *= gamma; 5166cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixel->blue *= gamma; 5167cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixel->black *= gamma; 5168cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixel->alpha *= gamma; 5169cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony break; 5170cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 5171cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony case BackgroundInterpolatePixel: 5172cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 5173cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony *pixel = image->background_color; /* Copy PixelInfo Structure */ 5174d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5175d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5176cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony case BilinearInterpolatePixel: 5177cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony default: 5178cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 5179cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony PointInfo 5180cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony delta, 5181cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony epsilon; 5182cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony 5183cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,2,2,exception); 5184cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony if (p == (const Quantum *) NULL) 5185cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 5186cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony status=MagickFalse; 5187cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony break; 5188cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 5189cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony for (i=0; i < 4L; i++) 5190cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony AlphaBlendPixelInfo(image,p+i*GetPixelChannels(image),pixels+i,alpha+i); 5191cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony delta.x=x-x_offset; 5192cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony delta.y=y-y_offset; 5193cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony epsilon.x=1.0-delta.x; 5194cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony epsilon.y=1.0-delta.y; 5195cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony gamma=((epsilon.y*(epsilon.x*alpha[0]+delta.x*alpha[1])+delta.y* 5196cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony (epsilon.x*alpha[2]+delta.x*alpha[3]))); 5197cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony gamma=MagickEpsilonReciprocal(gamma); 5198cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixel->red=gamma*(epsilon.y*(epsilon.x*pixels[0].red+delta.x* 5199cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[1].red)+delta.y*(epsilon.x*pixels[2].red+delta.x*pixels[3].red)); 5200cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixel->green=gamma*(epsilon.y*(epsilon.x*pixels[0].green+delta.x* 5201cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[1].green)+delta.y*(epsilon.x*pixels[2].green+delta.x* 5202cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[3].green)); 5203cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixel->blue=gamma*(epsilon.y*(epsilon.x*pixels[0].blue+delta.x* 5204cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[1].blue)+delta.y*(epsilon.x*pixels[2].blue+delta.x* 5205cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[3].blue)); 5206cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony if (image->colorspace == CMYKColorspace) 5207cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixel->black=gamma*(epsilon.y*(epsilon.x*pixels[0].black+delta.x* 5208cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[1].black)+delta.y*(epsilon.x*pixels[2].black+delta.x* 5209cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[3].black)); 5210cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony gamma=((epsilon.y*(epsilon.x+delta.x)+delta.y*(epsilon.x+delta.x))); 5211cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony gamma=MagickEpsilonReciprocal(gamma); 5212cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixel->alpha=(epsilon.y*(epsilon.x*pixels[0].alpha+delta.x* 5213cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[1].alpha)+delta.y*(epsilon.x*pixels[2].alpha+delta.x* 5214cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[3].alpha)); 5215cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony break; 5216cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 5217cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony case BlendInterpolatePixel: 5218cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 5219cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,2,2,exception); 5220cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony if (p == (const Quantum *) NULL) 5221cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 5222cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony status=MagickFalse; 5223cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony break; 5224cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 5225cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony for (i=0; i < 4L; i++) 5226cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony AlphaBlendPixelInfo(image,p+i*GetPixelChannels(image),pixels+i,alpha+i); 5227cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony gamma=1.0; /* number of pixels blended together */ 5228cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony for (i=0; i <= 1L; i++) { 5229cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony if ( y-y_offset >= 0.75 ) { 5230cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony alpha[i] = alpha[i+2]; 5231cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[i] = pixels[i+2]; 5232cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 5233cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony else if ( y-y_offset > 0.25 ) { 5234cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony gamma = 2.0; /* each y pixels have been blended */ 5235cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony alpha[i] += alpha[i+2]; /* add up alpha weights */ 5236cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[i].red += pixels[i+2].red; 5237cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[i].green += pixels[i+2].green; 5238cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[i].blue += pixels[i+2].blue; 5239cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[i].black += pixels[i+2].black; 5240cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[i].alpha += pixels[i+2].alpha; 5241cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 5242cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 5243cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony if ( x-x_offset >= 0.75 ) { 5244cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony alpha[0] = alpha[1]; 5245cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[0] = pixels[1]; 5246cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 5247cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony else if ( x-x_offset > 0.25 ) { 5248cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony gamma *= 2.0; /* double number of pixels blended */ 5249cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony alpha[0] += alpha[1]; /* add up alpha weights */ 5250cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[0].red += pixels[1].red; 5251cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[0].green += pixels[1].green; 5252cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[0].blue += pixels[1].blue; 5253cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[0].black += pixels[1].black; 5254cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[0].alpha += pixels[1].alpha; 5255cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 5256cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony gamma = 1.0/gamma; 5257cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony alpha[0]=MagickEpsilonReciprocal(alpha[0]); 5258cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixel->red = alpha[0]*pixels[0].red; 5259cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixel->green = alpha[0]*pixels[0].green; /* divide by sum of alpha */ 5260cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixel->blue = alpha[0]*pixels[0].blue; 5261cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixel->black = alpha[0]*pixels[0].black; 5262cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixel->alpha = gamma*pixels[0].alpha; /* divide by number of pixels */ 5263cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony break; 5264cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 5265cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony case CatromInterpolatePixel: 5266d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5267380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy MagickRealType 5268380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy cx[4], 5269380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy cy[4]; 5270d76c51ed30cf4084f4434ba08925d16001d1e340cristy 527142587c577d5b808de94915f2388b88b05c3d43a3cristy p=GetCacheViewVirtualPixels(image_view,x_offset-1,y_offset-1,4,4, 527242587c577d5b808de94915f2388b88b05c3d43a3cristy exception); 52734c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 5274d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5275d76c51ed30cf4084f4434ba08925d16001d1e340cristy status=MagickFalse; 5276d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5277d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5278cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony for (i=0; i < 16L; i++) 5279cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony AlphaBlendPixelInfo(image,p+i*GetPixelChannels(image),pixels+i,alpha+i); 5280d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas CatromWeights((MagickRealType) (x-x_offset),&cx); 5281d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas CatromWeights((MagickRealType) (y-y_offset),&cy); 5282380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy pixel->red=(cy[0]*(cx[0]*pixels[0].red+cx[1]* 5283380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy pixels[1].red+cx[2]*pixels[2].red+cx[3]* 5284380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy pixels[3].red)+cy[1]*(cx[0]*pixels[4].red+cx[1]* 5285380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy pixels[5].red+cx[2]*pixels[6].red+cx[3]* 5286380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy pixels[7].red)+cy[2]*(cx[0]*pixels[8].red+cx[1]* 5287380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy pixels[9].red+cx[2]*pixels[10].red+cx[3]* 5288380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy pixels[11].red)+cy[3]*(cx[0]*pixels[12].red+cx[1]* 5289380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy pixels[13].red+cx[2]*pixels[14].red+cx[3]*pixels[15].red)); 5290380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy pixel->green=(cy[0]*(cx[0]*pixels[0].green+cx[1]* 5291380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy pixels[1].green+cx[2]*pixels[2].green+cx[3]* 5292380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy pixels[3].green)+cy[1]*(cx[0]*pixels[4].green+cx[1]* 5293380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy pixels[5].green+cx[2]*pixels[6].green+cx[3]* 5294380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy pixels[7].green)+cy[2]*(cx[0]*pixels[8].green+cx[1]* 5295380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy pixels[9].green+cx[2]*pixels[10].green+cx[3]* 5296380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy pixels[11].green)+cy[3]*(cx[0]*pixels[12].green+cx[1]* 5297380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy pixels[13].green+cx[2]*pixels[14].green+cx[3]*pixels[15].green)); 5298380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy pixel->blue=(cy[0]*(cx[0]*pixels[0].blue+cx[1]* 5299380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy pixels[1].blue+cx[2]*pixels[2].blue+cx[3]* 5300380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy pixels[3].blue)+cy[1]*(cx[0]*pixels[4].blue+cx[1]* 5301380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy pixels[5].blue+cx[2]*pixels[6].blue+cx[3]* 5302380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy pixels[7].blue)+cy[2]*(cx[0]*pixels[8].blue+cx[1]* 5303380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy pixels[9].blue+cx[2]*pixels[10].blue+cx[3]* 5304380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy pixels[11].blue)+cy[3]*(cx[0]*pixels[12].blue+cx[1]* 5305380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy pixels[13].blue+cx[2]*pixels[14].blue+cx[3]*pixels[15].blue)); 5306380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy if (image->colorspace == CMYKColorspace) 5307380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy pixel->black=(cy[0]*(cx[0]*pixels[0].black+cx[1]* 5308380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy pixels[1].black+cx[2]*pixels[2].black+cx[3]* 5309380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy pixels[3].black)+cy[1]*(cx[0]*pixels[4].black+cx[1]* 5310380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy pixels[5].black+cx[2]*pixels[6].black+cx[3]* 5311380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy pixels[7].black)+cy[2]*(cx[0]*pixels[8].black+cx[1]* 5312380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy pixels[9].black+cx[2]*pixels[10].black+cx[3]* 5313380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy pixels[11].black)+cy[3]*(cx[0]*pixels[12].black+cx[1]* 5314380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy pixels[13].black+cx[2]*pixels[14].black+cx[3]*pixels[15].black)); 5315380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy pixel->alpha=(cy[0]*(cx[0]*pixels[0].alpha+cx[1]* 5316380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy pixels[1].alpha+cx[2]*pixels[2].alpha+cx[3]* 5317380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy pixels[3].alpha)+cy[1]*(cx[0]*pixels[4].alpha+cx[1]* 5318380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy pixels[5].alpha+cx[2]*pixels[6].alpha+cx[3]* 5319380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy pixels[7].alpha)+cy[2]*(cx[0]*pixels[8].alpha+cx[1]* 5320380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy pixels[9].alpha+cx[2]*pixels[10].alpha+cx[3]* 5321380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy pixels[11].alpha)+cy[3]*(cx[0]*pixels[12].alpha+cx[1]* 5322380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy pixels[13].alpha+cx[2]*pixels[14].alpha+cx[3]*pixels[15].alpha)); 5323d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5324d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5325cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony#if 0 532620075dc279f25ae4cc7291a7e54f076a61a1f068nicolas /* deprecated useless and very slow interpolator */ 5327d76c51ed30cf4084f4434ba08925d16001d1e340cristy case FilterInterpolatePixel: 5328d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5329d76c51ed30cf4084f4434ba08925d16001d1e340cristy CacheView 5330d76c51ed30cf4084f4434ba08925d16001d1e340cristy *filter_view; 5331d76c51ed30cf4084f4434ba08925d16001d1e340cristy 5332d76c51ed30cf4084f4434ba08925d16001d1e340cristy Image 5333d76c51ed30cf4084f4434ba08925d16001d1e340cristy *excerpt_image, 5334d76c51ed30cf4084f4434ba08925d16001d1e340cristy *filter_image; 5335d76c51ed30cf4084f4434ba08925d16001d1e340cristy 5336d76c51ed30cf4084f4434ba08925d16001d1e340cristy RectangleInfo 5337d76c51ed30cf4084f4434ba08925d16001d1e340cristy geometry; 5338d76c51ed30cf4084f4434ba08925d16001d1e340cristy 5339d76c51ed30cf4084f4434ba08925d16001d1e340cristy geometry.width=4L; 5340d76c51ed30cf4084f4434ba08925d16001d1e340cristy geometry.height=4L; 534142587c577d5b808de94915f2388b88b05c3d43a3cristy geometry.x=x_offset-1; 534242587c577d5b808de94915f2388b88b05c3d43a3cristy geometry.y=y_offset-1; 5343d76c51ed30cf4084f4434ba08925d16001d1e340cristy excerpt_image=ExcerptImage(image,&geometry,exception); 5344d76c51ed30cf4084f4434ba08925d16001d1e340cristy if (excerpt_image == (Image *) NULL) 5345d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5346d76c51ed30cf4084f4434ba08925d16001d1e340cristy status=MagickFalse; 5347d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5348d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5349aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy filter_image=ResizeImage(excerpt_image,1,1,image->filter,exception); 5350d76c51ed30cf4084f4434ba08925d16001d1e340cristy excerpt_image=DestroyImage(excerpt_image); 5351d76c51ed30cf4084f4434ba08925d16001d1e340cristy if (filter_image == (Image *) NULL) 5352d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5353db070957cf6bf959df9283a482377e8854c3d4d2cristy filter_view=AcquireVirtualCacheView(filter_image,exception); 5354d76c51ed30cf4084f4434ba08925d16001d1e340cristy p=GetCacheViewVirtualPixels(filter_view,0,0,1,1,exception); 53554c08aed51c5899665ade97263692328eea4af106cristy if (p != (const Quantum *) NULL) 5356803640d20a6a664315eddfff6f8531d0c5e0871dcristy GetPixelInfoPixel(image,p,pixel); 5357d76c51ed30cf4084f4434ba08925d16001d1e340cristy filter_view=DestroyCacheView(filter_view); 5358d76c51ed30cf4084f4434ba08925d16001d1e340cristy filter_image=DestroyImage(filter_image); 5359d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5360d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5361cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony#endif 5362d76c51ed30cf4084f4434ba08925d16001d1e340cristy case IntegerInterpolatePixel: 5363d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 536442587c577d5b808de94915f2388b88b05c3d43a3cristy p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,1,1,exception); 53654c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 5366d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5367d76c51ed30cf4084f4434ba08925d16001d1e340cristy status=MagickFalse; 5368d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5369d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5370803640d20a6a664315eddfff6f8531d0c5e0871dcristy GetPixelInfoPixel(image,p,pixel); 5371d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5372d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5373d76c51ed30cf4084f4434ba08925d16001d1e340cristy case MeshInterpolatePixel: 5374d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5375d76c51ed30cf4084f4434ba08925d16001d1e340cristy PointInfo 5376d76c51ed30cf4084f4434ba08925d16001d1e340cristy delta, 5377d76c51ed30cf4084f4434ba08925d16001d1e340cristy luminance; 5378d76c51ed30cf4084f4434ba08925d16001d1e340cristy 537994ea1636709395774d7118ef56162d211904cfd2cristy p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,2,2,exception); 53804c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 5381d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5382d76c51ed30cf4084f4434ba08925d16001d1e340cristy status=MagickFalse; 5383d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5384d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 538594ea1636709395774d7118ef56162d211904cfd2cristy delta.x=x-x_offset; 538694ea1636709395774d7118ef56162d211904cfd2cristy delta.y=y-y_offset; 5387884f600898ca6935a7981b4d56bf3d2c4ec17011cristy luminance.x=GetPixelLuminance(image,p)-(double) 538894ea1636709395774d7118ef56162d211904cfd2cristy GetPixelLuminance(image,p+3*GetPixelChannels(image)); 538928474bfbda5ee2d4da2eb79f299cf1f692770b99cristy luminance.y=GetPixelLuminance(image,p+GetPixelChannels(image))-(double) 539094ea1636709395774d7118ef56162d211904cfd2cristy GetPixelLuminance(image,p+2*GetPixelChannels(image)); 53915ce8df84afcfec6dc33ee61ac2014edb3871c455cristy AlphaBlendPixelInfo(image,p,pixels+0,alpha+0); 539228474bfbda5ee2d4da2eb79f299cf1f692770b99cristy AlphaBlendPixelInfo(image,p+GetPixelChannels(image),pixels+1,alpha+1); 5393ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+2*GetPixelChannels(image),pixels+2,alpha+2); 5394ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+3*GetPixelChannels(image),pixels+3,alpha+3); 5395d76c51ed30cf4084f4434ba08925d16001d1e340cristy if (fabs(luminance.x) < fabs(luminance.y)) 5396d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5397d76c51ed30cf4084f4434ba08925d16001d1e340cristy /* 5398d76c51ed30cf4084f4434ba08925d16001d1e340cristy Diagonal 0-3 NW-SE. 5399d76c51ed30cf4084f4434ba08925d16001d1e340cristy */ 5400d76c51ed30cf4084f4434ba08925d16001d1e340cristy if (delta.x <= delta.y) 5401d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5402d76c51ed30cf4084f4434ba08925d16001d1e340cristy /* 540394ea1636709395774d7118ef56162d211904cfd2cristy Bottom-left triangle (pixel: 2, diagonal: 0-3). 5404d76c51ed30cf4084f4434ba08925d16001d1e340cristy */ 5405d76c51ed30cf4084f4434ba08925d16001d1e340cristy delta.y=1.0-delta.y; 5406d76c51ed30cf4084f4434ba08925d16001d1e340cristy gamma=MeshInterpolate(&delta,alpha[2],alpha[3],alpha[0]); 5407c58380ae9cfade8bdda88414145d2ef44b13348fcristy gamma=MagickEpsilonReciprocal(gamma); 5408d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->red=gamma*MeshInterpolate(&delta,pixels[2].red, 5409d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[3].red,pixels[0].red); 5410d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->green=gamma*MeshInterpolate(&delta,pixels[2].green, 5411d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[3].green,pixels[0].green); 5412d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->blue=gamma*MeshInterpolate(&delta,pixels[2].blue, 5413d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[3].blue,pixels[0].blue); 54145af738104f48677012746b82ba0daa0dc59bdbb5cristy if (image->colorspace == CMYKColorspace) 54154c08aed51c5899665ade97263692328eea4af106cristy pixel->black=gamma*MeshInterpolate(&delta,pixels[2].black, 54164c08aed51c5899665ade97263692328eea4af106cristy pixels[3].black,pixels[0].black); 541794ea1636709395774d7118ef56162d211904cfd2cristy gamma=MeshInterpolate(&delta,1.0,1.0,1.0); 5418865d58d60e5fc755d47771eab37ce5159531629dcristy pixel->alpha=gamma*MeshInterpolate(&delta,pixels[2].alpha, 5419865d58d60e5fc755d47771eab37ce5159531629dcristy pixels[3].alpha,pixels[0].alpha); 5420d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5421d76c51ed30cf4084f4434ba08925d16001d1e340cristy else 5422d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5423d76c51ed30cf4084f4434ba08925d16001d1e340cristy /* 542494ea1636709395774d7118ef56162d211904cfd2cristy Top-right triangle (pixel:1 , diagonal: 0-3). 5425d76c51ed30cf4084f4434ba08925d16001d1e340cristy */ 5426d76c51ed30cf4084f4434ba08925d16001d1e340cristy delta.x=1.0-delta.x; 5427d76c51ed30cf4084f4434ba08925d16001d1e340cristy gamma=MeshInterpolate(&delta,alpha[1],alpha[0],alpha[3]); 5428c58380ae9cfade8bdda88414145d2ef44b13348fcristy gamma=MagickEpsilonReciprocal(gamma); 5429d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->red=gamma*MeshInterpolate(&delta,pixels[1].red, 5430d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[0].red,pixels[3].red); 5431d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->green=gamma*MeshInterpolate(&delta,pixels[1].green, 5432d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[0].green,pixels[3].green); 5433d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->blue=gamma*MeshInterpolate(&delta,pixels[1].blue, 5434d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[0].blue,pixels[3].blue); 54355af738104f48677012746b82ba0daa0dc59bdbb5cristy if (image->colorspace == CMYKColorspace) 54364c08aed51c5899665ade97263692328eea4af106cristy pixel->black=gamma*MeshInterpolate(&delta,pixels[1].black, 54374c08aed51c5899665ade97263692328eea4af106cristy pixels[0].black,pixels[3].black); 543894ea1636709395774d7118ef56162d211904cfd2cristy gamma=MeshInterpolate(&delta,1.0,1.0,1.0); 5439865d58d60e5fc755d47771eab37ce5159531629dcristy pixel->alpha=gamma*MeshInterpolate(&delta,pixels[1].alpha, 5440865d58d60e5fc755d47771eab37ce5159531629dcristy pixels[0].alpha,pixels[3].alpha); 5441d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5442d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5443d76c51ed30cf4084f4434ba08925d16001d1e340cristy else 5444d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5445d76c51ed30cf4084f4434ba08925d16001d1e340cristy /* 5446d76c51ed30cf4084f4434ba08925d16001d1e340cristy Diagonal 1-2 NE-SW. 5447d76c51ed30cf4084f4434ba08925d16001d1e340cristy */ 5448d76c51ed30cf4084f4434ba08925d16001d1e340cristy if (delta.x <= (1.0-delta.y)) 5449d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5450d76c51ed30cf4084f4434ba08925d16001d1e340cristy /* 545194ea1636709395774d7118ef56162d211904cfd2cristy Top-left triangle (pixel: 0, diagonal: 1-2). 5452d76c51ed30cf4084f4434ba08925d16001d1e340cristy */ 5453d76c51ed30cf4084f4434ba08925d16001d1e340cristy gamma=MeshInterpolate(&delta,alpha[0],alpha[1],alpha[2]); 5454c58380ae9cfade8bdda88414145d2ef44b13348fcristy gamma=MagickEpsilonReciprocal(gamma); 5455d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->red=gamma*MeshInterpolate(&delta,pixels[0].red, 5456d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[1].red,pixels[2].red); 5457d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->green=gamma*MeshInterpolate(&delta,pixels[0].green, 5458d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[1].green,pixels[2].green); 5459d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->blue=gamma*MeshInterpolate(&delta,pixels[0].blue, 5460d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[1].blue,pixels[2].blue); 54615af738104f48677012746b82ba0daa0dc59bdbb5cristy if (image->colorspace == CMYKColorspace) 54624c08aed51c5899665ade97263692328eea4af106cristy pixel->black=gamma*MeshInterpolate(&delta,pixels[0].black, 54634c08aed51c5899665ade97263692328eea4af106cristy pixels[1].black,pixels[2].black); 546494ea1636709395774d7118ef56162d211904cfd2cristy gamma=MeshInterpolate(&delta,1.0,1.0,1.0); 5465865d58d60e5fc755d47771eab37ce5159531629dcristy pixel->alpha=gamma*MeshInterpolate(&delta,pixels[0].alpha, 5466865d58d60e5fc755d47771eab37ce5159531629dcristy pixels[1].alpha,pixels[2].alpha); 5467d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5468d76c51ed30cf4084f4434ba08925d16001d1e340cristy else 5469d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5470d76c51ed30cf4084f4434ba08925d16001d1e340cristy /* 5471d76c51ed30cf4084f4434ba08925d16001d1e340cristy Bottom-right triangle (pixel: 3, diagonal: 1-2). 5472d76c51ed30cf4084f4434ba08925d16001d1e340cristy */ 5473d76c51ed30cf4084f4434ba08925d16001d1e340cristy delta.x=1.0-delta.x; 5474d76c51ed30cf4084f4434ba08925d16001d1e340cristy delta.y=1.0-delta.y; 5475d76c51ed30cf4084f4434ba08925d16001d1e340cristy gamma=MeshInterpolate(&delta,alpha[3],alpha[2],alpha[1]); 5476c58380ae9cfade8bdda88414145d2ef44b13348fcristy gamma=MagickEpsilonReciprocal(gamma); 5477d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->red=gamma*MeshInterpolate(&delta,pixels[3].red, 5478d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[2].red,pixels[1].red); 5479d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->green=gamma*MeshInterpolate(&delta,pixels[3].green, 5480d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[2].green,pixels[1].green); 5481d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->blue=gamma*MeshInterpolate(&delta,pixels[3].blue, 5482d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[2].blue,pixels[1].blue); 54835af738104f48677012746b82ba0daa0dc59bdbb5cristy if (image->colorspace == CMYKColorspace) 54844c08aed51c5899665ade97263692328eea4af106cristy pixel->black=gamma*MeshInterpolate(&delta,pixels[3].black, 54854c08aed51c5899665ade97263692328eea4af106cristy pixels[2].black,pixels[1].black); 548694ea1636709395774d7118ef56162d211904cfd2cristy gamma=MeshInterpolate(&delta,1.0,1.0,1.0); 5487865d58d60e5fc755d47771eab37ce5159531629dcristy pixel->alpha=gamma*MeshInterpolate(&delta,pixels[3].alpha, 5488865d58d60e5fc755d47771eab37ce5159531629dcristy pixels[2].alpha,pixels[1].alpha); 5489d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5490d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5491d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5492d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5493cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony case NearestInterpolatePixel: 5494d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5495cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony x_offset=(ssize_t) floor(x+0.5); 5496cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony y_offset=(ssize_t) floor(y+0.5); 5497cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,1,1,exception); 54984c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 5499d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5500d76c51ed30cf4084f4434ba08925d16001d1e340cristy status=MagickFalse; 5501d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5502d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5503803640d20a6a664315eddfff6f8531d0c5e0871dcristy GetPixelInfoPixel(image,p,pixel); 5504d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5505d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5506d76c51ed30cf4084f4434ba08925d16001d1e340cristy case SplineInterpolatePixel: 5507d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5508d76c51ed30cf4084f4434ba08925d16001d1e340cristy MagickRealType 5509d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas cx[4], 5510d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas cy[4]; 5511d76c51ed30cf4084f4434ba08925d16001d1e340cristy 551242587c577d5b808de94915f2388b88b05c3d43a3cristy p=GetCacheViewVirtualPixels(image_view,x_offset-1,y_offset-1,4,4, 551342587c577d5b808de94915f2388b88b05c3d43a3cristy exception); 55144c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 5515d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5516d76c51ed30cf4084f4434ba08925d16001d1e340cristy status=MagickFalse; 5517d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5518d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5519cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony for (i=0; i < 16L; i++) 5520cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony AlphaBlendPixelInfo(image,p+i*GetPixelChannels(image),pixels+i,alpha+i); 5521d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas SplineWeights((MagickRealType) (x-x_offset),&cx); 5522d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas SplineWeights((MagickRealType) (y-y_offset),&cy); 5523d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixel->red=(cy[0]*(cx[0]*pixels[0].red+cx[1]* 5524d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[1].red+cx[2]*pixels[2].red+cx[3]* 5525d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[3].red)+cy[1]*(cx[0]*pixels[4].red+cx[1]* 5526d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[5].red+cx[2]*pixels[6].red+cx[3]* 5527d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[7].red)+cy[2]*(cx[0]*pixels[8].red+cx[1]* 5528d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[9].red+cx[2]*pixels[10].red+cx[3]* 5529d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[11].red)+cy[3]*(cx[0]*pixels[12].red+cx[1]* 5530d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[13].red+cx[2]*pixels[14].red+cx[3]*pixels[15].red)); 5531d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixel->green=(cy[0]*(cx[0]*pixels[0].green+cx[1]* 5532d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[1].green+cx[2]*pixels[2].green+cx[3]* 5533d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[3].green)+cy[1]*(cx[0]*pixels[4].green+cx[1]* 5534d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[5].green+cx[2]*pixels[6].green+cx[3]* 5535d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[7].green)+cy[2]*(cx[0]*pixels[8].green+cx[1]* 5536d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[9].green+cx[2]*pixels[10].green+cx[3]* 5537d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[11].green)+cy[3]*(cx[0]*pixels[12].green+cx[1]* 5538d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[13].green+cx[2]*pixels[14].green+cx[3]*pixels[15].green)); 5539d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixel->blue=(cy[0]*(cx[0]*pixels[0].blue+cx[1]* 5540d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[1].blue+cx[2]*pixels[2].blue+cx[3]* 5541d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[3].blue)+cy[1]*(cx[0]*pixels[4].blue+cx[1]* 5542d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[5].blue+cx[2]*pixels[6].blue+cx[3]* 5543d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[7].blue)+cy[2]*(cx[0]*pixels[8].blue+cx[1]* 5544d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[9].blue+cx[2]*pixels[10].blue+cx[3]* 5545d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[11].blue)+cy[3]*(cx[0]*pixels[12].blue+cx[1]* 5546d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[13].blue+cx[2]*pixels[14].blue+cx[3]*pixels[15].blue)); 5547d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas if (image->colorspace == CMYKColorspace) 5548d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixel->black=(cy[0]*(cx[0]*pixels[0].black+cx[1]* 5549d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[1].black+cx[2]*pixels[2].black+cx[3]* 5550d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[3].black)+cy[1]*(cx[0]*pixels[4].black+cx[1]* 5551d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[5].black+cx[2]*pixels[6].black+cx[3]* 5552d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[7].black)+cy[2]*(cx[0]*pixels[8].black+cx[1]* 5553d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[9].black+cx[2]*pixels[10].black+cx[3]* 5554d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[11].black)+cy[3]*(cx[0]*pixels[12].black+cx[1]* 5555d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[13].black+cx[2]*pixels[14].black+cx[3]*pixels[15].black)); 5556d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixel->alpha=(cy[0]*(cx[0]*pixels[0].alpha+cx[1]* 5557d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[1].alpha+cx[2]*pixels[2].alpha+cx[3]* 5558d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[3].alpha)+cy[1]*(cx[0]*pixels[4].alpha+cx[1]* 5559d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[5].alpha+cx[2]*pixels[6].alpha+cx[3]* 5560d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[7].alpha)+cy[2]*(cx[0]*pixels[8].alpha+cx[1]* 5561d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[9].alpha+cx[2]*pixels[10].alpha+cx[3]* 5562d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[11].alpha)+cy[3]*(cx[0]*pixels[12].alpha+cx[1]* 5563d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[13].alpha+cx[2]*pixels[14].alpha+cx[3]*pixels[15].alpha)); 5564d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5565d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5566d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5567d76c51ed30cf4084f4434ba08925d16001d1e340cristy return(status); 5568d76c51ed30cf4084f4434ba08925d16001d1e340cristy} 55694c08aed51c5899665ade97263692328eea4af106cristy 55704c08aed51c5899665ade97263692328eea4af106cristy/* 55714c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 55724c08aed51c5899665ade97263692328eea4af106cristy% % 55734c08aed51c5899665ade97263692328eea4af106cristy% % 55744c08aed51c5899665ade97263692328eea4af106cristy% % 55754c08aed51c5899665ade97263692328eea4af106cristy+ I s F u z z y E q u i v a l e n c e P i x e l % 55764c08aed51c5899665ade97263692328eea4af106cristy% % 55774c08aed51c5899665ade97263692328eea4af106cristy% % 55784c08aed51c5899665ade97263692328eea4af106cristy% % 55794c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 55804c08aed51c5899665ade97263692328eea4af106cristy% 55814c08aed51c5899665ade97263692328eea4af106cristy% IsFuzzyEquivalencePixel() returns MagickTrue if the distance between two 55824c08aed51c5899665ade97263692328eea4af106cristy% pixels is less than the specified distance in a linear three (or four)u 55834c08aed51c5899665ade97263692328eea4af106cristy% dimensional color space. 55844c08aed51c5899665ade97263692328eea4af106cristy% 55854c08aed51c5899665ade97263692328eea4af106cristy% The format of the IsFuzzyEquivalencePixel method is: 55864c08aed51c5899665ade97263692328eea4af106cristy% 5587e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy% void IsFuzzyEquivalencePixel(const Image *source,const Quantum *p, 5588e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy% const Image *destination,const Quantum *q) 55894c08aed51c5899665ade97263692328eea4af106cristy% 55904c08aed51c5899665ade97263692328eea4af106cristy% A description of each parameter follows: 55914c08aed51c5899665ade97263692328eea4af106cristy% 5592e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy% o source: the source image. 55934c08aed51c5899665ade97263692328eea4af106cristy% 55944c08aed51c5899665ade97263692328eea4af106cristy% o p: Pixel p. 55954c08aed51c5899665ade97263692328eea4af106cristy% 5596e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy% o destination: the destination image. 5597e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy% 55984c08aed51c5899665ade97263692328eea4af106cristy% o q: Pixel q. 55994c08aed51c5899665ade97263692328eea4af106cristy% 56004c08aed51c5899665ade97263692328eea4af106cristy*/ 5601e4a404711bf20d9062d11ab28bc12e5acd307f9ccristyMagickExport MagickBooleanType IsFuzzyEquivalencePixel(const Image *source, 5602e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy const Quantum *p,const Image *destination,const Quantum *q) 56034c08aed51c5899665ade97263692328eea4af106cristy{ 56044c08aed51c5899665ade97263692328eea4af106cristy MagickRealType 56054c08aed51c5899665ade97263692328eea4af106cristy fuzz, 56064c08aed51c5899665ade97263692328eea4af106cristy pixel; 56074c08aed51c5899665ade97263692328eea4af106cristy 56084c08aed51c5899665ade97263692328eea4af106cristy register MagickRealType 56094c08aed51c5899665ade97263692328eea4af106cristy distance, 56104c08aed51c5899665ade97263692328eea4af106cristy scale; 56114c08aed51c5899665ade97263692328eea4af106cristy 5612e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy fuzz=MagickMax(source->fuzz,(MagickRealType) MagickSQ1_2)*MagickMax( 5613e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy destination->fuzz,(MagickRealType) MagickSQ1_2); 56144c08aed51c5899665ade97263692328eea4af106cristy scale=1.0; 56154c08aed51c5899665ade97263692328eea4af106cristy distance=0.0; 5616e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy if (source->matte != MagickFalse) 56174c08aed51c5899665ade97263692328eea4af106cristy { 56184c08aed51c5899665ade97263692328eea4af106cristy /* 56194c08aed51c5899665ade97263692328eea4af106cristy Transparencies are involved - set alpha distance 56204c08aed51c5899665ade97263692328eea4af106cristy */ 562199abff36ae5d479bfd76652d166a4894ceada102cristy pixel=GetPixelAlpha(source,p)-(MagickRealType) 562299abff36ae5d479bfd76652d166a4894ceada102cristy GetPixelAlpha(destination,q); 56234c08aed51c5899665ade97263692328eea4af106cristy distance=pixel*pixel; 56244c08aed51c5899665ade97263692328eea4af106cristy if (distance > fuzz) 56254c08aed51c5899665ade97263692328eea4af106cristy return(MagickFalse); 56264c08aed51c5899665ade97263692328eea4af106cristy /* 56274c08aed51c5899665ade97263692328eea4af106cristy Generate a alpha scaling factor to generate a 4D cone on colorspace 56284c08aed51c5899665ade97263692328eea4af106cristy Note that if one color is transparent, distance has no color component. 56294c08aed51c5899665ade97263692328eea4af106cristy */ 5630e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy scale=QuantumScale*GetPixelAlpha(source,p); 5631e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy scale*=QuantumScale*GetPixelAlpha(destination,q); 56324c08aed51c5899665ade97263692328eea4af106cristy if (scale <= MagickEpsilon) 56334c08aed51c5899665ade97263692328eea4af106cristy return(MagickTrue); 56344c08aed51c5899665ade97263692328eea4af106cristy } 56354c08aed51c5899665ade97263692328eea4af106cristy /* 56364c08aed51c5899665ade97263692328eea4af106cristy RGB or CMY color cube 56374c08aed51c5899665ade97263692328eea4af106cristy */ 56384c08aed51c5899665ade97263692328eea4af106cristy distance*=3.0; /* rescale appropriately */ 56394c08aed51c5899665ade97263692328eea4af106cristy fuzz*=3.0; 5640e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy pixel=GetPixelRed(source,p)-(MagickRealType) GetPixelRed(destination,q); 5641e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy if ((source->colorspace == HSLColorspace) || 5642e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy (source->colorspace == HSBColorspace) || 5643e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy (source->colorspace == HWBColorspace)) 56444c08aed51c5899665ade97263692328eea4af106cristy { 56454c08aed51c5899665ade97263692328eea4af106cristy /* 56464c08aed51c5899665ade97263692328eea4af106cristy Compute an arc distance for hue. It should be a vector angle of 56474c08aed51c5899665ade97263692328eea4af106cristy 'S'/'W' length with 'L'/'B' forming appropriate cones. 56484c08aed51c5899665ade97263692328eea4af106cristy */ 56494c08aed51c5899665ade97263692328eea4af106cristy if (fabs((double) pixel) > (QuantumRange/2)) 56504c08aed51c5899665ade97263692328eea4af106cristy pixel-=QuantumRange; 56514c08aed51c5899665ade97263692328eea4af106cristy pixel*=2; 56524c08aed51c5899665ade97263692328eea4af106cristy } 56534c08aed51c5899665ade97263692328eea4af106cristy distance+=scale*pixel*pixel; 56544c08aed51c5899665ade97263692328eea4af106cristy if (distance > fuzz) 56554c08aed51c5899665ade97263692328eea4af106cristy return(MagickFalse); 5656e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy pixel=GetPixelGreen(source,p)-(MagickRealType) GetPixelGreen(destination,q); 56574c08aed51c5899665ade97263692328eea4af106cristy distance+=scale*pixel*pixel; 56584c08aed51c5899665ade97263692328eea4af106cristy if (distance > fuzz) 56594c08aed51c5899665ade97263692328eea4af106cristy return(MagickFalse); 5660e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy pixel=GetPixelBlue(source,p)-(MagickRealType) GetPixelBlue(destination,q); 56614c08aed51c5899665ade97263692328eea4af106cristy distance+=scale*pixel*pixel; 56624c08aed51c5899665ade97263692328eea4af106cristy if (distance > fuzz) 56634c08aed51c5899665ade97263692328eea4af106cristy return(MagickFalse); 56644c08aed51c5899665ade97263692328eea4af106cristy return(MagickTrue); 56654c08aed51c5899665ade97263692328eea4af106cristy} 56664c08aed51c5899665ade97263692328eea4af106cristy 56674c08aed51c5899665ade97263692328eea4af106cristy/* 56684c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 56694c08aed51c5899665ade97263692328eea4af106cristy% % 56704c08aed51c5899665ade97263692328eea4af106cristy% % 56714c08aed51c5899665ade97263692328eea4af106cristy% % 56724c08aed51c5899665ade97263692328eea4af106cristy+ 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 % 56734c08aed51c5899665ade97263692328eea4af106cristy% % 56744c08aed51c5899665ade97263692328eea4af106cristy% % 56754c08aed51c5899665ade97263692328eea4af106cristy% % 56764c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 56774c08aed51c5899665ade97263692328eea4af106cristy% 56784c08aed51c5899665ade97263692328eea4af106cristy% IsFuzzyEquivalencePixelInfo() returns true if the distance between two 56794c08aed51c5899665ade97263692328eea4af106cristy% colors is less than the specified distance in a linear three (or four) 56804c08aed51c5899665ade97263692328eea4af106cristy% dimensional color space. 56814c08aed51c5899665ade97263692328eea4af106cristy% 56825f95f4f77efc46ff53593d750491c8f60698c983cristy% This implements the equivalent of: 56835f95f4f77efc46ff53593d750491c8f60698c983cristy% fuzz < sqrt(color_distance^2 * u.a*v.a + alpha_distance^2) 56844c08aed51c5899665ade97263692328eea4af106cristy% 56854c08aed51c5899665ade97263692328eea4af106cristy% Which produces a multi-dimensional cone for that colorspace along the 56864c08aed51c5899665ade97263692328eea4af106cristy% transparency vector. 56874c08aed51c5899665ade97263692328eea4af106cristy% 56885f95f4f77efc46ff53593d750491c8f60698c983cristy% For example for an RGB: 56894c08aed51c5899665ade97263692328eea4af106cristy% color_distance^2 = ( (u.r-v.r)^2 + (u.g-v.g)^2 + (u.b-v.b)^2 ) / 3 56904c08aed51c5899665ade97263692328eea4af106cristy% 56914c08aed51c5899665ade97263692328eea4af106cristy% See http://www.imagemagick.org/Usage/bugs/fuzz_distance/ 56924c08aed51c5899665ade97263692328eea4af106cristy% 56934c08aed51c5899665ade97263692328eea4af106cristy% Hue colorspace distances need more work. Hue is not a distance, it is an 56944c08aed51c5899665ade97263692328eea4af106cristy% angle! 56954c08aed51c5899665ade97263692328eea4af106cristy% 56964c08aed51c5899665ade97263692328eea4af106cristy% A check that q is in the same color space as p should be made and the 56974c08aed51c5899665ade97263692328eea4af106cristy% appropriate mapping made. -- Anthony Thyssen 8 December 2010 56984c08aed51c5899665ade97263692328eea4af106cristy% 56994c08aed51c5899665ade97263692328eea4af106cristy% The format of the IsFuzzyEquivalencePixelInfo method is: 57004c08aed51c5899665ade97263692328eea4af106cristy% 57014c08aed51c5899665ade97263692328eea4af106cristy% MagickBooleanType IsFuzzyEquivalencePixelInfo(const PixelInfo *p, 57024c08aed51c5899665ade97263692328eea4af106cristy% const PixelInfo *q) 57034c08aed51c5899665ade97263692328eea4af106cristy% 57044c08aed51c5899665ade97263692328eea4af106cristy% A description of each parameter follows: 57054c08aed51c5899665ade97263692328eea4af106cristy% 57064c08aed51c5899665ade97263692328eea4af106cristy% o p: Pixel p. 57074c08aed51c5899665ade97263692328eea4af106cristy% 57084c08aed51c5899665ade97263692328eea4af106cristy% o q: Pixel q. 57094c08aed51c5899665ade97263692328eea4af106cristy% 57104c08aed51c5899665ade97263692328eea4af106cristy*/ 57114c08aed51c5899665ade97263692328eea4af106cristyMagickExport MagickBooleanType IsFuzzyEquivalencePixelInfo(const PixelInfo *p, 57124c08aed51c5899665ade97263692328eea4af106cristy const PixelInfo *q) 57134c08aed51c5899665ade97263692328eea4af106cristy{ 57144c08aed51c5899665ade97263692328eea4af106cristy MagickRealType 57154c08aed51c5899665ade97263692328eea4af106cristy fuzz, 57164c08aed51c5899665ade97263692328eea4af106cristy pixel; 57174c08aed51c5899665ade97263692328eea4af106cristy 57184c08aed51c5899665ade97263692328eea4af106cristy register MagickRealType 57194c08aed51c5899665ade97263692328eea4af106cristy scale, 57204c08aed51c5899665ade97263692328eea4af106cristy distance; 57214c08aed51c5899665ade97263692328eea4af106cristy 57224c08aed51c5899665ade97263692328eea4af106cristy if ((p->fuzz == 0.0) && (q->fuzz == 0.0)) 57234c08aed51c5899665ade97263692328eea4af106cristy return(IsPixelInfoEquivalent(p,q)); 57244c08aed51c5899665ade97263692328eea4af106cristy if (p->fuzz == 0.0) 57255f95f4f77efc46ff53593d750491c8f60698c983cristy fuzz=MagickMax(q->fuzz,(MagickRealType) MagickSQ1_2)*MagickMax(q->fuzz, 57265f95f4f77efc46ff53593d750491c8f60698c983cristy (MagickRealType) MagickSQ1_2); 57274c08aed51c5899665ade97263692328eea4af106cristy else if (q->fuzz == 0.0) 57285f95f4f77efc46ff53593d750491c8f60698c983cristy fuzz=MagickMax(p->fuzz,(MagickRealType) MagickSQ1_2)*MagickMax(p->fuzz, 57295f95f4f77efc46ff53593d750491c8f60698c983cristy (MagickRealType) MagickSQ1_2); 57304c08aed51c5899665ade97263692328eea4af106cristy else 57315f95f4f77efc46ff53593d750491c8f60698c983cristy fuzz=MagickMax(p->fuzz,(MagickRealType) MagickSQ1_2)*MagickMax(q->fuzz, 57325f95f4f77efc46ff53593d750491c8f60698c983cristy (MagickRealType) MagickSQ1_2); 57334c08aed51c5899665ade97263692328eea4af106cristy scale=1.0; 57344c08aed51c5899665ade97263692328eea4af106cristy distance=0.0; 57354c08aed51c5899665ade97263692328eea4af106cristy if ((p->matte != MagickFalse) || (q->matte != MagickFalse)) 57364c08aed51c5899665ade97263692328eea4af106cristy { 57374c08aed51c5899665ade97263692328eea4af106cristy /* 57384c08aed51c5899665ade97263692328eea4af106cristy Transparencies are involved - set alpha distance. 57394c08aed51c5899665ade97263692328eea4af106cristy */ 57404c08aed51c5899665ade97263692328eea4af106cristy pixel=(p->matte != MagickFalse ? p->alpha : OpaqueAlpha)- 57414c08aed51c5899665ade97263692328eea4af106cristy (q->matte != MagickFalse ? q->alpha : OpaqueAlpha); 57424c08aed51c5899665ade97263692328eea4af106cristy distance=pixel*pixel; 57434c08aed51c5899665ade97263692328eea4af106cristy if (distance > fuzz) 57444c08aed51c5899665ade97263692328eea4af106cristy return(MagickFalse); 57454c08aed51c5899665ade97263692328eea4af106cristy /* 57464c08aed51c5899665ade97263692328eea4af106cristy Generate a alpha scaling factor to generate a 4D cone on colorspace. 57475f95f4f77efc46ff53593d750491c8f60698c983cristy If one color is transparent, distance has no color component. 57484c08aed51c5899665ade97263692328eea4af106cristy */ 57494c08aed51c5899665ade97263692328eea4af106cristy if (p->matte != MagickFalse) 57504c08aed51c5899665ade97263692328eea4af106cristy scale=(QuantumScale*p->alpha); 57514c08aed51c5899665ade97263692328eea4af106cristy if (q->matte != MagickFalse) 57524c08aed51c5899665ade97263692328eea4af106cristy scale*=(QuantumScale*q->alpha); 57534c08aed51c5899665ade97263692328eea4af106cristy if (scale <= MagickEpsilon ) 57544c08aed51c5899665ade97263692328eea4af106cristy return(MagickTrue); 57554c08aed51c5899665ade97263692328eea4af106cristy } 57564c08aed51c5899665ade97263692328eea4af106cristy /* 57574c08aed51c5899665ade97263692328eea4af106cristy CMYK create a CMY cube with a multi-dimensional cone toward black. 57584c08aed51c5899665ade97263692328eea4af106cristy */ 57594c08aed51c5899665ade97263692328eea4af106cristy if (p->colorspace == CMYKColorspace) 57604c08aed51c5899665ade97263692328eea4af106cristy { 57614c08aed51c5899665ade97263692328eea4af106cristy pixel=p->black-q->black; 57624c08aed51c5899665ade97263692328eea4af106cristy distance+=pixel*pixel*scale; 57634c08aed51c5899665ade97263692328eea4af106cristy if (distance > fuzz) 57644c08aed51c5899665ade97263692328eea4af106cristy return(MagickFalse); 57654c08aed51c5899665ade97263692328eea4af106cristy scale*=(MagickRealType) (QuantumScale*(QuantumRange-p->black)); 57664c08aed51c5899665ade97263692328eea4af106cristy scale*=(MagickRealType) (QuantumScale*(QuantumRange-q->black)); 57674c08aed51c5899665ade97263692328eea4af106cristy } 57684c08aed51c5899665ade97263692328eea4af106cristy /* 57694c08aed51c5899665ade97263692328eea4af106cristy RGB or CMY color cube. 57704c08aed51c5899665ade97263692328eea4af106cristy */ 57714c08aed51c5899665ade97263692328eea4af106cristy distance*=3.0; /* rescale appropriately */ 57724c08aed51c5899665ade97263692328eea4af106cristy fuzz*=3.0; 57734c08aed51c5899665ade97263692328eea4af106cristy pixel=p->red-q->red; 57744c08aed51c5899665ade97263692328eea4af106cristy if ((p->colorspace == HSLColorspace) || (p->colorspace == HSBColorspace) || 57754c08aed51c5899665ade97263692328eea4af106cristy (p->colorspace == HWBColorspace)) 57764c08aed51c5899665ade97263692328eea4af106cristy { 57775f95f4f77efc46ff53593d750491c8f60698c983cristy /* 57785f95f4f77efc46ff53593d750491c8f60698c983cristy This calculates a arc distance for hue-- it should be a vector angle 57795f95f4f77efc46ff53593d750491c8f60698c983cristy of 'S'/'W' length with 'L'/'B' forming appropriate cones. In other 57805f95f4f77efc46ff53593d750491c8f60698c983cristy words this is a hack - Anthony. 57814c08aed51c5899665ade97263692328eea4af106cristy */ 57824c08aed51c5899665ade97263692328eea4af106cristy if (fabs((double) pixel) > (QuantumRange/2)) 57834c08aed51c5899665ade97263692328eea4af106cristy pixel-=QuantumRange; 57844c08aed51c5899665ade97263692328eea4af106cristy pixel*=2; 57854c08aed51c5899665ade97263692328eea4af106cristy } 57864c08aed51c5899665ade97263692328eea4af106cristy distance+=pixel*pixel*scale; 57874c08aed51c5899665ade97263692328eea4af106cristy if (distance > fuzz) 57884c08aed51c5899665ade97263692328eea4af106cristy return(MagickFalse); 57894c08aed51c5899665ade97263692328eea4af106cristy pixel=p->green-q->green; 57904c08aed51c5899665ade97263692328eea4af106cristy distance+=pixel*pixel*scale; 57914c08aed51c5899665ade97263692328eea4af106cristy if (distance > fuzz) 57924c08aed51c5899665ade97263692328eea4af106cristy return(MagickFalse); 57934c08aed51c5899665ade97263692328eea4af106cristy pixel=p->blue-q->blue; 57944c08aed51c5899665ade97263692328eea4af106cristy distance+=pixel*pixel*scale; 57954c08aed51c5899665ade97263692328eea4af106cristy if (distance > fuzz) 57964c08aed51c5899665ade97263692328eea4af106cristy return(MagickFalse); 57974c08aed51c5899665ade97263692328eea4af106cristy return(MagickTrue); 57984c08aed51c5899665ade97263692328eea4af106cristy} 57992b9582a27910c7baaeb04b7e969638328fa70095cristy 58002b9582a27910c7baaeb04b7e969638328fa70095cristy/* 58012b9582a27910c7baaeb04b7e969638328fa70095cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 58022b9582a27910c7baaeb04b7e969638328fa70095cristy% % 58032b9582a27910c7baaeb04b7e969638328fa70095cristy% % 58042b9582a27910c7baaeb04b7e969638328fa70095cristy% % 5805e2a912b6c9086c98ec838baa0824cd8deca55538cristy% S e t P i x e l C h a n n e l M a p M a s k % 58062b9582a27910c7baaeb04b7e969638328fa70095cristy% % 58072b9582a27910c7baaeb04b7e969638328fa70095cristy% % 58082b9582a27910c7baaeb04b7e969638328fa70095cristy% % 58092b9582a27910c7baaeb04b7e969638328fa70095cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 58102b9582a27910c7baaeb04b7e969638328fa70095cristy% 5811e2a912b6c9086c98ec838baa0824cd8deca55538cristy% SetPixelChannelMapMask() sets the pixel channel map from the specified 5812e2a912b6c9086c98ec838baa0824cd8deca55538cristy% channel mask. 58132b9582a27910c7baaeb04b7e969638328fa70095cristy% 5814e2a912b6c9086c98ec838baa0824cd8deca55538cristy% The format of the SetPixelChannelMapMask method is: 58152b9582a27910c7baaeb04b7e969638328fa70095cristy% 5816e2a912b6c9086c98ec838baa0824cd8deca55538cristy% void SetPixelChannelMapMask(Image *image,const ChannelType channel_mask) 58172b9582a27910c7baaeb04b7e969638328fa70095cristy% 58182b9582a27910c7baaeb04b7e969638328fa70095cristy% A description of each parameter follows: 58192b9582a27910c7baaeb04b7e969638328fa70095cristy% 58202b9582a27910c7baaeb04b7e969638328fa70095cristy% o image: the image. 58212b9582a27910c7baaeb04b7e969638328fa70095cristy% 5822dfdb19ea2c08296b31fef860352c0a6efe8e9cc6cristy% o channel_mask: the channel mask. 58232b9582a27910c7baaeb04b7e969638328fa70095cristy% 58242b9582a27910c7baaeb04b7e969638328fa70095cristy*/ 5825e2a912b6c9086c98ec838baa0824cd8deca55538cristyMagickExport void SetPixelChannelMapMask(Image *image, 582607a6785ad974f0631a83731fe5d7fb85751ca235cristy const ChannelType channel_mask) 58272b9582a27910c7baaeb04b7e969638328fa70095cristy{ 58286a917d6c8b1695012e26389d2ec303267676815fcristy#define GetChannelBit(mask,bit) (((size_t) (mask) >> (size_t) (bit)) & 0x01) 5829dafd287faca4c8cd5415d13185973add9c02b2c4cristy 58302b9582a27910c7baaeb04b7e969638328fa70095cristy register ssize_t 58312b9582a27910c7baaeb04b7e969638328fa70095cristy i; 58322b9582a27910c7baaeb04b7e969638328fa70095cristy 5833177e41c20ccba692bc4c7797aeb817b2f80c7e8ccristy if (image->debug != MagickFalse) 5834177e41c20ccba692bc4c7797aeb817b2f80c7e8ccristy (void) LogMagickEvent(PixelEvent,GetMagickModule(),"%s[%08x]", \ 5835177e41c20ccba692bc4c7797aeb817b2f80c7e8ccristy image->filename,channel_mask); \ 58363c30981743f8543ca2ccc0d19de8fbda2b3639c6cristy image->channel_mask=channel_mask; 5837dafd287faca4c8cd5415d13185973add9c02b2c4cristy for (i=0; i < (ssize_t) GetPixelChannels(image); i++) 5838e2a912b6c9086c98ec838baa0824cd8deca55538cristy { 5839e2a912b6c9086c98ec838baa0824cd8deca55538cristy PixelChannel 5840e2a912b6c9086c98ec838baa0824cd8deca55538cristy channel; 5841e2a912b6c9086c98ec838baa0824cd8deca55538cristy 5842e2a912b6c9086c98ec838baa0824cd8deca55538cristy channel=GetPixelChannelMapChannel(image,i); 5843e2a912b6c9086c98ec838baa0824cd8deca55538cristy SetPixelChannelMapTraits(image,channel, 5844e2a912b6c9086c98ec838baa0824cd8deca55538cristy GetChannelBit(channel_mask,channel) == 0 ? CopyPixelTrait : 58450bbd87c90725154145a972d3efbc4c5124455fe3cristy image->matte == MagickFalse || (channel == AlphaPixelChannel) ? 58460bbd87c90725154145a972d3efbc4c5124455fe3cristy UpdatePixelTrait : (PixelTrait) (UpdatePixelTrait | BlendPixelTrait)); 5847e2a912b6c9086c98ec838baa0824cd8deca55538cristy } 58481685e7216ce4e5fac701834cd7db6eee6d426234cristy if (image->storage_class == PseudoClass) 58491685e7216ce4e5fac701834cd7db6eee6d426234cristy SetPixelChannelMapTraits(image,IndexPixelChannel,CopyPixelTrait); 5850183a5c7d1c8a9a747766ff9a2ef067853a7066e9cristy if (image->mask != MagickFalse) 585110a6c61544fb48d72f29ec8f9573bdcd52abf1b7cristy SetPixelChannelMapTraits(image,MaskPixelChannel,CopyPixelTrait); 58526dcb9b8f58179c62fb386bf2bc02c8ba901dfb15cristy if (image->debug != MagickFalse) 58536dcb9b8f58179c62fb386bf2bc02c8ba901dfb15cristy LogPixelChannels(image); 58542b9582a27910c7baaeb04b7e969638328fa70095cristy} 58552b9582a27910c7baaeb04b7e969638328fa70095cristy 58562b9582a27910c7baaeb04b7e969638328fa70095cristy/* 58572b9582a27910c7baaeb04b7e969638328fa70095cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 58582b9582a27910c7baaeb04b7e969638328fa70095cristy% % 58592b9582a27910c7baaeb04b7e969638328fa70095cristy% % 58602b9582a27910c7baaeb04b7e969638328fa70095cristy% % 5861bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% S e t P i x e l C h a n n e l M a s k % 58622b9582a27910c7baaeb04b7e969638328fa70095cristy% % 58632b9582a27910c7baaeb04b7e969638328fa70095cristy% % 58642b9582a27910c7baaeb04b7e969638328fa70095cristy% % 58652b9582a27910c7baaeb04b7e969638328fa70095cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 58662b9582a27910c7baaeb04b7e969638328fa70095cristy% 58675f95f4f77efc46ff53593d750491c8f60698c983cristy% SetPixelChannelMask() sets the pixel channel mask from the specified channel 58685f95f4f77efc46ff53593d750491c8f60698c983cristy% mask. 58692b9582a27910c7baaeb04b7e969638328fa70095cristy% 5870bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% The format of the SetPixelChannelMask method is: 58712b9582a27910c7baaeb04b7e969638328fa70095cristy% 5872bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% ChannelType SetPixelChannelMask(Image *image, 5873bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% const ChannelType channel_mask) 58742b9582a27910c7baaeb04b7e969638328fa70095cristy% 58752b9582a27910c7baaeb04b7e969638328fa70095cristy% A description of each parameter follows: 58762b9582a27910c7baaeb04b7e969638328fa70095cristy% 58772b9582a27910c7baaeb04b7e969638328fa70095cristy% o image: the image. 58782b9582a27910c7baaeb04b7e969638328fa70095cristy% 5879bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% o channel_mask: the channel mask. 5880bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% 58812b9582a27910c7baaeb04b7e969638328fa70095cristy*/ 5882bd5a96cd2b69f218f85a7adc306296a736f91a56cristyMagickExport ChannelType SetPixelChannelMask(Image *image, 5883bd5a96cd2b69f218f85a7adc306296a736f91a56cristy const ChannelType channel_mask) 58842b9582a27910c7baaeb04b7e969638328fa70095cristy{ 5885bd5a96cd2b69f218f85a7adc306296a736f91a56cristy ChannelType 5886bd5a96cd2b69f218f85a7adc306296a736f91a56cristy mask; 588794c50bac20b1e1070a88b490fd6823fce1de400ecristy 5888bd5a96cd2b69f218f85a7adc306296a736f91a56cristy mask=image->channel_mask; 5889bd5a96cd2b69f218f85a7adc306296a736f91a56cristy image->channel_mask=channel_mask; 5890e2a912b6c9086c98ec838baa0824cd8deca55538cristy SetPixelChannelMapMask(image,channel_mask); 5891bd5a96cd2b69f218f85a7adc306296a736f91a56cristy return(mask); 58922b9582a27910c7baaeb04b7e969638328fa70095cristy} 5893322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy 5894322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy/* 5895322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5896322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% % 5897322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% % 5898322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% % 5899322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% S e t P i x e l M e t a C h a n n e l s % 5900322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% % 5901322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% % 5902322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% % 5903322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5904322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% 5905322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% SetPixelMetaChannels() sets the image meta channels. 5906322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% 5907322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% The format of the SetPixelMetaChannels method is: 5908322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% 5909322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% MagickBooleanType SetPixelMetaChannels(Image *image, 5910322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% const size_t number_meta_channels,ExceptionInfo *exception) 5911322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% 5912322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% A description of each parameter follows: 5913322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% 5914322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% o image: the image. 5915322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% 5916322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% o number_meta_channels: the number of meta channels. 5917322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% 5918322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% o exception: return any errors or warnings in this structure. 5919322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% 5920322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy*/ 5921322d07da43d795a7c3b9a2d068d9a9005591cbe4cristyMagickExport MagickBooleanType SetPixelMetaChannels(Image *image, 5922322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy const size_t number_meta_channels,ExceptionInfo *exception) 5923322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy{ 5924322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy image->number_meta_channels=number_meta_channels; 5925322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy return(SyncImagePixelCache(image,exception)); 5926322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy} 5927