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 % 15de984cdc3631106b1cbbb8d3972b76a0fc27e8e8cristy% Cristy % 163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% October 1998 % 173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 197ce65e7125a4e1df1a274ce373c537a9df9c16cdCristy% Copyright 1999-2016 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" 471f07555d1773dac3acebfce4ba017128246923c2cristy#include "MagickCore/colorspace-private.h" 484c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/draw.h" 494c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/exception.h" 504c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/exception-private.h" 514c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/cache.h" 524c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/constitute.h" 534c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/delegate.h" 544c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/geometry.h" 554c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/image-private.h" 564c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/list.h" 574c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/magick.h" 584c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/memory_.h" 59b93e6eb0e33b330e1d6be8b4ad79d28cfd3a9b84dirk#include "MagickCore/memory-private.h" 604c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/monitor.h" 614c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/option.h" 624c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/pixel.h" 634c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/pixel-accessor.h" 64380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy#include "MagickCore/pixel-private.h" 654c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/quantum.h" 664c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/quantum-private.h" 674c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/resource_.h" 684c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/semaphore.h" 694c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/statistic.h" 704c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/stream.h" 714c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/string_.h" 724c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/transform.h" 734c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/utility.h" 744c08aed51c5899665ade97263692328eea4af106cristy 75146a62b25d7466cceec79975894ce812e11f4625cristy/* 764c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 774c08aed51c5899665ade97263692328eea4af106cristy% % 784c08aed51c5899665ade97263692328eea4af106cristy% % 794c08aed51c5899665ade97263692328eea4af106cristy% % 80ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy+ A c q u i r e P i x e l C h a n n e l M a p % 814c08aed51c5899665ade97263692328eea4af106cristy% % 824c08aed51c5899665ade97263692328eea4af106cristy% % 834c08aed51c5899665ade97263692328eea4af106cristy% % 844c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 854c08aed51c5899665ade97263692328eea4af106cristy% 86ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy% AcquirePixelChannelMap() acquires a pixel component map. 874c08aed51c5899665ade97263692328eea4af106cristy% 88ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy% The format of the AcquirePixelChannelMap() method is: 894c08aed51c5899665ade97263692328eea4af106cristy% 90bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% PixelChannelMap *AcquirePixelChannelMap(void) 914c08aed51c5899665ade97263692328eea4af106cristy% 924c08aed51c5899665ade97263692328eea4af106cristy*/ 93bd5a96cd2b69f218f85a7adc306296a736f91a56cristyMagickExport PixelChannelMap *AcquirePixelChannelMap(void) 944c08aed51c5899665ade97263692328eea4af106cristy{ 95ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy PixelChannelMap 96bd5a96cd2b69f218f85a7adc306296a736f91a56cristy *channel_map; 974c08aed51c5899665ade97263692328eea4af106cristy 984c08aed51c5899665ade97263692328eea4af106cristy register ssize_t 994c08aed51c5899665ade97263692328eea4af106cristy i; 1004c08aed51c5899665ade97263692328eea4af106cristy 101bd5a96cd2b69f218f85a7adc306296a736f91a56cristy channel_map=(PixelChannelMap *) AcquireQuantumMemory(MaxPixelChannels, 102bd5a96cd2b69f218f85a7adc306296a736f91a56cristy sizeof(*channel_map)); 103bd5a96cd2b69f218f85a7adc306296a736f91a56cristy if (channel_map == (PixelChannelMap *) NULL) 1044c08aed51c5899665ade97263692328eea4af106cristy ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed"); 105bd5a96cd2b69f218f85a7adc306296a736f91a56cristy (void) ResetMagickMemory(channel_map,0,MaxPixelChannels*sizeof(*channel_map)); 106bd5a96cd2b69f218f85a7adc306296a736f91a56cristy for (i=0; i < MaxPixelChannels; i++) 107bd5a96cd2b69f218f85a7adc306296a736f91a56cristy channel_map[i].channel=(PixelChannel) i; 108ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy return(channel_map); 1094c08aed51c5899665ade97263692328eea4af106cristy} 1104c08aed51c5899665ade97263692328eea4af106cristy 1114c08aed51c5899665ade97263692328eea4af106cristy/* 1124c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1134c08aed51c5899665ade97263692328eea4af106cristy% % 1144c08aed51c5899665ade97263692328eea4af106cristy% % 1154c08aed51c5899665ade97263692328eea4af106cristy% % 116ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy+ C l o n e P i x e l C h a n n e l M a p % 1174c08aed51c5899665ade97263692328eea4af106cristy% % 1184c08aed51c5899665ade97263692328eea4af106cristy% % 1194c08aed51c5899665ade97263692328eea4af106cristy% % 1204c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1214c08aed51c5899665ade97263692328eea4af106cristy% 122ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy% ClonePixelChannelMap() clones a pixel component map. 1234c08aed51c5899665ade97263692328eea4af106cristy% 124ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy% The format of the ClonePixelChannelMap() method is: 1254c08aed51c5899665ade97263692328eea4af106cristy% 126bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% PixelChannelMap *ClonePixelChannelMap(PixelChannelMap *channel_map) 1274c08aed51c5899665ade97263692328eea4af106cristy% 1284c08aed51c5899665ade97263692328eea4af106cristy% A description of each parameter follows: 1294c08aed51c5899665ade97263692328eea4af106cristy% 130ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy% o channel_map: the pixel component map. 1314c08aed51c5899665ade97263692328eea4af106cristy% 1324c08aed51c5899665ade97263692328eea4af106cristy*/ 133bd5a96cd2b69f218f85a7adc306296a736f91a56cristyMagickExport PixelChannelMap *ClonePixelChannelMap(PixelChannelMap *channel_map) 1344c08aed51c5899665ade97263692328eea4af106cristy{ 135ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy PixelChannelMap 136bd5a96cd2b69f218f85a7adc306296a736f91a56cristy *clone_map; 1374c08aed51c5899665ade97263692328eea4af106cristy 138bd5a96cd2b69f218f85a7adc306296a736f91a56cristy assert(channel_map != (PixelChannelMap *) NULL); 139ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy clone_map=AcquirePixelChannelMap(); 140bd5a96cd2b69f218f85a7adc306296a736f91a56cristy if (clone_map == (PixelChannelMap *) NULL) 141bd5a96cd2b69f218f85a7adc306296a736f91a56cristy return((PixelChannelMap *) NULL); 142bd5a96cd2b69f218f85a7adc306296a736f91a56cristy (void) CopyMagickMemory(clone_map,channel_map,MaxPixelChannels* 143bd5a96cd2b69f218f85a7adc306296a736f91a56cristy sizeof(*channel_map)); 1444c08aed51c5899665ade97263692328eea4af106cristy return(clone_map); 1454c08aed51c5899665ade97263692328eea4af106cristy} 1464c08aed51c5899665ade97263692328eea4af106cristy 1474c08aed51c5899665ade97263692328eea4af106cristy/* 1484c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1494c08aed51c5899665ade97263692328eea4af106cristy% % 1504c08aed51c5899665ade97263692328eea4af106cristy% % 1514c08aed51c5899665ade97263692328eea4af106cristy% % 1524c08aed51c5899665ade97263692328eea4af106cristy+ C l o n e P i x e l I n f o % 1534c08aed51c5899665ade97263692328eea4af106cristy% % 1544c08aed51c5899665ade97263692328eea4af106cristy% % 1554c08aed51c5899665ade97263692328eea4af106cristy% % 1564c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1574c08aed51c5899665ade97263692328eea4af106cristy% 1584c08aed51c5899665ade97263692328eea4af106cristy% ClonePixelInfo() makes a duplicate of the given pixel info structure, or if 1594c08aed51c5899665ade97263692328eea4af106cristy% pixel info is NULL, a new one. 1604c08aed51c5899665ade97263692328eea4af106cristy% 1614c08aed51c5899665ade97263692328eea4af106cristy% The format of the ClonePixelInfo method is: 1624c08aed51c5899665ade97263692328eea4af106cristy% 1631f07555d1773dac3acebfce4ba017128246923c2cristy% PixelInfo *ClonePixelInfo(const PixelInfo *pixel) 1644c08aed51c5899665ade97263692328eea4af106cristy% 1654c08aed51c5899665ade97263692328eea4af106cristy% A description of each parameter follows: 1664c08aed51c5899665ade97263692328eea4af106cristy% 1671f07555d1773dac3acebfce4ba017128246923c2cristy% o pixel: the pixel info. 1684c08aed51c5899665ade97263692328eea4af106cristy% 1694c08aed51c5899665ade97263692328eea4af106cristy*/ 1704c08aed51c5899665ade97263692328eea4af106cristyMagickExport PixelInfo *ClonePixelInfo(const PixelInfo *pixel) 1714c08aed51c5899665ade97263692328eea4af106cristy{ 1724c08aed51c5899665ade97263692328eea4af106cristy PixelInfo 1734c08aed51c5899665ade97263692328eea4af106cristy *pixel_info; 1744c08aed51c5899665ade97263692328eea4af106cristy 175b93e6eb0e33b330e1d6be8b4ad79d28cfd3a9b84dirk pixel_info=(PixelInfo *) MagickAssumeAligned(AcquireAlignedMemory(1, 176b93e6eb0e33b330e1d6be8b4ad79d28cfd3a9b84dirk sizeof(*pixel_info))); 1774c08aed51c5899665ade97263692328eea4af106cristy if (pixel_info == (PixelInfo *) NULL) 1784c08aed51c5899665ade97263692328eea4af106cristy ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed"); 1794c08aed51c5899665ade97263692328eea4af106cristy *pixel_info=(*pixel); 1804c08aed51c5899665ade97263692328eea4af106cristy return(pixel_info); 1814c08aed51c5899665ade97263692328eea4af106cristy} 1824c08aed51c5899665ade97263692328eea4af106cristy 1834c08aed51c5899665ade97263692328eea4af106cristy/* 1844c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1854c08aed51c5899665ade97263692328eea4af106cristy% % 1864c08aed51c5899665ade97263692328eea4af106cristy% % 1874c08aed51c5899665ade97263692328eea4af106cristy% % 1881f07555d1773dac3acebfce4ba017128246923c2cristy+ C o n f o r m P i x e l I n f o % 1891f07555d1773dac3acebfce4ba017128246923c2cristy% % 1901f07555d1773dac3acebfce4ba017128246923c2cristy% % 1911f07555d1773dac3acebfce4ba017128246923c2cristy% % 1921f07555d1773dac3acebfce4ba017128246923c2cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1931f07555d1773dac3acebfce4ba017128246923c2cristy% 1941f07555d1773dac3acebfce4ba017128246923c2cristy% ConformPixelInfo() ensures the pixel conforms with the colorspace and alpha 1951f07555d1773dac3acebfce4ba017128246923c2cristy% attribute of the image. 1961f07555d1773dac3acebfce4ba017128246923c2cristy% 1971f07555d1773dac3acebfce4ba017128246923c2cristy% The format of the ConformPixelInfo method is: 1981f07555d1773dac3acebfce4ba017128246923c2cristy% 19941029e100025ab869690dab8e564c8ee30d0120ccristy% void *ConformPixelInfo((Image *image,const PixelInfo *source, 20041029e100025ab869690dab8e564c8ee30d0120ccristy% PixelInfo *destination,ExceptionInfo *exception) 2011f07555d1773dac3acebfce4ba017128246923c2cristy% 2021f07555d1773dac3acebfce4ba017128246923c2cristy% A description of each parameter follows: 2031f07555d1773dac3acebfce4ba017128246923c2cristy% 2041f07555d1773dac3acebfce4ba017128246923c2cristy% o image: the image. 2051f07555d1773dac3acebfce4ba017128246923c2cristy% 206bfdd5bc06830778f14dfa0659b389ff630b7fbfedirk% o source: the source pixel info. 207bfdd5bc06830778f14dfa0659b389ff630b7fbfedirk% 208bfdd5bc06830778f14dfa0659b389ff630b7fbfedirk% o destination: the destination pixel info. 209bfdd5bc06830778f14dfa0659b389ff630b7fbfedirk% 2101f07555d1773dac3acebfce4ba017128246923c2cristy% o exception: return any errors or warnings in this structure. 2111f07555d1773dac3acebfce4ba017128246923c2cristy% 2121f07555d1773dac3acebfce4ba017128246923c2cristy*/ 213bfdd5bc06830778f14dfa0659b389ff630b7fbfedirkMagickExport void ConformPixelInfo(Image *image,const PixelInfo *source, 214bfdd5bc06830778f14dfa0659b389ff630b7fbfedirk PixelInfo *destination,ExceptionInfo *exception) 2151f07555d1773dac3acebfce4ba017128246923c2cristy{ 2161f07555d1773dac3acebfce4ba017128246923c2cristy assert(image != (Image *) NULL); 217e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(image->signature == MagickCoreSignature); 218bfdd5bc06830778f14dfa0659b389ff630b7fbfedirk assert(destination != (const PixelInfo *) NULL); 219bfdd5bc06830778f14dfa0659b389ff630b7fbfedirk *destination=(*source); 2201f07555d1773dac3acebfce4ba017128246923c2cristy if (image->colorspace == CMYKColorspace) 2211f07555d1773dac3acebfce4ba017128246923c2cristy { 222bfdd5bc06830778f14dfa0659b389ff630b7fbfedirk if (IssRGBCompatibleColorspace(destination->colorspace)) 223bfdd5bc06830778f14dfa0659b389ff630b7fbfedirk ConvertRGBToCMYK(destination); 2241f07555d1773dac3acebfce4ba017128246923c2cristy } 2251f07555d1773dac3acebfce4ba017128246923c2cristy else 226bfdd5bc06830778f14dfa0659b389ff630b7fbfedirk if (destination->colorspace == CMYKColorspace) 2271f07555d1773dac3acebfce4ba017128246923c2cristy { 2281f07555d1773dac3acebfce4ba017128246923c2cristy if (IssRGBCompatibleColorspace(image->colorspace)) 229bfdd5bc06830778f14dfa0659b389ff630b7fbfedirk ConvertCMYKToRGB(destination); 2301f07555d1773dac3acebfce4ba017128246923c2cristy } 231bfdd5bc06830778f14dfa0659b389ff630b7fbfedirk if ((IsPixelInfoGray(&image->background_color) == MagickFalse) && 232bfdd5bc06830778f14dfa0659b389ff630b7fbfedirk (IsGrayColorspace(image->colorspace) != MagickFalse)) 233bfdd5bc06830778f14dfa0659b389ff630b7fbfedirk (void) TransformImageColorspace(image,sRGBColorspace,exception); 23417f11b056210f082a6d0e54ac5d68e6d72fa76b2cristy if ((destination->alpha_trait != UndefinedPixelTrait) && 23517f11b056210f082a6d0e54ac5d68e6d72fa76b2cristy (image->alpha_trait == UndefinedPixelTrait)) 2361f07555d1773dac3acebfce4ba017128246923c2cristy (void) SetImageAlpha(image,OpaqueAlpha,exception); 2371f07555d1773dac3acebfce4ba017128246923c2cristy} 2381f07555d1773dac3acebfce4ba017128246923c2cristy 2391f07555d1773dac3acebfce4ba017128246923c2cristy/* 2401f07555d1773dac3acebfce4ba017128246923c2cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2411f07555d1773dac3acebfce4ba017128246923c2cristy% % 2421f07555d1773dac3acebfce4ba017128246923c2cristy% % 2431f07555d1773dac3acebfce4ba017128246923c2cristy% % 244c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% D e c o d e P i x e l G a m m a % 245c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% % 246c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% % 247c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% % 248c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 249c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% 250c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% DecodePixelGamma() applies the expansive power-law nonlinearity to the pixel. 251c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% 2523506059097340c6cdeff165058b5e18adfc89025cristy% The format of the DecodePixelGamma method is: 253c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% 254c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% double DecodePixelGamma(const MagickRealType pixel) 255c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% 256c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% A description of each parameter follows: 257c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% 258c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% o pixel: the pixel. 259c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% 260c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy*/ 261c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 262c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristystatic inline double DecodeGamma(const double x) 263c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy{ 264c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy div_t 265c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy quotient; 266c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 267c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy double 268c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy p, 269c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy term[9]; 270c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 271c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy int 272c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy exponent; 273c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 274c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy static const double coefficient[] = /* terms for x^(7/5), x=1.5 */ 275c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy { 276c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 1.7917488588043277509, 277c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 0.82045614371976854984, 278c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 0.027694100686325412819, 279c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy -0.00094244335181762134018, 280c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 0.000064355540911469709545, 281c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy -5.7224404636060757485e-06, 282c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 5.8767669437311184313e-07, 283c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy -6.6139920053589721168e-08, 284c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 7.9323242696227458163e-09 285c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy }; 286c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 287c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy static const double powers_of_two[] = /* (2^x)^(7/5) */ 288c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy { 289c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 1.0, 290c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 2.6390158215457883983, 291c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 6.9644045063689921093, 292c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 1.8379173679952558018e+01, 293c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 4.8502930128332728543e+01 294c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy }; 295c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 296c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy /* 297c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy Compute x^2.4 == x*x^(7/5) == pow(x,2.4). 298c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy */ 299c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy term[0]=1.0; 300c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy term[1]=4.0*frexp(x,&exponent)-3.0; 301c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy term[2]=2.0*term[1]*term[1]-term[0]; 302c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy term[3]=2.0*term[1]*term[2]-term[1]; 303c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy term[4]=2.0*term[1]*term[3]-term[2]; 304c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy term[5]=2.0*term[1]*term[4]-term[3]; 305c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy term[6]=2.0*term[1]*term[5]-term[4]; 306c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy term[7]=2.0*term[1]*term[6]-term[5]; 307c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy term[8]=2.0*term[1]*term[7]-term[6]; 308c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy p=coefficient[0]*term[0]+coefficient[1]*term[1]+coefficient[2]*term[2]+ 309c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy coefficient[3]*term[3]+coefficient[4]*term[4]+coefficient[5]*term[5]+ 310c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy coefficient[6]*term[6]+coefficient[7]*term[7]+coefficient[8]*term[8]; 311c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy quotient=div(exponent-1,5); 312c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy if (quotient.rem < 0) 313c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy { 314c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy quotient.quot-=1; 315c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy quotient.rem+=5; 316c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy } 317c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy return(x*ldexp(powers_of_two[quotient.rem]*p,7*quotient.quot)); 318c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy} 319c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 320c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristyMagickExport MagickRealType DecodePixelGamma(const MagickRealType pixel) 321c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy{ 322c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy if (pixel <= (0.0404482362771076*QuantumRange)) 323c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy return(pixel/12.92f); 324c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy return((MagickRealType) (QuantumRange*DecodeGamma((double) (QuantumScale* 325c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy pixel+0.055)/1.055))); 326c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy} 327c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy 328c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy/* 329c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 330c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% % 331c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% % 332c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% % 333ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy+ D e s t r o y P i x e l C h a n n e l M a p % 3344c08aed51c5899665ade97263692328eea4af106cristy% % 3354c08aed51c5899665ade97263692328eea4af106cristy% % 3364c08aed51c5899665ade97263692328eea4af106cristy% % 3374c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3384c08aed51c5899665ade97263692328eea4af106cristy% 339ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy% DestroyPixelChannelMap() deallocates memory associated with the pixel 340ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy% channel map. 3414c08aed51c5899665ade97263692328eea4af106cristy% 342ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy% The format of the DestroyPixelChannelMap() method is: 3434c08aed51c5899665ade97263692328eea4af106cristy% 344bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% PixelChannelMap *DestroyPixelChannelMap(PixelChannelMap *channel_map) 3454c08aed51c5899665ade97263692328eea4af106cristy% 3464c08aed51c5899665ade97263692328eea4af106cristy% A description of each parameter follows: 3474c08aed51c5899665ade97263692328eea4af106cristy% 348ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy% o channel_map: the pixel component map. 3494c08aed51c5899665ade97263692328eea4af106cristy% 3504c08aed51c5899665ade97263692328eea4af106cristy*/ 351bd5a96cd2b69f218f85a7adc306296a736f91a56cristyMagickExport PixelChannelMap *DestroyPixelChannelMap( 352bd5a96cd2b69f218f85a7adc306296a736f91a56cristy PixelChannelMap *channel_map) 3534c08aed51c5899665ade97263692328eea4af106cristy{ 354bd5a96cd2b69f218f85a7adc306296a736f91a56cristy assert(channel_map != (PixelChannelMap *) NULL); 355bd5a96cd2b69f218f85a7adc306296a736f91a56cristy channel_map=(PixelChannelMap *) RelinquishMagickMemory(channel_map); 356bd5a96cd2b69f218f85a7adc306296a736f91a56cristy return((PixelChannelMap *) RelinquishMagickMemory(channel_map)); 3574c08aed51c5899665ade97263692328eea4af106cristy} 3583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 3603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 364c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy+ E n c o d e P i x e l G a m m a % 365c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% % 366c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% % 367c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% % 368c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 369c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% 370c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% EncodePixelGamma() cancels any nonlinearity in the pixel. 371c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% 3723506059097340c6cdeff165058b5e18adfc89025cristy% The format of the EncodePixelGamma method is: 373c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% 374c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% MagickRealType EncodePixelGamma(const double MagickRealType) 375c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% 376c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% A description of each parameter follows: 377c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% 378c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% o pixel: the pixel. 379c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% 380c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy*/ 381c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 382c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristystatic inline double EncodeGamma(const double x) 383c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy{ 384c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy div_t 385c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy quotient; 386c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 387c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy double 388c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy p, 389c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy term[9]; 390c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 391c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy int 392c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy exponent; 393c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 394c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy static const double coefficient[] = /* Chebychevi poly: x^(5/12), x=1.5 */ 395c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy { 396c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 1.1758200232996901923, 397c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 0.16665763094889061230, 398c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy -0.0083154894939042125035, 399c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 0.00075187976780420279038, 400c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy -0.000083240178519391795367, 401c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 0.000010229209410070008679, 402c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy -1.3400466409860246e-06, 403c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 1.8333422241635376682e-07, 404c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy -2.5878596761348859722e-08 405c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy }; 406c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 407c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy static const double powers_of_two[] = /* (2^N)^(5/12) */ 408c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy { 409c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 1.0, 410c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 1.3348398541700343678, 411c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 1.7817974362806785482, 412c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 2.3784142300054420538, 413c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 3.1748021039363991669, 414c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 4.2378523774371812394, 415c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 5.6568542494923805819, 416c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 7.5509945014535482244, 417c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 1.0079368399158985525e1, 418c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 1.3454342644059433809e1, 419c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 1.7959392772949968275e1, 420c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 2.3972913230026907883e1 421c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy }; 422c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 423c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy /* 424c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy Compute x^(1/2.4) == x^(5/12) == pow(x,1.0/2.4). 425c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy */ 426c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy term[0]=1.0; 427c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy term[1]=4.0*frexp(x,&exponent)-3.0; 428c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy term[2]=2.0*term[1]*term[1]-term[0]; 429c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy term[3]=2.0*term[1]*term[2]-term[1]; 430c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy term[4]=2.0*term[1]*term[3]-term[2]; 431c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy term[5]=2.0*term[1]*term[4]-term[3]; 432c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy term[6]=2.0*term[1]*term[5]-term[4]; 433c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy term[7]=2.0*term[1]*term[6]-term[5]; 434c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy term[8]=2.0*term[1]*term[7]-term[6]; 435c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy p=coefficient[0]*term[0]+coefficient[1]*term[1]+coefficient[2]*term[2]+ 436c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy coefficient[3]*term[3]+coefficient[4]*term[4]+coefficient[5]*term[5]+ 437c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy coefficient[6]*term[6]+coefficient[7]*term[7]+coefficient[8]*term[8]; 438c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy quotient=div(exponent-1,12); 439c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy if (quotient.rem < 0) 440c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy { 441c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy quotient.quot-=1; 442c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy quotient.rem+=12; 443c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy } 444c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy return(ldexp(powers_of_two[quotient.rem]*p,5*quotient.quot)); 445c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy} 446c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy 447c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristyMagickExport MagickRealType EncodePixelGamma(const MagickRealType pixel) 448c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy{ 449c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy if (pixel <= (0.0031306684425005883*QuantumRange)) 450c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy return(12.92f*pixel); 451c29824a8a311026fa6d88675fdbb7fdf28a8b93dcristy return((MagickRealType) QuantumRange*(1.055*EncodeGamma((double) QuantumScale* 4522a13aa6938f7e40986908f79a54a32958bf0fc81cristy pixel)-0.055)); 453c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy} 454c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy 455c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy/* 456c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 457c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% % 458c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% % 459c8aff84439d0f36504f110e6f7ab49f8ad312c0fcristy% % 4603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% E x p o r t I m a g e P i x e l s % 4613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ExportImagePixels() extracts pixel data from an image and returns it to you. 4673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The method returns MagickTrue on success otherwise MagickFalse if an error is 468b5a45a37a6faa8a3725c814b51a1a86daa4ff21fcristy% encountered. The data is returned as char, short int, Quantum, unsigned int, 469cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy% unsigned long long, float, or double in the order specified by map. 4703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Suppose you want to extract the first scanline of a 640x480 image as 4723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% character data in red-green-blue order: 4733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ExportImagePixels(image,0,0,640,1,"RGB",CharPixel,pixels,exception); 4753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the ExportImagePixels method is: 4773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 478cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy% MagickBooleanType ExportImagePixels(const Image *image,const ssize_t x, 479cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy% const ssize_t y,const size_t width,const size_t height, 480cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy% const char *map,const StorageType type,void *pixels, 48146f4be29828ab7588745336d46ab11611c847933cristy% ExceptionInfo *exception) 4823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 4843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o image: the image. 4863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 487cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy% o x,y,width,height: These values define the perimeter 4883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% of a region of pixels you want to extract. 4893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o map: This string reflects the expected ordering of the pixel array. 4913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% It can be any combination or order of R = red, G = green, B = blue, 4923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A = alpha (0 is transparent), O = opacity (0 is opaque), C = cyan, 4933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Y = yellow, M = magenta, K = black, I = intensity (for grayscale), 4943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% P = pad. 4953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o type: Define the data type of the pixels. Float and double types are 4973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% normalized to [0..1] otherwise [0..QuantumRange]. Choose from these 4986c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy% types: CharPixel (char *), DoublePixel (double *), FloatPixel (float *), 499ff6834e270b99c2747ad5b2f4edeecf862aaf825cristy% LongPixel (unsigned int *), LongLongPixel (unsigned long long *), 5006c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy% QuantumPixel (Quantum *), or ShortPixel (unsigned short *). 5013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o pixels: This array of values contain the pixel components as defined by 5033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% map and type. You must preallocate this array where the expected 5043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% length varies depending on the values of width, height, map, and type. 5053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o exception: return any errors or warnings in this structure. 5073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 509e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 51039fee9a56b751a52fb8b73d39836d48bc80cb35fdirkstatic void ExportCharPixel(const Image *image,const RectangleInfo *roi, 51105d2ff7ebf21f659f5b11e45afb294e152f4330cdirk const char *magick_restrict map,const QuantumType *quantum_map,void *pixels, 51246f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 5133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 514e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const Quantum 51505d2ff7ebf21f659f5b11e45afb294e152f4330cdirk *magick_restrict p; 5163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 517bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 5183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x; 5193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 520e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register unsigned char 52105d2ff7ebf21f659f5b11e45afb294e152f4330cdirk *magick_restrict q; 5223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 52314d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 52414d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 52514d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 5269d314ff2c17a77996c05413c2013880387e50f0ecristy ssize_t 5279d314ff2c17a77996c05413c2013880387e50f0ecristy y; 5289d314ff2c17a77996c05413c2013880387e50f0ecristy 52946f4be29828ab7588745336d46ab11611c847933cristy q=(unsigned char *) pixels; 530e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 5313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 532cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 5333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 534cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 535e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 5363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 537cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 538e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 539e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelBlue(image,p)); 540e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelGreen(image,p)); 541e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelRed(image,p)); 542e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 543e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 5443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 545e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 546e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 547e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 548e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 549cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 5503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 551cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 552e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 5533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 554cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 555e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 556e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelBlue(image,p)); 557e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelGreen(image,p)); 558e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelRed(image,p)); 559e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelAlpha(image,p)); 560e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 561e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 5623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 563e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 564e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 565e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 566e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 567cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 5683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 569cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 570e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 5713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 572cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 573e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 574e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelBlue(image,p)); 575e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelGreen(image,p)); 576e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelRed(image,p)); 577e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar((Quantum) 0); 578e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 579e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 5803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 581e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 582e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 583e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 584e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 585cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 5863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 587cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 588e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 589e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 590cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 591e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 59270e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy *q++=ScaleQuantumToChar(ClampToQuantum(GetPixelIntensity(image,p))); 593e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 594e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 5953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 596e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 597e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 598e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 599e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 600cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 6013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 602cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 603e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 604e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 605cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 606e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 607e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelRed(image,p)); 608e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelGreen(image,p)); 609e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelBlue(image,p)); 610e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 611e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 6123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 613e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 614e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 615e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 616e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 617cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 6183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 619cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 620e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 6213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 622cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 623e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 624e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelRed(image,p)); 625e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelGreen(image,p)); 626e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelBlue(image,p)); 627e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelAlpha(image,p)); 628e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 629e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 6303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 631e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 632e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 633e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 634e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 635cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 6363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 637cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 638e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 639e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 640cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 641e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 642e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelRed(image,p)); 643e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelGreen(image,p)); 644e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar(GetPixelBlue(image,p)); 645e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToChar((Quantum) 0); 646e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 647e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 6483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 649e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 6503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 65114d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 652cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 6533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 654cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 655e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 656e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 657cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 6583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 659e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 660e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 6613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 66214d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 663e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 664e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=0; 665e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 6663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 667e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 668e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 6693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 670e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToChar(GetPixelRed(image,p)); 671e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 6723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 673e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 674e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 6753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 676e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToChar(GetPixelGreen(image,p)); 677e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 6783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 679e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 680e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 6813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 682e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToChar(GetPixelBlue(image,p)); 683e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 6843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 685e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 6863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 687e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToChar(GetPixelAlpha(image,p)); 688e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 6893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 690e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 6913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 692e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToChar(GetPixelAlpha(image,p)); 693e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 6943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 695e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 6963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 697e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->colorspace == CMYKColorspace) 698e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToChar(GetPixelBlack(image,p)); 699e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 7003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 701e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 7023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 70370e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy *q=ScaleQuantumToChar(ClampToQuantum(GetPixelIntensity(image,p))); 704e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 7053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 706e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 707e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 7083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 709e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q++; 710e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 711e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 712e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 713e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 714e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 715e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 71639fee9a56b751a52fb8b73d39836d48bc80cb35fdirkstatic void ExportDoublePixel(const Image *image,const RectangleInfo *roi, 71705d2ff7ebf21f659f5b11e45afb294e152f4330cdirk const char *magick_restrict map,const QuantumType *quantum_map,void *pixels, 71846f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 719e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 720e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const Quantum 72105d2ff7ebf21f659f5b11e45afb294e152f4330cdirk *magick_restrict p; 722e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 723e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register double 72405d2ff7ebf21f659f5b11e45afb294e152f4330cdirk *magick_restrict q; 725e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 726e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 727e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 728e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 72914d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 73014d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 73114d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 732e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 733e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 734e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 735e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q=(double *) pixels; 736e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 737e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 738cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 7393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 740cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 7414c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 7423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 743cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 7443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 745e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelBlue(image,p)); 746e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelGreen(image,p)); 747e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelRed(image,p)); 748ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(image); 7493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 7503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 751e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 7523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 753e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 7543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 755cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 756e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 757cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 758e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 7593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 760cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 7613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 762e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelBlue(image,p)); 763e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelGreen(image,p)); 764e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelRed(image,p)); 765e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelAlpha(image,p)); 766e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 7673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 768e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 769e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 770e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 771e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 772e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 773cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 7743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 775cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 7764c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 7773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 778cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 7793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 780e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelBlue(image,p)); 781e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelGreen(image,p)); 782e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelRed(image,p)); 783e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=0.0; 784ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(image); 7853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 7863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 787e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 7883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 789e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 7903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 791cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 792e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 793cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 794e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 7953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 796cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 7973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 798e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelIntensity(image,p)); 799e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 8003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 801e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 802e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 803e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 804e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 805e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 806cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 807e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 808cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 809e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 8103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 811cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 8123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 813e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelRed(image,p)); 814e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelGreen(image,p)); 815e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelBlue(image,p)); 816e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 8173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 818e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 819e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 820e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 821e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 822e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 823cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 824e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 825cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 826e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 8273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 828cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 8293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 830e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelRed(image,p)); 831e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelGreen(image,p)); 832e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelBlue(image,p)); 833e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelAlpha(image,p)); 834e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 8353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 836e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 837e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 838e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 839e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 840e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 841cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 8423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 843cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 8444c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 8453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 846cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 8473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 848e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelRed(image,p)); 849e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelGreen(image,p)); 850e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(double) (QuantumScale*GetPixelBlue(image,p)); 851e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=0.0; 852ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(image); 8533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 8543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 855e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 8563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 85714d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 858cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 859e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 860cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 861e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 862e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 863cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 8643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 865e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 866e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 8673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 86814d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 869e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 870e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=0; 871e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 8723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 873e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 874e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 8753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 876e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(double) (QuantumScale*GetPixelRed(image,p)); 877e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 8783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 879e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 880e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 8813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 882e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(double) (QuantumScale*GetPixelGreen(image,p)); 883e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 8843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 885e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 886e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 8873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 888e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(double) (QuantumScale*GetPixelBlue(image,p)); 889e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 8903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 891e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 8923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 893e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(double) (QuantumScale*GetPixelAlpha(image,p)); 894e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 8953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 896e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 8973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 898e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(double) (QuantumScale*GetPixelAlpha(image,p)); 899e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 9003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 901e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 9023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 903e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->colorspace == CMYKColorspace) 904e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(double) (QuantumScale* 905e5370944fabb7afa477ab1325d400731b1e5d5e8cristy GetPixelBlack(image,p)); 906e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 9073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 908e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 9093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 910e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(double) (QuantumScale*GetPixelIntensity(image,p)); 911e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 9123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 913e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 914e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=0; 9153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 916e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q++; 917e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 918e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 919e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 920e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 921e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 922e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 92339fee9a56b751a52fb8b73d39836d48bc80cb35fdirkstatic void ExportFloatPixel(const Image *image,const RectangleInfo *roi, 92405d2ff7ebf21f659f5b11e45afb294e152f4330cdirk const char *magick_restrict map,const QuantumType *quantum_map,void *pixels, 92546f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 926e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 927e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const Quantum 92805d2ff7ebf21f659f5b11e45afb294e152f4330cdirk *magick_restrict p; 929e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 930e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register float 93105d2ff7ebf21f659f5b11e45afb294e152f4330cdirk *magick_restrict q; 932e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 933e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 934e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 935e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 93614d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 93714d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 93814d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 939e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 940e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 941e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 942e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q=(float *) pixels; 943e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 944e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 945cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 9463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 947cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 9484c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 9493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 950cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 9513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 952e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelBlue(image,p)); 953e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelGreen(image,p)); 954e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelRed(image,p)); 955ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(image); 9563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 9573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 958e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 9593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 960e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 9613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 962cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 963e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 964cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 965e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 9663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 967cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 9683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 969e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelBlue(image,p)); 970e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelGreen(image,p)); 971e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelRed(image,p)); 972e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelAlpha(image,p)); 973e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 9743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 975e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 976e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 977e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 978e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 979e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 980cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 9813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 982cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 9834c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 9843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 985cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 9863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 987e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelBlue(image,p)); 988e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelGreen(image,p)); 989e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelRed(image,p)); 990e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=0.0; 991ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(image); 9923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 9933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 994e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 9953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 996e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 9973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 998cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 999e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1000cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1001e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 10023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 1003cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 10043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1005e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelIntensity(image,p)); 1006e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 10073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1008e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1009e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1010e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1011e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 1012e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1013cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1014e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1015cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1016e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 10173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 1018cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 10193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1020e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelRed(image,p)); 1021e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelGreen(image,p)); 1022e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelBlue(image,p)); 1023e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 10243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1025e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1026e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1027e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1028e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 1029e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1030cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1031e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1032cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1033e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 10343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 1035cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 10363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1037e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelRed(image,p)); 1038e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelGreen(image,p)); 1039e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelBlue(image,p)); 1040e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelAlpha(image,p)); 1041e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 10423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1043e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1044e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1045e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1046e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 1047e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1048cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 10493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1050cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 10514c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 10523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 1053cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 10543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1055e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelRed(image,p)); 1056e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelGreen(image,p)); 1057e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(float) (QuantumScale*GetPixelBlue(image,p)); 1058e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=0.0; 1059ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(image); 10603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 10613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1062e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 10633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 106414d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 1065cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1066e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1067cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1068e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1069e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1070cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 10713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1072e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 1073e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 10743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 107514d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 1076e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1077e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=0; 1078e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 10793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1080e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 1081e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 10823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1083e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(float) (QuantumScale*GetPixelRed(image,p)); 1084e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 10853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1086e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 1087e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 10883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1089e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(float) (QuantumScale*GetPixelGreen(image,p)); 1090e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 10913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1092e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 1093e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 10943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1095e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(float) (QuantumScale*GetPixelBlue(image,p)); 1096e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 10973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1098e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 10993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1100e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(float) (QuantumScale*((Quantum) (GetPixelAlpha(image,p)))); 1101e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 11023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1103e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 11043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1105e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(float) (QuantumScale*GetPixelAlpha(image,p)); 1106e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 11073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1108e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 11093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1110e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->colorspace == CMYKColorspace) 1111e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(float) (QuantumScale* GetPixelBlack(image,p)); 1112e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 11133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1114e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 11153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1116e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(float) (QuantumScale*GetPixelIntensity(image,p)); 1117e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 11183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1119e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 1120e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=0; 11213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1122e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q++; 1123e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1124e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1125e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1126e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1127e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 1128e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 112939fee9a56b751a52fb8b73d39836d48bc80cb35fdirkstatic void ExportLongPixel(const Image *image,const RectangleInfo *roi, 113005d2ff7ebf21f659f5b11e45afb294e152f4330cdirk const char *magick_restrict map,const QuantumType *quantum_map,void *pixels, 113146f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 1132e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 1133e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const Quantum 113405d2ff7ebf21f659f5b11e45afb294e152f4330cdirk *magick_restrict p; 1135e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1136e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 1137e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 1138e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1139e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register unsigned int 114005d2ff7ebf21f659f5b11e45afb294e152f4330cdirk *magick_restrict q; 1141e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 114214d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 114314d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 114414d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 1145e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 1146e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 1147e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1148e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q=(unsigned int *) pixels; 1149e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 1150e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1151cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 11523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1153cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 11544c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 11553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 1156cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 11573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 11586c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelBlue(image,p)); 11596c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelGreen(image,p)); 11606c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelRed(image,p)); 1161ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(image); 11623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 11633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1164e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 11653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1166e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 11673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1168cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1169e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1170cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1171e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1172e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1173cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1174e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 11756c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelBlue(image,p)); 11766c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelGreen(image,p)); 11776c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelRed(image,p)); 11786c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelAlpha(image,p)); 1179e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1180e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1181e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1182e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1183e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1184e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 1185e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1186cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1187e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1188cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1189e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1190e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1191cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1192e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 11936c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelBlue(image,p)); 11946c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelGreen(image,p)); 11956c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelRed(image,p)); 11966c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=0; 1197e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1198e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1199e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1200e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1201e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1202e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 1203e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1204cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1205e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1206cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1207e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1208e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1209cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1210e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 121170e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy *q++=ScaleQuantumToLong(ClampToQuantum(GetPixelIntensity(image,p))); 1212e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1213e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1214e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1215e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1216e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1217e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 1218e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1219cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1220e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1221cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1222e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1223e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1224cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1225e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 12266c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelRed(image,p)); 12276c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelGreen(image,p)); 12286c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelBlue(image,p)); 1229e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1230e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1231e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1232e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1233e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1234e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 1235e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1236cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1237e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1238cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1239e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1240e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1241cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1242e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 12436c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelRed(image,p)); 12446c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelGreen(image,p)); 12456c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelBlue(image,p)); 12466c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelAlpha(image,p)); 1247e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1248e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1249e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1250e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1251e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1252e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 1253e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1254cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1255e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1256cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1257e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1258e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1259cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1260e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 12616c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelRed(image,p)); 12626c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelGreen(image,p)); 12636c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=ScaleQuantumToLong(GetPixelBlue(image,p)); 12646c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q++=0; 1265e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1266e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1267e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1268e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1269e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 127014d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 1271cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1272e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1273cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1274e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1275e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1276cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1277e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1278e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 1279e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 1280e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 128114d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 1282e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1283e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=0; 1284e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 1285e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1286e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 1287e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 1288e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 12896c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q=ScaleQuantumToLong(GetPixelRed(image,p)); 1290e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1291e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1292e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 1293e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 1294e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 12956c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q=ScaleQuantumToLong(GetPixelGreen(image,p)); 1296e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1297e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1298e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 1299e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 1300e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 13016c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q=ScaleQuantumToLong(GetPixelBlue(image,p)); 1302e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1303e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1304e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 1305e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 13066c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q=ScaleQuantumToLong(GetPixelAlpha(image,p)); 1307e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1308e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1309e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 1310e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 13116c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q=ScaleQuantumToLong(GetPixelAlpha(image,p)); 1312e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1313e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1314e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 1315e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1316e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->colorspace == CMYKColorspace) 13176c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy *q=ScaleQuantumToLong(GetPixelBlack(image,p)); 1318e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1319e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1320e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 1321e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 132270e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy *q=ScaleQuantumToLong(ClampToQuantum(GetPixelIntensity(image,p))); 1323e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1324e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1325e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 13266c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy break; 1327e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1328e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q++; 1329e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1330e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1331e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1332e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1333e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 1334e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 133539fee9a56b751a52fb8b73d39836d48bc80cb35fdirkstatic void ExportLongLongPixel(const Image *image,const RectangleInfo *roi, 133605d2ff7ebf21f659f5b11e45afb294e152f4330cdirk const char *magick_restrict map,const QuantumType *quantum_map,void *pixels, 133746f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 1338e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 1339e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const Quantum 134005d2ff7ebf21f659f5b11e45afb294e152f4330cdirk *magick_restrict p; 1341e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1342e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 1343e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 1344e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1345b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy register MagickSizeType 134605d2ff7ebf21f659f5b11e45afb294e152f4330cdirk *magick_restrict q; 1347e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 134814d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 134914d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 135014d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 1351e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 1352e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 1353e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1354b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy q=(MagickSizeType *) pixels; 1355e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 1356e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1357cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1358e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1359cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1360e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1361e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1362cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1363e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1364b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelBlue(image,p)); 1365b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelGreen(image,p)); 1366b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelRed(image,p)); 1367e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1368e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1369e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1370e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1371e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1372e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 1373e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1374cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1375e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1376cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1377e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1378e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1379cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1380e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1381b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelBlue(image,p)); 1382b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelGreen(image,p)); 1383b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelRed(image,p)); 1384b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelAlpha(image,p)); 1385e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1386e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1387e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1388e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1389e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1390e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 1391e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1392cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1393e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1394cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1395e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1396e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1397cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1398e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1399b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelBlue(image,p)); 1400b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelGreen(image,p)); 1401b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelRed(image,p)); 1402e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=0; 1403e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1404e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1405e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1406e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1407e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1408e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 1409e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1410cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1411e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1412cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1413e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1414e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1415cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1416e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 141731e75937db91fd53e7deb9e3544646d0459f2196cristy *q++=ScaleQuantumToLongLong(ClampToQuantum( 141831e75937db91fd53e7deb9e3544646d0459f2196cristy GetPixelIntensity(image,p))); 1419e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1420e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1421e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1422e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1423e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1424e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 1425e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1426cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1427e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1428cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1429e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1430e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1431cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1432e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1433b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelRed(image,p)); 1434b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelGreen(image,p)); 1435b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelBlue(image,p)); 1436e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1437e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1438e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1439e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1440e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1441e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 1442e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1443cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1444e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1445cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1446e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1447e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1448cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1449e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1450b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelRed(image,p)); 1451b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelGreen(image,p)); 1452b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelBlue(image,p)); 1453b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelAlpha(image,p)); 1454e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1455e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1456e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1457e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1458e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1459e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 1460e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1461cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1462e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1463cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1464e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1465e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1466cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1467e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1468b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelRed(image,p)); 1469b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelGreen(image,p)); 1470b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q++=ScaleQuantumToLongLong(GetPixelBlue(image,p)); 1471e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=0; 1472e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1473e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1474e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1475e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1476e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 147714d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 1478cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1479e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1480cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1481e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1482e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1483cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1484e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1485e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 1486e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 1487e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 148814d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 1489e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1490e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=0; 1491e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 1492e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1493e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 1494e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 1495e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1496b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q=ScaleQuantumToLongLong(GetPixelRed(image,p)); 1497e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1498e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1499e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 1500e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 1501e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1502b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q=ScaleQuantumToLongLong(GetPixelGreen(image,p)); 1503e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1504e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1505e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 1506e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 1507e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1508b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q=ScaleQuantumToLongLong(GetPixelBlue(image,p)); 1509e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1510e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1511e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 1512e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1513b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q=ScaleQuantumToLongLong(GetPixelAlpha(image,p)); 1514e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1515e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1516e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 1517e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1518b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q=ScaleQuantumToLongLong(GetPixelAlpha(image,p)); 1519e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1520e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1521e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 1522e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1523e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->colorspace == CMYKColorspace) 1524b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy *q=ScaleQuantumToLongLong(GetPixelBlack(image,p)); 1525e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1526e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1527e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 1528e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 152958ee5018960b42b80b54398eacabe9ae5da89149cristy *q=ScaleQuantumToLongLong(ClampToQuantum( 153058ee5018960b42b80b54398eacabe9ae5da89149cristy GetPixelIntensity(image,p))); 1531e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1532e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1533e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 1534e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1535e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1536e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q++; 1537e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1538e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1539e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1540e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1541e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 1542e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 154339fee9a56b751a52fb8b73d39836d48bc80cb35fdirkstatic void ExportQuantumPixel(const Image *image,const RectangleInfo *roi, 154405d2ff7ebf21f659f5b11e45afb294e152f4330cdirk const char *magick_restrict map,const QuantumType *quantum_map,void *pixels, 154546f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 1546e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 1547e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const Quantum 154805d2ff7ebf21f659f5b11e45afb294e152f4330cdirk *magick_restrict p; 1549e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1550e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register Quantum 155105d2ff7ebf21f659f5b11e45afb294e152f4330cdirk *magick_restrict q; 1552e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1553e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 1554e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 1555e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 155614d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 155714d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 155814d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 1559e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 1560e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 1561e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1562e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q=(Quantum *) pixels; 1563e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 1564e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1565cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1566e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1567cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1568e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1569e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1570cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1571e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1572e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelBlue(image,p); 1573e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelGreen(image,p); 1574e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelRed(image,p); 1575e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1576e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1577e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1578e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1579e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1580e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 1581e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1582cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1583e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1584cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1585e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1586e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1587cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1588e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1589e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelBlue(image,p); 1590e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelGreen(image,p); 1591e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelRed(image,p); 1592e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(Quantum) (GetPixelAlpha(image,p)); 1593e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1594e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1595e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1596e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1597e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1598e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 1599e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1600cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1601e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1602cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1603e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1604e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1605cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1606e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1607e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelBlue(image,p); 1608e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelGreen(image,p); 1609e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelRed(image,p); 1610e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(Quantum) 0; 1611e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1612e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1613e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1614e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1615e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1616e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 1617e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1618cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1619e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1620cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1621e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1622e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1623cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1624e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 162570e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy *q++=ClampToQuantum(GetPixelIntensity(image,p)); 1626e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1627e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1628e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1629e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1630e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1631e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 1632e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1633cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1634e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1635cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1636e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1637e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1638cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1639e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1640e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelRed(image,p); 1641e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelGreen(image,p); 1642e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelBlue(image,p); 1643e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1644e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1645e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1646e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1647e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1648e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 1649e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1650cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1651e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1652cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1653e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1654e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1655cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1656e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1657e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelRed(image,p); 1658e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelGreen(image,p); 1659e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelBlue(image,p); 1660e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(Quantum) (GetPixelAlpha(image,p)); 1661e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1662e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1663e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1664e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1665e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1666e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 1667e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1668cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1669e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1670cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1671e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1672e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1673cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1674e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1675e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelRed(image,p); 1676e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelGreen(image,p); 1677e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=GetPixelBlue(image,p); 1678e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=(Quantum) 0; 1679e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1680e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1681e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1682e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1683e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 168414d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 1685cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1686e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1687cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1688e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1689e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1690cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1691e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1692e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 1693e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 1694e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 169514d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 1696e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1697e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(Quantum) 0; 1698e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 1699e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1700e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 1701e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 1702e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1703e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=GetPixelRed(image,p); 1704e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1705e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1706e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 1707e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 1708e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1709e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=GetPixelGreen(image,p); 1710e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1711e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1712e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 1713e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 1714e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1715e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=GetPixelBlue(image,p); 1716e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1717e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1718e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 1719e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1720e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=GetPixelAlpha(image,p); 1721e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1722e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1723e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 1724e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1725e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=GetPixelAlpha(image,p); 1726e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1727e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1728e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 1729e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1730e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->colorspace == CMYKColorspace) 1731e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=GetPixelBlack(image,p); 1732e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1733e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1734e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 1735e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 173670e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy *q=ClampToQuantum(GetPixelIntensity(image,p)); 1737e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1738e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1739e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 1740e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1741e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=(Quantum) 0; 1742e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1743e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1744e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1745e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q++; 1746e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1747e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1748e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1749e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1750e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 1751e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 175239fee9a56b751a52fb8b73d39836d48bc80cb35fdirkstatic void ExportShortPixel(const Image *image,const RectangleInfo *roi, 175305d2ff7ebf21f659f5b11e45afb294e152f4330cdirk const char *magick_restrict map,const QuantumType *quantum_map,void *pixels, 175446f4be29828ab7588745336d46ab11611c847933cristy ExceptionInfo *exception) 1755e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 1756e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const Quantum 175705d2ff7ebf21f659f5b11e45afb294e152f4330cdirk *magick_restrict p; 1758e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1759e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 1760e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 1761e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1762e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register unsigned short 176305d2ff7ebf21f659f5b11e45afb294e152f4330cdirk *magick_restrict q; 1764e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 176514d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 176614d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 176714d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 176814d712974a2c2cd2aebf8db11c7ca686bb67596fcristy ssize_t 176914d712974a2c2cd2aebf8db11c7ca686bb67596fcristy y; 177014d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 1771e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q=(unsigned short *) pixels; 1772e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 1773e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1774cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1775e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1776cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1777e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1778e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1779cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1780e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1781e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelBlue(image,p)); 1782e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelGreen(image,p)); 1783e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelRed(image,p)); 1784e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1785e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1786e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1787e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1788e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1789e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 1790e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1791cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1792e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1793cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1794e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1795e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1796cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1797e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1798e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelBlue(image,p)); 1799e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelGreen(image,p)); 1800e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelRed(image,p)); 1801e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelAlpha(image,p)); 1802e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1803e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1804e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1805e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1806e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1807e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 1808e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1809cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1810e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1811cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1812e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1813e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1814cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1815e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1816e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelBlue(image,p)); 1817e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelGreen(image,p)); 1818e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelRed(image,p)); 1819e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=0; 1820e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1821e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1822e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1823e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1824e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1825e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 1826e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1827cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1828e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1829cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1830e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1831e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1832cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1833e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 183470e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy *q++=ScaleQuantumToShort(ClampToQuantum(GetPixelIntensity(image,p))); 1835e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1836e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1837e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1838e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1839e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1840e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 1841e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1842cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1843e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1844cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1845e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1846e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1847cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1848e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1849e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelRed(image,p)); 1850e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelGreen(image,p)); 1851e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelBlue(image,p)); 1852e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1853e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1854e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1855e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1856e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1857e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 1858e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1859cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1860e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1861cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1862e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1863e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1864cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1865e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1866e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelRed(image,p)); 1867e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelGreen(image,p)); 1868e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelBlue(image,p)); 1869e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelAlpha(image,p)); 1870e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1871e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1872e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1873e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1874e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1875e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 1876e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1877cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1878e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1879cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1880e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1881e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1882cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1883e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1884e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelRed(image,p)); 1885e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelGreen(image,p)); 1886e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=ScaleQuantumToShort(GetPixelBlue(image,p)); 1887e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q++=0; 1888e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1889e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1890e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1891e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 1892e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 189314d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 1894cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 1895e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1896cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy p=GetVirtualPixels(image,roi->x,roi->y+y,roi->width,1,exception); 1897e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (p == (const Quantum *) NULL) 1898e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1899cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 1900e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1901e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 1902e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 1903e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 190414d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 1905e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1906e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=0; 1907e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 1908e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1909e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 1910e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 1911e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1912e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToShort(GetPixelRed(image,p)); 1913e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1914e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1915e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 1916e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 1917e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1918e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToShort(GetPixelGreen(image,p)); 1919e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1920e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1921e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 1922e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 1923e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1924e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToShort(GetPixelBlue(image,p)); 1925e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1926e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1927e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 1928e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1929e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToShort(GetPixelAlpha(image,p)); 1930e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1931e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1932e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 1933e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1934e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToShort(GetPixelAlpha(image,p)); 1935e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1936e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1937e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 1938e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1939e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->colorspace == CMYKColorspace) 1940e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *q=ScaleQuantumToShort(GetPixelBlack(image,p)); 1941e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1942e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1943e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 1944e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 194570e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy *q=ScaleQuantumToShort(ClampToQuantum(GetPixelIntensity(image,p))); 1946e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1947e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1948e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 1949e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1950e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1951e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q++; 1952e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1953e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p+=GetPixelChannels(image); 1954e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1955e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1956e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 1957e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 195839fee9a56b751a52fb8b73d39836d48bc80cb35fdirkMagickExport MagickBooleanType ExportImagePixels(const Image *image,const ssize_t x, 195958ee5018960b42b80b54398eacabe9ae5da89149cristy const ssize_t y,const size_t width,const size_t height,const char *map, 196058ee5018960b42b80b54398eacabe9ae5da89149cristy const StorageType type,void *pixels,ExceptionInfo *exception) 1961e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 1962e5370944fabb7afa477ab1325d400731b1e5d5e8cristy QuantumType 1963e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *quantum_map; 1964e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 1965cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy RectangleInfo 1966cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy roi; 1967cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy 1968e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 1969e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 1970e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 197114d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 197214d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 197314d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 1974e5370944fabb7afa477ab1325d400731b1e5d5e8cristy assert(image != (Image *) NULL); 1975e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(image->signature == MagickCoreSignature); 1976e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->debug != MagickFalse) 1977e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename); 197814d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 197914d712974a2c2cd2aebf8db11c7ca686bb67596fcristy quantum_map=(QuantumType *) AcquireQuantumMemory(length,sizeof(*quantum_map)); 1980e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (quantum_map == (QuantumType *) NULL) 1981e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1982e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) ThrowMagickException(exception,GetMagickModule(), 1983efe601ce9ea5ad34ad0e8ad6e61d9be9b148b2a3cristy ResourceLimitError,"MemoryAllocationFailed","`%s'",image->filename); 1984e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return(MagickFalse); 1985e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 198614d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 1987e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1988e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (map[i]) 1989e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1990e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'A': 1991e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'a': 1992e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1993e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=AlphaQuantum; 1994e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 1995e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 1996e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'B': 1997e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'b': 1998e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 1999e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=BlueQuantum; 2000e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2001e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2002e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'C': 2003e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'c': 2004e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2005e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=CyanQuantum; 2006e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->colorspace == CMYKColorspace) 2007e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2008e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map); 2009e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) ThrowMagickException(exception,GetMagickModule(),ImageError, 2010efe601ce9ea5ad34ad0e8ad6e61d9be9b148b2a3cristy "ColorSeparatedImageRequired","`%s'",map); 2011e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return(MagickFalse); 2012e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2013e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'g': 2014e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'G': 2015e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2016e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=GreenQuantum; 2017e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2018e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2019e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'I': 2020e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'i': 2021e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2022e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=IndexQuantum; 2023e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2024e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2025e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'K': 2026e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'k': 2027e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2028e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=BlackQuantum; 2029e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->colorspace == CMYKColorspace) 2030e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2031e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map); 2032e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) ThrowMagickException(exception,GetMagickModule(),ImageError, 2033efe601ce9ea5ad34ad0e8ad6e61d9be9b148b2a3cristy "ColorSeparatedImageRequired","`%s'",map); 2034e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return(MagickFalse); 2035e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2036e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'M': 2037e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'm': 2038e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2039e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=MagentaQuantum; 2040e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->colorspace == CMYKColorspace) 2041e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2042e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map); 2043e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) ThrowMagickException(exception,GetMagickModule(),ImageError, 2044efe601ce9ea5ad34ad0e8ad6e61d9be9b148b2a3cristy "ColorSeparatedImageRequired","`%s'",map); 2045e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return(MagickFalse); 2046e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2047e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'o': 2048e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'O': 2049e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2050e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=OpacityQuantum; 2051e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2052e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2053e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'P': 2054e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'p': 2055e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2056e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=UndefinedQuantum; 2057e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2058e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2059e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'R': 2060e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'r': 2061e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2062e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=RedQuantum; 2063e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2064e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2065e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'Y': 2066e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'y': 2067e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2068e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=YellowQuantum; 2069e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->colorspace == CMYKColorspace) 2070e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2071e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map); 2072e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) ThrowMagickException(exception,GetMagickModule(),ImageError, 2073efe601ce9ea5ad34ad0e8ad6e61d9be9b148b2a3cristy "ColorSeparatedImageRequired","`%s'",map); 2074e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return(MagickFalse); 2075e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2076e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 2077e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2078e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map); 2079e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) ThrowMagickException(exception,GetMagickModule(),OptionError, 2080efe601ce9ea5ad34ad0e8ad6e61d9be9b148b2a3cristy "UnrecognizedPixelMap","`%s'",map); 2081e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return(MagickFalse); 2082e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2083e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2084e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2085cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy roi.width=width; 2086cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy roi.height=height; 2087cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy roi.x=x; 2088cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy roi.y=y; 2089e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (type) 2090e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2091e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CharPixel: 2092e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2093cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ExportCharPixel(image,&roi,map,quantum_map,pixels,exception); 2094e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2095e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2096e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case DoublePixel: 2097e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2098cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ExportDoublePixel(image,&roi,map,quantum_map,pixels,exception); 2099e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2100e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2101e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case FloatPixel: 2102e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2103cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ExportFloatPixel(image,&roi,map,quantum_map,pixels,exception); 2104e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2105e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 21066c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy case LongPixel: 2107e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2108cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ExportLongPixel(image,&roi,map,quantum_map,pixels,exception); 2109e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2110e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 21116c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy case LongLongPixel: 2112e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2113cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ExportLongLongPixel(image,&roi,map,quantum_map,pixels,exception); 2114e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2115e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2116e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case QuantumPixel: 2117e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2118cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ExportQuantumPixel(image,&roi,map,quantum_map,pixels,exception); 2119e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2120e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2121e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case ShortPixel: 2122e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2123cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ExportShortPixel(image,&roi,map,quantum_map,pixels,exception); 2124e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2125e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2126e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 2127e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2128e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map); 2129e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) ThrowMagickException(exception,GetMagickModule(),OptionError, 2130efe601ce9ea5ad34ad0e8ad6e61d9be9b148b2a3cristy "UnrecognizedPixelMap","`%s'",map); 21313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 21323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 21333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2134e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map); 2135e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return(MagickTrue); 2136e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 2137e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2138e5370944fabb7afa477ab1325d400731b1e5d5e8cristy/* 2139e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2140e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 2141e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 2142e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 2143e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% G e t P i x e l I n f o % 2144e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 2145e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 2146e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 2147e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2148e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2149e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% GetPixelInfo() initializes the PixelInfo structure. 2150e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2151e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% The format of the GetPixelInfo method is: 2152e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2153e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% GetPixelInfo(const Image *image,PixelInfo *pixel) 2154e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2155e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% A description of each parameter follows: 2156e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2157a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony% o image: the image. (optional - may be NULL) 2158e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2159e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% o pixel: Specifies a pointer to a PixelInfo structure. 2160e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2161e5370944fabb7afa477ab1325d400731b1e5d5e8cristy*/ 2162e5370944fabb7afa477ab1325d400731b1e5d5e8cristyMagickExport void GetPixelInfo(const Image *image,PixelInfo *pixel) 2163e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 2164e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->storage_class=DirectClass; 21657020ae6594690c03a4f73784fd41a7131a5b22c6cristy pixel->colorspace=sRGBColorspace; 21668a46d827a124555f0c48fb2368ec1bba8e079ab6cristy pixel->alpha_trait=UndefinedPixelTrait; 2167e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->fuzz=0.0; 2168e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->depth=MAGICKCORE_QUANTUM_DEPTH; 2169e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->red=0.0; 2170e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->green=0.0; 2171e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->blue=0.0; 2172e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->black=0.0; 2173a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixel->alpha=(double) OpaqueAlpha; 2174e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->index=0.0; 2175f2a82ee6e25411cb280db708ff26ab55cece1945cristy pixel->count=0; 2176f2a82ee6e25411cb280db708ff26ab55cece1945cristy pixel->fuzz=0.0; 2177e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image == (const Image *) NULL) 2178e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2179e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->storage_class=image->storage_class; 2180e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->colorspace=image->colorspace; 21818a46d827a124555f0c48fb2368ec1bba8e079ab6cristy pixel->alpha_trait=image->alpha_trait; 2182e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->depth=image->depth; 2183e5370944fabb7afa477ab1325d400731b1e5d5e8cristy pixel->fuzz=image->fuzz; 2184e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 2185e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2186e5370944fabb7afa477ab1325d400731b1e5d5e8cristy/* 2187e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2188e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 2189e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 2190e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 219111a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy% G e t P i x e l I n d o I n t e n s i t y % 219211a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy% % 219311a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy% % 219411a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy% % 219511a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 219611a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy% 219711a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy% GetPixelInfoIntensity() returns a single sample intensity value from the red, 219811a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy% green, and blue components of a pixel based on the selected method: 219911a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy% 220011a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy% Rec601Luma 0.298839R' + 0.586811G' + 0.114350B' 220111a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy% Rec601Luminance 0.298839R + 0.586811G + 0.114350B 220211a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy% Rec709Luma 0.212656R' + 0.715158G' + 0.072186B' 220311a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy% Rec709Luminance 0.212656R + 0.715158G + 0.072186B 220411a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy% Brightness max(R', G', B') 220511a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy% Lightness (min(R', G', B') + max(R', G', B')) / 2.0 220611a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy% 220711a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy% MS (R^2 + G^2 + B^2) / 3.0 220811a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy% RMS sqrt((R^2 + G^2 + B^2) / 3.0 220911a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy% Average (R + G + B') / 3.0 221011a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy% 221111a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy% The format of the GetPixelInfoIntensity method is: 221211a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy% 221311a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy% MagickRealType GetPixelInfoIntensity(const Image *image, 221411a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy% const Quantum *pixel) 221511a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy% 221611a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy% A description of each parameter follows: 221711a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy% 221811a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy% o image: the image. 221911a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy% 222011a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy% o pixel: Specifies a pointer to a Quantum structure. 222111a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy% 222211a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy*/ 222305d2ff7ebf21f659f5b11e45afb294e152f4330cdirkMagickExport MagickRealType GetPixelInfoIntensity( 222405d2ff7ebf21f659f5b11e45afb294e152f4330cdirk const Image *magick_restrict image,const PixelInfo *magick_restrict pixel) 222511a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy{ 222611a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy MagickRealType 222711a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy blue, 222811a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy green, 222911a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy red, 223011a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy intensity; 223111a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy 223211a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy PixelIntensityMethod 223311a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy method; 223411a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy 223511a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy method=Rec709LumaPixelIntensityMethod; 2236fff909e8b194dd94c6394df004685c583fe6808bdirk if (image != (const Image *) NULL) 223773323e7ac6bc2362b3e6ad1249b37b7f76fdd103Cristy method=image->intensity; 223873323e7ac6bc2362b3e6ad1249b37b7f76fdd103Cristy red=pixel->red; 223973323e7ac6bc2362b3e6ad1249b37b7f76fdd103Cristy green=pixel->green; 224073323e7ac6bc2362b3e6ad1249b37b7f76fdd103Cristy blue=pixel->blue; 224111a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy switch (method) 224211a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy { 224311a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy case AveragePixelIntensityMethod: 224411a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy { 224511a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy intensity=(red+green+blue)/3.0; 224611a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy break; 224711a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy } 224811a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy case BrightnessPixelIntensityMethod: 224911a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy { 225011a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy intensity=MagickMax(MagickMax(red,green),blue); 225111a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy break; 225211a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy } 225311a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy case LightnessPixelIntensityMethod: 225411a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy { 225511a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy intensity=(MagickMin(MagickMin(red,green),blue)+ 225611a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy MagickMax(MagickMax(red,green),blue))/2.0; 225711a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy break; 225811a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy } 225911a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy case MSPixelIntensityMethod: 226011a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy { 226111a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy intensity=(MagickRealType) (((double) red*red+green*green+blue*blue)/ 226211a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy (3.0*QuantumRange)); 226311a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy break; 226411a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy } 226511a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy case Rec601LumaPixelIntensityMethod: 226611a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy { 226711a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy if (pixel->colorspace == RGBColorspace) 226811a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy { 226911a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy red=EncodePixelGamma(red); 227011a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy green=EncodePixelGamma(green); 227111a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy blue=EncodePixelGamma(blue); 227211a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy } 227311a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy intensity=0.298839*red+0.586811*green+0.114350*blue; 227411a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy break; 227511a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy } 227611a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy case Rec601LuminancePixelIntensityMethod: 227711a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy { 227811a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy if (pixel->colorspace == sRGBColorspace) 227911a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy { 228011a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy red=DecodePixelGamma(red); 228111a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy green=DecodePixelGamma(green); 228211a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy blue=DecodePixelGamma(blue); 228311a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy } 228411a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy intensity=0.298839*red+0.586811*green+0.114350*blue; 228511a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy break; 228611a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy } 228711a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy case Rec709LumaPixelIntensityMethod: 228811a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy default: 228911a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy { 229011a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy if (pixel->colorspace == RGBColorspace) 229111a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy { 229211a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy red=EncodePixelGamma(red); 229311a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy green=EncodePixelGamma(green); 229411a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy blue=EncodePixelGamma(blue); 229511a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy } 229611a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy intensity=0.212656*red+0.715158*green+0.072186*blue; 229711a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy break; 229811a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy } 229911a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy case Rec709LuminancePixelIntensityMethod: 230011a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy { 230111a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy if (pixel->colorspace == sRGBColorspace) 230211a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy { 230311a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy red=DecodePixelGamma(red); 230411a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy green=DecodePixelGamma(green); 230511a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy blue=DecodePixelGamma(blue); 230611a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy } 230711a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy intensity=0.212656*red+0.715158*green+0.072186*blue; 230811a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy break; 230911a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy } 231011a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy case RMSPixelIntensityMethod: 231111a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy { 231211a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy intensity=(MagickRealType) (sqrt((double) red*red+green*green+blue*blue)/ 231311a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy sqrt(3.0)); 231411a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy break; 231511a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy } 231611a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy } 231711a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy return(intensity); 231811a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy} 231911a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy 232011a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy/* 232111a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 232211a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy% % 232311a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy% % 232411a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy% % 23259731df786aef53bf0482896bcdf9af7011880042cristy% G e t P i x e l I n t e n s i t y % 23269731df786aef53bf0482896bcdf9af7011880042cristy% % 23279731df786aef53bf0482896bcdf9af7011880042cristy% % 23289731df786aef53bf0482896bcdf9af7011880042cristy% % 23299731df786aef53bf0482896bcdf9af7011880042cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 23309731df786aef53bf0482896bcdf9af7011880042cristy% 23310c5c889633982c1b29bfaacf17092343544d6c8bcristy% GetPixelIntensity() returns a single sample intensity value from the red, 233270e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy% green, and blue components of a pixel based on the selected method: 233370e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy% 23342cf5d375fa7abe962164b39a35948fe76b4d239acristy% Rec601Luma 0.298839R' + 0.586811G' + 0.114350B' 23352cf5d375fa7abe962164b39a35948fe76b4d239acristy% Rec601Luminance 0.298839R + 0.586811G + 0.114350B 23361352acf3bec61a13875a2d020306ad6339686040cristy% Rec709Luma 0.212656R' + 0.715158G' + 0.072186B' 23371352acf3bec61a13875a2d020306ad6339686040cristy% Rec709Luminance 0.212656R + 0.715158G + 0.072186B 233809bb043b5d7ce21f9eb1067d6e9bc80365852b98cristy% Brightness max(R', G', B') 233909bb043b5d7ce21f9eb1067d6e9bc80365852b98cristy% Lightness (min(R', G', B') + max(R', G', B')) / 2.0 234062cc94b542ffdb41cd62778530873f8babafb2b7cristy% 234109bb043b5d7ce21f9eb1067d6e9bc80365852b98cristy% MS (R^2 + G^2 + B^2) / 3.0 234209bb043b5d7ce21f9eb1067d6e9bc80365852b98cristy% RMS sqrt((R^2 + G^2 + B^2) / 3.0 234309bb043b5d7ce21f9eb1067d6e9bc80365852b98cristy% Average (R + G + B') / 3.0 23449731df786aef53bf0482896bcdf9af7011880042cristy% 23459731df786aef53bf0482896bcdf9af7011880042cristy% The format of the GetPixelIntensity method is: 23469731df786aef53bf0482896bcdf9af7011880042cristy% 23472cf5d375fa7abe962164b39a35948fe76b4d239acristy% MagickRealType GetPixelIntensity(const Image *image, 23482cf5d375fa7abe962164b39a35948fe76b4d239acristy% const Quantum *pixel) 23499731df786aef53bf0482896bcdf9af7011880042cristy% 23509731df786aef53bf0482896bcdf9af7011880042cristy% A description of each parameter follows: 23519731df786aef53bf0482896bcdf9af7011880042cristy% 23529731df786aef53bf0482896bcdf9af7011880042cristy% o image: the image. 23539731df786aef53bf0482896bcdf9af7011880042cristy% 23549731df786aef53bf0482896bcdf9af7011880042cristy% o pixel: Specifies a pointer to a Quantum structure. 23559731df786aef53bf0482896bcdf9af7011880042cristy% 23569731df786aef53bf0482896bcdf9af7011880042cristy*/ 235705d2ff7ebf21f659f5b11e45afb294e152f4330cdirkMagickExport MagickRealType GetPixelIntensity(const Image *magick_restrict image, 235805d2ff7ebf21f659f5b11e45afb294e152f4330cdirk const Quantum *magick_restrict pixel) 23599731df786aef53bf0482896bcdf9af7011880042cristy{ 23609731df786aef53bf0482896bcdf9af7011880042cristy MagickRealType 23619731df786aef53bf0482896bcdf9af7011880042cristy blue, 23629731df786aef53bf0482896bcdf9af7011880042cristy green, 236370e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy red, 236470e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy intensity; 23659731df786aef53bf0482896bcdf9af7011880042cristy 236673323e7ac6bc2362b3e6ad1249b37b7f76fdd103Cristy red=GetPixelRed(image,pixel); 236773323e7ac6bc2362b3e6ad1249b37b7f76fdd103Cristy green=GetPixelGreen(image,pixel); 236873323e7ac6bc2362b3e6ad1249b37b7f76fdd103Cristy blue=GetPixelBlue(image,pixel); 236970e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy switch (image->intensity) 237070e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy { 2371bf02d73b29c613944ea22e2acc8b830aa4700871cristy case AveragePixelIntensityMethod: 2372bf02d73b29c613944ea22e2acc8b830aa4700871cristy { 2373bf02d73b29c613944ea22e2acc8b830aa4700871cristy intensity=(red+green+blue)/3.0; 2374bf02d73b29c613944ea22e2acc8b830aa4700871cristy break; 2375bf02d73b29c613944ea22e2acc8b830aa4700871cristy } 2376bf02d73b29c613944ea22e2acc8b830aa4700871cristy case BrightnessPixelIntensityMethod: 2377bf02d73b29c613944ea22e2acc8b830aa4700871cristy { 2378bf02d73b29c613944ea22e2acc8b830aa4700871cristy intensity=MagickMax(MagickMax(red,green),blue); 2379bf02d73b29c613944ea22e2acc8b830aa4700871cristy break; 2380bf02d73b29c613944ea22e2acc8b830aa4700871cristy } 2381bf02d73b29c613944ea22e2acc8b830aa4700871cristy case LightnessPixelIntensityMethod: 2382bf02d73b29c613944ea22e2acc8b830aa4700871cristy { 238309bb043b5d7ce21f9eb1067d6e9bc80365852b98cristy intensity=(MagickMin(MagickMin(red,green),blue)+ 2384ce326724341c443b3c813774b0cc3b4ce4b425cbcristy MagickMax(MagickMax(red,green),blue))/2.0; 2385bf02d73b29c613944ea22e2acc8b830aa4700871cristy break; 2386bf02d73b29c613944ea22e2acc8b830aa4700871cristy } 2387462c1ca063d4cb0f06b05b657caf4d1bb81c616ccristy case MSPixelIntensityMethod: 2388462c1ca063d4cb0f06b05b657caf4d1bb81c616ccristy { 2389462c1ca063d4cb0f06b05b657caf4d1bb81c616ccristy intensity=(MagickRealType) (((double) red*red+green*green+blue*blue)/ 2390462c1ca063d4cb0f06b05b657caf4d1bb81c616ccristy (3.0*QuantumRange)); 2391462c1ca063d4cb0f06b05b657caf4d1bb81c616ccristy break; 2392462c1ca063d4cb0f06b05b657caf4d1bb81c616ccristy } 239370e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy case Rec601LumaPixelIntensityMethod: 239470e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy { 239509bb043b5d7ce21f9eb1067d6e9bc80365852b98cristy if (image->colorspace == RGBColorspace) 239609bb043b5d7ce21f9eb1067d6e9bc80365852b98cristy { 239709bb043b5d7ce21f9eb1067d6e9bc80365852b98cristy red=EncodePixelGamma(red); 239809bb043b5d7ce21f9eb1067d6e9bc80365852b98cristy green=EncodePixelGamma(green); 239909bb043b5d7ce21f9eb1067d6e9bc80365852b98cristy blue=EncodePixelGamma(blue); 240009bb043b5d7ce21f9eb1067d6e9bc80365852b98cristy } 24019e2436a78bdabef900e018dc77c0cc497bf6fbafcristy intensity=0.298839*red+0.586811*green+0.114350*blue; 24022cf5d375fa7abe962164b39a35948fe76b4d239acristy break; 24032cf5d375fa7abe962164b39a35948fe76b4d239acristy } 24042cf5d375fa7abe962164b39a35948fe76b4d239acristy case Rec601LuminancePixelIntensityMethod: 24052cf5d375fa7abe962164b39a35948fe76b4d239acristy { 240670e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy if (image->colorspace == sRGBColorspace) 240770e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy { 240870e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy red=DecodePixelGamma(red); 240970e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy green=DecodePixelGamma(green); 241070e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy blue=DecodePixelGamma(blue); 241170e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy } 24129e2436a78bdabef900e018dc77c0cc497bf6fbafcristy intensity=0.298839*red+0.586811*green+0.114350*blue; 241370e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy break; 241470e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy } 241570e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy case Rec709LumaPixelIntensityMethod: 2416c94210c7c054e663026a776edfa1e2d6b79a00a5cristy default: 241770e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy { 241809bb043b5d7ce21f9eb1067d6e9bc80365852b98cristy if (image->colorspace == RGBColorspace) 241909bb043b5d7ce21f9eb1067d6e9bc80365852b98cristy { 242009bb043b5d7ce21f9eb1067d6e9bc80365852b98cristy red=EncodePixelGamma(red); 242109bb043b5d7ce21f9eb1067d6e9bc80365852b98cristy green=EncodePixelGamma(green); 242209bb043b5d7ce21f9eb1067d6e9bc80365852b98cristy blue=EncodePixelGamma(blue); 242309bb043b5d7ce21f9eb1067d6e9bc80365852b98cristy } 24241352acf3bec61a13875a2d020306ad6339686040cristy intensity=0.212656*red+0.715158*green+0.072186*blue; 24252cf5d375fa7abe962164b39a35948fe76b4d239acristy break; 24262cf5d375fa7abe962164b39a35948fe76b4d239acristy } 24272cf5d375fa7abe962164b39a35948fe76b4d239acristy case Rec709LuminancePixelIntensityMethod: 24282cf5d375fa7abe962164b39a35948fe76b4d239acristy { 242970e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy if (image->colorspace == sRGBColorspace) 243070e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy { 243170e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy red=DecodePixelGamma(red); 243270e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy green=DecodePixelGamma(green); 243370e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy blue=DecodePixelGamma(blue); 243470e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy } 24351352acf3bec61a13875a2d020306ad6339686040cristy intensity=0.212656*red+0.715158*green+0.072186*blue; 243670e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy break; 243770e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy } 243870e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy case RMSPixelIntensityMethod: 243970e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy { 2440462c1ca063d4cb0f06b05b657caf4d1bb81c616ccristy intensity=(MagickRealType) (sqrt((double) red*red+green*green+blue*blue)/ 2441462c1ca063d4cb0f06b05b657caf4d1bb81c616ccristy sqrt(3.0)); 244270e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy break; 244370e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy } 244470e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy } 244570e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy return(intensity); 24469731df786aef53bf0482896bcdf9af7011880042cristy} 24479731df786aef53bf0482896bcdf9af7011880042cristy 24489731df786aef53bf0482896bcdf9af7011880042cristy/* 24499731df786aef53bf0482896bcdf9af7011880042cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 24509731df786aef53bf0482896bcdf9af7011880042cristy% % 24519731df786aef53bf0482896bcdf9af7011880042cristy% % 24529731df786aef53bf0482896bcdf9af7011880042cristy% % 2453e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% I m p o r t I m a g e P i x e l s % 2454e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 2455e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 2456e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% % 2457e5370944fabb7afa477ab1325d400731b1e5d5e8cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2458e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2459e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% ImportImagePixels() accepts pixel data and stores in the image at the 2460e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% location you specify. The method returns MagickTrue on success otherwise 2461e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% MagickFalse if an error is encountered. The pixel data can be either char, 2462b5a45a37a6faa8a3725c814b51a1a86daa4ff21fcristy% Quantum, short int, unsigned int, unsigned long long, float, or double in 2463b5a45a37a6faa8a3725c814b51a1a86daa4ff21fcristy% the order specified by map. 2464e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2465e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% Suppose your want to upload the first scanline of a 640x480 image from 2466e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% character data in red-green-blue order: 2467e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2468e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% ImportImagePixels(image,0,0,640,1,"RGB",CharPixel,pixels); 2469e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2470e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% The format of the ImportImagePixels method is: 2471e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2472cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy% MagickBooleanType ImportImagePixels(Image *image,const ssize_t x, 2473cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy% const ssize_t y,const size_t width,const size_t height, 2474cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy% const char *map,const StorageType type,const void *pixels, 2475cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy% ExceptionInfo *exception) 2476e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2477e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% A description of each parameter follows: 2478e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2479e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% o image: the image. 2480e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2481cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy% o x,y,width,height: These values define the perimeter 2482e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% of a region of pixels you want to define. 2483e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2484e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% o map: This string reflects the expected ordering of the pixel array. 2485e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% It can be any combination or order of R = red, G = green, B = blue, 2486e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% A = alpha (0 is transparent), O = opacity (0 is opaque), C = cyan, 2487e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% Y = yellow, M = magenta, K = black, I = intensity (for grayscale), 2488e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% P = pad. 2489e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2490e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% o type: Define the data type of the pixels. Float and double types are 2491e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% normalized to [0..1] otherwise [0..QuantumRange]. Choose from these 24926c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy% types: CharPixel (char *), DoublePixel (double *), FloatPixel (float *), 2493ff6834e270b99c2747ad5b2f4edeecf862aaf825cristy% LongPixel (unsigned int *), LongLongPixel (unsigned long long *), 24946c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy% QuantumPixel (Quantum *), or ShortPixel (unsigned short *). 2495e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2496e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% o pixels: This array of values contain the pixel components as defined by 2497e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% map and type. You must preallocate this array where the expected 2498e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% length varies depending on the values of width, height, map, and type. 2499e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2500e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% o exception: return any errors or warnings in this structure. 2501e5370944fabb7afa477ab1325d400731b1e5d5e8cristy% 2502e5370944fabb7afa477ab1325d400731b1e5d5e8cristy*/ 2503e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2504cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ImportCharPixel(Image *image,const RectangleInfo *roi, 250505d2ff7ebf21f659f5b11e45afb294e152f4330cdirk const char *magick_restrict map,const QuantumType *quantum_map, 250605d2ff7ebf21f659f5b11e45afb294e152f4330cdirk const void *pixels,ExceptionInfo *exception) 2507e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 2508e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const unsigned char 250905d2ff7ebf21f659f5b11e45afb294e152f4330cdirk *magick_restrict p; 2510e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2511e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register Quantum 251205d2ff7ebf21f659f5b11e45afb294e152f4330cdirk *magick_restrict q; 2513e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2514e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 2515e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 2516e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 251714d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 251814d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 251914d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 2520e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 2521e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 2522e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2523e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p=(const unsigned char *) pixels; 2524e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 2525e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2526cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2527e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2528cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2529e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2530e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2531cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2532e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2533e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleCharToQuantum(*p++),q); 2534e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleCharToQuantum(*p++),q); 2535e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleCharToQuantum(*p++),q); 2536e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2537e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2538e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2539e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2540e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2541e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2542e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2543e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 2544e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2545cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2546e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2547cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2548e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2549e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2550cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2551e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2552e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleCharToQuantum(*p++),q); 2553e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleCharToQuantum(*p++),q); 2554e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleCharToQuantum(*p++),q); 2555e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleCharToQuantum(*p++),q); 2556e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2557e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2558e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2559e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2560e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2561e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2562e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2563e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRO") == 0) 2564e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2565cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2566e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2567cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2568e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2569e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2570cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2571e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2572e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleCharToQuantum(*p++),q); 2573e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleCharToQuantum(*p++),q); 2574e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleCharToQuantum(*p++),q); 2575e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleCharToQuantum(*p++),q); 2576e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2577e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2578e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2579e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2580e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2581e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2582e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2583e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 2584e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2585cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2586e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2587cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2588e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2589e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2590cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2591e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2592e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleCharToQuantum(*p++),q); 2593e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleCharToQuantum(*p++),q); 2594e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleCharToQuantum(*p++),q); 2595e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2596e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2597e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2598e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2599e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2600e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2601e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2602e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2603e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 2604e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2605cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2606e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2607cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2608e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2609e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2610cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2611e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2612e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGray(image,ScaleCharToQuantum(*p++),q); 2613e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2614e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2615e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2616e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2617e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2618e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2619e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2620e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 2621e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2622cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2623e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2624cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2625e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2626e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2627cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2628e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2629e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleCharToQuantum(*p++),q); 2630e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleCharToQuantum(*p++),q); 2631e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleCharToQuantum(*p++),q); 2632e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2633e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2634e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2635e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2636e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2637e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2638e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2639e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 2640e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2641cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2642e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2643cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2644e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2645e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2646cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2647e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2648e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleCharToQuantum(*p++),q); 2649e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleCharToQuantum(*p++),q); 2650e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleCharToQuantum(*p++),q); 2651e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleCharToQuantum(*p++),q); 2652e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2653e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2654e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2655e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2656e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2657e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2658e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2659e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBO") == 0) 2660e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2661cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2662e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2663cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2664e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2665e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2666cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2667e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2668e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleCharToQuantum(*p++),q); 2669e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleCharToQuantum(*p++),q); 2670e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleCharToQuantum(*p++),q); 2671e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleCharToQuantum(*p++),q); 2672e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2673e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2674e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2675e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2676e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2677e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2678e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2679e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 2680e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2681cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2682e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2683cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2684e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2685e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2686cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2687e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2688e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleCharToQuantum(*p++),q); 2689e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleCharToQuantum(*p++),q); 2690e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleCharToQuantum(*p++),q); 2691e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2692e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2693e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2694e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2695e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2696e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2697e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2698e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 269914d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 2700cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2701e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2702cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2703e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2704e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2705cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2706e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2707e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 2708e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 2709e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 271014d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 2711e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2712e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 2713e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2714e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 2715e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 2716e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2717e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleCharToQuantum(*p),q); 2718e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2719e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2720e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 2721e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 2722e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2723e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleCharToQuantum(*p),q); 2724e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2725e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2726e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 2727e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 2728e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2729e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleCharToQuantum(*p),q); 2730e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2731e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2732e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 2733e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2734e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleCharToQuantum(*p),q); 2735e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2736e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2737e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 2738e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2739e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleCharToQuantum(*p),q); 2740e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2741e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2742e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 2743e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2744e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlack(image,ScaleCharToQuantum(*p),q); 2745e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2746e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2747e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 2748e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2749e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGray(image,ScaleCharToQuantum(*p),q); 2750e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2751e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2752e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 2753e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2754e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2755e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2756e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2757e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2758e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2759e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2760e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2761e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2762e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 2763e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2764cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ImportDoublePixel(Image *image,const RectangleInfo *roi, 276505d2ff7ebf21f659f5b11e45afb294e152f4330cdirk const char *magick_restrict map,const QuantumType *quantum_map, 276605d2ff7ebf21f659f5b11e45afb294e152f4330cdirk const void *pixels,ExceptionInfo *exception) 2767e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 2768e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const double 276905d2ff7ebf21f659f5b11e45afb294e152f4330cdirk *magick_restrict p; 2770e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2771e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register Quantum 277205d2ff7ebf21f659f5b11e45afb294e152f4330cdirk *magick_restrict q; 2773e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2774e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 2775e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 2776e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 277714d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 277814d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 277914d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 2780e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 2781e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 2782e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 2783e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p=(const double *) pixels; 2784e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 2785e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2786cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2787e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2788cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2789e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2790e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2791cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2792e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 27938cd03c32d039162196906ff36501f3543019b56acristy SetPixelBlue(image,ClampToQuantum(QuantumRange*(*p)),q); 2794e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 27958cd03c32d039162196906ff36501f3543019b56acristy SetPixelGreen(image,ClampToQuantum(QuantumRange*(*p)),q); 2796e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 27978cd03c32d039162196906ff36501f3543019b56acristy SetPixelRed(image,ClampToQuantum(QuantumRange*(*p)),q); 2798e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2799e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2800e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2801e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2802e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2803e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2804e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2805e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2806e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 2807e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2808cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2809e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2810cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2811e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2812e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2813cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2814e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 28158cd03c32d039162196906ff36501f3543019b56acristy SetPixelBlue(image,ClampToQuantum(QuantumRange*(*p)),q); 2816e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 28178cd03c32d039162196906ff36501f3543019b56acristy SetPixelGreen(image,ClampToQuantum(QuantumRange*(*p)),q); 2818e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 28198cd03c32d039162196906ff36501f3543019b56acristy SetPixelRed(image,ClampToQuantum(QuantumRange*(*p)),q); 2820e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 28218cd03c32d039162196906ff36501f3543019b56acristy SetPixelAlpha(image,ClampToQuantum(QuantumRange*(*p)),q); 2822e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2823e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2824e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2825e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2826e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2827e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2828e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2829e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2830e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 2831e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2832cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2833e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2834cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2835e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2836e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2837cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2838e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 28398cd03c32d039162196906ff36501f3543019b56acristy SetPixelBlue(image,ClampToQuantum(QuantumRange*(*p)),q); 2840e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 28418cd03c32d039162196906ff36501f3543019b56acristy SetPixelGreen(image,ClampToQuantum(QuantumRange*(*p)),q); 2842e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 28438cd03c32d039162196906ff36501f3543019b56acristy SetPixelRed(image,ClampToQuantum(QuantumRange*(*p)),q); 2844e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2845e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2846e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2847e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2848e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2849e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2850e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2851e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2852e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2853e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 2854e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2855cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2856e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2857cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2858e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2859e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2860cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2861e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 28628cd03c32d039162196906ff36501f3543019b56acristy SetPixelGray(image,ClampToQuantum(QuantumRange*(*p)),q); 2863e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2864e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2865e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2866e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2867e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2868e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2869e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2870e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2871e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 2872e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2873cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2874e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2875cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2876e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2877e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2878cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2879e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 28808cd03c32d039162196906ff36501f3543019b56acristy SetPixelRed(image,ClampToQuantum(QuantumRange*(*p)),q); 2881e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 28828cd03c32d039162196906ff36501f3543019b56acristy SetPixelGreen(image,ClampToQuantum(QuantumRange*(*p)),q); 2883e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 28848cd03c32d039162196906ff36501f3543019b56acristy SetPixelBlue(image,ClampToQuantum(QuantumRange*(*p)),q); 2885e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2886e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2887e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2888e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2889e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2890e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2891e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2892e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2893e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 2894e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2895cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2896e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2897cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2898e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2899e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2900cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2901e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 29028cd03c32d039162196906ff36501f3543019b56acristy SetPixelRed(image,ClampToQuantum(QuantumRange*(*p)),q); 2903e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 29048cd03c32d039162196906ff36501f3543019b56acristy SetPixelGreen(image,ClampToQuantum(QuantumRange*(*p)),q); 2905e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 29068cd03c32d039162196906ff36501f3543019b56acristy SetPixelBlue(image,ClampToQuantum(QuantumRange*(*p)),q); 2907e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 29088cd03c32d039162196906ff36501f3543019b56acristy SetPixelAlpha(image,ClampToQuantum(QuantumRange*(*p)),q); 2909e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2910e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2911e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2912e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2913e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2914e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2915e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2916e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2917e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 2918e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2919cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2920e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2921cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2922e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2923e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2924cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2925e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 29268cd03c32d039162196906ff36501f3543019b56acristy SetPixelRed(image,ClampToQuantum(QuantumRange*(*p)),q); 2927e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 29288cd03c32d039162196906ff36501f3543019b56acristy SetPixelGreen(image,ClampToQuantum(QuantumRange*(*p)),q); 2929e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 29308cd03c32d039162196906ff36501f3543019b56acristy SetPixelBlue(image,ClampToQuantum(QuantumRange*(*p)),q); 2931e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2932e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2933e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2934e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2935e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2936e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2937e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 2938e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 293914d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 2940cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 2941e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2942cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 2943e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 2944e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2945cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 2946e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2947e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 2948e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 2949e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 295014d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 2951e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2952e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 2953e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 2954e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 2955e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 2956e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 29578cd03c32d039162196906ff36501f3543019b56acristy SetPixelRed(image,ClampToQuantum(QuantumRange*(*p)),q); 2958e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2959e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2960e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 2961e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 2962e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 29638cd03c32d039162196906ff36501f3543019b56acristy SetPixelGreen(image,ClampToQuantum(QuantumRange*(*p)),q); 2964e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2965e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2966e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 2967e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 2968e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 29698cd03c32d039162196906ff36501f3543019b56acristy SetPixelBlue(image,ClampToQuantum(QuantumRange*(*p)),q); 2970e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2971e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2972e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 2973e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 29748cd03c32d039162196906ff36501f3543019b56acristy SetPixelAlpha(image,ClampToQuantum(QuantumRange*(*p)),q); 2975e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2976e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2977e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 2978e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 29798cd03c32d039162196906ff36501f3543019b56acristy SetPixelAlpha(image,ClampToQuantum(QuantumRange*(*p)),q); 2980e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2981e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2982e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 2983e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 29848cd03c32d039162196906ff36501f3543019b56acristy SetPixelBlack(image,ClampToQuantum(QuantumRange*(*p)),q); 2985e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2986e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2987e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 2988e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 29898cd03c32d039162196906ff36501f3543019b56acristy SetPixelGray(image,ClampToQuantum(QuantumRange*(*p)),q); 2990e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2991e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2992e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 2993e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 2994e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2995e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 2996e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2997e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 2998e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 2999e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3000e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3001e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 30023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 3003e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3004cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ImportFloatPixel(Image *image,const RectangleInfo *roi, 300505d2ff7ebf21f659f5b11e45afb294e152f4330cdirk const char *magick_restrict map,const QuantumType *quantum_map, 300605d2ff7ebf21f659f5b11e45afb294e152f4330cdirk const void *pixels,ExceptionInfo *exception) 30073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 3008e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const float 300905d2ff7ebf21f659f5b11e45afb294e152f4330cdirk *magick_restrict p; 3010e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3011e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register Quantum 301205d2ff7ebf21f659f5b11e45afb294e152f4330cdirk *magick_restrict q; 3013e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3014e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 3015e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 3016e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 301714d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 301814d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 301914d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 3020e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 3021e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 3022e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3023e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p=(const float *) pixels; 3024e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 3025e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3026cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3027e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3028cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3029e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3030e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3031cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3032e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 30338cd03c32d039162196906ff36501f3543019b56acristy SetPixelBlue(image,ClampToQuantum(QuantumRange*(*p)),q); 3034e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 30358cd03c32d039162196906ff36501f3543019b56acristy SetPixelGreen(image,ClampToQuantum(QuantumRange*(*p)),q); 3036e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 30378cd03c32d039162196906ff36501f3543019b56acristy SetPixelRed(image,ClampToQuantum(QuantumRange*(*p)),q); 3038e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3039e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3040e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3041e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3042e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3043e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3044e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3045e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3046e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 3047e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3048cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3049e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3050cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3051e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3052e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3053cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3054e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 30558cd03c32d039162196906ff36501f3543019b56acristy SetPixelBlue(image,ClampToQuantum(QuantumRange*(*p)),q); 3056e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 30578cd03c32d039162196906ff36501f3543019b56acristy SetPixelGreen(image,ClampToQuantum(QuantumRange*(*p)),q); 3058e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 30598cd03c32d039162196906ff36501f3543019b56acristy SetPixelRed(image,ClampToQuantum(QuantumRange*(*p)),q); 3060e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 30618cd03c32d039162196906ff36501f3543019b56acristy SetPixelAlpha(image,ClampToQuantum(QuantumRange*(*p)),q); 3062e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3063e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3064e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3065e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3066e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3067e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3068e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3069e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3070e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 3071e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3072cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3073e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3074cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3075e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3076e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3077cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3078e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 30798cd03c32d039162196906ff36501f3543019b56acristy SetPixelBlue(image,ClampToQuantum(QuantumRange*(*p)),q); 3080e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 30818cd03c32d039162196906ff36501f3543019b56acristy SetPixelGreen(image,ClampToQuantum(QuantumRange*(*p)),q); 3082e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 30838cd03c32d039162196906ff36501f3543019b56acristy SetPixelRed(image,ClampToQuantum(QuantumRange*(*p)),q); 3084e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3085e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3086e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3087e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3088e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3089e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3090e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3091e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3092e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3093e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 3094e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3095cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3096e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3097cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3098e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3099e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3100cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3101e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 31028cd03c32d039162196906ff36501f3543019b56acristy SetPixelGray(image,ClampToQuantum(QuantumRange*(*p)),q); 3103e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3104e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3105e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3106e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3107e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3108e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3109e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3110e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3111e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 3112e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3113cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3114e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3115cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3116e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3117e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3118cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3119e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 31208cd03c32d039162196906ff36501f3543019b56acristy SetPixelRed(image,ClampToQuantum(QuantumRange*(*p)),q); 3121e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 31228cd03c32d039162196906ff36501f3543019b56acristy SetPixelGreen(image,ClampToQuantum(QuantumRange*(*p)),q); 3123e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 31248cd03c32d039162196906ff36501f3543019b56acristy SetPixelBlue(image,ClampToQuantum(QuantumRange*(*p)),q); 3125e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3126e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3127e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3128e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3129e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3130e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3131e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3132e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3133e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 3134e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3135cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3136e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3137cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3138e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3139e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3140cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3141e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 31428cd03c32d039162196906ff36501f3543019b56acristy SetPixelRed(image,ClampToQuantum(QuantumRange*(*p)),q); 3143e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 31448cd03c32d039162196906ff36501f3543019b56acristy SetPixelGreen(image,ClampToQuantum(QuantumRange*(*p)),q); 3145e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 31468cd03c32d039162196906ff36501f3543019b56acristy SetPixelBlue(image,ClampToQuantum(QuantumRange*(*p)),q); 3147e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 31488cd03c32d039162196906ff36501f3543019b56acristy SetPixelAlpha(image,ClampToQuantum(QuantumRange*(*p)),q); 3149e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3150e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3151e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3152e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3153e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3154e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3155e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3156e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3157e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 3158e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3159cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3160e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3161cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3162e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3163e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3164cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3165e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 31668cd03c32d039162196906ff36501f3543019b56acristy SetPixelRed(image,ClampToQuantum(QuantumRange*(*p)),q); 3167e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 31688cd03c32d039162196906ff36501f3543019b56acristy SetPixelGreen(image,ClampToQuantum(QuantumRange*(*p)),q); 3169e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 31708cd03c32d039162196906ff36501f3543019b56acristy SetPixelBlue(image,ClampToQuantum(QuantumRange*(*p)),q); 3171e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3172e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3173e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3174e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3175e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3176e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3177e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3178e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 317914d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 3180cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3181e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3182cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3183e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3184e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3185cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3186e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3187e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 3188e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 3189e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 319014d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 3191e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3192e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 3193e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3194e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 3195e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 3196e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 31978cd03c32d039162196906ff36501f3543019b56acristy SetPixelRed(image,ClampToQuantum(QuantumRange*(*p)),q); 3198e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3199e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3200e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 3201e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 3202e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 32038cd03c32d039162196906ff36501f3543019b56acristy SetPixelGreen(image,ClampToQuantum(QuantumRange*(*p)),q); 3204e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3205e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3206e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 3207e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 3208e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 32098cd03c32d039162196906ff36501f3543019b56acristy SetPixelBlue(image,ClampToQuantum(QuantumRange*(*p)),q); 3210e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3211e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3212e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 3213e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 32148cd03c32d039162196906ff36501f3543019b56acristy SetPixelAlpha(image,ClampToQuantum(QuantumRange*(*p)),q); 3215e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3216e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3217e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 3218e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 32198cd03c32d039162196906ff36501f3543019b56acristy SetPixelAlpha(image,ClampToQuantum(QuantumRange*(*p)),q); 3220e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3221e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3222e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 3223e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 32248cd03c32d039162196906ff36501f3543019b56acristy SetPixelBlack(image,ClampToQuantum(QuantumRange*(*p)),q); 3225e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3226e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3227e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 3228e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 32298cd03c32d039162196906ff36501f3543019b56acristy SetPixelGray(image,ClampToQuantum(QuantumRange*(*p)),q); 3230e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3231e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3232e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 3233e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3234e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3235e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3236e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3237e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3238e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3239e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3240e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3241e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3242e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 3243e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3244cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ImportLongPixel(Image *image,const RectangleInfo *roi, 324505d2ff7ebf21f659f5b11e45afb294e152f4330cdirk const char *magick_restrict map,const QuantumType *quantum_map, 324605d2ff7ebf21f659f5b11e45afb294e152f4330cdirk const void *pixels,ExceptionInfo *exception) 32473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 3248e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const unsigned int 324905d2ff7ebf21f659f5b11e45afb294e152f4330cdirk *magick_restrict p; 32503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 32514c08aed51c5899665ade97263692328eea4af106cristy register Quantum 325205d2ff7ebf21f659f5b11e45afb294e152f4330cdirk *magick_restrict q; 32533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3254bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 32553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x; 32563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 325714d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 325814d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 325914d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 32609d314ff2c17a77996c05413c2013880387e50f0ecristy ssize_t 32619d314ff2c17a77996c05413c2013880387e50f0ecristy y; 32629d314ff2c17a77996c05413c2013880387e50f0ecristy 3263e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p=(const unsigned int *) pixels; 3264e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 32653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3266cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 32673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3268cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3269e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3270e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3271cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3272e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3273e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleLongToQuantum(*p++),q); 3274e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleLongToQuantum(*p++),q); 3275e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleLongToQuantum(*p++),q); 3276e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3277e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3278e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3279e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 32803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3281e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3282e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3283e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 3284e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3285cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 32863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3287cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3288e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3289e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3290cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3291e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3292e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleLongToQuantum(*p++),q); 3293e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleLongToQuantum(*p++),q); 3294e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleLongToQuantum(*p++),q); 3295e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleLongToQuantum(*p++),q); 3296e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3297e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3298e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3299e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 33003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3301e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3302e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3303e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 3304e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3305cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 33063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3307cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3308e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3309e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3310cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3311e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3312e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleLongToQuantum(*p++),q); 3313e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleLongToQuantum(*p++),q); 3314e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleLongToQuantum(*p++),q); 3315e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3316e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3317e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3318e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3319e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 33203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3321e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3322e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3323e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 3324e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3325cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 33263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3327cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3328e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3329e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3330cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3331e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3332e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGray(image,ScaleLongToQuantum(*p++),q); 3333e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3334e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3335e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3336e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 33373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3338e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3339e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3340e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 3341e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3342cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 33433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3344cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3345e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3346e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3347cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3348e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3349e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleLongToQuantum(*p++),q); 3350e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleLongToQuantum(*p++),q); 3351e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleLongToQuantum(*p++),q); 3352e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3353e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3354e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3355e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 33563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3357e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3358e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3359e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 3360e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3361cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 33623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3363cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3364e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3365e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3366cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3367e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3368e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleLongToQuantum(*p++),q); 3369e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleLongToQuantum(*p++),q); 3370e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleLongToQuantum(*p++),q); 3371e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleLongToQuantum(*p++),q); 3372e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3373e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3374e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3375e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 33763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3377e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3378e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3379e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 3380e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3381cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 33823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3383cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3384e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3385e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3386cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3387e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3388e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleLongToQuantum(*p++),q); 3389e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleLongToQuantum(*p++),q); 3390e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleLongToQuantum(*p++),q); 3391e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3392e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3393e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3394e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3395e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 33963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3397e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3398e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 339914d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 3400cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3401e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3402cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3403e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3404e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3405cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3406e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3407e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 3408e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 3409e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 341014d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 34113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3412e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 3413e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3414e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 3415e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 3416e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3417e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleLongToQuantum(*p),q); 3418e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3419e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3420e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 3421e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 3422e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3423e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleLongToQuantum(*p),q); 3424e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3425e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3426e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 3427e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 3428e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3429e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleLongToQuantum(*p),q); 3430e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3431e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3432e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 3433e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3434e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleLongToQuantum(*p),q); 3435e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3436e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3437e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 3438e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3439e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleLongToQuantum(*p),q); 3440e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3441e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3442e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 3443e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3444e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlack(image,ScaleLongToQuantum(*p),q); 3445e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3446e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3447e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 3448e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3449e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGray(image,ScaleLongToQuantum(*p),q); 3450e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3451e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3452e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 3453e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3454e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3455e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3456e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3457e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3458e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3459e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3460e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3461e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3462e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 3463e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3464cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ImportLongLongPixel(Image *image,const RectangleInfo *roi, 346505d2ff7ebf21f659f5b11e45afb294e152f4330cdirk const char *magick_restrict map,const QuantumType *quantum_map, 346605d2ff7ebf21f659f5b11e45afb294e152f4330cdirk const void *pixels,ExceptionInfo *exception) 3467e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 3468b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy register const MagickSizeType 346905d2ff7ebf21f659f5b11e45afb294e152f4330cdirk *magick_restrict p; 3470e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3471e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register Quantum 347205d2ff7ebf21f659f5b11e45afb294e152f4330cdirk *magick_restrict q; 3473e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3474e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 3475e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 3476e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 347714d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 347814d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 347914d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 3480e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 3481e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 3482e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3483b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy p=(const MagickSizeType *) pixels; 3484e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 3485e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3486cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3487e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3488cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3489e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3490e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3491cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3492e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3493b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelBlue(image,ScaleLongLongToQuantum(*p++),q); 3494b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelGreen(image,ScaleLongLongToQuantum(*p++),q); 3495b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelRed(image,ScaleLongLongToQuantum(*p++),q); 3496e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3497e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3498e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3499e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3500e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3501e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3502e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3503e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 3504e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3505cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3506e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3507cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3508e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3509e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3510cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3511e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3512b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelBlue(image,ScaleLongLongToQuantum(*p++),q); 3513b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelGreen(image,ScaleLongLongToQuantum(*p++),q); 3514b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelRed(image,ScaleLongLongToQuantum(*p++),q); 3515b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelAlpha(image,ScaleLongLongToQuantum(*p++),q); 3516e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3517e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3518e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3519e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3520e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3521e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3522e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3523e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 3524e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3525cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3526e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3527cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3528e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3529e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3530cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3531e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3532b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelBlue(image,ScaleLongLongToQuantum(*p++),q); 3533b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelGreen(image,ScaleLongLongToQuantum(*p++),q); 3534b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelRed(image,ScaleLongLongToQuantum(*p++),q); 3535e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3536e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3537e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3538e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3539e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 35403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3541e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3542e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3543e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 3544e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3545cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 35463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3547cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3548e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3549e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3550cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3551e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3552b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelGray(image,ScaleLongLongToQuantum(*p++),q); 3553e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3554e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3555e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3556e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 35573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3558e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3559e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3560e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 3561e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3562cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 35633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3564cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3565e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3566e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3567cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3568e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3569b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelRed(image,ScaleLongLongToQuantum(*p++),q); 3570b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelGreen(image,ScaleLongLongToQuantum(*p++),q); 3571b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelBlue(image,ScaleLongLongToQuantum(*p++),q); 3572e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3573e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3574e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3575e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 35763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3577e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3578e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3579e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 3580e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3581cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 35823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3583cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3584e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3585e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3586cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3587e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3588b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelRed(image,ScaleLongLongToQuantum(*p++),q); 3589b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelGreen(image,ScaleLongLongToQuantum(*p++),q); 3590b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelBlue(image,ScaleLongLongToQuantum(*p++),q); 3591b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelAlpha(image,ScaleLongLongToQuantum(*p++),q); 3592e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3593e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3594e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3595e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 35963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3597e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3598e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3599e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 3600e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3601cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 36023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3603cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3604e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3605e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3606cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3607e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3608b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelRed(image,ScaleLongLongToQuantum(*p++),q); 3609b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelGreen(image,ScaleLongLongToQuantum(*p++),q); 3610b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelBlue(image,ScaleLongLongToQuantum(*p++),q); 3611e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3612e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3613e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3614e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3615e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 36163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3617e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 36183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 361914d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 3620cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 36213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3622cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3623e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3624e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3625cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 36263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3627e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 3628e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 36293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 363014d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 3631e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3632e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 36333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3634e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 3635e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 36363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3637b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelRed(image,ScaleLongLongToQuantum(*p),q); 3638e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 36393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3640e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 3641e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 36423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3643b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelGreen(image,ScaleLongLongToQuantum(*p),q); 3644e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 36453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3646e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 3647e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 36483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3649b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelBlue(image,ScaleLongLongToQuantum(*p),q); 3650e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 36513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3652e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 36533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3654b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelAlpha(image,ScaleLongLongToQuantum(*p),q); 3655e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 36563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3657e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 36583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3659b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelAlpha(image,ScaleLongLongToQuantum(*p),q); 3660e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 36613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3662e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 36633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3664b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelBlack(image,ScaleLongLongToQuantum(*p),q); 3665e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 36663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3667e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 36683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3669b13e12a94fbf88e8597bfe485e35b484b1ff2e6acristy SetPixelGray(image,ScaleLongLongToQuantum(*p),q); 3670e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 36713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3672e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 3673e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 36743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3675e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3676e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3677e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3678e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3679e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3680e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3681e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3682e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 3683e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3684cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ImportQuantumPixel(Image *image,const RectangleInfo *roi, 368505d2ff7ebf21f659f5b11e45afb294e152f4330cdirk const char *magick_restrict map,const QuantumType *quantum_map, 368605d2ff7ebf21f659f5b11e45afb294e152f4330cdirk const void *pixels,ExceptionInfo *exception) 3687e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 3688e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const Quantum 368905d2ff7ebf21f659f5b11e45afb294e152f4330cdirk *magick_restrict p; 3690e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3691e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register Quantum 369205d2ff7ebf21f659f5b11e45afb294e152f4330cdirk *magick_restrict q; 3693e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3694e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 3695e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 3696e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 369714d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 369814d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 369914d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 3700e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 3701e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 3702e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3703e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p=(const Quantum *) pixels; 3704e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 3705e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3706cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3707e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3708cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3709e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 37103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3711cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 37123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3713e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,*p++,q); 3714e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,*p++,q); 3715e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,*p++,q); 3716e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3717e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3718e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3719e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3720e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3721e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3722e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3723e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 3724e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3725cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3726e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3727cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3728e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 37293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3730cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3731e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3732e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,*p++,q); 3733e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,*p++,q); 3734e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,*p++,q); 3735e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,*p++,q); 3736e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 37373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3738e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3739e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3740e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3741e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3742e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3743e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 3744e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3745cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 37463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3747cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 37484c08aed51c5899665ade97263692328eea4af106cristy if (q == (Quantum *) NULL) 37493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3750cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 37513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3752e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,*p++,q); 3753e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,*p++,q); 3754e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,*p++,q); 3755e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3756ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(image); 37573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 37583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 37593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 37603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3761e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 37623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3763e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 37643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3765cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3766e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3767cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3768e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 37693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3770cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3771e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3772e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGray(image,*p++,q); 3773e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 37743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3775e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3776e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3777e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3778e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3779e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3780e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 3781e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3782cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 37833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3784cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 37854c08aed51c5899665ade97263692328eea4af106cristy if (q == (Quantum *) NULL) 37863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3787cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 37883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3789e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,*p++,q); 3790e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,*p++,q); 3791e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,*p++,q); 3792ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(image); 37933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 37943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 37953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 37963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3797e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 37983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3799e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 38003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3801cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3802e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3803cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3804e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 38053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3806cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 3807e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3808e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,*p++,q); 3809e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,*p++,q); 3810e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,*p++,q); 3811e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,*p++,q); 3812e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 38133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3814e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3815e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3816e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3817e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3818e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3819e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 3820e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3821cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 38223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3823cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 38244c08aed51c5899665ade97263692328eea4af106cristy if (q == (Quantum *) NULL) 38253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3826cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 38273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3828e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,*p++,q); 3829e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,*p++,q); 3830e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,*p++,q); 3831e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3832ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(image); 38333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 38343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 38353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 38363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3837e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 38383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 383914d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 3840cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3841e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3842cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3843e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 3844e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3845cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 38463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3847e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 3848e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 38493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 385014d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 3851e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3852e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 38533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3854e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 3855e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 38563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3857e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,*p,q); 3858e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 38593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3860e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 3861e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 38623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3863e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,*p,q); 3864e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 38653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3866e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 3867e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 38683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3869e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,*p,q); 3870e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 38713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3872e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 38733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3874e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,*p,q); 3875e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 38763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3877e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 38783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3879e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,*p,q); 3880e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 38813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3882e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 38833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3884e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlack(image,*p,q); 3885e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 38863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3887e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 38883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3889e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGray(image,*p,q); 3890e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 38913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3892e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 3893e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 38943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3895e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3896e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3897e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 3898e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3899e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 3900e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 3901e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3902e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 3903e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3904cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristystatic void ImportShortPixel(Image *image,const RectangleInfo *roi, 390505d2ff7ebf21f659f5b11e45afb294e152f4330cdirk const char *magick_restrict map,const QuantumType *quantum_map, 390605d2ff7ebf21f659f5b11e45afb294e152f4330cdirk const void *pixels,ExceptionInfo *exception) 3907e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 3908e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register const unsigned short 390905d2ff7ebf21f659f5b11e45afb294e152f4330cdirk *magick_restrict p; 3910e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3911e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register Quantum 391205d2ff7ebf21f659f5b11e45afb294e152f4330cdirk *magick_restrict q; 3913e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3914e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 3915e5370944fabb7afa477ab1325d400731b1e5d5e8cristy x; 3916e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 391714d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 391814d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 391914d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 3920e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ssize_t 3921e5370944fabb7afa477ab1325d400731b1e5d5e8cristy y; 3922e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 3923e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p=(const unsigned short *) pixels; 3924e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGR") == 0) 3925e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3926cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 39273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3928cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 39294c08aed51c5899665ade97263692328eea4af106cristy if (q == (Quantum *) NULL) 39303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3931cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 39323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3933e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleShortToQuantum(*p++),q); 3934e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleShortToQuantum(*p++),q); 3935e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleShortToQuantum(*p++),q); 3936ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(image); 39373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 39383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 39393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 39403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3941e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 39423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3943e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRA") == 0) 39443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3945cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3946e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3947cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3948e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 39493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3950cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 39513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3952e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleShortToQuantum(*p++),q); 3953e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleShortToQuantum(*p++),q); 3954e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleShortToQuantum(*p++),q); 3955e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleShortToQuantum(*p++),q); 3956e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 39573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3958e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 39593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3960e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3961e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3962e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3963e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"BGRP") == 0) 3964e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3965cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 39663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3967cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 39684c08aed51c5899665ade97263692328eea4af106cristy if (q == (Quantum *) NULL) 39693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3970cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 39713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3972e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleShortToQuantum(*p++),q); 3973e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleShortToQuantum(*p++),q); 3974e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleShortToQuantum(*p++),q); 3975e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 3976ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(image); 39773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 39783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 39793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 39803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3981e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 39823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3983e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"I") == 0) 39843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3985cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 3986e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 3987cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 3988e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 39893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3990cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 39913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3992e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGray(image,ScaleShortToQuantum(*p++),q); 3993e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 39943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3995e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 39963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 3997e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 3998e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 3999e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4000e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGB") == 0) 4001e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4002cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 4003e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4004cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 4005e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 40063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 4007cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 40083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4009e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleShortToQuantum(*p++),q); 4010e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleShortToQuantum(*p++),q); 4011e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleShortToQuantum(*p++),q); 4012e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 40133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 4014e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 40153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 4016e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4017e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 4018e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4019e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBA") == 0) 4020e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4021cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 4022e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4023cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 4024e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 40253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 4026cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 4027e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4028e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleShortToQuantum(*p++),q); 4029e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleShortToQuantum(*p++),q); 4030e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleShortToQuantum(*p++),q); 4031e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleShortToQuantum(*p++),q); 4032e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 40333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 4034e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 4035e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 4036e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4037e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 4038e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4039e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (LocaleCompare(map,"RGBP") == 0) 4040e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4041cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 40423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4043cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 40444c08aed51c5899665ade97263692328eea4af106cristy if (q == (Quantum *) NULL) 40453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 4046cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 40473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4048e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleShortToQuantum(*p++),q); 4049e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleShortToQuantum(*p++),q); 4050e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleShortToQuantum(*p++),q); 4051e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 4052ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(image); 40533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 40543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 40553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 40563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 4057e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return; 40583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 405914d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 4060cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (y=0; y < (ssize_t) roi->height; y++) 4061e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4062cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy q=GetAuthenticPixels(image,roi->x,roi->y+y,roi->width,1,exception); 4063e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (q == (Quantum *) NULL) 4064e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 4065cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy for (x=0; x < (ssize_t) roi->width; x++) 40663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4067e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 4068e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 40693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 407014d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 4071e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4072e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (quantum_map[i]) 40733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4074e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case RedQuantum: 4075e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CyanQuantum: 40763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4077e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelRed(image,ScaleShortToQuantum(*p),q); 4078e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 40793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 4080e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case GreenQuantum: 4081e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case MagentaQuantum: 40823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4083e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGreen(image,ScaleShortToQuantum(*p),q); 4084e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 40853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 4086e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlueQuantum: 4087e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case YellowQuantum: 40883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4089e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlue(image,ScaleShortToQuantum(*p),q); 4090e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 40913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 4092e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case AlphaQuantum: 40933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4094e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleShortToQuantum(*p),q); 4095e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 40963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 4097e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case OpacityQuantum: 40983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4099e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelAlpha(image,ScaleShortToQuantum(*p),q); 4100e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 41013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 4102e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case BlackQuantum: 41033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4104e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelBlack(image,ScaleShortToQuantum(*p),q); 4105e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 41063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 4107e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case IndexQuantum: 41083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4109e5370944fabb7afa477ab1325d400731b1e5d5e8cristy SetPixelGray(image,ScaleShortToQuantum(*p),q); 4110e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 41113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 4112e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 4113e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 41143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 4115e5370944fabb7afa477ab1325d400731b1e5d5e8cristy p++; 4116e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4117e5370944fabb7afa477ab1325d400731b1e5d5e8cristy q+=GetPixelChannels(image); 4118e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4119e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 4120e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 4121e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4122e5370944fabb7afa477ab1325d400731b1e5d5e8cristy} 4123e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 4124cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristyMagickExport MagickBooleanType ImportImagePixels(Image *image,const ssize_t x, 4125cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy const ssize_t y,const size_t width,const size_t height,const char *map, 4126cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy const StorageType type,const void *pixels,ExceptionInfo *exception) 4127e5370944fabb7afa477ab1325d400731b1e5d5e8cristy{ 4128e5370944fabb7afa477ab1325d400731b1e5d5e8cristy QuantumType 4129e5370944fabb7afa477ab1325d400731b1e5d5e8cristy *quantum_map; 4130e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 4131cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy RectangleInfo 4132cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy roi; 4133cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy 4134e5370944fabb7afa477ab1325d400731b1e5d5e8cristy register ssize_t 4135e5370944fabb7afa477ab1325d400731b1e5d5e8cristy i; 4136e5370944fabb7afa477ab1325d400731b1e5d5e8cristy 413714d712974a2c2cd2aebf8db11c7ca686bb67596fcristy size_t 413814d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length; 413914d712974a2c2cd2aebf8db11c7ca686bb67596fcristy 4140e5370944fabb7afa477ab1325d400731b1e5d5e8cristy /* 4141e5370944fabb7afa477ab1325d400731b1e5d5e8cristy Allocate image structure. 4142e5370944fabb7afa477ab1325d400731b1e5d5e8cristy */ 4143e5370944fabb7afa477ab1325d400731b1e5d5e8cristy assert(image != (Image *) NULL); 4144e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(image->signature == MagickCoreSignature); 4145e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (image->debug != MagickFalse) 4146e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename); 414714d712974a2c2cd2aebf8db11c7ca686bb67596fcristy length=strlen(map); 414814d712974a2c2cd2aebf8db11c7ca686bb67596fcristy quantum_map=(QuantumType *) AcquireQuantumMemory(length,sizeof(*quantum_map)); 4149e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (quantum_map == (QuantumType *) NULL) 4150e5370944fabb7afa477ab1325d400731b1e5d5e8cristy ThrowBinaryException(ResourceLimitError,"MemoryAllocationFailed", 4151e5370944fabb7afa477ab1325d400731b1e5d5e8cristy image->filename); 415214d712974a2c2cd2aebf8db11c7ca686bb67596fcristy for (i=0; i < (ssize_t) length; i++) 4153e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4154e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (map[i]) 4155e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4156e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'a': 4157e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'A': 41583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4159e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=AlphaQuantum; 41608a46d827a124555f0c48fb2368ec1bba8e079ab6cristy image->alpha_trait=BlendPixelTrait; 4161e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 4162e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4163e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'B': 4164e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'b': 4165e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4166e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=BlueQuantum; 4167e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 4168e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4169e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'C': 4170e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'c': 4171e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4172e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=CyanQuantum; 4173e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) SetImageColorspace(image,CMYKColorspace,exception); 4174e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 4175e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4176e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'g': 4177e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'G': 4178e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4179e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=GreenQuantum; 4180e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 4181e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4182e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'K': 4183e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'k': 4184e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4185e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=BlackQuantum; 4186e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) SetImageColorspace(image,CMYKColorspace,exception); 4187e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 4188e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4189e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'I': 4190e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'i': 4191e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4192e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=IndexQuantum; 4193b7b3da6aa145fe62d107c4b4c1a25bcc24bd1006cristy (void) SetImageColorspace(image,GRAYColorspace,exception); 4194e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 4195e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4196e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'm': 4197e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'M': 4198e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4199e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=MagentaQuantum; 4200e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) SetImageColorspace(image,CMYKColorspace,exception); 4201e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 4202e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4203e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'O': 4204e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'o': 4205e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4206e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=OpacityQuantum; 42078a46d827a124555f0c48fb2368ec1bba8e079ab6cristy image->alpha_trait=BlendPixelTrait; 4208e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 4209e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4210e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'P': 4211e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'p': 4212e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4213e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=UndefinedQuantum; 4214e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 4215e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4216e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'R': 4217e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'r': 4218e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4219e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=RedQuantum; 4220e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 42213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 4222e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'Y': 4223e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case 'y': 4224e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4225e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map[i]=YellowQuantum; 4226e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) SetImageColorspace(image,CMYKColorspace,exception); 4227e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 4228e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4229e5370944fabb7afa477ab1325d400731b1e5d5e8cristy default: 4230e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4231e5370944fabb7afa477ab1325d400731b1e5d5e8cristy quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map); 4232e5370944fabb7afa477ab1325d400731b1e5d5e8cristy (void) ThrowMagickException(exception,GetMagickModule(),OptionError, 4233efe601ce9ea5ad34ad0e8ad6e61d9be9b148b2a3cristy "UnrecognizedPixelMap","`%s'",map); 4234e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return(MagickFalse); 4235e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4236e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4237e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4238e5370944fabb7afa477ab1325d400731b1e5d5e8cristy if (SetImageStorageClass(image,DirectClass,exception) == MagickFalse) 4239e5370944fabb7afa477ab1325d400731b1e5d5e8cristy return(MagickFalse); 4240e5370944fabb7afa477ab1325d400731b1e5d5e8cristy /* 4241e5370944fabb7afa477ab1325d400731b1e5d5e8cristy Transfer the pixels from the pixel data to the image. 4242e5370944fabb7afa477ab1325d400731b1e5d5e8cristy */ 4243cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy roi.width=width; 4244cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy roi.height=height; 4245cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy roi.x=x; 4246cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy roi.y=y; 4247e5370944fabb7afa477ab1325d400731b1e5d5e8cristy switch (type) 4248e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4249e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case CharPixel: 4250e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4251cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ImportCharPixel(image,&roi,map,quantum_map,pixels,exception); 4252e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 4253e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4254e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case DoublePixel: 4255e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4256cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ImportDoublePixel(image,&roi,map,quantum_map,pixels,exception); 4257e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 4258e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4259e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case FloatPixel: 4260e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4261cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ImportFloatPixel(image,&roi,map,quantum_map,pixels,exception); 4262e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 4263e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 42646c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy case LongPixel: 4265e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4266cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ImportLongPixel(image,&roi,map,quantum_map,pixels,exception); 4267e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 4268e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 42696c9e168a2e888f62e1f6317a4d49f31678e0b70ccristy case LongLongPixel: 4270e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4271cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ImportLongLongPixel(image,&roi,map,quantum_map,pixels,exception); 4272e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 4273e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4274e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case QuantumPixel: 4275e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4276cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ImportQuantumPixel(image,&roi,map,quantum_map,pixels,exception); 4277e5370944fabb7afa477ab1325d400731b1e5d5e8cristy break; 4278e5370944fabb7afa477ab1325d400731b1e5d5e8cristy } 4279e5370944fabb7afa477ab1325d400731b1e5d5e8cristy case ShortPixel: 4280e5370944fabb7afa477ab1325d400731b1e5d5e8cristy { 4281cafe0412f81d4e5f1fafee6ab07019a1fe25e491cristy ImportShortPixel(image,&roi,map,quantum_map,pixels,exception); 42823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 42833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 42843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 42853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 42863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map); 4287c82a27bb8e3138ff9bbf0f696663bdf3e704cedecristy (void) ThrowMagickException(exception,GetMagickModule(),OptionError, 428894db6c1547e1c4ef2ca7ea209d17749d2b5fd850dirk "UnrecognizedStorageType","`%d'",type); 42893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 42903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 42913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 42923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map); 42933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickTrue); 42943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 4295d76c51ed30cf4084f4434ba08925d16001d1e340cristy 4296d76c51ed30cf4084f4434ba08925d16001d1e340cristy/* 4297d76c51ed30cf4084f4434ba08925d16001d1e340cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4298a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% % 4299a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% % 4300a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% % 4301bd5a96cd2b69f218f85a7adc306296a736f91a56cristy+ 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 % 4302bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% % 4303bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% % 4304bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% % 4305bd5a96cd2b69f218f85a7adc306296a736f91a56cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4306bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% 4307bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% InitializePixelChannelMap() defines the standard pixel component map. 4308bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% 4309bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% The format of the InitializePixelChannelMap() method is: 4310bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% 4311bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% void InitializePixelChannelMap(Image *image) 4312bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% 4313bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% A description of each parameter follows: 4314bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% 4315bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% o image: the image. 4316bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% 4317bd5a96cd2b69f218f85a7adc306296a736f91a56cristy*/ 4318021216a8b35ea91ef1f12713ed41da843bbaee7bcristy 4319021216a8b35ea91ef1f12713ed41da843bbaee7bcristystatic void LogPixelChannels(const Image *image) 4320021216a8b35ea91ef1f12713ed41da843bbaee7bcristy{ 4321021216a8b35ea91ef1f12713ed41da843bbaee7bcristy register ssize_t 4322021216a8b35ea91ef1f12713ed41da843bbaee7bcristy i; 4323021216a8b35ea91ef1f12713ed41da843bbaee7bcristy 4324021216a8b35ea91ef1f12713ed41da843bbaee7bcristy (void) LogMagickEvent(PixelEvent,GetMagickModule(),"%s[%.20g]", 4325021216a8b35ea91ef1f12713ed41da843bbaee7bcristy image->filename,(double) image->number_channels); 4326021216a8b35ea91ef1f12713ed41da843bbaee7bcristy for (i=0; i < (ssize_t) image->number_channels; i++) 4327021216a8b35ea91ef1f12713ed41da843bbaee7bcristy { 4328021216a8b35ea91ef1f12713ed41da843bbaee7bcristy char 4329151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy traits[MagickPathExtent]; 4330021216a8b35ea91ef1f12713ed41da843bbaee7bcristy 4331021216a8b35ea91ef1f12713ed41da843bbaee7bcristy const char 4332021216a8b35ea91ef1f12713ed41da843bbaee7bcristy *name; 4333021216a8b35ea91ef1f12713ed41da843bbaee7bcristy 4334021216a8b35ea91ef1f12713ed41da843bbaee7bcristy PixelChannel 4335021216a8b35ea91ef1f12713ed41da843bbaee7bcristy channel; 4336021216a8b35ea91ef1f12713ed41da843bbaee7bcristy 4337021216a8b35ea91ef1f12713ed41da843bbaee7bcristy switch (GetPixelChannelChannel(image,i)) 4338021216a8b35ea91ef1f12713ed41da843bbaee7bcristy { 4339021216a8b35ea91ef1f12713ed41da843bbaee7bcristy case RedPixelChannel: 4340021216a8b35ea91ef1f12713ed41da843bbaee7bcristy { 4341021216a8b35ea91ef1f12713ed41da843bbaee7bcristy name="red"; 4342021216a8b35ea91ef1f12713ed41da843bbaee7bcristy if (image->colorspace == CMYKColorspace) 4343021216a8b35ea91ef1f12713ed41da843bbaee7bcristy name="cyan"; 4344021216a8b35ea91ef1f12713ed41da843bbaee7bcristy if (image->colorspace == GRAYColorspace) 4345021216a8b35ea91ef1f12713ed41da843bbaee7bcristy name="gray"; 4346021216a8b35ea91ef1f12713ed41da843bbaee7bcristy break; 4347021216a8b35ea91ef1f12713ed41da843bbaee7bcristy } 4348021216a8b35ea91ef1f12713ed41da843bbaee7bcristy case GreenPixelChannel: 4349021216a8b35ea91ef1f12713ed41da843bbaee7bcristy { 4350021216a8b35ea91ef1f12713ed41da843bbaee7bcristy name="green"; 4351021216a8b35ea91ef1f12713ed41da843bbaee7bcristy if (image->colorspace == CMYKColorspace) 4352021216a8b35ea91ef1f12713ed41da843bbaee7bcristy name="magenta"; 4353021216a8b35ea91ef1f12713ed41da843bbaee7bcristy break; 4354021216a8b35ea91ef1f12713ed41da843bbaee7bcristy } 4355021216a8b35ea91ef1f12713ed41da843bbaee7bcristy case BluePixelChannel: 4356021216a8b35ea91ef1f12713ed41da843bbaee7bcristy { 4357021216a8b35ea91ef1f12713ed41da843bbaee7bcristy name="blue"; 4358021216a8b35ea91ef1f12713ed41da843bbaee7bcristy if (image->colorspace == CMYKColorspace) 4359021216a8b35ea91ef1f12713ed41da843bbaee7bcristy name="yellow"; 4360021216a8b35ea91ef1f12713ed41da843bbaee7bcristy break; 4361021216a8b35ea91ef1f12713ed41da843bbaee7bcristy } 4362021216a8b35ea91ef1f12713ed41da843bbaee7bcristy case BlackPixelChannel: 4363021216a8b35ea91ef1f12713ed41da843bbaee7bcristy { 4364021216a8b35ea91ef1f12713ed41da843bbaee7bcristy name="black"; 4365021216a8b35ea91ef1f12713ed41da843bbaee7bcristy if (image->storage_class == PseudoClass) 4366021216a8b35ea91ef1f12713ed41da843bbaee7bcristy name="index"; 4367021216a8b35ea91ef1f12713ed41da843bbaee7bcristy break; 4368021216a8b35ea91ef1f12713ed41da843bbaee7bcristy } 4369021216a8b35ea91ef1f12713ed41da843bbaee7bcristy case IndexPixelChannel: 4370021216a8b35ea91ef1f12713ed41da843bbaee7bcristy { 4371021216a8b35ea91ef1f12713ed41da843bbaee7bcristy name="index"; 4372021216a8b35ea91ef1f12713ed41da843bbaee7bcristy break; 4373021216a8b35ea91ef1f12713ed41da843bbaee7bcristy } 4374021216a8b35ea91ef1f12713ed41da843bbaee7bcristy case AlphaPixelChannel: 4375021216a8b35ea91ef1f12713ed41da843bbaee7bcristy { 4376021216a8b35ea91ef1f12713ed41da843bbaee7bcristy name="alpha"; 4377021216a8b35ea91ef1f12713ed41da843bbaee7bcristy break; 4378021216a8b35ea91ef1f12713ed41da843bbaee7bcristy } 4379021216a8b35ea91ef1f12713ed41da843bbaee7bcristy case ReadMaskPixelChannel: 4380021216a8b35ea91ef1f12713ed41da843bbaee7bcristy { 43810481714f03ee904233a3aa1a5ed8c7690c9d361dcristy name="read-mask"; 4382021216a8b35ea91ef1f12713ed41da843bbaee7bcristy break; 4383021216a8b35ea91ef1f12713ed41da843bbaee7bcristy } 4384021216a8b35ea91ef1f12713ed41da843bbaee7bcristy case WriteMaskPixelChannel: 4385021216a8b35ea91ef1f12713ed41da843bbaee7bcristy { 43860481714f03ee904233a3aa1a5ed8c7690c9d361dcristy name="write-mask"; 4387021216a8b35ea91ef1f12713ed41da843bbaee7bcristy break; 4388021216a8b35ea91ef1f12713ed41da843bbaee7bcristy } 4389021216a8b35ea91ef1f12713ed41da843bbaee7bcristy case MetaPixelChannel: 4390021216a8b35ea91ef1f12713ed41da843bbaee7bcristy { 4391021216a8b35ea91ef1f12713ed41da843bbaee7bcristy name="meta"; 4392021216a8b35ea91ef1f12713ed41da843bbaee7bcristy break; 4393021216a8b35ea91ef1f12713ed41da843bbaee7bcristy } 4394021216a8b35ea91ef1f12713ed41da843bbaee7bcristy default: 4395021216a8b35ea91ef1f12713ed41da843bbaee7bcristy name="undefined"; 4396021216a8b35ea91ef1f12713ed41da843bbaee7bcristy } 4397021216a8b35ea91ef1f12713ed41da843bbaee7bcristy channel=GetPixelChannelChannel(image,i); 4398021216a8b35ea91ef1f12713ed41da843bbaee7bcristy *traits='\0'; 4399021216a8b35ea91ef1f12713ed41da843bbaee7bcristy if ((GetPixelChannelTraits(image,channel) & UpdatePixelTrait) != 0) 4400151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) ConcatenateMagickString(traits,"update,",MagickPathExtent); 4401021216a8b35ea91ef1f12713ed41da843bbaee7bcristy if ((GetPixelChannelTraits(image,channel) & BlendPixelTrait) != 0) 4402151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) ConcatenateMagickString(traits,"blend,",MagickPathExtent); 4403021216a8b35ea91ef1f12713ed41da843bbaee7bcristy if ((GetPixelChannelTraits(image,channel) & CopyPixelTrait) != 0) 4404151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) ConcatenateMagickString(traits,"copy,",MagickPathExtent); 4405021216a8b35ea91ef1f12713ed41da843bbaee7bcristy if (*traits == '\0') 4406151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) ConcatenateMagickString(traits,"undefined,",MagickPathExtent); 4407021216a8b35ea91ef1f12713ed41da843bbaee7bcristy traits[strlen(traits)-1]='\0'; 4408021216a8b35ea91ef1f12713ed41da843bbaee7bcristy (void) LogMagickEvent(PixelEvent,GetMagickModule()," %.20g: %s (%s)", 4409021216a8b35ea91ef1f12713ed41da843bbaee7bcristy (double) i,name,traits); 4410021216a8b35ea91ef1f12713ed41da843bbaee7bcristy } 4411021216a8b35ea91ef1f12713ed41da843bbaee7bcristy} 4412021216a8b35ea91ef1f12713ed41da843bbaee7bcristy 4413e2a912b6c9086c98ec838baa0824cd8deca55538cristyMagickExport void InitializePixelChannelMap(Image *image) 441477c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy{ 4415e2a912b6c9086c98ec838baa0824cd8deca55538cristy PixelTrait 4416e2a912b6c9086c98ec838baa0824cd8deca55538cristy trait; 4417e2a912b6c9086c98ec838baa0824cd8deca55538cristy 441877c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy register ssize_t 441977c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy i; 442077c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy 4421d26338ffb761a86f047d7bbb9a596800f53c8649cristy ssize_t 442277c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy n; 442377c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy 442477c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy assert(image != (Image *) NULL); 4425e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(image->signature == MagickCoreSignature); 4426e2a912b6c9086c98ec838baa0824cd8deca55538cristy (void) ResetMagickMemory(image->channel_map,0,MaxPixelChannels* 4427e2a912b6c9086c98ec838baa0824cd8deca55538cristy sizeof(*image->channel_map)); 4428e2a912b6c9086c98ec838baa0824cd8deca55538cristy trait=UpdatePixelTrait; 442917f11b056210f082a6d0e54ac5d68e6d72fa76b2cristy if (image->alpha_trait != UndefinedPixelTrait) 443061f18adcc41fdd05d57e50544cdb9d321bb18953cristy trait=(PixelTrait) (trait | BlendPixelTrait); 443177c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy n=0; 4432c06c58036e12a41593f1c7a984f1fdb4e9cc434bcristy if (image->colorspace == GRAYColorspace) 443377c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy { 4434cf1296eb467f83fd2106e51d2689ac0afc863ef8cristy SetPixelChannelAttributes(image,BluePixelChannel,trait,n); 4435cf1296eb467f83fd2106e51d2689ac0afc863ef8cristy SetPixelChannelAttributes(image,GreenPixelChannel,trait,n); 4436cf1296eb467f83fd2106e51d2689ac0afc863ef8cristy SetPixelChannelAttributes(image,RedPixelChannel,trait,n++); 44373c3162882db2814a5b709072cd03b8d18c80d6afcristy } 44383c3162882db2814a5b709072cd03b8d18c80d6afcristy else 44393c3162882db2814a5b709072cd03b8d18c80d6afcristy { 4440cf1296eb467f83fd2106e51d2689ac0afc863ef8cristy SetPixelChannelAttributes(image,RedPixelChannel,trait,n++); 4441cf1296eb467f83fd2106e51d2689ac0afc863ef8cristy SetPixelChannelAttributes(image,GreenPixelChannel,trait,n++); 4442cf1296eb467f83fd2106e51d2689ac0afc863ef8cristy SetPixelChannelAttributes(image,BluePixelChannel,trait,n++); 444377c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy } 444477c30f505b9ddf45ec96709ab5ebcb7a10f96d4acristy if (image->colorspace == CMYKColorspace) 4445cf1296eb467f83fd2106e51d2689ac0afc863ef8cristy SetPixelChannelAttributes(image,BlackPixelChannel,trait,n++); 444617f11b056210f082a6d0e54ac5d68e6d72fa76b2cristy if (image->alpha_trait != UndefinedPixelTrait) 4447cf1296eb467f83fd2106e51d2689ac0afc863ef8cristy SetPixelChannelAttributes(image,AlphaPixelChannel,CopyPixelTrait,n++); 4448bd5a96cd2b69f218f85a7adc306296a736f91a56cristy if (image->storage_class == PseudoClass) 4449cf1296eb467f83fd2106e51d2689ac0afc863ef8cristy SetPixelChannelAttributes(image,IndexPixelChannel,CopyPixelTrait,n++); 4450883fde11debec15cedb05dc5d7228d8588066bc0cristy if (image->read_mask != MagickFalse) 4451883fde11debec15cedb05dc5d7228d8588066bc0cristy SetPixelChannelAttributes(image,ReadMaskPixelChannel,CopyPixelTrait,n++); 4452883fde11debec15cedb05dc5d7228d8588066bc0cristy if (image->write_mask != MagickFalse) 4453883fde11debec15cedb05dc5d7228d8588066bc0cristy SetPixelChannelAttributes(image,WriteMaskPixelChannel,CopyPixelTrait,n++); 4454e2a912b6c9086c98ec838baa0824cd8deca55538cristy assert((n+image->number_meta_channels) < MaxPixelChannels); 4455e2a912b6c9086c98ec838baa0824cd8deca55538cristy for (i=0; i < (ssize_t) image->number_meta_channels; i++) 4456cf1296eb467f83fd2106e51d2689ac0afc863ef8cristy SetPixelChannelAttributes(image,(PixelChannel) (MetaPixelChannel+i), 4457cf1296eb467f83fd2106e51d2689ac0afc863ef8cristy CopyPixelTrait,n++); 4458d26338ffb761a86f047d7bbb9a596800f53c8649cristy image->number_channels=(size_t) n; 44596dcb9b8f58179c62fb386bf2bc02c8ba901dfb15cristy if (image->debug != MagickFalse) 44606dcb9b8f58179c62fb386bf2bc02c8ba901dfb15cristy LogPixelChannels(image); 446117ada024a8d39285affcac96ff344f3142c41aadcristy SetImageChannelMask(image,image->channel_mask); 4462bd5a96cd2b69f218f85a7adc306296a736f91a56cristy} 4463bd5a96cd2b69f218f85a7adc306296a736f91a56cristy 4464bd5a96cd2b69f218f85a7adc306296a736f91a56cristy/* 4465bd5a96cd2b69f218f85a7adc306296a736f91a56cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4466bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% % 4467bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% % 4468bd5a96cd2b69f218f85a7adc306296a736f91a56cristy% % 4469a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% I n t e r p o l a t e P i x e l C h a n n e l % 4470a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% % 4471a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% % 4472a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% % 4473a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4474a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 4475884f600898ca6935a7981b4d56bf3d2c4ec17011cristy% InterpolatePixelChannel() applies a pixel interpolation method between a 4476884f600898ca6935a7981b4d56bf3d2c4ec17011cristy% floating point coordinate and the pixels surrounding that coordinate. No 4477884f600898ca6935a7981b4d56bf3d2c4ec17011cristy% pixel area resampling, or scaling of the result is performed. 4478a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 4479cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony% Interpolation is restricted to just the specified channel. 4480cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony% 4481a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% The format of the InterpolatePixelChannel method is: 4482a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 4483a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% MagickBooleanType InterpolatePixelChannel(const Image *image, 4484444eda6285b2191e662c3d375c86770da70a83b0cristy% const CacheView *image_view,const PixelChannel channel, 44855c4e2586d27d4299a742d170d41105de1689aa46cristy% const PixelInterpolateMethod method,const double x,const double y, 4486a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% double *pixel,ExceptionInfo *exception) 4487a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 4488a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% A description of each parameter follows: 4489a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 4490a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% o image: the image. 4491a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 4492a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% o image_view: the image view. 4493a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 4494a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% o channel: the pixel channel to interpolate. 4495a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 4496a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% o method: the pixel color interpolation method. 4497a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 4498a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% o x,y: A double representing the current (x,y) position of the pixel. 4499a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 4500a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% o pixel: return the interpolated pixel here. 4501a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 4502a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% o exception: return any errors or warnings in this structure. 4503a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy% 4504a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy*/ 450594ea1636709395774d7118ef56162d211904cfd2cristy 4506b0a657e13c4aefba39c51292005427b47277869dcristystatic inline void CatromWeights(const double x,double (*weights)[4]) 4507884f600898ca6935a7981b4d56bf3d2c4ec17011cristy{ 4508a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy double 4509884f600898ca6935a7981b4d56bf3d2c4ec17011cristy alpha, 4510d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas beta, 4511884f600898ca6935a7981b4d56bf3d2c4ec17011cristy gamma; 4512884f600898ca6935a7981b4d56bf3d2c4ec17011cristy 45135a5e4d97bc9afa4660902954d2eed4f23582dfeccristy /* 45145a5e4d97bc9afa4660902954d2eed4f23582dfeccristy Nicolas Robidoux' 10 flops (4* + 5- + 1+) refactoring of the computation 45155a5e4d97bc9afa4660902954d2eed4f23582dfeccristy of the standard four 1D Catmull-Rom weights. The sampling location is 45165a5e4d97bc9afa4660902954d2eed4f23582dfeccristy assumed between the second and third input pixel locations, and x is the 45175a5e4d97bc9afa4660902954d2eed4f23582dfeccristy position relative to the second input pixel location. Formulas originally 45185a5e4d97bc9afa4660902954d2eed4f23582dfeccristy derived for the VIPS (Virtual Image Processing System) library. 45195a5e4d97bc9afa4660902954d2eed4f23582dfeccristy */ 4520a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy alpha=(double) 1.0-x; 4521a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy beta=(double) (-0.5)*x*alpha; 4522d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas (*weights)[0]=alpha*beta; 4523d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas (*weights)[3]=x*beta; 4524d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas /* 45255a5e4d97bc9afa4660902954d2eed4f23582dfeccristy The following computation of the inner weights from the outer ones work 45265a5e4d97bc9afa4660902954d2eed4f23582dfeccristy for all Keys cubics. 4527d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas */ 4528d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas gamma=(*weights)[3]-(*weights)[0]; 4529d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas (*weights)[1]=alpha-(*weights)[0]+gamma; 4530d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas (*weights)[2]=x-(*weights)[3]-gamma; 4531d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas} 4532d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas 4533b0a657e13c4aefba39c51292005427b47277869dcristystatic inline void SplineWeights(const double x,double (*weights)[4]) 4534d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas{ 45355a5e4d97bc9afa4660902954d2eed4f23582dfeccristy double 45365a5e4d97bc9afa4660902954d2eed4f23582dfeccristy alpha, 45375a5e4d97bc9afa4660902954d2eed4f23582dfeccristy beta; 45385a5e4d97bc9afa4660902954d2eed4f23582dfeccristy 4539d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas /* 454058ee5018960b42b80b54398eacabe9ae5da89149cristy Nicolas Robidoux' 12 flops (6* + 5- + 1+) refactoring of the computation 454158ee5018960b42b80b54398eacabe9ae5da89149cristy of the standard four 1D cubic B-spline smoothing weights. The sampling 454258ee5018960b42b80b54398eacabe9ae5da89149cristy location is assumed between the second and third input pixel locations, 454358ee5018960b42b80b54398eacabe9ae5da89149cristy and x is the position relative to the second input pixel location. 4544d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas */ 4545a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy alpha=(double) 1.0-x; 4546a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy (*weights)[3]=(double) (1.0/6.0)*x*x*x; 4547a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy (*weights)[0]=(double) (1.0/6.0)*alpha*alpha*alpha; 4548d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas beta=(*weights)[3]-(*weights)[0]; 4549d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas (*weights)[1]=alpha-(*weights)[0]+beta; 4550d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas (*weights)[2]=x-(*weights)[3]-beta; 4551884f600898ca6935a7981b4d56bf3d2c4ec17011cristy} 4552884f600898ca6935a7981b4d56bf3d2c4ec17011cristy 455394ea1636709395774d7118ef56162d211904cfd2cristystatic inline double MeshInterpolate(const PointInfo *delta,const double p, 455494ea1636709395774d7118ef56162d211904cfd2cristy const double x,const double y) 455594ea1636709395774d7118ef56162d211904cfd2cristy{ 455694ea1636709395774d7118ef56162d211904cfd2cristy return(delta->x*x+delta->y*y+(1.0-delta->x-delta->y)*p); 455794ea1636709395774d7118ef56162d211904cfd2cristy} 455894ea1636709395774d7118ef56162d211904cfd2cristy 4559cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony/* 4560a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristystatic inline ssize_t NearestNeighbor(const double x) 4561884f600898ca6935a7981b4d56bf3d2c4ec17011cristy{ 4562884f600898ca6935a7981b4d56bf3d2c4ec17011cristy if (x >= 0.0) 4563884f600898ca6935a7981b4d56bf3d2c4ec17011cristy return((ssize_t) (x+0.5)); 4564884f600898ca6935a7981b4d56bf3d2c4ec17011cristy return((ssize_t) (x-0.5)); 4565884f600898ca6935a7981b4d56bf3d2c4ec17011cristy} 4566cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony*/ 4567884f600898ca6935a7981b4d56bf3d2c4ec17011cristy 4568a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristyMagickExport MagickBooleanType InterpolatePixelChannel(const Image *image, 456939fee9a56b751a52fb8b73d39836d48bc80cb35fdirk const CacheView_ *image_view,const PixelChannel channel, 45705c4e2586d27d4299a742d170d41105de1689aa46cristy const PixelInterpolateMethod method,const double x,const double y, 4571a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy double *pixel,ExceptionInfo *exception) 4572a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy{ 4573a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy double 457494ea1636709395774d7118ef56162d211904cfd2cristy alpha[16], 4575884f600898ca6935a7981b4d56bf3d2c4ec17011cristy gamma, 4576884f600898ca6935a7981b4d56bf3d2c4ec17011cristy pixels[16]; 457794ea1636709395774d7118ef56162d211904cfd2cristy 457858ee5018960b42b80b54398eacabe9ae5da89149cristy MagickBooleanType 457958ee5018960b42b80b54398eacabe9ae5da89149cristy status; 458058ee5018960b42b80b54398eacabe9ae5da89149cristy 458158ee5018960b42b80b54398eacabe9ae5da89149cristy PixelInterpolateMethod 458258ee5018960b42b80b54398eacabe9ae5da89149cristy interpolate; 458358ee5018960b42b80b54398eacabe9ae5da89149cristy 458494ea1636709395774d7118ef56162d211904cfd2cristy PixelTrait 458594ea1636709395774d7118ef56162d211904cfd2cristy traits; 458694ea1636709395774d7118ef56162d211904cfd2cristy 458794ea1636709395774d7118ef56162d211904cfd2cristy register const Quantum 458894ea1636709395774d7118ef56162d211904cfd2cristy *p; 458994ea1636709395774d7118ef56162d211904cfd2cristy 459050e64b85215ce366ca50af1ba16326c784221f92cristy register ssize_t 459194ea1636709395774d7118ef56162d211904cfd2cristy i; 459294ea1636709395774d7118ef56162d211904cfd2cristy 4593a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy ssize_t 4594a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy x_offset, 4595a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy y_offset; 4596a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy 4597a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy assert(image != (Image *) NULL); 4598e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(image->signature == MagickCoreSignature); 4599a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy assert(image_view != (CacheView *) NULL); 4600a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy status=MagickTrue; 4601884f600898ca6935a7981b4d56bf3d2c4ec17011cristy *pixel=0.0; 4602cf1296eb467f83fd2106e51d2689ac0afc863ef8cristy traits=GetPixelChannelTraits(image,channel); 4603a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy x_offset=(ssize_t) floor(x); 4604a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy y_offset=(ssize_t) floor(y); 4605cfc71b1f9ffb73f906c5b9c10b2d9b89f1c51fa9cristy interpolate=method; 4606cfc71b1f9ffb73f906c5b9c10b2d9b89f1c51fa9cristy if (interpolate == UndefinedInterpolatePixel) 4607cfc71b1f9ffb73f906c5b9c10b2d9b89f1c51fa9cristy interpolate=image->interpolate; 4608cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony switch (interpolate) 4609a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy { 461058ee5018960b42b80b54398eacabe9ae5da89149cristy case AverageInterpolatePixel: /* nearest 4 neighbours */ 461158ee5018960b42b80b54398eacabe9ae5da89149cristy case Average9InterpolatePixel: /* nearest 9 neighbours */ 461258ee5018960b42b80b54398eacabe9ae5da89149cristy case Average16InterpolatePixel: /* nearest 16 neighbours */ 4613884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4614fb12237dd6e4d4d8b92d879661153062eeca0572cristy ssize_t 4615fb12237dd6e4d4d8b92d879661153062eeca0572cristy count; 4616cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony 4617fb12237dd6e4d4d8b92d879661153062eeca0572cristy count=2; /* size of the area to average - default nearest 4 */ 4618cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony if (interpolate == Average9InterpolatePixel) 4619cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 4620cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony count=3; 4621cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony x_offset=(ssize_t) (floor(x+0.5)-1); 4622cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony y_offset=(ssize_t) (floor(y+0.5)-1); 4623cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 4624fb12237dd6e4d4d8b92d879661153062eeca0572cristy else 4625fb12237dd6e4d4d8b92d879661153062eeca0572cristy if (interpolate == Average16InterpolatePixel) 4626fb12237dd6e4d4d8b92d879661153062eeca0572cristy { 4627fb12237dd6e4d4d8b92d879661153062eeca0572cristy count=4; 4628fb12237dd6e4d4d8b92d879661153062eeca0572cristy x_offset--; 4629fb12237dd6e4d4d8b92d879661153062eeca0572cristy y_offset--; 4630fb12237dd6e4d4d8b92d879661153062eeca0572cristy } 4631021216a8b35ea91ef1f12713ed41da843bbaee7bcristy p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,(size_t) count, 4632021216a8b35ea91ef1f12713ed41da843bbaee7bcristy (size_t) count,exception); 4633884f600898ca6935a7981b4d56bf3d2c4ec17011cristy if (p == (const Quantum *) NULL) 4634884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4635884f600898ca6935a7981b4d56bf3d2c4ec17011cristy status=MagickFalse; 4636884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4637884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 463858ee5018960b42b80b54398eacabe9ae5da89149cristy count*=count; /* Number of pixels to average */ 4639222b19c8e5e5ee5287e41d33fea54f2b651741b6cristy if ((traits & BlendPixelTrait) == 0) 464050e64b85215ce366ca50af1ba16326c784221f92cristy for (i=0; i < (ssize_t) count; i++) 4641884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4642884f600898ca6935a7981b4d56bf3d2c4ec17011cristy alpha[i]=1.0; 4643a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixels[i]=(double) p[i*GetPixelChannels(image)+channel]; 4644884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4645884f600898ca6935a7981b4d56bf3d2c4ec17011cristy else 464650e64b85215ce366ca50af1ba16326c784221f92cristy for (i=0; i < (ssize_t) count; i++) 4647884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4648884f600898ca6935a7981b4d56bf3d2c4ec17011cristy alpha[i]=QuantumScale*GetPixelAlpha(image,p+i* 4649884f600898ca6935a7981b4d56bf3d2c4ec17011cristy GetPixelChannels(image)); 4650884f600898ca6935a7981b4d56bf3d2c4ec17011cristy pixels[i]=alpha[i]*p[i*GetPixelChannels(image)+channel]; 4651884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 465250e64b85215ce366ca50af1ba16326c784221f92cristy for (i=0; i < (ssize_t) count; i++) 4653884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 46543e3ec3afbb0782697f201cbe30a56794c10dc7efcristy gamma=PerceptibleReciprocal(alpha[i])/count; 4655cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony *pixel+=gamma*pixels[i]; 4656884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4657884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4658884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4659cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony case BilinearInterpolatePixel: 4660cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony default: 4661cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 4662cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony PointInfo 4663cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony delta, 4664cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony epsilon; 4665cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony 4666cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,2,2,exception); 4667cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony if (p == (const Quantum *) NULL) 4668cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 4669cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony status=MagickFalse; 4670cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony break; 4671cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 4672cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony if ((traits & BlendPixelTrait) == 0) 4673cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony for (i=0; i < 4; i++) 4674cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 4675cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony alpha[i]=1.0; 4676a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixels[i]=(double) p[i*GetPixelChannels(image)+channel]; 4677cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 4678cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony else 4679cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony for (i=0; i < 4; i++) 4680cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 4681cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony alpha[i]=QuantumScale*GetPixelAlpha(image,p+i* 4682cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony GetPixelChannels(image)); 4683cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[i]=alpha[i]*p[i*GetPixelChannels(image)+channel]; 4684cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 4685cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony delta.x=x-x_offset; 4686cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony delta.y=y-y_offset; 4687cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony epsilon.x=1.0-delta.x; 4688cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony epsilon.y=1.0-delta.y; 4689cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony gamma=((epsilon.y*(epsilon.x*alpha[0]+delta.x*alpha[1])+delta.y* 4690cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony (epsilon.x*alpha[2]+delta.x*alpha[3]))); 46913e3ec3afbb0782697f201cbe30a56794c10dc7efcristy gamma=PerceptibleReciprocal(gamma); 4692cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony *pixel=gamma*(epsilon.y*(epsilon.x*pixels[0]+delta.x*pixels[1])+delta.y* 4693cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony (epsilon.x*pixels[2]+delta.x*pixels[3])); 4694cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony break; 4695cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 46965f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony case BlendInterpolatePixel: 46975f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony { 46985f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,2,2,exception); 46995f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony if (p == (const Quantum *) NULL) 47005f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony { 47015f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony status=MagickFalse; 47025f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony break; 47035f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony } 47045f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony if ((traits & BlendPixelTrait) == 0) 47055f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony for (i=0; i < 4; i++) 47065f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony { 47075f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony alpha[i]=1.0; 47085f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony pixels[i]=(MagickRealType) p[i*GetPixelChannels(image)+channel]; 47095f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony } 47105f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony else 47115f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony for (i=0; i < 4; i++) 47125f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony { 47135f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony alpha[i]=QuantumScale*GetPixelAlpha(image,p+i* 47145f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony GetPixelChannels(image)); 47155f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony pixels[i]=alpha[i]*p[i*GetPixelChannels(image)+channel]; 47165f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony } 471758ee5018960b42b80b54398eacabe9ae5da89149cristy gamma=1.0; /* number of pixels blended together (its variable) */ 47185f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony for (i=0; i <= 1L; i++) { 4719fb12237dd6e4d4d8b92d879661153062eeca0572cristy if ((y-y_offset) >= 0.75) 4720fb12237dd6e4d4d8b92d879661153062eeca0572cristy { 4721fb12237dd6e4d4d8b92d879661153062eeca0572cristy alpha[i]=alpha[i+2]; /* take right pixels */ 4722fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[i]=pixels[i+2]; 4723fb12237dd6e4d4d8b92d879661153062eeca0572cristy } 4724fb12237dd6e4d4d8b92d879661153062eeca0572cristy else 4725fb12237dd6e4d4d8b92d879661153062eeca0572cristy if ((y-y_offset) > 0.25) 4726fb12237dd6e4d4d8b92d879661153062eeca0572cristy { 4727fb12237dd6e4d4d8b92d879661153062eeca0572cristy gamma=2.0; /* blend both pixels in row */ 4728fb12237dd6e4d4d8b92d879661153062eeca0572cristy alpha[i]+=alpha[i+2]; /* add up alpha weights */ 4729fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[i]+=pixels[i+2]; 4730fb12237dd6e4d4d8b92d879661153062eeca0572cristy } 47315f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony } 4732fb12237dd6e4d4d8b92d879661153062eeca0572cristy if ((x-x_offset) >= 0.75) 4733fb12237dd6e4d4d8b92d879661153062eeca0572cristy { 4734fb12237dd6e4d4d8b92d879661153062eeca0572cristy alpha[0]=alpha[1]; /* take bottom row blend */ 4735fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[0]=pixels[1]; 4736fb12237dd6e4d4d8b92d879661153062eeca0572cristy } 4737fb12237dd6e4d4d8b92d879661153062eeca0572cristy else 4738fb12237dd6e4d4d8b92d879661153062eeca0572cristy if ((x-x_offset) > 0.25) 4739fb12237dd6e4d4d8b92d879661153062eeca0572cristy { 4740fb12237dd6e4d4d8b92d879661153062eeca0572cristy gamma*=2.0; /* blend both rows */ 4741fb12237dd6e4d4d8b92d879661153062eeca0572cristy alpha[0]+=alpha[1]; /* add up alpha weights */ 4742fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[0]+=pixels[1]; 4743fb12237dd6e4d4d8b92d879661153062eeca0572cristy } 47445f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony if (channel != AlphaPixelChannel) 474558ee5018960b42b80b54398eacabe9ae5da89149cristy gamma=PerceptibleReciprocal(alpha[0]); /* (color) 1/alpha_weights */ 47465f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony else 474758ee5018960b42b80b54398eacabe9ae5da89149cristy gamma=PerceptibleReciprocal(gamma); /* (alpha) 1/number_of_pixels */ 47485f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony *pixel=gamma*pixels[0]; 47495f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony break; 47505f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony } 4751cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony case CatromInterpolatePixel: 4752884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4753a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy double 4754380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy cx[4], 47556676f5a461ba75c5f4a927218cb3577dd29d70aenicolas cy[4]; 4756884f600898ca6935a7981b4d56bf3d2c4ec17011cristy 4757884f600898ca6935a7981b4d56bf3d2c4ec17011cristy p=GetCacheViewVirtualPixels(image_view,x_offset-1,y_offset-1,4,4, 4758884f600898ca6935a7981b4d56bf3d2c4ec17011cristy exception); 4759884f600898ca6935a7981b4d56bf3d2c4ec17011cristy if (p == (const Quantum *) NULL) 4760884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4761884f600898ca6935a7981b4d56bf3d2c4ec17011cristy status=MagickFalse; 4762884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4763884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4764222b19c8e5e5ee5287e41d33fea54f2b651741b6cristy if ((traits & BlendPixelTrait) == 0) 4765884f600898ca6935a7981b4d56bf3d2c4ec17011cristy for (i=0; i < 16; i++) 4766884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4767884f600898ca6935a7981b4d56bf3d2c4ec17011cristy alpha[i]=1.0; 4768a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixels[i]=(double) p[i*GetPixelChannels(image)+channel]; 4769884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4770884f600898ca6935a7981b4d56bf3d2c4ec17011cristy else 4771884f600898ca6935a7981b4d56bf3d2c4ec17011cristy for (i=0; i < 16; i++) 4772884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4773884f600898ca6935a7981b4d56bf3d2c4ec17011cristy alpha[i]=QuantumScale*GetPixelAlpha(image,p+i* 4774884f600898ca6935a7981b4d56bf3d2c4ec17011cristy GetPixelChannels(image)); 4775884f600898ca6935a7981b4d56bf3d2c4ec17011cristy pixels[i]=alpha[i]*p[i*GetPixelChannels(image)+channel]; 4776884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4777a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy CatromWeights((double) (x-x_offset),&cx); 4778a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy CatromWeights((double) (y-y_offset),&cy); 4779a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy gamma=(channel == AlphaPixelChannel ? (double) 1.0 : 47803e3ec3afbb0782697f201cbe30a56794c10dc7efcristy PerceptibleReciprocal(cy[0]*(cx[0]*alpha[0]+cx[1]*alpha[1]+cx[2]* 4781d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas alpha[2]+cx[3]*alpha[3])+cy[1]*(cx[0]*alpha[4]+cx[1]*alpha[5]+cx[2]* 4782d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas alpha[6]+cx[3]*alpha[7])+cy[2]*(cx[0]*alpha[8]+cx[1]*alpha[9]+cx[2]* 4783d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas alpha[10]+cx[3]*alpha[11])+cy[3]*(cx[0]*alpha[12]+cx[1]*alpha[13]+ 4784d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas cx[2]*alpha[14]+cx[3]*alpha[15]))); 4785380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy *pixel=gamma*(cy[0]*(cx[0]*pixels[0]+cx[1]*pixels[1]+cx[2]*pixels[2]+ 4786d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas cx[3]*pixels[3])+cy[1]*(cx[0]*pixels[4]+cx[1]*pixels[5]+cx[2]* 4787d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[6]+cx[3]*pixels[7])+cy[2]*(cx[0]*pixels[8]+cx[1]*pixels[9]+ 4788d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas cx[2]*pixels[10]+cx[3]*pixels[11])+cy[3]*(cx[0]*pixels[12]+cx[1]* 4789d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[13]+cx[2]*pixels[14]+cx[3]*pixels[15])); 4790884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4791884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4792884f600898ca6935a7981b4d56bf3d2c4ec17011cristy case IntegerInterpolatePixel: 4793884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4794884f600898ca6935a7981b4d56bf3d2c4ec17011cristy p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,1,1,exception); 4795884f600898ca6935a7981b4d56bf3d2c4ec17011cristy if (p == (const Quantum *) NULL) 4796884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4797884f600898ca6935a7981b4d56bf3d2c4ec17011cristy status=MagickFalse; 4798884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4799884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 48000beccfa61f43782de2d6ee7edc1ec8301a3bbeeccristy *pixel=(double) GetPixelChannel(image,channel,p); 4801884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4802884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4803cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony case NearestInterpolatePixel: 4804884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4805cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony x_offset=(ssize_t) floor(x+0.5); 4806cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony y_offset=(ssize_t) floor(y+0.5); 4807cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,1,1,exception); 4808884f600898ca6935a7981b4d56bf3d2c4ec17011cristy if (p == (const Quantum *) NULL) 4809884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4810884f600898ca6935a7981b4d56bf3d2c4ec17011cristy status=MagickFalse; 4811884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4812884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 48130beccfa61f43782de2d6ee7edc1ec8301a3bbeeccristy *pixel=(double) GetPixelChannel(image,channel,p); 4814884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4815884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4816884f600898ca6935a7981b4d56bf3d2c4ec17011cristy case MeshInterpolatePixel: 4817884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4818884f600898ca6935a7981b4d56bf3d2c4ec17011cristy PointInfo 4819884f600898ca6935a7981b4d56bf3d2c4ec17011cristy delta, 4820884f600898ca6935a7981b4d56bf3d2c4ec17011cristy luminance; 4821884f600898ca6935a7981b4d56bf3d2c4ec17011cristy 4822884f600898ca6935a7981b4d56bf3d2c4ec17011cristy p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,2,2,exception); 4823884f600898ca6935a7981b4d56bf3d2c4ec17011cristy if (p == (const Quantum *) NULL) 4824884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4825884f600898ca6935a7981b4d56bf3d2c4ec17011cristy status=MagickFalse; 4826884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4827884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4828222b19c8e5e5ee5287e41d33fea54f2b651741b6cristy if ((traits & BlendPixelTrait) == 0) 482994ea1636709395774d7118ef56162d211904cfd2cristy for (i=0; i < 4; i++) 483094ea1636709395774d7118ef56162d211904cfd2cristy { 483194ea1636709395774d7118ef56162d211904cfd2cristy alpha[i]=1.0; 4832a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixels[i]=(double) p[i*GetPixelChannels(image)+channel]; 483394ea1636709395774d7118ef56162d211904cfd2cristy } 483494ea1636709395774d7118ef56162d211904cfd2cristy else 483594ea1636709395774d7118ef56162d211904cfd2cristy for (i=0; i < 4; i++) 483694ea1636709395774d7118ef56162d211904cfd2cristy { 483794ea1636709395774d7118ef56162d211904cfd2cristy alpha[i]=QuantumScale*GetPixelAlpha(image,p+i* 483894ea1636709395774d7118ef56162d211904cfd2cristy GetPixelChannels(image)); 483994ea1636709395774d7118ef56162d211904cfd2cristy pixels[i]=alpha[i]*p[i*GetPixelChannels(image)+channel]; 484094ea1636709395774d7118ef56162d211904cfd2cristy } 4841884f600898ca6935a7981b4d56bf3d2c4ec17011cristy delta.x=x-x_offset; 4842884f600898ca6935a7981b4d56bf3d2c4ec17011cristy delta.y=y-y_offset; 4843ebfaacf0542df42a5beaa9b81a017992e838df70cristy luminance.x=GetPixelLuma(image,p)-(double) 4844ebfaacf0542df42a5beaa9b81a017992e838df70cristy GetPixelLuma(image,p+3*GetPixelChannels(image)); 4845ebfaacf0542df42a5beaa9b81a017992e838df70cristy luminance.y=GetPixelLuma(image,p+GetPixelChannels(image))-(double) 4846ebfaacf0542df42a5beaa9b81a017992e838df70cristy GetPixelLuma(image,p+2*GetPixelChannels(image)); 484794ea1636709395774d7118ef56162d211904cfd2cristy if (fabs(luminance.x) < fabs(luminance.y)) 484894ea1636709395774d7118ef56162d211904cfd2cristy { 484994ea1636709395774d7118ef56162d211904cfd2cristy /* 485094ea1636709395774d7118ef56162d211904cfd2cristy Diagonal 0-3 NW-SE. 485194ea1636709395774d7118ef56162d211904cfd2cristy */ 485294ea1636709395774d7118ef56162d211904cfd2cristy if (delta.x <= delta.y) 485394ea1636709395774d7118ef56162d211904cfd2cristy { 485494ea1636709395774d7118ef56162d211904cfd2cristy /* 485594ea1636709395774d7118ef56162d211904cfd2cristy Bottom-left triangle (pixel: 2, diagonal: 0-3). 485694ea1636709395774d7118ef56162d211904cfd2cristy */ 485794ea1636709395774d7118ef56162d211904cfd2cristy delta.y=1.0-delta.y; 485894ea1636709395774d7118ef56162d211904cfd2cristy gamma=MeshInterpolate(&delta,alpha[2],alpha[3],alpha[0]); 48593e3ec3afbb0782697f201cbe30a56794c10dc7efcristy gamma=PerceptibleReciprocal(gamma); 486094ea1636709395774d7118ef56162d211904cfd2cristy *pixel=gamma*MeshInterpolate(&delta,pixels[2],pixels[3], 486194ea1636709395774d7118ef56162d211904cfd2cristy pixels[0]); 486294ea1636709395774d7118ef56162d211904cfd2cristy } 486394ea1636709395774d7118ef56162d211904cfd2cristy else 486494ea1636709395774d7118ef56162d211904cfd2cristy { 486594ea1636709395774d7118ef56162d211904cfd2cristy /* 486694ea1636709395774d7118ef56162d211904cfd2cristy Top-right triangle (pixel: 1, diagonal: 0-3). 486794ea1636709395774d7118ef56162d211904cfd2cristy */ 486894ea1636709395774d7118ef56162d211904cfd2cristy delta.x=1.0-delta.x; 486994ea1636709395774d7118ef56162d211904cfd2cristy gamma=MeshInterpolate(&delta,alpha[1],alpha[0],alpha[3]); 48703e3ec3afbb0782697f201cbe30a56794c10dc7efcristy gamma=PerceptibleReciprocal(gamma); 487194ea1636709395774d7118ef56162d211904cfd2cristy *pixel=gamma*MeshInterpolate(&delta,pixels[1],pixels[0], 487294ea1636709395774d7118ef56162d211904cfd2cristy pixels[3]); 487394ea1636709395774d7118ef56162d211904cfd2cristy } 487494ea1636709395774d7118ef56162d211904cfd2cristy } 487594ea1636709395774d7118ef56162d211904cfd2cristy else 487694ea1636709395774d7118ef56162d211904cfd2cristy { 487794ea1636709395774d7118ef56162d211904cfd2cristy /* 487894ea1636709395774d7118ef56162d211904cfd2cristy Diagonal 1-2 NE-SW. 487994ea1636709395774d7118ef56162d211904cfd2cristy */ 488094ea1636709395774d7118ef56162d211904cfd2cristy if (delta.x <= (1.0-delta.y)) 488194ea1636709395774d7118ef56162d211904cfd2cristy { 488294ea1636709395774d7118ef56162d211904cfd2cristy /* 488394ea1636709395774d7118ef56162d211904cfd2cristy Top-left triangle (pixel: 0, diagonal: 1-2). 488494ea1636709395774d7118ef56162d211904cfd2cristy */ 488594ea1636709395774d7118ef56162d211904cfd2cristy gamma=MeshInterpolate(&delta,alpha[0],alpha[1],alpha[2]); 48863e3ec3afbb0782697f201cbe30a56794c10dc7efcristy gamma=PerceptibleReciprocal(gamma); 488794ea1636709395774d7118ef56162d211904cfd2cristy *pixel=gamma*MeshInterpolate(&delta,pixels[0],pixels[1], 488894ea1636709395774d7118ef56162d211904cfd2cristy pixels[2]); 488994ea1636709395774d7118ef56162d211904cfd2cristy } 489094ea1636709395774d7118ef56162d211904cfd2cristy else 489194ea1636709395774d7118ef56162d211904cfd2cristy { 489294ea1636709395774d7118ef56162d211904cfd2cristy /* 489394ea1636709395774d7118ef56162d211904cfd2cristy Bottom-right triangle (pixel: 3, diagonal: 1-2). 489494ea1636709395774d7118ef56162d211904cfd2cristy */ 489594ea1636709395774d7118ef56162d211904cfd2cristy delta.x=1.0-delta.x; 489694ea1636709395774d7118ef56162d211904cfd2cristy delta.y=1.0-delta.y; 489794ea1636709395774d7118ef56162d211904cfd2cristy gamma=MeshInterpolate(&delta,alpha[3],alpha[2],alpha[1]); 48983e3ec3afbb0782697f201cbe30a56794c10dc7efcristy gamma=PerceptibleReciprocal(gamma); 489994ea1636709395774d7118ef56162d211904cfd2cristy *pixel=gamma*MeshInterpolate(&delta,pixels[3],pixels[2], 490094ea1636709395774d7118ef56162d211904cfd2cristy pixels[1]); 490194ea1636709395774d7118ef56162d211904cfd2cristy } 490294ea1636709395774d7118ef56162d211904cfd2cristy } 4903a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy break; 4904a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy } 4905884f600898ca6935a7981b4d56bf3d2c4ec17011cristy case SplineInterpolatePixel: 4906884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4907a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy double 4908d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas cx[4], 49096676f5a461ba75c5f4a927218cb3577dd29d70aenicolas cy[4]; 4910884f600898ca6935a7981b4d56bf3d2c4ec17011cristy 4911884f600898ca6935a7981b4d56bf3d2c4ec17011cristy p=GetCacheViewVirtualPixels(image_view,x_offset-1,y_offset-1,4,4, 4912884f600898ca6935a7981b4d56bf3d2c4ec17011cristy exception); 4913884f600898ca6935a7981b4d56bf3d2c4ec17011cristy if (p == (const Quantum *) NULL) 4914884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4915884f600898ca6935a7981b4d56bf3d2c4ec17011cristy status=MagickFalse; 4916884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4917884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4918222b19c8e5e5ee5287e41d33fea54f2b651741b6cristy if ((traits & BlendPixelTrait) == 0) 4919884f600898ca6935a7981b4d56bf3d2c4ec17011cristy for (i=0; i < 16; i++) 4920884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4921884f600898ca6935a7981b4d56bf3d2c4ec17011cristy alpha[i]=1.0; 4922a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixels[i]=(double) p[i*GetPixelChannels(image)+channel]; 4923884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4924884f600898ca6935a7981b4d56bf3d2c4ec17011cristy else 4925884f600898ca6935a7981b4d56bf3d2c4ec17011cristy for (i=0; i < 16; i++) 4926884f600898ca6935a7981b4d56bf3d2c4ec17011cristy { 4927884f600898ca6935a7981b4d56bf3d2c4ec17011cristy alpha[i]=QuantumScale*GetPixelAlpha(image,p+i* 4928884f600898ca6935a7981b4d56bf3d2c4ec17011cristy GetPixelChannels(image)); 4929884f600898ca6935a7981b4d56bf3d2c4ec17011cristy pixels[i]=alpha[i]*p[i*GetPixelChannels(image)+channel]; 4930884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4931a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy SplineWeights((double) (x-x_offset),&cx); 4932a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy SplineWeights((double) (y-y_offset),&cy); 4933a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy gamma=(channel == AlphaPixelChannel ? (double) 1.0 : 49343e3ec3afbb0782697f201cbe30a56794c10dc7efcristy PerceptibleReciprocal(cy[0]*(cx[0]*alpha[0]+cx[1]*alpha[1]+cx[2]* 4935d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas alpha[2]+cx[3]*alpha[3])+cy[1]*(cx[0]*alpha[4]+cx[1]*alpha[5]+cx[2]* 4936d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas alpha[6]+cx[3]*alpha[7])+cy[2]*(cx[0]*alpha[8]+cx[1]*alpha[9]+cx[2]* 4937d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas alpha[10]+cx[3]*alpha[11])+cy[3]*(cx[0]*alpha[12]+cx[1]*alpha[13]+ 4938d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas cx[2]*alpha[14]+cx[3]*alpha[15]))); 4939d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas *pixel=gamma*(cy[0]*(cx[0]*pixels[0]+cx[1]*pixels[1]+cx[2]*pixels[2]+ 4940d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas cx[3]*pixels[3])+cy[1]*(cx[0]*pixels[4]+cx[1]*pixels[5]+cx[2]* 4941d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[6]+cx[3]*pixels[7])+cy[2]*(cx[0]*pixels[8]+cx[1]*pixels[9]+ 4942d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas cx[2]*pixels[10]+cx[3]*pixels[11])+cy[3]*(cx[0]*pixels[12]+cx[1]* 4943d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[13]+cx[2]*pixels[14]+cx[3]*pixels[15])); 4944884f600898ca6935a7981b4d56bf3d2c4ec17011cristy break; 4945884f600898ca6935a7981b4d56bf3d2c4ec17011cristy } 4946a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy } 4947a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy return(status); 4948a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy} 4949a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy 4950a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy/* 4951a085a43d43f06b9c2675020a1d7126ebbaebfd7bcristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4952d76c51ed30cf4084f4434ba08925d16001d1e340cristy% % 4953d76c51ed30cf4084f4434ba08925d16001d1e340cristy% % 4954d76c51ed30cf4084f4434ba08925d16001d1e340cristy% % 49555c4e2586d27d4299a742d170d41105de1689aa46cristy% I n t e r p o l a t e P i x e l C h a n n e l s % 49565c4e2586d27d4299a742d170d41105de1689aa46cristy% % 49575c4e2586d27d4299a742d170d41105de1689aa46cristy% % 49585c4e2586d27d4299a742d170d41105de1689aa46cristy% % 49595c4e2586d27d4299a742d170d41105de1689aa46cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 49605c4e2586d27d4299a742d170d41105de1689aa46cristy% 49615c4e2586d27d4299a742d170d41105de1689aa46cristy% InterpolatePixelChannels() applies a pixel interpolation method between a 49625c4e2586d27d4299a742d170d41105de1689aa46cristy% floating point coordinate and the pixels surrounding that coordinate. No 49635c4e2586d27d4299a742d170d41105de1689aa46cristy% pixel area resampling, or scaling of the result is performed. 49645c4e2586d27d4299a742d170d41105de1689aa46cristy% 4965cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony% Interpolation is restricted to just the current channel setting of the 4966cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony% destination image into which the color is to be stored 4967cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony% 49685c4e2586d27d4299a742d170d41105de1689aa46cristy% The format of the InterpolatePixelChannels method is: 49695c4e2586d27d4299a742d170d41105de1689aa46cristy% 49705c4e2586d27d4299a742d170d41105de1689aa46cristy% MagickBooleanType InterpolatePixelChannels(const Image *source, 49715c4e2586d27d4299a742d170d41105de1689aa46cristy% const CacheView *source_view,const Image *destination, 49725c4e2586d27d4299a742d170d41105de1689aa46cristy% const PixelInterpolateMethod method,const double x,const double y, 49735c4e2586d27d4299a742d170d41105de1689aa46cristy% Quantum *pixel,ExceptionInfo *exception) 49745c4e2586d27d4299a742d170d41105de1689aa46cristy% 49755c4e2586d27d4299a742d170d41105de1689aa46cristy% A description of each parameter follows: 49765c4e2586d27d4299a742d170d41105de1689aa46cristy% 49775c4e2586d27d4299a742d170d41105de1689aa46cristy% o source: the source. 49785c4e2586d27d4299a742d170d41105de1689aa46cristy% 49795c4e2586d27d4299a742d170d41105de1689aa46cristy% o source_view: the source view. 49805c4e2586d27d4299a742d170d41105de1689aa46cristy% 4981cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony% o destination: the destination image, for the interpolated color 49825c4e2586d27d4299a742d170d41105de1689aa46cristy% 49835c4e2586d27d4299a742d170d41105de1689aa46cristy% o method: the pixel color interpolation method. 49845c4e2586d27d4299a742d170d41105de1689aa46cristy% 49855c4e2586d27d4299a742d170d41105de1689aa46cristy% o x,y: A double representing the current (x,y) position of the pixel. 49865c4e2586d27d4299a742d170d41105de1689aa46cristy% 49875c4e2586d27d4299a742d170d41105de1689aa46cristy% o pixel: return the interpolated pixel here. 49885c4e2586d27d4299a742d170d41105de1689aa46cristy% 49895c4e2586d27d4299a742d170d41105de1689aa46cristy% o exception: return any errors or warnings in this structure. 49905c4e2586d27d4299a742d170d41105de1689aa46cristy% 49915c4e2586d27d4299a742d170d41105de1689aa46cristy*/ 49925c4e2586d27d4299a742d170d41105de1689aa46cristyMagickExport MagickBooleanType InterpolatePixelChannels(const Image *source, 499339fee9a56b751a52fb8b73d39836d48bc80cb35fdirk const CacheView_ *source_view,const Image *destination, 49945c4e2586d27d4299a742d170d41105de1689aa46cristy const PixelInterpolateMethod method,const double x,const double y, 49955c4e2586d27d4299a742d170d41105de1689aa46cristy Quantum *pixel,ExceptionInfo *exception) 49965c4e2586d27d4299a742d170d41105de1689aa46cristy{ 49975c4e2586d27d4299a742d170d41105de1689aa46cristy MagickBooleanType 49985c4e2586d27d4299a742d170d41105de1689aa46cristy status; 49995c4e2586d27d4299a742d170d41105de1689aa46cristy 5000a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy double 50015c4e2586d27d4299a742d170d41105de1689aa46cristy alpha[16], 50025c4e2586d27d4299a742d170d41105de1689aa46cristy gamma, 50035c4e2586d27d4299a742d170d41105de1689aa46cristy pixels[16]; 50045c4e2586d27d4299a742d170d41105de1689aa46cristy 50055c4e2586d27d4299a742d170d41105de1689aa46cristy register const Quantum 50065c4e2586d27d4299a742d170d41105de1689aa46cristy *p; 50075c4e2586d27d4299a742d170d41105de1689aa46cristy 500850e64b85215ce366ca50af1ba16326c784221f92cristy register ssize_t 50095c4e2586d27d4299a742d170d41105de1689aa46cristy i; 50105c4e2586d27d4299a742d170d41105de1689aa46cristy 50115c4e2586d27d4299a742d170d41105de1689aa46cristy ssize_t 50125c4e2586d27d4299a742d170d41105de1689aa46cristy x_offset, 50135c4e2586d27d4299a742d170d41105de1689aa46cristy y_offset; 50145c4e2586d27d4299a742d170d41105de1689aa46cristy 5015cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony PixelInterpolateMethod 5016cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony interpolate; 5017cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony 50185c4e2586d27d4299a742d170d41105de1689aa46cristy assert(source != (Image *) NULL); 5019e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(source->signature == MagickCoreSignature); 50205c4e2586d27d4299a742d170d41105de1689aa46cristy assert(source_view != (CacheView *) NULL); 50215c4e2586d27d4299a742d170d41105de1689aa46cristy status=MagickTrue; 50225c4e2586d27d4299a742d170d41105de1689aa46cristy x_offset=(ssize_t) floor(x); 50235c4e2586d27d4299a742d170d41105de1689aa46cristy y_offset=(ssize_t) floor(y); 5024cfc71b1f9ffb73f906c5b9c10b2d9b89f1c51fa9cristy interpolate=method; 5025cfc71b1f9ffb73f906c5b9c10b2d9b89f1c51fa9cristy if (interpolate == UndefinedInterpolatePixel) 5026cfc71b1f9ffb73f906c5b9c10b2d9b89f1c51fa9cristy interpolate=source->interpolate; 5027cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony switch (interpolate) 50285c4e2586d27d4299a742d170d41105de1689aa46cristy { 502958ee5018960b42b80b54398eacabe9ae5da89149cristy case AverageInterpolatePixel: /* nearest 4 neighbours */ 503058ee5018960b42b80b54398eacabe9ae5da89149cristy case Average9InterpolatePixel: /* nearest 9 neighbours */ 503158ee5018960b42b80b54398eacabe9ae5da89149cristy case Average16InterpolatePixel: /* nearest 16 neighbours */ 50325c4e2586d27d4299a742d170d41105de1689aa46cristy { 5033fb12237dd6e4d4d8b92d879661153062eeca0572cristy ssize_t 5034fb12237dd6e4d4d8b92d879661153062eeca0572cristy count; 5035cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony 5036fb12237dd6e4d4d8b92d879661153062eeca0572cristy count=2; /* size of the area to average - default nearest 4 */ 5037cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony if (interpolate == Average9InterpolatePixel) 5038cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 5039cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony count=3; 5040cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony x_offset=(ssize_t) (floor(x+0.5)-1); 5041cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony y_offset=(ssize_t) (floor(y+0.5)-1); 5042cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 5043fb12237dd6e4d4d8b92d879661153062eeca0572cristy else 5044fb12237dd6e4d4d8b92d879661153062eeca0572cristy if (interpolate == Average16InterpolatePixel) 5045fb12237dd6e4d4d8b92d879661153062eeca0572cristy { 5046fb12237dd6e4d4d8b92d879661153062eeca0572cristy count=4; 5047fb12237dd6e4d4d8b92d879661153062eeca0572cristy x_offset--; 5048fb12237dd6e4d4d8b92d879661153062eeca0572cristy y_offset--; 5049fb12237dd6e4d4d8b92d879661153062eeca0572cristy } 50501b72b8194b7d3f274bebf9e176192fd29e385481cristy p=GetCacheViewVirtualPixels(source_view,x_offset,y_offset,(size_t) count, 50511b72b8194b7d3f274bebf9e176192fd29e385481cristy (size_t) count,exception); 50525c4e2586d27d4299a742d170d41105de1689aa46cristy if (p == (const Quantum *) NULL) 50535c4e2586d27d4299a742d170d41105de1689aa46cristy { 50545c4e2586d27d4299a742d170d41105de1689aa46cristy status=MagickFalse; 50555c4e2586d27d4299a742d170d41105de1689aa46cristy break; 50565c4e2586d27d4299a742d170d41105de1689aa46cristy } 505758ee5018960b42b80b54398eacabe9ae5da89149cristy count*=count; /* Number of pixels to average */ 505850e64b85215ce366ca50af1ba16326c784221f92cristy for (i=0; i < (ssize_t) GetPixelChannels(source); i++) 50595c4e2586d27d4299a742d170d41105de1689aa46cristy { 50605c4e2586d27d4299a742d170d41105de1689aa46cristy double 50615c4e2586d27d4299a742d170d41105de1689aa46cristy sum; 50625c4e2586d27d4299a742d170d41105de1689aa46cristy 506350e64b85215ce366ca50af1ba16326c784221f92cristy register ssize_t 50645c4e2586d27d4299a742d170d41105de1689aa46cristy j; 50655c4e2586d27d4299a742d170d41105de1689aa46cristy 50665a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelChannel channel=GetPixelChannelChannel(source,i); 50675a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelTrait traits=GetPixelChannelTraits(source,channel); 50685a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelTrait destination_traits=GetPixelChannelTraits(destination, 50695a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy channel); 50705c4e2586d27d4299a742d170d41105de1689aa46cristy if ((traits == UndefinedPixelTrait) || 50715c4e2586d27d4299a742d170d41105de1689aa46cristy (destination_traits == UndefinedPixelTrait)) 50725c4e2586d27d4299a742d170d41105de1689aa46cristy continue; 507350e64b85215ce366ca50af1ba16326c784221f92cristy for (j=0; j < (ssize_t) count; j++) 5074a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixels[j]=(double) p[j*GetPixelChannels(source)+i]; 50754a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy sum=0.0; 50765c4e2586d27d4299a742d170d41105de1689aa46cristy if ((traits & BlendPixelTrait) == 0) 50775c4e2586d27d4299a742d170d41105de1689aa46cristy { 507850e64b85215ce366ca50af1ba16326c784221f92cristy for (j=0; j < (ssize_t) count; j++) 5079cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony sum+=pixels[j]; 5080cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony sum/=count; 50814a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy SetPixelChannel(destination,channel,ClampToQuantum(sum),pixel); 50825c4e2586d27d4299a742d170d41105de1689aa46cristy continue; 50835c4e2586d27d4299a742d170d41105de1689aa46cristy } 508450e64b85215ce366ca50af1ba16326c784221f92cristy for (j=0; j < (ssize_t) count; j++) 50855c4e2586d27d4299a742d170d41105de1689aa46cristy { 50865c4e2586d27d4299a742d170d41105de1689aa46cristy alpha[j]=QuantumScale*GetPixelAlpha(source,p+j* 50875c4e2586d27d4299a742d170d41105de1689aa46cristy GetPixelChannels(source)); 50885c4e2586d27d4299a742d170d41105de1689aa46cristy pixels[j]*=alpha[j]; 50893e3ec3afbb0782697f201cbe30a56794c10dc7efcristy gamma=PerceptibleReciprocal(alpha[j]); 5090cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony sum+=gamma*pixels[j]; 50915c4e2586d27d4299a742d170d41105de1689aa46cristy } 5092cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony sum/=count; 50934a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy SetPixelChannel(destination,channel,ClampToQuantum(sum),pixel); 50945c4e2586d27d4299a742d170d41105de1689aa46cristy } 50955c4e2586d27d4299a742d170d41105de1689aa46cristy break; 50965c4e2586d27d4299a742d170d41105de1689aa46cristy } 5097cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony case BilinearInterpolatePixel: 5098cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony default: 5099cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 5100cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony p=GetCacheViewVirtualPixels(source_view,x_offset,y_offset,2,2,exception); 5101cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony if (p == (const Quantum *) NULL) 5102cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 5103cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony status=MagickFalse; 5104cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony break; 5105cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 510650e64b85215ce366ca50af1ba16326c784221f92cristy for (i=0; i < (ssize_t) GetPixelChannels(source); i++) 5107cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 5108cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony PointInfo 5109cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony delta, 5110cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony epsilon; 5111cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony 51125a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelChannel channel=GetPixelChannelChannel(source,i); 51135a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelTrait traits=GetPixelChannelTraits(source,channel); 51145a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelTrait destination_traits=GetPixelChannelTraits(destination, 51155a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy channel); 5116cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony if ((traits == UndefinedPixelTrait) || 5117cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony (destination_traits == UndefinedPixelTrait)) 5118cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony continue; 5119cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony delta.x=x-x_offset; 5120cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony delta.y=y-y_offset; 5121cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony epsilon.x=1.0-delta.x; 5122cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony epsilon.y=1.0-delta.y; 5123a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixels[0]=(double) p[i]; 5124a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixels[1]=(double) p[GetPixelChannels(source)+i]; 5125a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixels[2]=(double) p[2*GetPixelChannels(source)+i]; 5126a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixels[3]=(double) p[3*GetPixelChannels(source)+i]; 5127cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony if ((traits & BlendPixelTrait) == 0) 5128cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 5129cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony gamma=((epsilon.y*(epsilon.x+delta.x)+delta.y*(epsilon.x+delta.x))); 51303e3ec3afbb0782697f201cbe30a56794c10dc7efcristy gamma=PerceptibleReciprocal(gamma); 5131cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony SetPixelChannel(destination,channel,ClampToQuantum(gamma*(epsilon.y* 5132cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony (epsilon.x*pixels[0]+delta.x*pixels[1])+delta.y*(epsilon.x* 5133cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[2]+delta.x*pixels[3]))),pixel); 5134cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony continue; 5135cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 5136cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony alpha[0]=QuantumScale*GetPixelAlpha(source,p); 5137cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony alpha[1]=QuantumScale*GetPixelAlpha(source,p+GetPixelChannels(source)); 5138cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony alpha[2]=QuantumScale*GetPixelAlpha(source,p+2* 5139cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony GetPixelChannels(source)); 5140cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony alpha[3]=QuantumScale*GetPixelAlpha(source,p+3* 5141cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony GetPixelChannels(source)); 5142cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[0]*=alpha[0]; 5143cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[1]*=alpha[1]; 5144cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[2]*=alpha[2]; 5145cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[3]*=alpha[3]; 5146cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony gamma=((epsilon.y*(epsilon.x*alpha[0]+delta.x*alpha[1])+delta.y* 5147cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony (epsilon.x*alpha[2]+delta.x*alpha[3]))); 51483e3ec3afbb0782697f201cbe30a56794c10dc7efcristy gamma=PerceptibleReciprocal(gamma); 5149cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony SetPixelChannel(destination,channel,ClampToQuantum(gamma*(epsilon.y* 5150cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony (epsilon.x*pixels[0]+delta.x*pixels[1])+delta.y*(epsilon.x*pixels[2]+ 5151cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony delta.x*pixels[3]))),pixel); 5152cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 5153cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony break; 5154cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 51555f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony case BlendInterpolatePixel: 51565f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony { 51575f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony p=GetCacheViewVirtualPixels(source_view,x_offset,y_offset,2,2,exception); 51585f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony if (p == (const Quantum *) NULL) 51595f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony { 51605f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony status=MagickFalse; 51615f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony break; 51625f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony } 51635f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony for (i=0; i < (ssize_t) GetPixelChannels(source); i++) 51645f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony { 51655f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony register ssize_t 51665f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony j; 51675f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony 51685a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelChannel channel=GetPixelChannelChannel(source,i); 51695a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelTrait traits=GetPixelChannelTraits(source,channel); 51705a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelTrait destination_traits=GetPixelChannelTraits(destination, 51715a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy channel); 51725f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony if ((traits == UndefinedPixelTrait) || 51735f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony (destination_traits == UndefinedPixelTrait)) 51745f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony continue; 51757750effcebd739b5cdea24dcda588d2d8d1d8732dirk if (source->alpha_trait != BlendPixelTrait) 51765f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony for (j=0; j < 4; j++) 51775f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony { 51785f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony alpha[j]=1.0; 51797750effcebd739b5cdea24dcda588d2d8d1d8732dirk pixels[j]=(double) p[j*GetPixelChannels(source)+i]; 51805f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony } 51815f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony else 51825f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony for (j=0; j < 4; j++) 51835f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony { 51845f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony alpha[j]=QuantumScale*GetPixelAlpha(source,p+j* 51855f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony GetPixelChannels(source)); 51867750effcebd739b5cdea24dcda588d2d8d1d8732dirk pixels[j]=(double) p[j*GetPixelChannels(source)+i]; 51877750effcebd739b5cdea24dcda588d2d8d1d8732dirk if (channel != AlphaPixelChannel) 51887750effcebd739b5cdea24dcda588d2d8d1d8732dirk pixels[j]*=alpha[j]; 51895f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony } 5190fb12237dd6e4d4d8b92d879661153062eeca0572cristy gamma=1.0; /* number of pixels blended together (its variable) */ 5191fb12237dd6e4d4d8b92d879661153062eeca0572cristy for (j=0; j <= 1L; j++) 5192fb12237dd6e4d4d8b92d879661153062eeca0572cristy { 5193fb12237dd6e4d4d8b92d879661153062eeca0572cristy if ((y-y_offset) >= 0.75) 5194fb12237dd6e4d4d8b92d879661153062eeca0572cristy { 5195fb12237dd6e4d4d8b92d879661153062eeca0572cristy alpha[j]=alpha[j+2]; /* take right pixels */ 5196fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[j]=pixels[j+2]; 5197fb12237dd6e4d4d8b92d879661153062eeca0572cristy } 5198fb12237dd6e4d4d8b92d879661153062eeca0572cristy else 5199fb12237dd6e4d4d8b92d879661153062eeca0572cristy if ((y-y_offset) > 0.25) 5200fb12237dd6e4d4d8b92d879661153062eeca0572cristy { 520158ee5018960b42b80b54398eacabe9ae5da89149cristy gamma=2.0; /* blend both pixels in row */ 5202fb12237dd6e4d4d8b92d879661153062eeca0572cristy alpha[j]+=alpha[j+2]; /* add up alpha weights */ 5203fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[j]+=pixels[j+2]; 5204fb12237dd6e4d4d8b92d879661153062eeca0572cristy } 52055f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony } 5206fb12237dd6e4d4d8b92d879661153062eeca0572cristy if ((x-x_offset) >= 0.75) 5207fb12237dd6e4d4d8b92d879661153062eeca0572cristy { 5208fb12237dd6e4d4d8b92d879661153062eeca0572cristy alpha[0]=alpha[1]; /* take bottom row blend */ 5209fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[0]=pixels[1]; 5210fb12237dd6e4d4d8b92d879661153062eeca0572cristy } 5211fb12237dd6e4d4d8b92d879661153062eeca0572cristy else 5212fb12237dd6e4d4d8b92d879661153062eeca0572cristy if ((x-x_offset) > 0.25) 5213fb12237dd6e4d4d8b92d879661153062eeca0572cristy { 5214fb12237dd6e4d4d8b92d879661153062eeca0572cristy gamma*=2.0; /* blend both rows */ 5215fb12237dd6e4d4d8b92d879661153062eeca0572cristy alpha[0]+=alpha[1]; /* add up alpha weights */ 5216fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[0]+=pixels[1]; 5217fb12237dd6e4d4d8b92d879661153062eeca0572cristy } 52187750effcebd739b5cdea24dcda588d2d8d1d8732dirk if (channel != AlphaPixelChannel) 521958ee5018960b42b80b54398eacabe9ae5da89149cristy gamma=PerceptibleReciprocal(alpha[0]); /* (color) 1/alpha_weights */ 52205f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony else 522158ee5018960b42b80b54398eacabe9ae5da89149cristy gamma=PerceptibleReciprocal(gamma); /* (alpha) 1/number_of_pixels */ 52225f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony SetPixelChannel(destination,channel,ClampToQuantum(gamma*pixels[0]), 5223fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel); 52245f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony } 52255f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony break; 52265f78bca6fa8560aadf0ba215d657bf7dd00f0646anthony } 5227cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony case CatromInterpolatePixel: 52285c4e2586d27d4299a742d170d41105de1689aa46cristy { 5229a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy double 5230380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy cx[4], 5231380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy cy[4]; 52325c4e2586d27d4299a742d170d41105de1689aa46cristy 52335c4e2586d27d4299a742d170d41105de1689aa46cristy p=GetCacheViewVirtualPixels(source_view,x_offset-1,y_offset-1,4,4, 52345c4e2586d27d4299a742d170d41105de1689aa46cristy exception); 52355c4e2586d27d4299a742d170d41105de1689aa46cristy if (p == (const Quantum *) NULL) 52365c4e2586d27d4299a742d170d41105de1689aa46cristy { 52375c4e2586d27d4299a742d170d41105de1689aa46cristy status=MagickFalse; 52385c4e2586d27d4299a742d170d41105de1689aa46cristy break; 52395c4e2586d27d4299a742d170d41105de1689aa46cristy } 524050e64b85215ce366ca50af1ba16326c784221f92cristy for (i=0; i < (ssize_t) GetPixelChannels(source); i++) 52415c4e2586d27d4299a742d170d41105de1689aa46cristy { 52425c4e2586d27d4299a742d170d41105de1689aa46cristy register ssize_t 52435c4e2586d27d4299a742d170d41105de1689aa46cristy j; 52445c4e2586d27d4299a742d170d41105de1689aa46cristy 52455a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelChannel channel=GetPixelChannelChannel(source,i); 52465a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelTrait traits=GetPixelChannelTraits(source,channel); 52475a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelTrait destination_traits=GetPixelChannelTraits(destination, 52485a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy channel); 52495c4e2586d27d4299a742d170d41105de1689aa46cristy if ((traits == UndefinedPixelTrait) || 52505c4e2586d27d4299a742d170d41105de1689aa46cristy (destination_traits == UndefinedPixelTrait)) 52515c4e2586d27d4299a742d170d41105de1689aa46cristy continue; 52525c4e2586d27d4299a742d170d41105de1689aa46cristy if ((traits & BlendPixelTrait) == 0) 52535c4e2586d27d4299a742d170d41105de1689aa46cristy for (j=0; j < 16; j++) 52545c4e2586d27d4299a742d170d41105de1689aa46cristy { 52555c4e2586d27d4299a742d170d41105de1689aa46cristy alpha[j]=1.0; 5256a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixels[j]=(double) p[j*GetPixelChannels(source)+i]; 52575c4e2586d27d4299a742d170d41105de1689aa46cristy } 52585c4e2586d27d4299a742d170d41105de1689aa46cristy else 52595c4e2586d27d4299a742d170d41105de1689aa46cristy for (j=0; j < 16; j++) 52605c4e2586d27d4299a742d170d41105de1689aa46cristy { 52615c4e2586d27d4299a742d170d41105de1689aa46cristy alpha[j]=QuantumScale*GetPixelAlpha(source,p+j* 52625c4e2586d27d4299a742d170d41105de1689aa46cristy GetPixelChannels(source)); 52635c4e2586d27d4299a742d170d41105de1689aa46cristy pixels[j]=alpha[j]*p[j*GetPixelChannels(source)+i]; 52645c4e2586d27d4299a742d170d41105de1689aa46cristy } 5265a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy CatromWeights((double) (x-x_offset),&cx); 5266a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy CatromWeights((double) (y-y_offset),&cy); 5267a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy gamma=((traits & BlendPixelTrait) ? (double) (1.0) : 52683e3ec3afbb0782697f201cbe30a56794c10dc7efcristy PerceptibleReciprocal(cy[0]*(cx[0]*alpha[0]+cx[1]*alpha[1]+cx[2]* 5269d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas alpha[2]+cx[3]*alpha[3])+cy[1]*(cx[0]*alpha[4]+cx[1]*alpha[5]+cx[2]* 5270d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas alpha[6]+cx[3]*alpha[7])+cy[2]*(cx[0]*alpha[8]+cx[1]*alpha[9]+cx[2]* 5271d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas alpha[10]+cx[3]*alpha[11])+cy[3]*(cx[0]*alpha[12]+cx[1]*alpha[13]+ 5272d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas cx[2]*alpha[14]+cx[3]*alpha[15]))); 5273380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy SetPixelChannel(destination,channel,ClampToQuantum(gamma*(cy[0]*(cx[0]* 5274380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy pixels[0]+cx[1]*pixels[1]+cx[2]*pixels[2]+cx[3]*pixels[3])+cy[1]* 5275380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy (cx[0]*pixels[4]+cx[1]*pixels[5]+cx[2]*pixels[6]+cx[3]*pixels[7])+ 5276380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy cy[2]*(cx[0]*pixels[8]+cx[1]*pixels[9]+cx[2]*pixels[10]+cx[3]* 5277d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[11])+cy[3]*(cx[0]*pixels[12]+cx[1]*pixels[13]+cx[2]* 5278d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[14]+cx[3]*pixels[15]))),pixel); 52795c4e2586d27d4299a742d170d41105de1689aa46cristy } 52805c4e2586d27d4299a742d170d41105de1689aa46cristy break; 52815c4e2586d27d4299a742d170d41105de1689aa46cristy } 52825c4e2586d27d4299a742d170d41105de1689aa46cristy case IntegerInterpolatePixel: 52835c4e2586d27d4299a742d170d41105de1689aa46cristy { 52845c4e2586d27d4299a742d170d41105de1689aa46cristy p=GetCacheViewVirtualPixels(source_view,x_offset,y_offset,1,1,exception); 52855c4e2586d27d4299a742d170d41105de1689aa46cristy if (p == (const Quantum *) NULL) 52865c4e2586d27d4299a742d170d41105de1689aa46cristy { 52875c4e2586d27d4299a742d170d41105de1689aa46cristy status=MagickFalse; 52885c4e2586d27d4299a742d170d41105de1689aa46cristy break; 52895c4e2586d27d4299a742d170d41105de1689aa46cristy } 529050e64b85215ce366ca50af1ba16326c784221f92cristy for (i=0; i < (ssize_t) GetPixelChannels(source); i++) 52915c4e2586d27d4299a742d170d41105de1689aa46cristy { 52925a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelChannel channel=GetPixelChannelChannel(source,i); 52935a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelTrait traits=GetPixelChannelTraits(source,channel); 52945a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelTrait destination_traits=GetPixelChannelTraits(destination, 52955a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy channel); 52965c4e2586d27d4299a742d170d41105de1689aa46cristy if ((traits == UndefinedPixelTrait) || 52975c4e2586d27d4299a742d170d41105de1689aa46cristy (destination_traits == UndefinedPixelTrait)) 52985c4e2586d27d4299a742d170d41105de1689aa46cristy continue; 52994a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy SetPixelChannel(destination,channel,p[i],pixel); 53005c4e2586d27d4299a742d170d41105de1689aa46cristy } 53015c4e2586d27d4299a742d170d41105de1689aa46cristy break; 53025c4e2586d27d4299a742d170d41105de1689aa46cristy } 5303cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony case NearestInterpolatePixel: 53045c4e2586d27d4299a742d170d41105de1689aa46cristy { 5305cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony x_offset=(ssize_t) floor(x+0.5); 5306cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony y_offset=(ssize_t) floor(y+0.5); 5307cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony p=GetCacheViewVirtualPixels(source_view,x_offset,y_offset,1,1,exception); 53085c4e2586d27d4299a742d170d41105de1689aa46cristy if (p == (const Quantum *) NULL) 53095c4e2586d27d4299a742d170d41105de1689aa46cristy { 53105c4e2586d27d4299a742d170d41105de1689aa46cristy status=MagickFalse; 53115c4e2586d27d4299a742d170d41105de1689aa46cristy break; 53125c4e2586d27d4299a742d170d41105de1689aa46cristy } 531350e64b85215ce366ca50af1ba16326c784221f92cristy for (i=0; i < (ssize_t) GetPixelChannels(source); i++) 53145c4e2586d27d4299a742d170d41105de1689aa46cristy { 53155a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelChannel channel=GetPixelChannelChannel(source,i); 53165a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelTrait traits=GetPixelChannelTraits(source,channel); 53175a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelTrait destination_traits=GetPixelChannelTraits(destination, 53185a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy channel); 53195c4e2586d27d4299a742d170d41105de1689aa46cristy if ((traits == UndefinedPixelTrait) || 53205c4e2586d27d4299a742d170d41105de1689aa46cristy (destination_traits == UndefinedPixelTrait)) 53215c4e2586d27d4299a742d170d41105de1689aa46cristy continue; 53224a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy SetPixelChannel(destination,channel,p[i],pixel); 53235c4e2586d27d4299a742d170d41105de1689aa46cristy } 53245c4e2586d27d4299a742d170d41105de1689aa46cristy break; 53255c4e2586d27d4299a742d170d41105de1689aa46cristy } 53265c4e2586d27d4299a742d170d41105de1689aa46cristy case MeshInterpolatePixel: 53275c4e2586d27d4299a742d170d41105de1689aa46cristy { 53285c4e2586d27d4299a742d170d41105de1689aa46cristy p=GetCacheViewVirtualPixels(source_view,x_offset,y_offset,2,2,exception); 53295c4e2586d27d4299a742d170d41105de1689aa46cristy if (p == (const Quantum *) NULL) 53305c4e2586d27d4299a742d170d41105de1689aa46cristy { 53315c4e2586d27d4299a742d170d41105de1689aa46cristy status=MagickFalse; 53325c4e2586d27d4299a742d170d41105de1689aa46cristy break; 53335c4e2586d27d4299a742d170d41105de1689aa46cristy } 533450e64b85215ce366ca50af1ba16326c784221f92cristy for (i=0; i < (ssize_t) GetPixelChannels(source); i++) 53355c4e2586d27d4299a742d170d41105de1689aa46cristy { 53365c4e2586d27d4299a742d170d41105de1689aa46cristy PointInfo 53375c4e2586d27d4299a742d170d41105de1689aa46cristy delta, 53385c4e2586d27d4299a742d170d41105de1689aa46cristy luminance; 53395c4e2586d27d4299a742d170d41105de1689aa46cristy 53405a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelChannel channel=GetPixelChannelChannel(source,i); 53415a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelTrait traits=GetPixelChannelTraits(source,channel); 53425a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelTrait destination_traits=GetPixelChannelTraits(destination, 53435a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy channel); 53445c4e2586d27d4299a742d170d41105de1689aa46cristy if ((traits == UndefinedPixelTrait) || 53455c4e2586d27d4299a742d170d41105de1689aa46cristy (destination_traits == UndefinedPixelTrait)) 53465c4e2586d27d4299a742d170d41105de1689aa46cristy continue; 5347a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixels[0]=(double) p[i]; 5348a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixels[1]=(double) p[GetPixelChannels(source)+i]; 5349a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixels[2]=(double) p[2*GetPixelChannels(source)+i]; 5350a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixels[3]=(double) p[3*GetPixelChannels(source)+i]; 53511861c90c5c8c4ceb56885dd86377412aae0f4526cristy if ((traits & BlendPixelTrait) == 0) 53521861c90c5c8c4ceb56885dd86377412aae0f4526cristy { 53531861c90c5c8c4ceb56885dd86377412aae0f4526cristy alpha[0]=1.0; 53541861c90c5c8c4ceb56885dd86377412aae0f4526cristy alpha[1]=1.0; 53551861c90c5c8c4ceb56885dd86377412aae0f4526cristy alpha[2]=1.0; 53561861c90c5c8c4ceb56885dd86377412aae0f4526cristy alpha[3]=1.0; 53571861c90c5c8c4ceb56885dd86377412aae0f4526cristy } 53581861c90c5c8c4ceb56885dd86377412aae0f4526cristy else 53591861c90c5c8c4ceb56885dd86377412aae0f4526cristy { 53601861c90c5c8c4ceb56885dd86377412aae0f4526cristy alpha[0]=QuantumScale*GetPixelAlpha(source,p); 53611861c90c5c8c4ceb56885dd86377412aae0f4526cristy alpha[1]=QuantumScale*GetPixelAlpha(source,p+ 53621861c90c5c8c4ceb56885dd86377412aae0f4526cristy GetPixelChannels(source)); 53631861c90c5c8c4ceb56885dd86377412aae0f4526cristy alpha[2]=QuantumScale*GetPixelAlpha(source,p+2* 53641861c90c5c8c4ceb56885dd86377412aae0f4526cristy GetPixelChannels(source)); 53651861c90c5c8c4ceb56885dd86377412aae0f4526cristy alpha[3]=QuantumScale*GetPixelAlpha(source,p+3* 53661861c90c5c8c4ceb56885dd86377412aae0f4526cristy GetPixelChannels(source)); 53671861c90c5c8c4ceb56885dd86377412aae0f4526cristy } 53681861c90c5c8c4ceb56885dd86377412aae0f4526cristy delta.x=x-x_offset; 53691861c90c5c8c4ceb56885dd86377412aae0f4526cristy delta.y=y-y_offset; 5370ebfaacf0542df42a5beaa9b81a017992e838df70cristy luminance.x=fabs((double) (GetPixelLuma(source,p)- 5371ebfaacf0542df42a5beaa9b81a017992e838df70cristy GetPixelLuma(source,p+3*GetPixelChannels(source)))); 5372ebfaacf0542df42a5beaa9b81a017992e838df70cristy luminance.y=fabs((double) (GetPixelLuma(source,p+ 5373ebfaacf0542df42a5beaa9b81a017992e838df70cristy GetPixelChannels(source))-GetPixelLuma(source,p+2* 5374fb12237dd6e4d4d8b92d879661153062eeca0572cristy GetPixelChannels(source)))); 5375cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony if (luminance.x < luminance.y) 53761861c90c5c8c4ceb56885dd86377412aae0f4526cristy { 53771861c90c5c8c4ceb56885dd86377412aae0f4526cristy /* 53781861c90c5c8c4ceb56885dd86377412aae0f4526cristy Diagonal 0-3 NW-SE. 53791861c90c5c8c4ceb56885dd86377412aae0f4526cristy */ 53801861c90c5c8c4ceb56885dd86377412aae0f4526cristy if (delta.x <= delta.y) 53811861c90c5c8c4ceb56885dd86377412aae0f4526cristy { 53821861c90c5c8c4ceb56885dd86377412aae0f4526cristy /* 53831861c90c5c8c4ceb56885dd86377412aae0f4526cristy Bottom-left triangle (pixel: 2, diagonal: 0-3). 53841861c90c5c8c4ceb56885dd86377412aae0f4526cristy */ 53851861c90c5c8c4ceb56885dd86377412aae0f4526cristy delta.y=1.0-delta.y; 53861861c90c5c8c4ceb56885dd86377412aae0f4526cristy gamma=MeshInterpolate(&delta,alpha[2],alpha[3],alpha[0]); 53873e3ec3afbb0782697f201cbe30a56794c10dc7efcristy gamma=PerceptibleReciprocal(gamma); 53884a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy SetPixelChannel(destination,channel,ClampToQuantum(gamma* 53894a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy MeshInterpolate(&delta,pixels[2],pixels[3],pixels[0])),pixel); 53901861c90c5c8c4ceb56885dd86377412aae0f4526cristy } 53911861c90c5c8c4ceb56885dd86377412aae0f4526cristy else 53921861c90c5c8c4ceb56885dd86377412aae0f4526cristy { 53931861c90c5c8c4ceb56885dd86377412aae0f4526cristy /* 53941861c90c5c8c4ceb56885dd86377412aae0f4526cristy Top-right triangle (pixel: 1, diagonal: 0-3). 53951861c90c5c8c4ceb56885dd86377412aae0f4526cristy */ 53961861c90c5c8c4ceb56885dd86377412aae0f4526cristy delta.x=1.0-delta.x; 53971861c90c5c8c4ceb56885dd86377412aae0f4526cristy gamma=MeshInterpolate(&delta,alpha[1],alpha[0],alpha[3]); 53983e3ec3afbb0782697f201cbe30a56794c10dc7efcristy gamma=PerceptibleReciprocal(gamma); 53994a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy SetPixelChannel(destination,channel,ClampToQuantum(gamma* 54004a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy MeshInterpolate(&delta,pixels[1],pixels[0],pixels[3])),pixel); 54011861c90c5c8c4ceb56885dd86377412aae0f4526cristy } 54021861c90c5c8c4ceb56885dd86377412aae0f4526cristy } 54031861c90c5c8c4ceb56885dd86377412aae0f4526cristy else 54041861c90c5c8c4ceb56885dd86377412aae0f4526cristy { 54051861c90c5c8c4ceb56885dd86377412aae0f4526cristy /* 54061861c90c5c8c4ceb56885dd86377412aae0f4526cristy Diagonal 1-2 NE-SW. 54071861c90c5c8c4ceb56885dd86377412aae0f4526cristy */ 54081861c90c5c8c4ceb56885dd86377412aae0f4526cristy if (delta.x <= (1.0-delta.y)) 54091861c90c5c8c4ceb56885dd86377412aae0f4526cristy { 54101861c90c5c8c4ceb56885dd86377412aae0f4526cristy /* 54111861c90c5c8c4ceb56885dd86377412aae0f4526cristy Top-left triangle (pixel: 0, diagonal: 1-2). 54121861c90c5c8c4ceb56885dd86377412aae0f4526cristy */ 54131861c90c5c8c4ceb56885dd86377412aae0f4526cristy gamma=MeshInterpolate(&delta,alpha[0],alpha[1],alpha[2]); 54143e3ec3afbb0782697f201cbe30a56794c10dc7efcristy gamma=PerceptibleReciprocal(gamma); 54154a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy SetPixelChannel(destination,channel,ClampToQuantum(gamma* 54164a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy MeshInterpolate(&delta,pixels[0],pixels[1],pixels[2])),pixel); 54171861c90c5c8c4ceb56885dd86377412aae0f4526cristy } 54181861c90c5c8c4ceb56885dd86377412aae0f4526cristy else 54191861c90c5c8c4ceb56885dd86377412aae0f4526cristy { 54201861c90c5c8c4ceb56885dd86377412aae0f4526cristy /* 54211861c90c5c8c4ceb56885dd86377412aae0f4526cristy Bottom-right triangle (pixel: 3, diagonal: 1-2). 54221861c90c5c8c4ceb56885dd86377412aae0f4526cristy */ 54231861c90c5c8c4ceb56885dd86377412aae0f4526cristy delta.x=1.0-delta.x; 54241861c90c5c8c4ceb56885dd86377412aae0f4526cristy delta.y=1.0-delta.y; 54251861c90c5c8c4ceb56885dd86377412aae0f4526cristy gamma=MeshInterpolate(&delta,alpha[3],alpha[2],alpha[1]); 54263e3ec3afbb0782697f201cbe30a56794c10dc7efcristy gamma=PerceptibleReciprocal(gamma); 54274a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy SetPixelChannel(destination,channel,ClampToQuantum(gamma* 54284a7ae69b38a5d14623347aa9a820ce6bdd6a9b43cristy MeshInterpolate(&delta,pixels[3],pixels[2],pixels[1])),pixel); 54291861c90c5c8c4ceb56885dd86377412aae0f4526cristy } 54301861c90c5c8c4ceb56885dd86377412aae0f4526cristy } 54315c4e2586d27d4299a742d170d41105de1689aa46cristy } 54325c4e2586d27d4299a742d170d41105de1689aa46cristy break; 54335c4e2586d27d4299a742d170d41105de1689aa46cristy } 54345c4e2586d27d4299a742d170d41105de1689aa46cristy case SplineInterpolatePixel: 54355c4e2586d27d4299a742d170d41105de1689aa46cristy { 5436a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy double 5437d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas cx[4], 5438d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas cy[4]; 5439d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas 54405c4e2586d27d4299a742d170d41105de1689aa46cristy p=GetCacheViewVirtualPixels(source_view,x_offset-1,y_offset-1,4,4, 54415c4e2586d27d4299a742d170d41105de1689aa46cristy exception); 54425c4e2586d27d4299a742d170d41105de1689aa46cristy if (p == (const Quantum *) NULL) 54435c4e2586d27d4299a742d170d41105de1689aa46cristy { 54445c4e2586d27d4299a742d170d41105de1689aa46cristy status=MagickFalse; 54455c4e2586d27d4299a742d170d41105de1689aa46cristy break; 54465c4e2586d27d4299a742d170d41105de1689aa46cristy } 544750e64b85215ce366ca50af1ba16326c784221f92cristy for (i=0; i < (ssize_t) GetPixelChannels(source); i++) 54485c4e2586d27d4299a742d170d41105de1689aa46cristy { 54495c4e2586d27d4299a742d170d41105de1689aa46cristy register ssize_t 54505c4e2586d27d4299a742d170d41105de1689aa46cristy j; 54515c4e2586d27d4299a742d170d41105de1689aa46cristy 54525a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelChannel channel=GetPixelChannelChannel(source,i); 54535a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelTrait traits=GetPixelChannelTraits(source,channel); 54545a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelTrait destination_traits=GetPixelChannelTraits(destination, 54555a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy channel); 54565c4e2586d27d4299a742d170d41105de1689aa46cristy if ((traits == UndefinedPixelTrait) || 54575c4e2586d27d4299a742d170d41105de1689aa46cristy (destination_traits == UndefinedPixelTrait)) 54585c4e2586d27d4299a742d170d41105de1689aa46cristy continue; 54595c4e2586d27d4299a742d170d41105de1689aa46cristy if ((traits & BlendPixelTrait) == 0) 54605c4e2586d27d4299a742d170d41105de1689aa46cristy for (j=0; j < 16; j++) 54615c4e2586d27d4299a742d170d41105de1689aa46cristy { 54625c4e2586d27d4299a742d170d41105de1689aa46cristy alpha[j]=1.0; 5463a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixels[j]=(double) p[j*GetPixelChannels(source)+i]; 54645c4e2586d27d4299a742d170d41105de1689aa46cristy } 54655c4e2586d27d4299a742d170d41105de1689aa46cristy else 54665c4e2586d27d4299a742d170d41105de1689aa46cristy for (j=0; j < 16; j++) 54675c4e2586d27d4299a742d170d41105de1689aa46cristy { 54685c4e2586d27d4299a742d170d41105de1689aa46cristy alpha[j]=QuantumScale*GetPixelAlpha(source,p+j* 54695c4e2586d27d4299a742d170d41105de1689aa46cristy GetPixelChannels(source)); 54705c4e2586d27d4299a742d170d41105de1689aa46cristy pixels[j]=alpha[j]*p[j*GetPixelChannels(source)+i]; 54715c4e2586d27d4299a742d170d41105de1689aa46cristy } 5472a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy SplineWeights((double) (x-x_offset),&cx); 5473a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy SplineWeights((double) (y-y_offset),&cy); 5474a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy gamma=((traits & BlendPixelTrait) ? (double) (1.0) : 54753e3ec3afbb0782697f201cbe30a56794c10dc7efcristy PerceptibleReciprocal(cy[0]*(cx[0]*alpha[0]+cx[1]*alpha[1]+cx[2]* 5476d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas alpha[2]+cx[3]*alpha[3])+cy[1]*(cx[0]*alpha[4]+cx[1]*alpha[5]+cx[2]* 5477d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas alpha[6]+cx[3]*alpha[7])+cy[2]*(cx[0]*alpha[8]+cx[1]*alpha[9]+cx[2]* 5478d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas alpha[10]+cx[3]*alpha[11])+cy[3]*(cx[0]*alpha[12]+cx[1]*alpha[13]+ 5479d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas cx[2]*alpha[14]+cx[3]*alpha[15]))); 5480d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas SetPixelChannel(destination,channel,ClampToQuantum(gamma*(cy[0]*(cx[0]* 5481d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[0]+cx[1]*pixels[1]+cx[2]*pixels[2]+cx[3]*pixels[3])+cy[1]* 5482d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas (cx[0]*pixels[4]+cx[1]*pixels[5]+cx[2]*pixels[6]+cx[3]*pixels[7])+ 5483d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas cy[2]*(cx[0]*pixels[8]+cx[1]*pixels[9]+cx[2]*pixels[10]+cx[3]* 5484d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[11])+cy[3]*(cx[0]*pixels[12]+cx[1]*pixels[13]+cx[2]* 5485d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas pixels[14]+cx[3]*pixels[15]))),pixel); 54865c4e2586d27d4299a742d170d41105de1689aa46cristy } 54875c4e2586d27d4299a742d170d41105de1689aa46cristy break; 54885c4e2586d27d4299a742d170d41105de1689aa46cristy } 54895c4e2586d27d4299a742d170d41105de1689aa46cristy } 54905c4e2586d27d4299a742d170d41105de1689aa46cristy return(status); 54915c4e2586d27d4299a742d170d41105de1689aa46cristy} 54925c4e2586d27d4299a742d170d41105de1689aa46cristy 54935c4e2586d27d4299a742d170d41105de1689aa46cristy/* 54945c4e2586d27d4299a742d170d41105de1689aa46cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 54955c4e2586d27d4299a742d170d41105de1689aa46cristy% % 54965c4e2586d27d4299a742d170d41105de1689aa46cristy% % 54975c4e2586d27d4299a742d170d41105de1689aa46cristy% % 54989075cdb062fda00666ab37b0ba7df4b8cc2e8eaccristy% I n t e r p o l a t e P i x e l I n f o % 5499d76c51ed30cf4084f4434ba08925d16001d1e340cristy% % 5500d76c51ed30cf4084f4434ba08925d16001d1e340cristy% % 5501d76c51ed30cf4084f4434ba08925d16001d1e340cristy% % 5502d76c51ed30cf4084f4434ba08925d16001d1e340cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5503d76c51ed30cf4084f4434ba08925d16001d1e340cristy% 5504884f600898ca6935a7981b4d56bf3d2c4ec17011cristy% InterpolatePixelInfo() applies a pixel interpolation method between a 5505884f600898ca6935a7981b4d56bf3d2c4ec17011cristy% floating point coordinate and the pixels surrounding that coordinate. No 5506884f600898ca6935a7981b4d56bf3d2c4ec17011cristy% pixel area resampling, or scaling of the result is performed. 5507d76c51ed30cf4084f4434ba08925d16001d1e340cristy% 5508cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony% Interpolation is restricted to just RGBKA channels. 5509cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony% 55104c08aed51c5899665ade97263692328eea4af106cristy% The format of the InterpolatePixelInfo method is: 5511d76c51ed30cf4084f4434ba08925d16001d1e340cristy% 55124c08aed51c5899665ade97263692328eea4af106cristy% MagickBooleanType InterpolatePixelInfo(const Image *image, 55135c4e2586d27d4299a742d170d41105de1689aa46cristy% const CacheView *image_view,const PixelInterpolateMethod method, 55144c08aed51c5899665ade97263692328eea4af106cristy% const double x,const double y,PixelInfo *pixel, 5515d76c51ed30cf4084f4434ba08925d16001d1e340cristy% ExceptionInfo *exception) 5516d76c51ed30cf4084f4434ba08925d16001d1e340cristy% 5517d76c51ed30cf4084f4434ba08925d16001d1e340cristy% A description of each parameter follows: 5518d76c51ed30cf4084f4434ba08925d16001d1e340cristy% 5519d76c51ed30cf4084f4434ba08925d16001d1e340cristy% o image: the image. 5520d76c51ed30cf4084f4434ba08925d16001d1e340cristy% 5521d76c51ed30cf4084f4434ba08925d16001d1e340cristy% o image_view: the image view. 5522d76c51ed30cf4084f4434ba08925d16001d1e340cristy% 5523d76c51ed30cf4084f4434ba08925d16001d1e340cristy% o method: the pixel color interpolation method. 5524d76c51ed30cf4084f4434ba08925d16001d1e340cristy% 5525d76c51ed30cf4084f4434ba08925d16001d1e340cristy% o x,y: A double representing the current (x,y) position of the pixel. 5526d76c51ed30cf4084f4434ba08925d16001d1e340cristy% 5527d76c51ed30cf4084f4434ba08925d16001d1e340cristy% o pixel: return the interpolated pixel here. 5528d76c51ed30cf4084f4434ba08925d16001d1e340cristy% 5529d76c51ed30cf4084f4434ba08925d16001d1e340cristy% o exception: return any errors or warnings in this structure. 5530d76c51ed30cf4084f4434ba08925d16001d1e340cristy% 5531d76c51ed30cf4084f4434ba08925d16001d1e340cristy*/ 5532d76c51ed30cf4084f4434ba08925d16001d1e340cristy 55334c08aed51c5899665ade97263692328eea4af106cristystatic inline void AlphaBlendPixelInfo(const Image *image, 5534a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy const Quantum *pixel,PixelInfo *pixel_info,double *alpha) 5535d76c51ed30cf4084f4434ba08925d16001d1e340cristy{ 553617f11b056210f082a6d0e54ac5d68e6d72fa76b2cristy if (image->alpha_trait == UndefinedPixelTrait) 5537241310d359ef6893f4d0c1e43eeb39f34991fd2acristy { 5538241310d359ef6893f4d0c1e43eeb39f34991fd2acristy *alpha=1.0; 5539a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixel_info->red=(double) GetPixelRed(image,pixel); 5540a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixel_info->green=(double) GetPixelGreen(image,pixel); 5541a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixel_info->blue=(double) GetPixelBlue(image,pixel); 55424c08aed51c5899665ade97263692328eea4af106cristy pixel_info->black=0.0; 55434c08aed51c5899665ade97263692328eea4af106cristy if (image->colorspace == CMYKColorspace) 5544a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixel_info->black=(double) GetPixelBlack(image,pixel); 5545a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixel_info->alpha=(double) GetPixelAlpha(image,pixel); 5546241310d359ef6893f4d0c1e43eeb39f34991fd2acristy return; 5547241310d359ef6893f4d0c1e43eeb39f34991fd2acristy } 55484c08aed51c5899665ade97263692328eea4af106cristy *alpha=QuantumScale*GetPixelAlpha(image,pixel); 55494c08aed51c5899665ade97263692328eea4af106cristy pixel_info->red=(*alpha*GetPixelRed(image,pixel)); 55504c08aed51c5899665ade97263692328eea4af106cristy pixel_info->green=(*alpha*GetPixelGreen(image,pixel)); 55514c08aed51c5899665ade97263692328eea4af106cristy pixel_info->blue=(*alpha*GetPixelBlue(image,pixel)); 55524c08aed51c5899665ade97263692328eea4af106cristy pixel_info->black=0.0; 55534c08aed51c5899665ade97263692328eea4af106cristy if (image->colorspace == CMYKColorspace) 55544c08aed51c5899665ade97263692328eea4af106cristy pixel_info->black=(*alpha*GetPixelBlack(image,pixel)); 5555a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixel_info->alpha=(double) GetPixelAlpha(image,pixel); 5556d76c51ed30cf4084f4434ba08925d16001d1e340cristy} 5557d76c51ed30cf4084f4434ba08925d16001d1e340cristy 55584c08aed51c5899665ade97263692328eea4af106cristyMagickExport MagickBooleanType InterpolatePixelInfo(const Image *image, 555939fee9a56b751a52fb8b73d39836d48bc80cb35fdirk const CacheView_ *image_view,const PixelInterpolateMethod method, 55604c08aed51c5899665ade97263692328eea4af106cristy const double x,const double y,PixelInfo *pixel,ExceptionInfo *exception) 5561d76c51ed30cf4084f4434ba08925d16001d1e340cristy{ 5562d76c51ed30cf4084f4434ba08925d16001d1e340cristy MagickBooleanType 5563d76c51ed30cf4084f4434ba08925d16001d1e340cristy status; 5564d76c51ed30cf4084f4434ba08925d16001d1e340cristy 5565a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy double 556642587c577d5b808de94915f2388b88b05c3d43a3cristy alpha[16], 556742587c577d5b808de94915f2388b88b05c3d43a3cristy gamma; 556842587c577d5b808de94915f2388b88b05c3d43a3cristy 5569865d58d60e5fc755d47771eab37ce5159531629dcristy PixelInfo 5570865d58d60e5fc755d47771eab37ce5159531629dcristy pixels[16]; 5571865d58d60e5fc755d47771eab37ce5159531629dcristy 55724c08aed51c5899665ade97263692328eea4af106cristy register const Quantum 5573d76c51ed30cf4084f4434ba08925d16001d1e340cristy *p; 5574d76c51ed30cf4084f4434ba08925d16001d1e340cristy 557550e64b85215ce366ca50af1ba16326c784221f92cristy register ssize_t 5576d76c51ed30cf4084f4434ba08925d16001d1e340cristy i; 5577d76c51ed30cf4084f4434ba08925d16001d1e340cristy 557842587c577d5b808de94915f2388b88b05c3d43a3cristy ssize_t 557942587c577d5b808de94915f2388b88b05c3d43a3cristy x_offset, 558042587c577d5b808de94915f2388b88b05c3d43a3cristy y_offset; 558142587c577d5b808de94915f2388b88b05c3d43a3cristy 5582cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony PixelInterpolateMethod 5583cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony interpolate; 5584cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony 5585d76c51ed30cf4084f4434ba08925d16001d1e340cristy assert(image != (Image *) NULL); 5586e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(image->signature == MagickCoreSignature); 5587d76c51ed30cf4084f4434ba08925d16001d1e340cristy assert(image_view != (CacheView *) NULL); 5588d76c51ed30cf4084f4434ba08925d16001d1e340cristy status=MagickTrue; 558942587c577d5b808de94915f2388b88b05c3d43a3cristy x_offset=(ssize_t) floor(x); 559042587c577d5b808de94915f2388b88b05c3d43a3cristy y_offset=(ssize_t) floor(y); 5591cfc71b1f9ffb73f906c5b9c10b2d9b89f1c51fa9cristy interpolate=method; 5592cfc71b1f9ffb73f906c5b9c10b2d9b89f1c51fa9cristy if (interpolate == UndefinedInterpolatePixel) 5593cfc71b1f9ffb73f906c5b9c10b2d9b89f1c51fa9cristy interpolate=image->interpolate; 5594ccad00b02d1242dc1c039f9979337e00f69212e8dirk (void) ResetMagickMemory(&pixels,0,sizeof(pixels)); 5595cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony switch (interpolate) 5596d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 559758ee5018960b42b80b54398eacabe9ae5da89149cristy case AverageInterpolatePixel: /* nearest 4 neighbours */ 559858ee5018960b42b80b54398eacabe9ae5da89149cristy case Average9InterpolatePixel: /* nearest 9 neighbours */ 559958ee5018960b42b80b54398eacabe9ae5da89149cristy case Average16InterpolatePixel: /* nearest 16 neighbours */ 5600d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5601fb12237dd6e4d4d8b92d879661153062eeca0572cristy ssize_t 5602fb12237dd6e4d4d8b92d879661153062eeca0572cristy count; 5603cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony 5604fb12237dd6e4d4d8b92d879661153062eeca0572cristy count=2; /* size of the area to average - default nearest 4 */ 5605cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony if (interpolate == Average9InterpolatePixel) 5606cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 5607cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony count=3; 5608cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony x_offset=(ssize_t) (floor(x+0.5)-1); 5609cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony y_offset=(ssize_t) (floor(y+0.5)-1); 5610cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 5611cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony else if (interpolate == Average16InterpolatePixel) 5612cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 5613cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony count=4; 5614cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony x_offset--; 5615cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony y_offset--; 5616cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 5617021216a8b35ea91ef1f12713ed41da843bbaee7bcristy p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,(size_t) count, 5618021216a8b35ea91ef1f12713ed41da843bbaee7bcristy (size_t) count,exception); 56194c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 5620d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5621d76c51ed30cf4084f4434ba08925d16001d1e340cristy status=MagickFalse; 5622d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5623d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5624241310d359ef6893f4d0c1e43eeb39f34991fd2acristy pixel->red=0.0; 5625241310d359ef6893f4d0c1e43eeb39f34991fd2acristy pixel->green=0.0; 5626241310d359ef6893f4d0c1e43eeb39f34991fd2acristy pixel->blue=0.0; 56274c08aed51c5899665ade97263692328eea4af106cristy pixel->black=0.0; 5628865d58d60e5fc755d47771eab37ce5159531629dcristy pixel->alpha=0.0; 562958ee5018960b42b80b54398eacabe9ae5da89149cristy count*=count; /* number of pixels - square of size */ 563050e64b85215ce366ca50af1ba16326c784221f92cristy for (i=0; i < (ssize_t) count; i++) 5631cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 5632cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony AlphaBlendPixelInfo(image,p,pixels,alpha); 56333e3ec3afbb0782697f201cbe30a56794c10dc7efcristy gamma=PerceptibleReciprocal(alpha[0]); 5634fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->red+=gamma*pixels[0].red; 5635fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->green+=gamma*pixels[0].green; 5636fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->blue+=gamma*pixels[0].blue; 5637fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->black+=gamma*pixels[0].black; 5638fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->alpha+=pixels[0].alpha; 5639cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony p += GetPixelChannels(image); 5640cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 5641cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony gamma=1.0/count; /* average weighting of each pixel in area */ 5642fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->red*=gamma; 5643fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->green*=gamma; 5644fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->blue*=gamma; 5645fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->black*=gamma; 5646fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->alpha*=gamma; 5647cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony break; 5648cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 5649cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony case BackgroundInterpolatePixel: 5650cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 5651fb12237dd6e4d4d8b92d879661153062eeca0572cristy *pixel=image->background_color; /* Copy PixelInfo Structure */ 5652d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5653d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5654cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony case BilinearInterpolatePixel: 5655cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony default: 5656cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 5657cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony PointInfo 5658cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony delta, 5659cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony epsilon; 5660cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony 5661cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,2,2,exception); 5662cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony if (p == (const Quantum *) NULL) 5663cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 5664cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony status=MagickFalse; 5665cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony break; 5666cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 5667cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony for (i=0; i < 4L; i++) 5668cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony AlphaBlendPixelInfo(image,p+i*GetPixelChannels(image),pixels+i,alpha+i); 5669cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony delta.x=x-x_offset; 5670cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony delta.y=y-y_offset; 5671cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony epsilon.x=1.0-delta.x; 5672cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony epsilon.y=1.0-delta.y; 5673cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony gamma=((epsilon.y*(epsilon.x*alpha[0]+delta.x*alpha[1])+delta.y* 5674cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony (epsilon.x*alpha[2]+delta.x*alpha[3]))); 56753e3ec3afbb0782697f201cbe30a56794c10dc7efcristy gamma=PerceptibleReciprocal(gamma); 5676cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixel->red=gamma*(epsilon.y*(epsilon.x*pixels[0].red+delta.x* 5677cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[1].red)+delta.y*(epsilon.x*pixels[2].red+delta.x*pixels[3].red)); 5678cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixel->green=gamma*(epsilon.y*(epsilon.x*pixels[0].green+delta.x* 5679cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[1].green)+delta.y*(epsilon.x*pixels[2].green+delta.x* 5680cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[3].green)); 5681cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixel->blue=gamma*(epsilon.y*(epsilon.x*pixels[0].blue+delta.x* 5682cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[1].blue)+delta.y*(epsilon.x*pixels[2].blue+delta.x* 5683cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[3].blue)); 5684cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony if (image->colorspace == CMYKColorspace) 5685cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixel->black=gamma*(epsilon.y*(epsilon.x*pixels[0].black+delta.x* 5686cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[1].black)+delta.y*(epsilon.x*pixels[2].black+delta.x* 5687cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[3].black)); 5688cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony gamma=((epsilon.y*(epsilon.x+delta.x)+delta.y*(epsilon.x+delta.x))); 56893e3ec3afbb0782697f201cbe30a56794c10dc7efcristy gamma=PerceptibleReciprocal(gamma); 5690554f4e55b6a472298c8986827fedc07174890de6cristy pixel->alpha=gamma*(epsilon.y*(epsilon.x*pixels[0].alpha+delta.x* 5691cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[1].alpha)+delta.y*(epsilon.x*pixels[2].alpha+delta.x* 5692cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony pixels[3].alpha)); 5693cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony break; 5694cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 5695cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony case BlendInterpolatePixel: 5696cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 5697cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,2,2,exception); 5698cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony if (p == (const Quantum *) NULL) 5699cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony { 5700cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony status=MagickFalse; 5701cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony break; 5702cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 5703cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony for (i=0; i < 4L; i++) 5704e26356f969a4160ff16680cd348b928633caaaebcristy { 5705e26356f969a4160ff16680cd348b928633caaaebcristy GetPixelInfoPixel(image,p+i*GetPixelChannels(image),pixels+i); 5706cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony AlphaBlendPixelInfo(image,p+i*GetPixelChannels(image),pixels+i,alpha+i); 5707e26356f969a4160ff16680cd348b928633caaaebcristy } 5708fb12237dd6e4d4d8b92d879661153062eeca0572cristy gamma=1.0; /* number of pixels blended together (its variable) */ 5709fb12237dd6e4d4d8b92d879661153062eeca0572cristy for (i=0; i <= 1L; i++) 5710fb12237dd6e4d4d8b92d879661153062eeca0572cristy { 5711fb12237dd6e4d4d8b92d879661153062eeca0572cristy if ((y-y_offset) >= 0.75) 5712fb12237dd6e4d4d8b92d879661153062eeca0572cristy { 5713fb12237dd6e4d4d8b92d879661153062eeca0572cristy alpha[i]=alpha[i+2]; /* take right pixels */ 5714fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[i]=pixels[i+2]; 5715fb12237dd6e4d4d8b92d879661153062eeca0572cristy } 5716fb12237dd6e4d4d8b92d879661153062eeca0572cristy else 5717fb12237dd6e4d4d8b92d879661153062eeca0572cristy if ((y-y_offset) > 0.25) 5718fb12237dd6e4d4d8b92d879661153062eeca0572cristy { 5719fb12237dd6e4d4d8b92d879661153062eeca0572cristy gamma=2.0; /* blend both pixels in row */ 5720fb12237dd6e4d4d8b92d879661153062eeca0572cristy alpha[i]+=alpha[i+2]; /* add up alpha weights */ 5721fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[i].red+=pixels[i+2].red; 5722fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[i].green+=pixels[i+2].green; 5723fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[i].blue+=pixels[i+2].blue; 5724fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[i].black+=pixels[i+2].black; 5725fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[i].alpha+=pixels[i+2].alpha; 5726fb12237dd6e4d4d8b92d879661153062eeca0572cristy } 5727fb12237dd6e4d4d8b92d879661153062eeca0572cristy } 5728fb12237dd6e4d4d8b92d879661153062eeca0572cristy if ((x-x_offset) >= 0.75) 5729fb12237dd6e4d4d8b92d879661153062eeca0572cristy { 5730fb12237dd6e4d4d8b92d879661153062eeca0572cristy alpha[0]=alpha[1]; 5731fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[0]=pixels[1]; 5732fb12237dd6e4d4d8b92d879661153062eeca0572cristy } 5733fb12237dd6e4d4d8b92d879661153062eeca0572cristy else 5734fb12237dd6e4d4d8b92d879661153062eeca0572cristy if ((x-x_offset) > 0.25) 5735fb12237dd6e4d4d8b92d879661153062eeca0572cristy { 5736fb12237dd6e4d4d8b92d879661153062eeca0572cristy gamma*=2.0; /* blend both rows */ 573758ee5018960b42b80b54398eacabe9ae5da89149cristy alpha[0]+= alpha[1]; /* add up alpha weights */ 5738fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[0].red+=pixels[1].red; 5739fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[0].green+=pixels[1].green; 5740fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[0].blue+=pixels[1].blue; 5741fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[0].black+=pixels[1].black; 5742fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[0].alpha+=pixels[1].alpha; 5743fb12237dd6e4d4d8b92d879661153062eeca0572cristy } 5744fb12237dd6e4d4d8b92d879661153062eeca0572cristy gamma=1.0/gamma; 57453e3ec3afbb0782697f201cbe30a56794c10dc7efcristy alpha[0]=PerceptibleReciprocal(alpha[0]); 5746fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->red=alpha[0]*pixels[0].red; 5747fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->green=alpha[0]*pixels[0].green; /* divide by sum of alpha */ 5748fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->blue=alpha[0]*pixels[0].blue; 5749fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->black=alpha[0]*pixels[0].black; 5750fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->alpha=gamma*pixels[0].alpha; /* divide by number of pixels */ 5751cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony break; 5752cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony } 5753cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony case CatromInterpolatePixel: 5754d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5755a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy double 5756380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy cx[4], 5757380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy cy[4]; 5758d76c51ed30cf4084f4434ba08925d16001d1e340cristy 575942587c577d5b808de94915f2388b88b05c3d43a3cristy p=GetCacheViewVirtualPixels(image_view,x_offset-1,y_offset-1,4,4, 576042587c577d5b808de94915f2388b88b05c3d43a3cristy exception); 57614c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 5762d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5763d76c51ed30cf4084f4434ba08925d16001d1e340cristy status=MagickFalse; 5764d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5765d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5766cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony for (i=0; i < 16L; i++) 5767cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony AlphaBlendPixelInfo(image,p+i*GetPixelChannels(image),pixels+i,alpha+i); 5768a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy CatromWeights((double) (x-x_offset),&cx); 5769a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy CatromWeights((double) (y-y_offset),&cy); 5770fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->red=(cy[0]*(cx[0]*pixels[0].red+cx[1]*pixels[1].red+cx[2]* 5771fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[2].red+cx[3]*pixels[3].red)+cy[1]*(cx[0]*pixels[4].red+cx[1]* 5772fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[5].red+cx[2]*pixels[6].red+cx[3]*pixels[7].red)+cy[2]*(cx[0]* 5773fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[8].red+cx[1]*pixels[9].red+cx[2]*pixels[10].red+cx[3]* 5774fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[11].red)+cy[3]*(cx[0]*pixels[12].red+cx[1]*pixels[13].red+cx[2]* 5775fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[14].red+cx[3]*pixels[15].red)); 5776fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->green=(cy[0]*(cx[0]*pixels[0].green+cx[1]*pixels[1].green+cx[2]* 5777fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[2].green+cx[3]*pixels[3].green)+cy[1]*(cx[0]*pixels[4].green+ 5778fb12237dd6e4d4d8b92d879661153062eeca0572cristy cx[1]*pixels[5].green+cx[2]*pixels[6].green+cx[3]*pixels[7].green)+ 5779fb12237dd6e4d4d8b92d879661153062eeca0572cristy cy[2]*(cx[0]*pixels[8].green+cx[1]*pixels[9].green+cx[2]* 5780fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[10].green+cx[3]*pixels[11].green)+cy[3]*(cx[0]* 5781fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[12].green+cx[1]*pixels[13].green+cx[2]*pixels[14].green+cx[3]* 5782fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[15].green)); 5783fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->blue=(cy[0]*(cx[0]*pixels[0].blue+cx[1]*pixels[1].blue+cx[2]* 5784fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[2].blue+cx[3]*pixels[3].blue)+cy[1]*(cx[0]*pixels[4].blue+cx[1]* 5785fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[5].blue+cx[2]*pixels[6].blue+cx[3]*pixels[7].blue)+cy[2]*(cx[0]* 5786fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[8].blue+cx[1]*pixels[9].blue+cx[2]*pixels[10].blue+cx[3]* 5787fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[11].blue)+cy[3]*(cx[0]*pixels[12].blue+cx[1]*pixels[13].blue+ 5788fb12237dd6e4d4d8b92d879661153062eeca0572cristy cx[2]*pixels[14].blue+cx[3]*pixels[15].blue)); 5789380a11c98d7ffe5ffb65a2fd8c464f8227a19dcfcristy if (image->colorspace == CMYKColorspace) 5790fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->black=(cy[0]*(cx[0]*pixels[0].black+cx[1]*pixels[1].black+cx[2]* 5791fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[2].black+cx[3]*pixels[3].black)+cy[1]*(cx[0]*pixels[4].black+ 5792fb12237dd6e4d4d8b92d879661153062eeca0572cristy cx[1]*pixels[5].black+cx[2]*pixels[6].black+cx[3]*pixels[7].black)+ 5793fb12237dd6e4d4d8b92d879661153062eeca0572cristy cy[2]*(cx[0]*pixels[8].black+cx[1]*pixels[9].black+cx[2]* 5794fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[10].black+cx[3]*pixels[11].black)+cy[3]*(cx[0]* 5795fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[12].black+cx[1]*pixels[13].black+cx[2]*pixels[14].black+cx[3]* 5796fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[15].black)); 5797fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->alpha=(cy[0]*(cx[0]*pixels[0].alpha+cx[1]*pixels[1].alpha+cx[2]* 5798fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[2].alpha+cx[3]*pixels[3].alpha)+cy[1]*(cx[0]*pixels[4].alpha+ 5799fb12237dd6e4d4d8b92d879661153062eeca0572cristy cx[1]*pixels[5].alpha+cx[2]*pixels[6].alpha+cx[3]*pixels[7].alpha)+ 5800fb12237dd6e4d4d8b92d879661153062eeca0572cristy cy[2]*(cx[0]*pixels[8].alpha+cx[1]*pixels[9].alpha+cx[2]* 5801fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[10].alpha+cx[3]*pixels[11].alpha)+cy[3]*(cx[0]*pixels[12].alpha+ 5802fb12237dd6e4d4d8b92d879661153062eeca0572cristy cx[1]*pixels[13].alpha+cx[2]*pixels[14].alpha+cx[3]*pixels[15].alpha)); 5803d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5804d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5805d76c51ed30cf4084f4434ba08925d16001d1e340cristy case IntegerInterpolatePixel: 5806d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 580742587c577d5b808de94915f2388b88b05c3d43a3cristy p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,1,1,exception); 58084c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 5809d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5810d76c51ed30cf4084f4434ba08925d16001d1e340cristy status=MagickFalse; 5811d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5812d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5813803640d20a6a664315eddfff6f8531d0c5e0871dcristy GetPixelInfoPixel(image,p,pixel); 5814d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5815d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5816d76c51ed30cf4084f4434ba08925d16001d1e340cristy case MeshInterpolatePixel: 5817d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5818d76c51ed30cf4084f4434ba08925d16001d1e340cristy PointInfo 5819d76c51ed30cf4084f4434ba08925d16001d1e340cristy delta, 5820d76c51ed30cf4084f4434ba08925d16001d1e340cristy luminance; 5821d76c51ed30cf4084f4434ba08925d16001d1e340cristy 582294ea1636709395774d7118ef56162d211904cfd2cristy p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,2,2,exception); 58234c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 5824d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5825d76c51ed30cf4084f4434ba08925d16001d1e340cristy status=MagickFalse; 5826d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5827d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 582894ea1636709395774d7118ef56162d211904cfd2cristy delta.x=x-x_offset; 582994ea1636709395774d7118ef56162d211904cfd2cristy delta.y=y-y_offset; 5830ebfaacf0542df42a5beaa9b81a017992e838df70cristy luminance.x=GetPixelLuma(image,p)-(double) 5831ebfaacf0542df42a5beaa9b81a017992e838df70cristy GetPixelLuma(image,p+3*GetPixelChannels(image)); 5832ebfaacf0542df42a5beaa9b81a017992e838df70cristy luminance.y=GetPixelLuma(image,p+GetPixelChannels(image))-(double) 5833ebfaacf0542df42a5beaa9b81a017992e838df70cristy GetPixelLuma(image,p+2*GetPixelChannels(image)); 58345ce8df84afcfec6dc33ee61ac2014edb3871c455cristy AlphaBlendPixelInfo(image,p,pixels+0,alpha+0); 583528474bfbda5ee2d4da2eb79f299cf1f692770b99cristy AlphaBlendPixelInfo(image,p+GetPixelChannels(image),pixels+1,alpha+1); 5836ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+2*GetPixelChannels(image),pixels+2,alpha+2); 5837ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy AlphaBlendPixelInfo(image,p+3*GetPixelChannels(image),pixels+3,alpha+3); 5838d76c51ed30cf4084f4434ba08925d16001d1e340cristy if (fabs(luminance.x) < fabs(luminance.y)) 5839d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5840d76c51ed30cf4084f4434ba08925d16001d1e340cristy /* 5841d76c51ed30cf4084f4434ba08925d16001d1e340cristy Diagonal 0-3 NW-SE. 5842d76c51ed30cf4084f4434ba08925d16001d1e340cristy */ 5843d76c51ed30cf4084f4434ba08925d16001d1e340cristy if (delta.x <= delta.y) 5844d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5845d76c51ed30cf4084f4434ba08925d16001d1e340cristy /* 584694ea1636709395774d7118ef56162d211904cfd2cristy Bottom-left triangle (pixel: 2, diagonal: 0-3). 5847d76c51ed30cf4084f4434ba08925d16001d1e340cristy */ 5848d76c51ed30cf4084f4434ba08925d16001d1e340cristy delta.y=1.0-delta.y; 5849d76c51ed30cf4084f4434ba08925d16001d1e340cristy gamma=MeshInterpolate(&delta,alpha[2],alpha[3],alpha[0]); 58503e3ec3afbb0782697f201cbe30a56794c10dc7efcristy gamma=PerceptibleReciprocal(gamma); 5851d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->red=gamma*MeshInterpolate(&delta,pixels[2].red, 5852d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[3].red,pixels[0].red); 5853d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->green=gamma*MeshInterpolate(&delta,pixels[2].green, 5854d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[3].green,pixels[0].green); 5855d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->blue=gamma*MeshInterpolate(&delta,pixels[2].blue, 5856d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[3].blue,pixels[0].blue); 58575af738104f48677012746b82ba0daa0dc59bdbb5cristy if (image->colorspace == CMYKColorspace) 58584c08aed51c5899665ade97263692328eea4af106cristy pixel->black=gamma*MeshInterpolate(&delta,pixels[2].black, 58594c08aed51c5899665ade97263692328eea4af106cristy pixels[3].black,pixels[0].black); 586094ea1636709395774d7118ef56162d211904cfd2cristy gamma=MeshInterpolate(&delta,1.0,1.0,1.0); 5861865d58d60e5fc755d47771eab37ce5159531629dcristy pixel->alpha=gamma*MeshInterpolate(&delta,pixels[2].alpha, 5862865d58d60e5fc755d47771eab37ce5159531629dcristy pixels[3].alpha,pixels[0].alpha); 5863d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5864d76c51ed30cf4084f4434ba08925d16001d1e340cristy else 5865d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5866d76c51ed30cf4084f4434ba08925d16001d1e340cristy /* 586794ea1636709395774d7118ef56162d211904cfd2cristy Top-right triangle (pixel:1 , diagonal: 0-3). 5868d76c51ed30cf4084f4434ba08925d16001d1e340cristy */ 5869d76c51ed30cf4084f4434ba08925d16001d1e340cristy delta.x=1.0-delta.x; 5870d76c51ed30cf4084f4434ba08925d16001d1e340cristy gamma=MeshInterpolate(&delta,alpha[1],alpha[0],alpha[3]); 58713e3ec3afbb0782697f201cbe30a56794c10dc7efcristy gamma=PerceptibleReciprocal(gamma); 5872d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->red=gamma*MeshInterpolate(&delta,pixels[1].red, 5873d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[0].red,pixels[3].red); 5874d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->green=gamma*MeshInterpolate(&delta,pixels[1].green, 5875d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[0].green,pixels[3].green); 5876d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->blue=gamma*MeshInterpolate(&delta,pixels[1].blue, 5877d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[0].blue,pixels[3].blue); 58785af738104f48677012746b82ba0daa0dc59bdbb5cristy if (image->colorspace == CMYKColorspace) 58794c08aed51c5899665ade97263692328eea4af106cristy pixel->black=gamma*MeshInterpolate(&delta,pixels[1].black, 58804c08aed51c5899665ade97263692328eea4af106cristy pixels[0].black,pixels[3].black); 588194ea1636709395774d7118ef56162d211904cfd2cristy gamma=MeshInterpolate(&delta,1.0,1.0,1.0); 5882865d58d60e5fc755d47771eab37ce5159531629dcristy pixel->alpha=gamma*MeshInterpolate(&delta,pixels[1].alpha, 5883865d58d60e5fc755d47771eab37ce5159531629dcristy pixels[0].alpha,pixels[3].alpha); 5884d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5885d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5886d76c51ed30cf4084f4434ba08925d16001d1e340cristy else 5887d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5888d76c51ed30cf4084f4434ba08925d16001d1e340cristy /* 5889d76c51ed30cf4084f4434ba08925d16001d1e340cristy Diagonal 1-2 NE-SW. 5890d76c51ed30cf4084f4434ba08925d16001d1e340cristy */ 5891d76c51ed30cf4084f4434ba08925d16001d1e340cristy if (delta.x <= (1.0-delta.y)) 5892d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5893d76c51ed30cf4084f4434ba08925d16001d1e340cristy /* 589494ea1636709395774d7118ef56162d211904cfd2cristy Top-left triangle (pixel: 0, diagonal: 1-2). 5895d76c51ed30cf4084f4434ba08925d16001d1e340cristy */ 5896d76c51ed30cf4084f4434ba08925d16001d1e340cristy gamma=MeshInterpolate(&delta,alpha[0],alpha[1],alpha[2]); 58973e3ec3afbb0782697f201cbe30a56794c10dc7efcristy gamma=PerceptibleReciprocal(gamma); 5898d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->red=gamma*MeshInterpolate(&delta,pixels[0].red, 5899d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[1].red,pixels[2].red); 5900d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->green=gamma*MeshInterpolate(&delta,pixels[0].green, 5901d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[1].green,pixels[2].green); 5902d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->blue=gamma*MeshInterpolate(&delta,pixels[0].blue, 5903d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[1].blue,pixels[2].blue); 59045af738104f48677012746b82ba0daa0dc59bdbb5cristy if (image->colorspace == CMYKColorspace) 59054c08aed51c5899665ade97263692328eea4af106cristy pixel->black=gamma*MeshInterpolate(&delta,pixels[0].black, 59064c08aed51c5899665ade97263692328eea4af106cristy pixels[1].black,pixels[2].black); 590794ea1636709395774d7118ef56162d211904cfd2cristy gamma=MeshInterpolate(&delta,1.0,1.0,1.0); 5908865d58d60e5fc755d47771eab37ce5159531629dcristy pixel->alpha=gamma*MeshInterpolate(&delta,pixels[0].alpha, 5909865d58d60e5fc755d47771eab37ce5159531629dcristy pixels[1].alpha,pixels[2].alpha); 5910d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5911d76c51ed30cf4084f4434ba08925d16001d1e340cristy else 5912d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5913d76c51ed30cf4084f4434ba08925d16001d1e340cristy /* 5914d76c51ed30cf4084f4434ba08925d16001d1e340cristy Bottom-right triangle (pixel: 3, diagonal: 1-2). 5915d76c51ed30cf4084f4434ba08925d16001d1e340cristy */ 5916d76c51ed30cf4084f4434ba08925d16001d1e340cristy delta.x=1.0-delta.x; 5917d76c51ed30cf4084f4434ba08925d16001d1e340cristy delta.y=1.0-delta.y; 5918d76c51ed30cf4084f4434ba08925d16001d1e340cristy gamma=MeshInterpolate(&delta,alpha[3],alpha[2],alpha[1]); 59193e3ec3afbb0782697f201cbe30a56794c10dc7efcristy gamma=PerceptibleReciprocal(gamma); 5920d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->red=gamma*MeshInterpolate(&delta,pixels[3].red, 5921d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[2].red,pixels[1].red); 5922d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->green=gamma*MeshInterpolate(&delta,pixels[3].green, 5923d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[2].green,pixels[1].green); 5924d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixel->blue=gamma*MeshInterpolate(&delta,pixels[3].blue, 5925d76c51ed30cf4084f4434ba08925d16001d1e340cristy pixels[2].blue,pixels[1].blue); 59265af738104f48677012746b82ba0daa0dc59bdbb5cristy if (image->colorspace == CMYKColorspace) 59274c08aed51c5899665ade97263692328eea4af106cristy pixel->black=gamma*MeshInterpolate(&delta,pixels[3].black, 59284c08aed51c5899665ade97263692328eea4af106cristy pixels[2].black,pixels[1].black); 592994ea1636709395774d7118ef56162d211904cfd2cristy gamma=MeshInterpolate(&delta,1.0,1.0,1.0); 5930865d58d60e5fc755d47771eab37ce5159531629dcristy pixel->alpha=gamma*MeshInterpolate(&delta,pixels[3].alpha, 5931865d58d60e5fc755d47771eab37ce5159531629dcristy pixels[2].alpha,pixels[1].alpha); 5932d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5933d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5934d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5935d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5936cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony case NearestInterpolatePixel: 5937d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5938cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony x_offset=(ssize_t) floor(x+0.5); 5939cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony y_offset=(ssize_t) floor(y+0.5); 5940cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,1,1,exception); 59414c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 5942d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5943d76c51ed30cf4084f4434ba08925d16001d1e340cristy status=MagickFalse; 5944d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5945d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5946803640d20a6a664315eddfff6f8531d0c5e0871dcristy GetPixelInfoPixel(image,p,pixel); 5947d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5948d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5949d76c51ed30cf4084f4434ba08925d16001d1e340cristy case SplineInterpolatePixel: 5950d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5951a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy double 5952d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas cx[4], 5953d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas cy[4]; 5954d76c51ed30cf4084f4434ba08925d16001d1e340cristy 595542587c577d5b808de94915f2388b88b05c3d43a3cristy p=GetCacheViewVirtualPixels(image_view,x_offset-1,y_offset-1,4,4, 595642587c577d5b808de94915f2388b88b05c3d43a3cristy exception); 59574c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 5958d76c51ed30cf4084f4434ba08925d16001d1e340cristy { 5959d76c51ed30cf4084f4434ba08925d16001d1e340cristy status=MagickFalse; 5960d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5961d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 5962cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony for (i=0; i < 16L; i++) 5963cf4e33d9032a6cbeed57fd35ea9f567b0062d8caanthony AlphaBlendPixelInfo(image,p+i*GetPixelChannels(image),pixels+i,alpha+i); 5964a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy SplineWeights((double) (x-x_offset),&cx); 5965a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy SplineWeights((double) (y-y_offset),&cy); 5966fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->red=(cy[0]*(cx[0]*pixels[0].red+cx[1]*pixels[1].red+cx[2]* 5967fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[2].red+cx[3]*pixels[3].red)+cy[1]*(cx[0]*pixels[4].red+cx[1]* 5968fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[5].red+cx[2]*pixels[6].red+cx[3]*pixels[7].red)+cy[2]*(cx[0]* 5969fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[8].red+cx[1]*pixels[9].red+cx[2]*pixels[10].red+cx[3]* 5970fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[11].red)+cy[3]*(cx[0]*pixels[12].red+cx[1]*pixels[13].red+cx[2]* 5971fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[14].red+cx[3]*pixels[15].red)); 5972fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->green=(cy[0]*(cx[0]*pixels[0].green+cx[1]*pixels[1].green+cx[2]* 5973fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[2].green+cx[3]*pixels[3].green)+cy[1]*(cx[0]*pixels[4].green+ 5974fb12237dd6e4d4d8b92d879661153062eeca0572cristy cx[1]*pixels[5].green+cx[2]*pixels[6].green+cx[3]*pixels[7].green)+ 5975fb12237dd6e4d4d8b92d879661153062eeca0572cristy cy[2]*(cx[0]*pixels[8].green+cx[1]*pixels[9].green+cx[2]* 5976fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[10].green+cx[3]*pixels[11].green)+cy[3]*(cx[0]*pixels[12].green+ 5977fb12237dd6e4d4d8b92d879661153062eeca0572cristy cx[1]*pixels[13].green+cx[2]*pixels[14].green+cx[3]*pixels[15].green)); 5978fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->blue=(cy[0]*(cx[0]*pixels[0].blue+cx[1]*pixels[1].blue+cx[2]* 5979fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[2].blue+cx[3]*pixels[3].blue)+cy[1]*(cx[0]*pixels[4].blue+cx[1]* 5980fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[5].blue+cx[2]*pixels[6].blue+cx[3]*pixels[7].blue)+cy[2]*(cx[0]* 5981fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[8].blue+cx[1]*pixels[9].blue+cx[2]*pixels[10].blue+cx[3]* 5982fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[11].blue)+cy[3]*(cx[0]*pixels[12].blue+cx[1]*pixels[13].blue+ 5983fb12237dd6e4d4d8b92d879661153062eeca0572cristy cx[2]*pixels[14].blue+cx[3]*pixels[15].blue)); 5984d32d5e5eebeebfccef40d1b060fb24f6dc8d0722nicolas if (image->colorspace == CMYKColorspace) 5985fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->black=(cy[0]*(cx[0]*pixels[0].black+cx[1]*pixels[1].black+cx[2]* 5986fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[2].black+cx[3]*pixels[3].black)+cy[1]*(cx[0]*pixels[4].black+ 5987fb12237dd6e4d4d8b92d879661153062eeca0572cristy cx[1]*pixels[5].black+cx[2]*pixels[6].black+cx[3]*pixels[7].black)+ 5988fb12237dd6e4d4d8b92d879661153062eeca0572cristy cy[2]*(cx[0]*pixels[8].black+cx[1]*pixels[9].black+cx[2]* 5989fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[10].black+cx[3]*pixels[11].black)+cy[3]*(cx[0]* 5990fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[12].black+cx[1]*pixels[13].black+cx[2]*pixels[14].black+cx[3]* 5991fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[15].black)); 5992fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixel->alpha=(cy[0]*(cx[0]*pixels[0].alpha+cx[1]*pixels[1].alpha+cx[2]* 5993fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[2].alpha+cx[3]*pixels[3].alpha)+cy[1]*(cx[0]*pixels[4].alpha+ 5994fb12237dd6e4d4d8b92d879661153062eeca0572cristy cx[1]*pixels[5].alpha+cx[2]*pixels[6].alpha+cx[3]*pixels[7].alpha)+ 5995fb12237dd6e4d4d8b92d879661153062eeca0572cristy cy[2]*(cx[0]*pixels[8].alpha+cx[1]*pixels[9].alpha+cx[2]* 5996fb12237dd6e4d4d8b92d879661153062eeca0572cristy pixels[10].alpha+cx[3]*pixels[11].alpha)+cy[3]*(cx[0]*pixels[12].alpha+ 5997fb12237dd6e4d4d8b92d879661153062eeca0572cristy cx[1]*pixels[13].alpha+cx[2]*pixels[14].alpha+cx[3]*pixels[15].alpha)); 5998d76c51ed30cf4084f4434ba08925d16001d1e340cristy break; 5999d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 6000d76c51ed30cf4084f4434ba08925d16001d1e340cristy } 6001d76c51ed30cf4084f4434ba08925d16001d1e340cristy return(status); 6002d76c51ed30cf4084f4434ba08925d16001d1e340cristy} 60034c08aed51c5899665ade97263692328eea4af106cristy 60044c08aed51c5899665ade97263692328eea4af106cristy/* 60054c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 60064c08aed51c5899665ade97263692328eea4af106cristy% % 60074c08aed51c5899665ade97263692328eea4af106cristy% % 60084c08aed51c5899665ade97263692328eea4af106cristy% % 60094c08aed51c5899665ade97263692328eea4af106cristy+ I s F u z z y E q u i v a l e n c e P i x e l % 60104c08aed51c5899665ade97263692328eea4af106cristy% % 60114c08aed51c5899665ade97263692328eea4af106cristy% % 60124c08aed51c5899665ade97263692328eea4af106cristy% % 60134c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 60144c08aed51c5899665ade97263692328eea4af106cristy% 60154c08aed51c5899665ade97263692328eea4af106cristy% IsFuzzyEquivalencePixel() returns MagickTrue if the distance between two 6016a060829f41c741d75c680e3a6863c9caae1009e4cristy% pixels is less than the specified distance in a linear three (or four) 60174c08aed51c5899665ade97263692328eea4af106cristy% dimensional color space. 60184c08aed51c5899665ade97263692328eea4af106cristy% 60194c08aed51c5899665ade97263692328eea4af106cristy% The format of the IsFuzzyEquivalencePixel method is: 60204c08aed51c5899665ade97263692328eea4af106cristy% 6021e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy% void IsFuzzyEquivalencePixel(const Image *source,const Quantum *p, 6022e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy% const Image *destination,const Quantum *q) 60234c08aed51c5899665ade97263692328eea4af106cristy% 60244c08aed51c5899665ade97263692328eea4af106cristy% A description of each parameter follows: 60254c08aed51c5899665ade97263692328eea4af106cristy% 6026e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy% o source: the source image. 60274c08aed51c5899665ade97263692328eea4af106cristy% 60284c08aed51c5899665ade97263692328eea4af106cristy% o p: Pixel p. 60294c08aed51c5899665ade97263692328eea4af106cristy% 6030e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy% o destination: the destination image. 6031e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy% 60324c08aed51c5899665ade97263692328eea4af106cristy% o q: Pixel q. 60334c08aed51c5899665ade97263692328eea4af106cristy% 60344c08aed51c5899665ade97263692328eea4af106cristy*/ 6035e4a404711bf20d9062d11ab28bc12e5acd307f9ccristyMagickExport MagickBooleanType IsFuzzyEquivalencePixel(const Image *source, 6036e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy const Quantum *p,const Image *destination,const Quantum *q) 60374c08aed51c5899665ade97263692328eea4af106cristy{ 6038a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy double 60394c08aed51c5899665ade97263692328eea4af106cristy fuzz, 60404c08aed51c5899665ade97263692328eea4af106cristy pixel; 60414c08aed51c5899665ade97263692328eea4af106cristy 6042a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy register double 60434c08aed51c5899665ade97263692328eea4af106cristy distance, 60444c08aed51c5899665ade97263692328eea4af106cristy scale; 60454c08aed51c5899665ade97263692328eea4af106cristy 6046a664f96353375532d7b45e52e48d921a56d30580cristy fuzz=GetFuzzyColorDistance(source,destination); 60474c08aed51c5899665ade97263692328eea4af106cristy scale=1.0; 60484c08aed51c5899665ade97263692328eea4af106cristy distance=0.0; 6049f0e5dc9d360bc60ac8c1b5e4fd60f27cc1b0e543dirk if (source->alpha_trait != UndefinedPixelTrait || 6050f0e5dc9d360bc60ac8c1b5e4fd60f27cc1b0e543dirk destination->alpha_trait != UndefinedPixelTrait) 60514c08aed51c5899665ade97263692328eea4af106cristy { 60524c08aed51c5899665ade97263692328eea4af106cristy /* 60534c08aed51c5899665ade97263692328eea4af106cristy Transparencies are involved - set alpha distance 60544c08aed51c5899665ade97263692328eea4af106cristy */ 605570e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy pixel=GetPixelAlpha(source,p)-(double) GetPixelAlpha(destination,q); 60564c08aed51c5899665ade97263692328eea4af106cristy distance=pixel*pixel; 60574c08aed51c5899665ade97263692328eea4af106cristy if (distance > fuzz) 60584c08aed51c5899665ade97263692328eea4af106cristy return(MagickFalse); 60594c08aed51c5899665ade97263692328eea4af106cristy /* 60604c08aed51c5899665ade97263692328eea4af106cristy Generate a alpha scaling factor to generate a 4D cone on colorspace 60614c08aed51c5899665ade97263692328eea4af106cristy Note that if one color is transparent, distance has no color component. 60624c08aed51c5899665ade97263692328eea4af106cristy */ 6063f0e5dc9d360bc60ac8c1b5e4fd60f27cc1b0e543dirk if (source->alpha_trait != UndefinedPixelTrait) 6064f0e5dc9d360bc60ac8c1b5e4fd60f27cc1b0e543dirk scale=QuantumScale*GetPixelAlpha(source,p); 6065f0e5dc9d360bc60ac8c1b5e4fd60f27cc1b0e543dirk if (destination->alpha_trait != UndefinedPixelTrait) 6066f0e5dc9d360bc60ac8c1b5e4fd60f27cc1b0e543dirk scale*=QuantumScale*GetPixelAlpha(destination,q); 60674c08aed51c5899665ade97263692328eea4af106cristy if (scale <= MagickEpsilon) 60684c08aed51c5899665ade97263692328eea4af106cristy return(MagickTrue); 60694c08aed51c5899665ade97263692328eea4af106cristy } 60704c08aed51c5899665ade97263692328eea4af106cristy /* 60714c08aed51c5899665ade97263692328eea4af106cristy RGB or CMY color cube 60724c08aed51c5899665ade97263692328eea4af106cristy */ 60734c08aed51c5899665ade97263692328eea4af106cristy distance*=3.0; /* rescale appropriately */ 60744c08aed51c5899665ade97263692328eea4af106cristy fuzz*=3.0; 6075a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixel=GetPixelRed(source,p)-(double) GetPixelRed(destination,q); 6076e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy if ((source->colorspace == HSLColorspace) || 6077e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy (source->colorspace == HSBColorspace) || 6078e4a404711bf20d9062d11ab28bc12e5acd307f9ccristy (source->colorspace == HWBColorspace)) 60794c08aed51c5899665ade97263692328eea4af106cristy { 60804c08aed51c5899665ade97263692328eea4af106cristy /* 60814c08aed51c5899665ade97263692328eea4af106cristy Compute an arc distance for hue. It should be a vector angle of 60824c08aed51c5899665ade97263692328eea4af106cristy 'S'/'W' length with 'L'/'B' forming appropriate cones. 60834c08aed51c5899665ade97263692328eea4af106cristy */ 60844c08aed51c5899665ade97263692328eea4af106cristy if (fabs((double) pixel) > (QuantumRange/2)) 60854c08aed51c5899665ade97263692328eea4af106cristy pixel-=QuantumRange; 60864c08aed51c5899665ade97263692328eea4af106cristy pixel*=2; 60874c08aed51c5899665ade97263692328eea4af106cristy } 60884c08aed51c5899665ade97263692328eea4af106cristy distance+=scale*pixel*pixel; 60894c08aed51c5899665ade97263692328eea4af106cristy if (distance > fuzz) 60904c08aed51c5899665ade97263692328eea4af106cristy return(MagickFalse); 6091a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixel=GetPixelGreen(source,p)-(double) GetPixelGreen(destination,q); 60924c08aed51c5899665ade97263692328eea4af106cristy distance+=scale*pixel*pixel; 60934c08aed51c5899665ade97263692328eea4af106cristy if (distance > fuzz) 60944c08aed51c5899665ade97263692328eea4af106cristy return(MagickFalse); 6095a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy pixel=GetPixelBlue(source,p)-(double) GetPixelBlue(destination,q); 60964c08aed51c5899665ade97263692328eea4af106cristy distance+=scale*pixel*pixel; 60974c08aed51c5899665ade97263692328eea4af106cristy if (distance > fuzz) 60984c08aed51c5899665ade97263692328eea4af106cristy return(MagickFalse); 60994c08aed51c5899665ade97263692328eea4af106cristy return(MagickTrue); 61004c08aed51c5899665ade97263692328eea4af106cristy} 61014c08aed51c5899665ade97263692328eea4af106cristy 61024c08aed51c5899665ade97263692328eea4af106cristy/* 61034c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 61044c08aed51c5899665ade97263692328eea4af106cristy% % 61054c08aed51c5899665ade97263692328eea4af106cristy% % 61064c08aed51c5899665ade97263692328eea4af106cristy% % 61074c08aed51c5899665ade97263692328eea4af106cristy+ 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 % 61084c08aed51c5899665ade97263692328eea4af106cristy% % 61094c08aed51c5899665ade97263692328eea4af106cristy% % 61104c08aed51c5899665ade97263692328eea4af106cristy% % 61114c08aed51c5899665ade97263692328eea4af106cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 61124c08aed51c5899665ade97263692328eea4af106cristy% 61134c08aed51c5899665ade97263692328eea4af106cristy% IsFuzzyEquivalencePixelInfo() returns true if the distance between two 61144c08aed51c5899665ade97263692328eea4af106cristy% colors is less than the specified distance in a linear three (or four) 61154c08aed51c5899665ade97263692328eea4af106cristy% dimensional color space. 61164c08aed51c5899665ade97263692328eea4af106cristy% 61175f95f4f77efc46ff53593d750491c8f60698c983cristy% This implements the equivalent of: 61185f95f4f77efc46ff53593d750491c8f60698c983cristy% fuzz < sqrt(color_distance^2 * u.a*v.a + alpha_distance^2) 61194c08aed51c5899665ade97263692328eea4af106cristy% 61204c08aed51c5899665ade97263692328eea4af106cristy% Which produces a multi-dimensional cone for that colorspace along the 61214c08aed51c5899665ade97263692328eea4af106cristy% transparency vector. 61224c08aed51c5899665ade97263692328eea4af106cristy% 61235f95f4f77efc46ff53593d750491c8f60698c983cristy% For example for an RGB: 61244c08aed51c5899665ade97263692328eea4af106cristy% color_distance^2 = ( (u.r-v.r)^2 + (u.g-v.g)^2 + (u.b-v.b)^2 ) / 3 61254c08aed51c5899665ade97263692328eea4af106cristy% 61264c08aed51c5899665ade97263692328eea4af106cristy% See http://www.imagemagick.org/Usage/bugs/fuzz_distance/ 61274c08aed51c5899665ade97263692328eea4af106cristy% 61284c08aed51c5899665ade97263692328eea4af106cristy% Hue colorspace distances need more work. Hue is not a distance, it is an 61294c08aed51c5899665ade97263692328eea4af106cristy% angle! 61304c08aed51c5899665ade97263692328eea4af106cristy% 61314c08aed51c5899665ade97263692328eea4af106cristy% A check that q is in the same color space as p should be made and the 61324c08aed51c5899665ade97263692328eea4af106cristy% appropriate mapping made. -- Anthony Thyssen 8 December 2010 61334c08aed51c5899665ade97263692328eea4af106cristy% 61344c08aed51c5899665ade97263692328eea4af106cristy% The format of the IsFuzzyEquivalencePixelInfo method is: 61354c08aed51c5899665ade97263692328eea4af106cristy% 61364c08aed51c5899665ade97263692328eea4af106cristy% MagickBooleanType IsFuzzyEquivalencePixelInfo(const PixelInfo *p, 61374c08aed51c5899665ade97263692328eea4af106cristy% const PixelInfo *q) 61384c08aed51c5899665ade97263692328eea4af106cristy% 61394c08aed51c5899665ade97263692328eea4af106cristy% A description of each parameter follows: 61404c08aed51c5899665ade97263692328eea4af106cristy% 61414c08aed51c5899665ade97263692328eea4af106cristy% o p: Pixel p. 61424c08aed51c5899665ade97263692328eea4af106cristy% 61434c08aed51c5899665ade97263692328eea4af106cristy% o q: Pixel q. 61444c08aed51c5899665ade97263692328eea4af106cristy% 61454c08aed51c5899665ade97263692328eea4af106cristy*/ 61464c08aed51c5899665ade97263692328eea4af106cristyMagickExport MagickBooleanType IsFuzzyEquivalencePixelInfo(const PixelInfo *p, 61474c08aed51c5899665ade97263692328eea4af106cristy const PixelInfo *q) 61484c08aed51c5899665ade97263692328eea4af106cristy{ 6149a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy double 61504c08aed51c5899665ade97263692328eea4af106cristy fuzz, 61514c08aed51c5899665ade97263692328eea4af106cristy pixel; 61524c08aed51c5899665ade97263692328eea4af106cristy 6153a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy register double 61544c08aed51c5899665ade97263692328eea4af106cristy scale, 61554c08aed51c5899665ade97263692328eea4af106cristy distance; 61564c08aed51c5899665ade97263692328eea4af106cristy 6157043a981a1f6b2393520e911594ce29ef5b060ee5cristy fuzz=(double) MagickMax(MagickMax(p->fuzz,q->fuzz),(MagickRealType) 6158043a981a1f6b2393520e911594ce29ef5b060ee5cristy MagickSQ1_2); 6159043a981a1f6b2393520e911594ce29ef5b060ee5cristy fuzz*=fuzz; 61604c08aed51c5899665ade97263692328eea4af106cristy scale=1.0; 61614c08aed51c5899665ade97263692328eea4af106cristy distance=0.0; 616217f11b056210f082a6d0e54ac5d68e6d72fa76b2cristy if ((p->alpha_trait != UndefinedPixelTrait) || 616317f11b056210f082a6d0e54ac5d68e6d72fa76b2cristy (q->alpha_trait != UndefinedPixelTrait)) 61644c08aed51c5899665ade97263692328eea4af106cristy { 61654c08aed51c5899665ade97263692328eea4af106cristy /* 61664c08aed51c5899665ade97263692328eea4af106cristy Transparencies are involved - set alpha distance. 61674c08aed51c5899665ade97263692328eea4af106cristy */ 616817f11b056210f082a6d0e54ac5d68e6d72fa76b2cristy pixel=(p->alpha_trait != UndefinedPixelTrait ? p->alpha : OpaqueAlpha)- 616917f11b056210f082a6d0e54ac5d68e6d72fa76b2cristy (q->alpha_trait != UndefinedPixelTrait ? q->alpha : OpaqueAlpha); 61704c08aed51c5899665ade97263692328eea4af106cristy distance=pixel*pixel; 61714c08aed51c5899665ade97263692328eea4af106cristy if (distance > fuzz) 61724c08aed51c5899665ade97263692328eea4af106cristy return(MagickFalse); 61734c08aed51c5899665ade97263692328eea4af106cristy /* 61744c08aed51c5899665ade97263692328eea4af106cristy Generate a alpha scaling factor to generate a 4D cone on colorspace. 61755f95f4f77efc46ff53593d750491c8f60698c983cristy If one color is transparent, distance has no color component. 61764c08aed51c5899665ade97263692328eea4af106cristy */ 617717f11b056210f082a6d0e54ac5d68e6d72fa76b2cristy if (p->alpha_trait != UndefinedPixelTrait) 61784c08aed51c5899665ade97263692328eea4af106cristy scale=(QuantumScale*p->alpha); 617917f11b056210f082a6d0e54ac5d68e6d72fa76b2cristy if (q->alpha_trait != UndefinedPixelTrait) 61804c08aed51c5899665ade97263692328eea4af106cristy scale*=(QuantumScale*q->alpha); 61814c08aed51c5899665ade97263692328eea4af106cristy if (scale <= MagickEpsilon ) 61824c08aed51c5899665ade97263692328eea4af106cristy return(MagickTrue); 61834c08aed51c5899665ade97263692328eea4af106cristy } 61844c08aed51c5899665ade97263692328eea4af106cristy /* 61854c08aed51c5899665ade97263692328eea4af106cristy CMYK create a CMY cube with a multi-dimensional cone toward black. 61864c08aed51c5899665ade97263692328eea4af106cristy */ 61874c08aed51c5899665ade97263692328eea4af106cristy if (p->colorspace == CMYKColorspace) 61884c08aed51c5899665ade97263692328eea4af106cristy { 61894c08aed51c5899665ade97263692328eea4af106cristy pixel=p->black-q->black; 61904c08aed51c5899665ade97263692328eea4af106cristy distance+=pixel*pixel*scale; 61914c08aed51c5899665ade97263692328eea4af106cristy if (distance > fuzz) 61924c08aed51c5899665ade97263692328eea4af106cristy return(MagickFalse); 6193a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy scale*=(double) (QuantumScale*(QuantumRange-p->black)); 6194a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy scale*=(double) (QuantumScale*(QuantumRange-q->black)); 61954c08aed51c5899665ade97263692328eea4af106cristy } 61964c08aed51c5899665ade97263692328eea4af106cristy /* 61974c08aed51c5899665ade97263692328eea4af106cristy RGB or CMY color cube. 61984c08aed51c5899665ade97263692328eea4af106cristy */ 61994c08aed51c5899665ade97263692328eea4af106cristy distance*=3.0; /* rescale appropriately */ 62004c08aed51c5899665ade97263692328eea4af106cristy fuzz*=3.0; 62014c08aed51c5899665ade97263692328eea4af106cristy pixel=p->red-q->red; 62024c08aed51c5899665ade97263692328eea4af106cristy if ((p->colorspace == HSLColorspace) || (p->colorspace == HSBColorspace) || 62034c08aed51c5899665ade97263692328eea4af106cristy (p->colorspace == HWBColorspace)) 62044c08aed51c5899665ade97263692328eea4af106cristy { 62055f95f4f77efc46ff53593d750491c8f60698c983cristy /* 620658ee5018960b42b80b54398eacabe9ae5da89149cristy This calculates a arc distance for hue-- it should be a vector 620758ee5018960b42b80b54398eacabe9ae5da89149cristy angle of 'S'/'W' length with 'L'/'B' forming appropriate cones. 620858ee5018960b42b80b54398eacabe9ae5da89149cristy In other words this is a hack - Anthony. 62094c08aed51c5899665ade97263692328eea4af106cristy */ 62104c08aed51c5899665ade97263692328eea4af106cristy if (fabs((double) pixel) > (QuantumRange/2)) 62114c08aed51c5899665ade97263692328eea4af106cristy pixel-=QuantumRange; 62124c08aed51c5899665ade97263692328eea4af106cristy pixel*=2; 62134c08aed51c5899665ade97263692328eea4af106cristy } 62144c08aed51c5899665ade97263692328eea4af106cristy distance+=pixel*pixel*scale; 62154c08aed51c5899665ade97263692328eea4af106cristy if (distance > fuzz) 62164c08aed51c5899665ade97263692328eea4af106cristy return(MagickFalse); 62174c08aed51c5899665ade97263692328eea4af106cristy pixel=p->green-q->green; 62184c08aed51c5899665ade97263692328eea4af106cristy distance+=pixel*pixel*scale; 62194c08aed51c5899665ade97263692328eea4af106cristy if (distance > fuzz) 62204c08aed51c5899665ade97263692328eea4af106cristy return(MagickFalse); 62214c08aed51c5899665ade97263692328eea4af106cristy pixel=p->blue-q->blue; 62224c08aed51c5899665ade97263692328eea4af106cristy distance+=pixel*pixel*scale; 62234c08aed51c5899665ade97263692328eea4af106cristy if (distance > fuzz) 62244c08aed51c5899665ade97263692328eea4af106cristy return(MagickFalse); 62254c08aed51c5899665ade97263692328eea4af106cristy return(MagickTrue); 62264c08aed51c5899665ade97263692328eea4af106cristy} 62272b9582a27910c7baaeb04b7e969638328fa70095cristy 62282b9582a27910c7baaeb04b7e969638328fa70095cristy/* 62292b9582a27910c7baaeb04b7e969638328fa70095cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 62302b9582a27910c7baaeb04b7e969638328fa70095cristy% % 62312b9582a27910c7baaeb04b7e969638328fa70095cristy% % 62322b9582a27910c7baaeb04b7e969638328fa70095cristy% % 62337ae1654e7582dc87637de6302875d81607393efacristy% S e t P i x e l C h a n n e l M a s k % 62342b9582a27910c7baaeb04b7e969638328fa70095cristy% % 62352b9582a27910c7baaeb04b7e969638328fa70095cristy% % 62362b9582a27910c7baaeb04b7e969638328fa70095cristy% % 62372b9582a27910c7baaeb04b7e969638328fa70095cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 62382b9582a27910c7baaeb04b7e969638328fa70095cristy% 62397ae1654e7582dc87637de6302875d81607393efacristy% SetPixelChannelMask() sets the pixel channel map from the specified channel 62407ae1654e7582dc87637de6302875d81607393efacristy% mask. 62412b9582a27910c7baaeb04b7e969638328fa70095cristy% 6242cf1296eb467f83fd2106e51d2689ac0afc863ef8cristy% The format of the SetPixelChannelMask method is: 62432b9582a27910c7baaeb04b7e969638328fa70095cristy% 6244bcd59345f8bbe67289229b663d9bb487cc620e13cristy% ChannelType SetPixelChannelMask(Image *image, 6245bcd59345f8bbe67289229b663d9bb487cc620e13cristy% const ChannelType channel_mask) 62462b9582a27910c7baaeb04b7e969638328fa70095cristy% 62472b9582a27910c7baaeb04b7e969638328fa70095cristy% A description of each parameter follows: 62482b9582a27910c7baaeb04b7e969638328fa70095cristy% 62492b9582a27910c7baaeb04b7e969638328fa70095cristy% o image: the image. 62502b9582a27910c7baaeb04b7e969638328fa70095cristy% 6251dfdb19ea2c08296b31fef860352c0a6efe8e9cc6cristy% o channel_mask: the channel mask. 62522b9582a27910c7baaeb04b7e969638328fa70095cristy% 62532b9582a27910c7baaeb04b7e969638328fa70095cristy*/ 6254bcd59345f8bbe67289229b663d9bb487cc620e13cristyMagickExport ChannelType SetPixelChannelMask(Image *image, 625507a6785ad974f0631a83731fe5d7fb85751ca235cristy const ChannelType channel_mask) 62562b9582a27910c7baaeb04b7e969638328fa70095cristy{ 62576a917d6c8b1695012e26389d2ec303267676815fcristy#define GetChannelBit(mask,bit) (((size_t) (mask) >> (size_t) (bit)) & 0x01) 6258dafd287faca4c8cd5415d13185973add9c02b2c4cristy 6259bcd59345f8bbe67289229b663d9bb487cc620e13cristy ChannelType 6260bcd59345f8bbe67289229b663d9bb487cc620e13cristy mask; 6261bcd59345f8bbe67289229b663d9bb487cc620e13cristy 62622b9582a27910c7baaeb04b7e969638328fa70095cristy register ssize_t 62632b9582a27910c7baaeb04b7e969638328fa70095cristy i; 62642b9582a27910c7baaeb04b7e969638328fa70095cristy 6265bcd59345f8bbe67289229b663d9bb487cc620e13cristy assert(image != (Image *) NULL); 6266e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(image->signature == MagickCoreSignature); 6267177e41c20ccba692bc4c7797aeb817b2f80c7e8ccristy if (image->debug != MagickFalse) 6268f30396d9ccce929573b0e23698b43c55e415bf46cristy (void) LogMagickEvent(PixelEvent,GetMagickModule(),"%s[%08x]", 6269f30396d9ccce929573b0e23698b43c55e415bf46cristy image->filename,channel_mask); 6270bcd59345f8bbe67289229b663d9bb487cc620e13cristy mask=image->channel_mask; 62713c30981743f8543ca2ccc0d19de8fbda2b3639c6cristy image->channel_mask=channel_mask; 6272dafd287faca4c8cd5415d13185973add9c02b2c4cristy for (i=0; i < (ssize_t) GetPixelChannels(image); i++) 6273e2a912b6c9086c98ec838baa0824cd8deca55538cristy { 62745a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelChannel channel=GetPixelChannelChannel(image,i); 627517f11b056210f082a6d0e54ac5d68e6d72fa76b2cristy if (GetChannelBit(channel_mask,channel) == 0) 627617f11b056210f082a6d0e54ac5d68e6d72fa76b2cristy { 627717f11b056210f082a6d0e54ac5d68e6d72fa76b2cristy SetPixelChannelTraits(image,channel,CopyPixelTrait); 627817f11b056210f082a6d0e54ac5d68e6d72fa76b2cristy continue; 627917f11b056210f082a6d0e54ac5d68e6d72fa76b2cristy } 628062cc94b542ffdb41cd62778530873f8babafb2b7cristy if (channel == AlphaPixelChannel) 628117f11b056210f082a6d0e54ac5d68e6d72fa76b2cristy { 628217f11b056210f082a6d0e54ac5d68e6d72fa76b2cristy if ((image->alpha_trait & CopyPixelTrait) != 0) 628317f11b056210f082a6d0e54ac5d68e6d72fa76b2cristy { 628417f11b056210f082a6d0e54ac5d68e6d72fa76b2cristy SetPixelChannelTraits(image,channel,CopyPixelTrait); 628517f11b056210f082a6d0e54ac5d68e6d72fa76b2cristy continue; 628617f11b056210f082a6d0e54ac5d68e6d72fa76b2cristy } 628717f11b056210f082a6d0e54ac5d68e6d72fa76b2cristy SetPixelChannelTraits(image,channel,UpdatePixelTrait); 628817f11b056210f082a6d0e54ac5d68e6d72fa76b2cristy continue; 628917f11b056210f082a6d0e54ac5d68e6d72fa76b2cristy } 629017f11b056210f082a6d0e54ac5d68e6d72fa76b2cristy if (image->alpha_trait != UndefinedPixelTrait) 629117f11b056210f082a6d0e54ac5d68e6d72fa76b2cristy { 62923bdd925dbb0804df99e548c50667670319655816cristy SetPixelChannelTraits(image,channel,(const PixelTrait) 62933bdd925dbb0804df99e548c50667670319655816cristy (UpdatePixelTrait | BlendPixelTrait)); 629417f11b056210f082a6d0e54ac5d68e6d72fa76b2cristy continue; 629517f11b056210f082a6d0e54ac5d68e6d72fa76b2cristy } 629617f11b056210f082a6d0e54ac5d68e6d72fa76b2cristy SetPixelChannelTraits(image,channel,UpdatePixelTrait); 6297e2a912b6c9086c98ec838baa0824cd8deca55538cristy } 62981685e7216ce4e5fac701834cd7db6eee6d426234cristy if (image->storage_class == PseudoClass) 6299297e3a450d4b95328fa0667d4910881e9787e608cristy SetPixelChannelTraits(image,IndexPixelChannel,CopyPixelTrait); 6300883fde11debec15cedb05dc5d7228d8588066bc0cristy if (image->read_mask != MagickFalse) 6301883fde11debec15cedb05dc5d7228d8588066bc0cristy SetPixelChannelTraits(image,ReadMaskPixelChannel,CopyPixelTrait); 6302883fde11debec15cedb05dc5d7228d8588066bc0cristy if (image->write_mask != MagickFalse) 6303883fde11debec15cedb05dc5d7228d8588066bc0cristy SetPixelChannelTraits(image,WriteMaskPixelChannel,CopyPixelTrait); 63046dcb9b8f58179c62fb386bf2bc02c8ba901dfb15cristy if (image->debug != MagickFalse) 63056dcb9b8f58179c62fb386bf2bc02c8ba901dfb15cristy LogPixelChannels(image); 6306bcd59345f8bbe67289229b663d9bb487cc620e13cristy return(mask); 63072b9582a27910c7baaeb04b7e969638328fa70095cristy} 63082b9582a27910c7baaeb04b7e969638328fa70095cristy 63092b9582a27910c7baaeb04b7e969638328fa70095cristy/* 63102b9582a27910c7baaeb04b7e969638328fa70095cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 63112b9582a27910c7baaeb04b7e969638328fa70095cristy% % 63122b9582a27910c7baaeb04b7e969638328fa70095cristy% % 63132b9582a27910c7baaeb04b7e969638328fa70095cristy% % 6314322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% S e t P i x e l M e t a C h a n n e l s % 6315322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% % 6316322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% % 6317322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% % 6318322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6319322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% 6320322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% SetPixelMetaChannels() sets the image meta channels. 6321322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% 6322322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% The format of the SetPixelMetaChannels method is: 6323322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% 6324322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% MagickBooleanType SetPixelMetaChannels(Image *image, 6325322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% const size_t number_meta_channels,ExceptionInfo *exception) 6326322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% 6327322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% A description of each parameter follows: 6328322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% 6329322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% o image: the image. 6330322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% 6331322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% o number_meta_channels: the number of meta channels. 6332322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% 6333322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% o exception: return any errors or warnings in this structure. 6334322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy% 6335322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy*/ 6336322d07da43d795a7c3b9a2d068d9a9005591cbe4cristyMagickExport MagickBooleanType SetPixelMetaChannels(Image *image, 6337322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy const size_t number_meta_channels,ExceptionInfo *exception) 6338322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy{ 6339322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy image->number_meta_channels=number_meta_channels; 6340322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy return(SyncImagePixelCache(image,exception)); 6341322d07da43d795a7c3b9a2d068d9a9005591cbe4cristy} 6342