13ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 23ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 33ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 43ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 53ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 63ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% DDDD EEEEE CCCC OOO RRRR AAA TTTTT EEEEE % 73ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% D D E C O O R R A A T E % 83ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% D D EEE C O O RRRR AAAAA T EEE % 93ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% D D E C O O R R A A T E % 103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% DDDD EEEEE CCCC OOO R R A A T EEEEE % 113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% MagickCore Image Decoration Methods % 143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Software Design % 16de984cdc3631106b1cbbb8d3972b76a0fc27e8e8cristy% Cristy % 173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% July 1992 % 183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 207ce65e7125a4e1df1a274ce373c537a9df9c16cdCristy% Copyright 1999-2016 ImageMagick Studio LLC, a non-profit organization % 213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% dedicated to making software imaging solutions freely available. % 223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% You may not use this file except in compliance with the License. You may % 243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% obtain a copy of the License at % 253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% http://www.imagemagick.org/script/license.php % 273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Unless required by applicable law or agreed to in writing, software % 293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% distributed under the License is distributed on an "AS IS" BASIS, % 303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. % 313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% See the License for the specific language governing permissions and % 323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% limitations under the License. % 333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Include declarations. 423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 434c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/studio.h" 444c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/cache-view.h" 454c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/color-private.h" 464c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/colorspace-private.h" 474c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/composite.h" 484c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/decorate.h" 494c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/exception.h" 504c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/exception-private.h" 514c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/image.h" 524c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/memory_.h" 534c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/monitor.h" 544c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/monitor-private.h" 554c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/pixel-accessor.h" 564c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/quantum.h" 574c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/quantum-private.h" 58ac245f8a51ea65b085d751c41d8ca4b426bdfe5bcristy#include "MagickCore/resource_.h" 594c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/thread-private.h" 604c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/transform.h" 613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Define declarations. 643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define AccentuateModulate ScaleCharToQuantum(80) 663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define HighlightModulate ScaleCharToQuantum(125) 673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define ShadowModulate ScaleCharToQuantum(135) 683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define DepthModulate ScaleCharToQuantum(185) 693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define TroughModulate ScaleCharToQuantum(110) 703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% B o r d e r I m a g e % 773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% BorderImage() surrounds the image with a border of the color defined by 833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% the bordercolor member of the image structure. The width and height 843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% of the border are defined by the corresponding members of the border_info 853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% structure. 863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the BorderImage method is: 883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Image *BorderImage(const Image *image,const RectangleInfo *border_info, 90633f0c61bb0414b644dccf4f335576a10bca0329cristy% const CompositeOperator compose,ExceptionInfo *exception) 913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o image: the image. 953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 96633f0c61bb0414b644dccf4f335576a10bca0329cristy% o border_info: define the width and height of the border. 97633f0c61bb0414b644dccf4f335576a10bca0329cristy% 98633f0c61bb0414b644dccf4f335576a10bca0329cristy% o compose: the composite operator. 993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o exception: return any errors or warnings in this structure. 1013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 1033ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport Image *BorderImage(const Image *image, 104633f0c61bb0414b644dccf4f335576a10bca0329cristy const RectangleInfo *border_info,const CompositeOperator compose, 105633f0c61bb0414b644dccf4f335576a10bca0329cristy ExceptionInfo *exception) 1063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 1073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Image 108b78bb04767c9e12e0349e8a6d92a4d2fb52e6fd4cristy *border_image, 109b78bb04767c9e12e0349e8a6d92a4d2fb52e6fd4cristy *clone_image; 110b78bb04767c9e12e0349e8a6d92a4d2fb52e6fd4cristy 111b78bb04767c9e12e0349e8a6d92a4d2fb52e6fd4cristy FrameInfo 112b78bb04767c9e12e0349e8a6d92a4d2fb52e6fd4cristy frame_info; 1133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(image != (const Image *) NULL); 115e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(image->signature == MagickCoreSignature); 1163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (image->debug != MagickFalse) 1173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename); 118b78bb04767c9e12e0349e8a6d92a4d2fb52e6fd4cristy assert(border_info != (RectangleInfo *) NULL); 119b78bb04767c9e12e0349e8a6d92a4d2fb52e6fd4cristy frame_info.width=image->columns+(border_info->width << 1); 120b78bb04767c9e12e0349e8a6d92a4d2fb52e6fd4cristy frame_info.height=image->rows+(border_info->height << 1); 121bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy frame_info.x=(ssize_t) border_info->width; 122bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy frame_info.y=(ssize_t) border_info->height; 123b78bb04767c9e12e0349e8a6d92a4d2fb52e6fd4cristy frame_info.inner_bevel=0; 124b78bb04767c9e12e0349e8a6d92a4d2fb52e6fd4cristy frame_info.outer_bevel=0; 125b78bb04767c9e12e0349e8a6d92a4d2fb52e6fd4cristy clone_image=CloneImage(image,0,0,MagickTrue,exception); 126b78bb04767c9e12e0349e8a6d92a4d2fb52e6fd4cristy if (clone_image == (Image *) NULL) 1273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((Image *) NULL); 128b797b2c96f796f4920c9ee807dc5f47e6f160418dirk clone_image->alpha_color=image->border_color; 129633f0c61bb0414b644dccf4f335576a10bca0329cristy border_image=FrameImage(clone_image,&frame_info,compose,exception); 130b78bb04767c9e12e0349e8a6d92a4d2fb52e6fd4cristy clone_image=DestroyImage(clone_image); 131b78bb04767c9e12e0349e8a6d92a4d2fb52e6fd4cristy if (border_image != (Image *) NULL) 132b797b2c96f796f4920c9ee807dc5f47e6f160418dirk border_image->alpha_color=image->alpha_color; 1333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(border_image); 1343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 1353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 1373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% F r a m e I m a g e % 1423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% FrameImage() adds a simulated three-dimensional border around the image. 148b797b2c96f796f4920c9ee807dc5f47e6f160418dirk% The color of the border is defined by the alpha_color member of image. 1493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Members width and height of frame_info specify the border width of the 1503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% vertical and horizontal sides of the frame. Members inner and outer 1513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% indicate the width of the inner and outer shadows of the frame. 1523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the FrameImage method is: 1543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Image *FrameImage(const Image *image,const FrameInfo *frame_info, 156633f0c61bb0414b644dccf4f335576a10bca0329cristy% const CompositeOperator compose,ExceptionInfo *exception) 1573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 1593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o image: the image. 1613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o frame_info: Define the width and height of the frame and its bevels. 1633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 164633f0c61bb0414b644dccf4f335576a10bca0329cristy% o compose: the composite operator. 165633f0c61bb0414b644dccf4f335576a10bca0329cristy% 1663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o exception: return any errors or warnings in this structure. 1673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 1693ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport Image *FrameImage(const Image *image,const FrameInfo *frame_info, 170633f0c61bb0414b644dccf4f335576a10bca0329cristy const CompositeOperator compose,ExceptionInfo *exception) 1713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 1723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define FrameImageTag "Frame/Image" 1733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 174c4c8d13c0996fea659ce63c682c803e74c1abc8acristy CacheView 175c4c8d13c0996fea659ce63c682c803e74c1abc8acristy *image_view, 176c4c8d13c0996fea659ce63c682c803e74c1abc8acristy *frame_view; 177c4c8d13c0996fea659ce63c682c803e74c1abc8acristy 1783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Image 1793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *frame_image; 1803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickBooleanType 1823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 1833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 184bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy MagickOffsetType 185bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy progress; 186bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy 1874c08aed51c5899665ade97263692328eea4af106cristy PixelInfo 1883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy accentuate, 1893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy highlight, 1903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy matte, 1913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy shadow, 1923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy trough; 1933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 194bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 1953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x; 1963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 197bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t 19862cb9cd9bcbbf30447de1b9f3019714d742bd1f3cristy bevel_width, 19962cb9cd9bcbbf30447de1b9f3019714d742bd1f3cristy height, 20062cb9cd9bcbbf30447de1b9f3019714d742bd1f3cristy width; 2013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 202bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy ssize_t 203bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy y; 204bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy 2053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 2063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Check frame geometry. 2073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 2083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(image != (Image *) NULL); 209e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(image->signature == MagickCoreSignature); 2103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (image->debug != MagickFalse) 2113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename); 2123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(frame_info != (FrameInfo *) NULL); 2133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((frame_info->outer_bevel < 0) || (frame_info->inner_bevel < 0)) 2143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowImageException(OptionError,"FrameIsLessThanImageSize"); 215bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy bevel_width=(size_t) (frame_info->outer_bevel+frame_info->inner_bevel); 2165c75db1071e1f0ed28c1c3e3e91c4c995b258b57cristy x=(ssize_t) frame_info->width-frame_info->x-bevel_width; 2175c75db1071e1f0ed28c1c3e3e91c4c995b258b57cristy y=(ssize_t) frame_info->height-frame_info->y-bevel_width; 2185c75db1071e1f0ed28c1c3e3e91c4c995b258b57cristy if ((x < (ssize_t) image->columns) | (y < (ssize_t) image->rows)) 2193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowImageException(OptionError,"FrameIsLessThanImageSize"); 2203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 2213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize framed image attributes. 2223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 2233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy frame_image=CloneImage(image,frame_info->width,frame_info->height,MagickTrue, 2243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy exception); 2253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (frame_image == (Image *) NULL) 2263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((Image *) NULL); 227574cc26500992189f637cd1cdf93d0654e7df7aecristy if (SetImageStorageClass(frame_image,DirectClass,exception) == MagickFalse) 2283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy frame_image=DestroyImage(frame_image); 2303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((Image *) NULL); 2313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 232d76cbb302b40fecfa282ef3b8b99107364d0dbd2cristy if ((IsPixelInfoGray(&frame_image->border_color) == MagickFalse) && 233d76cbb302b40fecfa282ef3b8b99107364d0dbd2cristy (IsGrayColorspace(frame_image->colorspace) != MagickFalse)) 234d76cbb302b40fecfa282ef3b8b99107364d0dbd2cristy (void) SetImageColorspace(frame_image,sRGBColorspace,exception); 235b797b2c96f796f4920c9ee807dc5f47e6f160418dirk if ((frame_image->alpha_color.alpha_trait != UndefinedPixelTrait) && 23617f11b056210f082a6d0e54ac5d68e6d72fa76b2cristy (frame_image->alpha_trait == UndefinedPixelTrait)) 237d76cbb302b40fecfa282ef3b8b99107364d0dbd2cristy (void) SetImageAlpha(frame_image,OpaqueAlpha,exception); 2383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy frame_image->page=image->page; 2393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((image->page.width != 0) && (image->page.height != 0)) 2403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy frame_image->page.width+=frame_image->columns-image->columns; 2423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy frame_image->page.height+=frame_image->rows-image->rows; 2433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 2453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize 3D effects color. 2463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 247b797b2c96f796f4920c9ee807dc5f47e6f160418dirk matte=image->alpha_color; 2489d8c8ce096b3b8b2b1df1aec061f17eabba22b1dcristy accentuate=matte; 249a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy accentuate.red=(double) (QuantumScale*((QuantumRange- 2503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy AccentuateModulate)*matte.red+(QuantumRange*AccentuateModulate))); 251a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy accentuate.green=(double) (QuantumScale*((QuantumRange- 2523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy AccentuateModulate)*matte.green+(QuantumRange*AccentuateModulate))); 253a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy accentuate.blue=(double) (QuantumScale*((QuantumRange- 2543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy AccentuateModulate)*matte.blue+(QuantumRange*AccentuateModulate))); 255a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy accentuate.black=(double) (QuantumScale*((QuantumRange- 2569d8c8ce096b3b8b2b1df1aec061f17eabba22b1dcristy AccentuateModulate)*matte.black+(QuantumRange*AccentuateModulate))); 2574c08aed51c5899665ade97263692328eea4af106cristy accentuate.alpha=matte.alpha; 2589d8c8ce096b3b8b2b1df1aec061f17eabba22b1dcristy highlight=matte; 259a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy highlight.red=(double) (QuantumScale*((QuantumRange- 2603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy HighlightModulate)*matte.red+(QuantumRange*HighlightModulate))); 261a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy highlight.green=(double) (QuantumScale*((QuantumRange- 2623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy HighlightModulate)*matte.green+(QuantumRange*HighlightModulate))); 263a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy highlight.blue=(double) (QuantumScale*((QuantumRange- 2643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy HighlightModulate)*matte.blue+(QuantumRange*HighlightModulate))); 265a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy highlight.black=(double) (QuantumScale*((QuantumRange- 2669d8c8ce096b3b8b2b1df1aec061f17eabba22b1dcristy HighlightModulate)*matte.black+(QuantumRange*HighlightModulate))); 2674c08aed51c5899665ade97263692328eea4af106cristy highlight.alpha=matte.alpha; 2689d8c8ce096b3b8b2b1df1aec061f17eabba22b1dcristy shadow=matte; 2693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy shadow.red=QuantumScale*matte.red*ShadowModulate; 2703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy shadow.green=QuantumScale*matte.green*ShadowModulate; 2713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy shadow.blue=QuantumScale*matte.blue*ShadowModulate; 2729d8c8ce096b3b8b2b1df1aec061f17eabba22b1dcristy shadow.black=QuantumScale*matte.black*ShadowModulate; 2734c08aed51c5899665ade97263692328eea4af106cristy shadow.alpha=matte.alpha; 2749d8c8ce096b3b8b2b1df1aec061f17eabba22b1dcristy trough=matte; 2753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy trough.red=QuantumScale*matte.red*TroughModulate; 2763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy trough.green=QuantumScale*matte.green*TroughModulate; 2773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy trough.blue=QuantumScale*matte.blue*TroughModulate; 2789d8c8ce096b3b8b2b1df1aec061f17eabba22b1dcristy trough.black=QuantumScale*matte.black*TroughModulate; 2794c08aed51c5899665ade97263692328eea4af106cristy trough.alpha=matte.alpha; 2803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=MagickTrue; 2813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy progress=0; 28246ff2676b1044ea4101ac7a59b83289cd8f6cfdacristy image_view=AcquireVirtualCacheView(image,exception); 28346ff2676b1044ea4101ac7a59b83289cd8f6cfdacristy frame_view=AcquireAuthenticCacheView(frame_image,exception); 284bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy height=(size_t) (frame_info->outer_bevel+(frame_info->y-bevel_width)+ 2853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy frame_info->inner_bevel); 2863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (height != 0) 2873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 288bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 2893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x; 2903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2914c08aed51c5899665ade97263692328eea4af106cristy register Quantum 29205d2ff7ebf21f659f5b11e45afb294e152f4330cdirk *magick_restrict q; 2933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 2953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Draw top of ornamental border. 2963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 2973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=QueueCacheViewAuthenticPixels(frame_view,0,0,frame_image->columns, 2983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height,exception); 2994c08aed51c5899665ade97263692328eea4af106cristy if (q != (Quantum *) NULL) 3003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 3023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Draw top of ornamental border. 3033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 304bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (y=0; y < (ssize_t) frame_info->outer_bevel; y++) 3053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 306bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (x=0; x < (ssize_t) (frame_image->columns-y); x++) 3073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (x < y) 30911a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy SetPixelViaPixelInfo(frame_image,&highlight,q); 3103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 31111a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy SetPixelViaPixelInfo(frame_image,&accentuate,q); 312ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(frame_image); 3133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 314bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for ( ; x < (ssize_t) frame_image->columns; x++) 3153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 31611a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy SetPixelViaPixelInfo(frame_image,&shadow,q); 317ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(frame_image); 3183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 320bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (y=0; y < (ssize_t) (frame_info->y-bevel_width); y++) 3213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 322bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (x=0; x < (ssize_t) frame_info->outer_bevel; x++) 3233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 32411a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy SetPixelViaPixelInfo(frame_image,&highlight,q); 325ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(frame_image); 3263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=frame_image->columns-2*frame_info->outer_bevel; 328bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (x=0; x < (ssize_t) width; x++) 3293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 33011a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy SetPixelViaPixelInfo(frame_image,&matte,q); 331ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(frame_image); 3323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 333bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (x=0; x < (ssize_t) frame_info->outer_bevel; x++) 3343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 33511a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy SetPixelViaPixelInfo(frame_image,&shadow,q); 336ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(frame_image); 3373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 339bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (y=0; y < (ssize_t) frame_info->inner_bevel; y++) 3403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 341bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (x=0; x < (ssize_t) frame_info->outer_bevel; x++) 3423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 34311a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy SetPixelViaPixelInfo(frame_image,&highlight,q); 344ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(frame_image); 3453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 346bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (x=0; x < (ssize_t) (frame_info->x-bevel_width); x++) 3473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 34811a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy SetPixelViaPixelInfo(frame_image,&matte,q); 349ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(frame_image); 3503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 351bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy width=image->columns+((size_t) frame_info->inner_bevel << 1)- 3523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y; 353bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (x=0; x < (ssize_t) width; x++) 3543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (x < y) 35611a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy SetPixelViaPixelInfo(frame_image,&shadow,q); 3573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 35811a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy SetPixelViaPixelInfo(frame_image,&trough,q); 359ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(frame_image); 3603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 361bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for ( ; x < (ssize_t) (image->columns+2*frame_info->inner_bevel); x++) 3623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 36311a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy SetPixelViaPixelInfo(frame_image,&highlight,q); 364ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(frame_image); 3653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=frame_info->width-frame_info->x-image->columns-bevel_width; 367bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (x=0; x < (ssize_t) width; x++) 3683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 36911a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy SetPixelViaPixelInfo(frame_image,&matte,q); 370ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(frame_image); 3713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 372bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (x=0; x < (ssize_t) frame_info->outer_bevel; x++) 3733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 37411a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy SetPixelViaPixelInfo(frame_image,&shadow,q); 375ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(frame_image); 3763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) SyncCacheViewAuthenticPixels(frame_view,exception); 3793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 3823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Draw sides of ornamental border. 3833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 38426b649100680af051e65caec259bf535dbdb5b1acristy#if defined(MAGICKCORE_OPENMP_SUPPORT) 385d643247965337aae790abe62ef297abc3cc63c3dcristy #pragma omp parallel for schedule(static,4) shared(progress,status) \ 386d643247965337aae790abe62ef297abc3cc63c3dcristy magick_threads(image,frame_image,1,1) 3873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 388bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (y=0; y < (ssize_t) image->rows; y++) 3893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 390bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 3913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x; 3923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3934c08aed51c5899665ade97263692328eea4af106cristy register Quantum 39405d2ff7ebf21f659f5b11e45afb294e152f4330cdirk *magick_restrict q; 3953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 396564a56979706a30a3d0f920fd5f538a408efd4f1cristy size_t 397564a56979706a30a3d0f920fd5f538a408efd4f1cristy width; 398564a56979706a30a3d0f920fd5f538a408efd4f1cristy 3993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 4003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize scanline with matte color. 4013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 4023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == MagickFalse) 4033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 4043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=QueueCacheViewAuthenticPixels(frame_view,0,frame_info->y+y, 4053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy frame_image->columns,1,exception); 406acd2ed254c18c254a0ab5aafa06d1645e5d079d8cristy if (q == (Quantum *) NULL) 4073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=MagickFalse; 4093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 4103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 411bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (x=0; x < (ssize_t) frame_info->outer_bevel; x++) 4123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 41311a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy SetPixelViaPixelInfo(frame_image,&highlight,q); 414ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(frame_image); 4153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 416bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (x=0; x < (ssize_t) (frame_info->x-bevel_width); x++) 4173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 41811a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy SetPixelViaPixelInfo(frame_image,&matte,q); 419ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(frame_image); 4203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 421bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (x=0; x < (ssize_t) frame_info->inner_bevel; x++) 4223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 42311a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy SetPixelViaPixelInfo(frame_image,&shadow,q); 424ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(frame_image); 4253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 4263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 4277b2df43e55e1e3d42c28bf5a0dab4a1f44536935cristy Set frame interior pixels. 4283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 4297b2df43e55e1e3d42c28bf5a0dab4a1f44536935cristy { 4307b2df43e55e1e3d42c28bf5a0dab4a1f44536935cristy register const Quantum 4317b2df43e55e1e3d42c28bf5a0dab4a1f44536935cristy *p; 4327b2df43e55e1e3d42c28bf5a0dab4a1f44536935cristy 4337b2df43e55e1e3d42c28bf5a0dab4a1f44536935cristy p=GetCacheViewVirtualPixels(image_view,0,y,image->columns,1,exception); 4347b2df43e55e1e3d42c28bf5a0dab4a1f44536935cristy if (p == (const Quantum *) NULL) 4357b2df43e55e1e3d42c28bf5a0dab4a1f44536935cristy { 4367b2df43e55e1e3d42c28bf5a0dab4a1f44536935cristy status=MagickFalse; 4377b2df43e55e1e3d42c28bf5a0dab4a1f44536935cristy continue; 4387b2df43e55e1e3d42c28bf5a0dab4a1f44536935cristy } 439bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (x=0; x < (ssize_t) image->columns; x++) 440b78bb04767c9e12e0349e8a6d92a4d2fb52e6fd4cristy { 4417b2df43e55e1e3d42c28bf5a0dab4a1f44536935cristy register ssize_t 4427b2df43e55e1e3d42c28bf5a0dab4a1f44536935cristy i; 443b78bb04767c9e12e0349e8a6d92a4d2fb52e6fd4cristy 4447b2df43e55e1e3d42c28bf5a0dab4a1f44536935cristy if (GetPixelReadMask(image,q) == 0) 445b78bb04767c9e12e0349e8a6d92a4d2fb52e6fd4cristy { 4467b2df43e55e1e3d42c28bf5a0dab4a1f44536935cristy SetPixelBackgoundColor(frame_image,q); 4477b2df43e55e1e3d42c28bf5a0dab4a1f44536935cristy p+=GetPixelChannels(image); 4487b2df43e55e1e3d42c28bf5a0dab4a1f44536935cristy q+=GetPixelChannels(frame_image); 449b78bb04767c9e12e0349e8a6d92a4d2fb52e6fd4cristy continue; 450b78bb04767c9e12e0349e8a6d92a4d2fb52e6fd4cristy } 4517b2df43e55e1e3d42c28bf5a0dab4a1f44536935cristy for (i=0; i < (ssize_t) GetPixelChannels(image); i++) 4524c08aed51c5899665ade97263692328eea4af106cristy { 4537b2df43e55e1e3d42c28bf5a0dab4a1f44536935cristy PixelChannel channel=GetPixelChannelChannel(image,i); 4547b2df43e55e1e3d42c28bf5a0dab4a1f44536935cristy PixelTrait traits=GetPixelChannelTraits(image,channel); 4557b2df43e55e1e3d42c28bf5a0dab4a1f44536935cristy PixelTrait frame_traits=GetPixelChannelTraits(frame_image,channel); 4567b2df43e55e1e3d42c28bf5a0dab4a1f44536935cristy if ((traits == UndefinedPixelTrait) || 4577b2df43e55e1e3d42c28bf5a0dab4a1f44536935cristy (frame_traits == UndefinedPixelTrait)) 4587b2df43e55e1e3d42c28bf5a0dab4a1f44536935cristy continue; 4597b2df43e55e1e3d42c28bf5a0dab4a1f44536935cristy SetPixelChannel(frame_image,channel,p[i],q); 4604c08aed51c5899665ade97263692328eea4af106cristy } 4617b2df43e55e1e3d42c28bf5a0dab4a1f44536935cristy SetPixelRed(frame_image,GetPixelRed(image,p),q); 4627b2df43e55e1e3d42c28bf5a0dab4a1f44536935cristy SetPixelGreen(frame_image,GetPixelGreen(image,p),q); 4637b2df43e55e1e3d42c28bf5a0dab4a1f44536935cristy SetPixelBlue(frame_image,GetPixelBlue(image,p),q); 4647b2df43e55e1e3d42c28bf5a0dab4a1f44536935cristy SetPixelAlpha(frame_image,GetPixelAlpha(image,p),q); 4657b2df43e55e1e3d42c28bf5a0dab4a1f44536935cristy p+=GetPixelChannels(image); 4667b2df43e55e1e3d42c28bf5a0dab4a1f44536935cristy q+=GetPixelChannels(frame_image); 467b78bb04767c9e12e0349e8a6d92a4d2fb52e6fd4cristy } 4687b2df43e55e1e3d42c28bf5a0dab4a1f44536935cristy } 469bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (x=0; x < (ssize_t) frame_info->inner_bevel; x++) 4703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 47111a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy SetPixelViaPixelInfo(frame_image,&highlight,q); 472ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(frame_image); 4733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 4743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=frame_info->width-frame_info->x-image->columns-bevel_width; 475bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (x=0; x < (ssize_t) width; x++) 4763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 47711a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy SetPixelViaPixelInfo(frame_image,&matte,q); 478ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(frame_image); 4793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 480bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (x=0; x < (ssize_t) frame_info->outer_bevel; x++) 4813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 48211a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy SetPixelViaPixelInfo(frame_image,&shadow,q); 483ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(frame_image); 4843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 4853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (SyncCacheViewAuthenticPixels(frame_view,exception) == MagickFalse) 4863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=MagickFalse; 4873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (image->progress_monitor != (MagickProgressMonitor) NULL) 4883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickBooleanType 4903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy proceed; 4913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 49226b649100680af051e65caec259bf535dbdb5b1acristy#if defined(MAGICKCORE_OPENMP_SUPPORT) 49369cfa02cfc7b694242c26efab9d8fde75adf3c38cristy #pragma omp critical (MagickCore_FrameImage) 4943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 4953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy proceed=SetImageProgress(image,FrameImageTag,progress++,image->rows); 4963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (proceed == MagickFalse) 4973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=MagickFalse; 4983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 4993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 500bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy height=(size_t) (frame_info->inner_bevel+frame_info->height- 5013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy frame_info->y-image->rows-bevel_width+frame_info->outer_bevel); 5023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (height != 0) 5033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 504bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 5053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x; 5063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5074c08aed51c5899665ade97263692328eea4af106cristy register Quantum 50805d2ff7ebf21f659f5b11e45afb294e152f4330cdirk *magick_restrict q; 5093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 5113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Draw bottom of ornamental border. 5123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 513bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy q=QueueCacheViewAuthenticPixels(frame_view,0,(ssize_t) (frame_image->rows- 5143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height),frame_image->columns,height,exception); 5154c08aed51c5899665ade97263692328eea4af106cristy if (q != (Quantum *) NULL) 5163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 5173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 5183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Draw bottom of ornamental border. 5193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 5203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (y=frame_info->inner_bevel-1; y >= 0; y--) 5213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 522bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (x=0; x < (ssize_t) frame_info->outer_bevel; x++) 5233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 52411a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy SetPixelViaPixelInfo(frame_image,&highlight,q); 525ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(frame_image); 5263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 527bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (x=0; x < (ssize_t) (frame_info->x-bevel_width); x++) 5283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 52911a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy SetPixelViaPixelInfo(frame_image,&matte,q); 530ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(frame_image); 5313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 5323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (x=0; x < y; x++) 5333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 53411a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy SetPixelViaPixelInfo(frame_image,&shadow,q); 535ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(frame_image); 5363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 537bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for ( ; x < (ssize_t) (image->columns+2*frame_info->inner_bevel); x++) 5383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 539bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy if (x >= (ssize_t) (image->columns+2*frame_info->inner_bevel-y)) 54011a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy SetPixelViaPixelInfo(frame_image,&highlight,q); 5413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 54211a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy SetPixelViaPixelInfo(frame_image,&accentuate,q); 543ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(frame_image); 5443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 5453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=frame_info->width-frame_info->x-image->columns-bevel_width; 546bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (x=0; x < (ssize_t) width; x++) 5473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 54811a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy SetPixelViaPixelInfo(frame_image,&matte,q); 549ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(frame_image); 5503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 551bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (x=0; x < (ssize_t) frame_info->outer_bevel; x++) 5523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 55311a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy SetPixelViaPixelInfo(frame_image,&shadow,q); 554ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(frame_image); 5553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 5563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 5573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height=frame_info->height-frame_info->y-image->rows-bevel_width; 558bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (y=0; y < (ssize_t) height; y++) 5593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 560bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (x=0; x < (ssize_t) frame_info->outer_bevel; x++) 5613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 56211a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy SetPixelViaPixelInfo(frame_image,&highlight,q); 563ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(frame_image); 5643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 5653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=frame_image->columns-2*frame_info->outer_bevel; 566bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (x=0; x < (ssize_t) width; x++) 5673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 56811a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy SetPixelViaPixelInfo(frame_image,&matte,q); 569ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(frame_image); 5703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 571bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (x=0; x < (ssize_t) frame_info->outer_bevel; x++) 5723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 57311a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy SetPixelViaPixelInfo(frame_image,&shadow,q); 574ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(frame_image); 5753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 5763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 5773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (y=frame_info->outer_bevel-1; y >= 0; y--) 5783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 5793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (x=0; x < y; x++) 5803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 58111a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy SetPixelViaPixelInfo(frame_image,&highlight,q); 582ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(frame_image); 5833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 584bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for ( ; x < (ssize_t) frame_image->columns; x++) 5853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 586bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy if (x >= (ssize_t) (frame_image->columns-y)) 58711a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy SetPixelViaPixelInfo(frame_image,&shadow,q); 5883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 58911a06d3f2cac0f17af7963e83bc6e9ebd2a377c0cristy SetPixelViaPixelInfo(frame_image,&trough,q); 590ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(frame_image); 5913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 5923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 5933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) SyncCacheViewAuthenticPixels(frame_view,exception); 5943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 5953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 5963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy frame_view=DestroyCacheView(frame_view); 597b78bb04767c9e12e0349e8a6d92a4d2fb52e6fd4cristy image_view=DestroyCacheView(image_view); 5987b2df43e55e1e3d42c28bf5a0dab4a1f44536935cristy x=(ssize_t) (frame_info->outer_bevel+(frame_info->x-bevel_width)+ 5997b2df43e55e1e3d42c28bf5a0dab4a1f44536935cristy frame_info->inner_bevel); 6007b2df43e55e1e3d42c28bf5a0dab4a1f44536935cristy y=(ssize_t) (frame_info->outer_bevel+(frame_info->y-bevel_width)+ 6017b2df43e55e1e3d42c28bf5a0dab4a1f44536935cristy frame_info->inner_bevel); 6027b2df43e55e1e3d42c28bf5a0dab4a1f44536935cristy if (status != MagickFalse) 6037b2df43e55e1e3d42c28bf5a0dab4a1f44536935cristy status=CompositeImage(frame_image,image,compose,MagickTrue,x,y, 6047b2df43e55e1e3d42c28bf5a0dab4a1f44536935cristy exception); 6051c2f48d0fbbad5757296fca9324fa14033f56632cristy if (status == MagickFalse) 6061c2f48d0fbbad5757296fca9324fa14033f56632cristy frame_image=DestroyImage(frame_image); 6073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(frame_image); 6083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 6093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 6103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 6113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% R a i s e I m a g e % 6163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% RaiseImage() creates a simulated three-dimensional button-like effect 6223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% by lightening and darkening the edges of the image. Members width and 6233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% height of raise_info define the width of the vertical and horizontal 6243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% edge of the effect. 6253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the RaiseImage method is: 6273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% MagickBooleanType RaiseImage(const Image *image, 6296170ac3e0ac67b0ea3716fe9e886a52c90c1bd3fcristy% const RectangleInfo *raise_info,const MagickBooleanType raise, 6306170ac3e0ac67b0ea3716fe9e886a52c90c1bd3fcristy% ExceptionInfo *exception) 6313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 6333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o image: the image. 6353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o raise_info: Define the width and height of the raise area. 6373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o raise: A value other than zero creates a 3-D raise effect, 6393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% otherwise it has a lowered effect. 6403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6416170ac3e0ac67b0ea3716fe9e886a52c90c1bd3fcristy% o exception: return any errors or warnings in this structure. 6426170ac3e0ac67b0ea3716fe9e886a52c90c1bd3fcristy% 6433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 6443ed852eea50f9d4cd633efb8c2b054b8e33c253cristyMagickExport MagickBooleanType RaiseImage(Image *image, 6456170ac3e0ac67b0ea3716fe9e886a52c90c1bd3fcristy const RectangleInfo *raise_info,const MagickBooleanType raise, 6466170ac3e0ac67b0ea3716fe9e886a52c90c1bd3fcristy ExceptionInfo *exception) 6473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 6483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define AccentuateFactor ScaleCharToQuantum(135) 6493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define HighlightFactor ScaleCharToQuantum(190) 6503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define ShadowFactor ScaleCharToQuantum(190) 6513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define RaiseImageTag "Raise/Image" 6523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define TroughFactor ScaleCharToQuantum(135) 6533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 654c4c8d13c0996fea659ce63c682c803e74c1abc8acristy CacheView 655c4c8d13c0996fea659ce63c682c803e74c1abc8acristy *image_view; 656c4c8d13c0996fea659ce63c682c803e74c1abc8acristy 6573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickBooleanType 6583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 6593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 660bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy MagickOffsetType 661bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy progress; 662bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy 6633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Quantum 6643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy foreground, 6653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy background; 6663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 667bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy ssize_t 668bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy y; 669bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy 6703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(image != (Image *) NULL); 671e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(image->signature == MagickCoreSignature); 6723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (image->debug != MagickFalse) 6733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename); 6743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(raise_info != (RectangleInfo *) NULL); 6753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((image->columns <= (raise_info->width << 1)) || 6763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (image->rows <= (raise_info->height << 1))) 6773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowBinaryException(OptionError,"ImageSizeMustExceedBevelWidth", 6783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy image->filename); 6796e963d8cbd0aebba1073d7f4b61e3d17177d6fedcristy foreground=QuantumRange; 6803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy background=(Quantum) 0; 6813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (raise == MagickFalse) 6823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy foreground=(Quantum) 0; 6846e963d8cbd0aebba1073d7f4b61e3d17177d6fedcristy background=QuantumRange; 6853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 686574cc26500992189f637cd1cdf93d0654e7df7aecristy if (SetImageStorageClass(image,DirectClass,exception) == MagickFalse) 6873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 6883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 6893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Raise image. 6903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 6913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=MagickTrue; 6923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy progress=0; 69346ff2676b1044ea4101ac7a59b83289cd8f6cfdacristy image_view=AcquireAuthenticCacheView(image,exception); 69426b649100680af051e65caec259bf535dbdb5b1acristy#if defined(MAGICKCORE_OPENMP_SUPPORT) 695d643247965337aae790abe62ef297abc3cc63c3dcristy #pragma omp parallel for schedule(static,4) shared(progress,status) \ 696d643247965337aae790abe62ef297abc3cc63c3dcristy magick_threads(image,image,1,1) 6973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 698bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (y=0; y < (ssize_t) raise_info->height; y++) 6993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 700bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 7016170ac3e0ac67b0ea3716fe9e886a52c90c1bd3fcristy i, 7023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x; 7033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7044c08aed51c5899665ade97263692328eea4af106cristy register Quantum 70505d2ff7ebf21f659f5b11e45afb294e152f4330cdirk *magick_restrict q; 7063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == MagickFalse) 7083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 7093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=GetCacheViewAuthenticPixels(image_view,0,y,image->columns,1,exception); 710acd2ed254c18c254a0ab5aafa06d1645e5d079d8cristy if (q == (Quantum *) NULL) 7113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 7123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=MagickFalse; 7133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 7143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 7153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (x=0; x < y; x++) 7163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 717883fde11debec15cedb05dc5d7228d8588066bc0cristy if (GetPixelReadMask(image,q) == 0) 71810a6c61544fb48d72f29ec8f9573bdcd52abf1b7cristy { 71910a6c61544fb48d72f29ec8f9573bdcd52abf1b7cristy q+=GetPixelChannels(image); 72010a6c61544fb48d72f29ec8f9573bdcd52abf1b7cristy continue; 72110a6c61544fb48d72f29ec8f9573bdcd52abf1b7cristy } 72214973baa8fa5c79889bc4db247200bb7d4626324cristy for (i=0; i < (ssize_t) GetPixelChannels(image); i++) 72314973baa8fa5c79889bc4db247200bb7d4626324cristy { 7245a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelChannel channel=GetPixelChannelChannel(image,i); 7255a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelTrait traits=GetPixelChannelTraits(image,channel); 726d09f880db9ae231429495434fc7f908bdce240f4cristy if ((traits & UpdatePixelTrait) == 0) 727d09f880db9ae231429495434fc7f908bdce240f4cristy continue; 7281eced097f7f4f51d5aa14d46079292fa1dcf0e77cristy q[i]=ClampToQuantum(QuantumScale*((double) q[i]*HighlightFactor+(double) 7291eced097f7f4f51d5aa14d46079292fa1dcf0e77cristy foreground*(QuantumRange-HighlightFactor))); 73014973baa8fa5c79889bc4db247200bb7d4626324cristy } 731ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(image); 7323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 733bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for ( ; x < (ssize_t) (image->columns-y); x++) 7343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 735883fde11debec15cedb05dc5d7228d8588066bc0cristy if (GetPixelReadMask(image,q) == 0) 73610a6c61544fb48d72f29ec8f9573bdcd52abf1b7cristy { 73710a6c61544fb48d72f29ec8f9573bdcd52abf1b7cristy q+=GetPixelChannels(image); 73810a6c61544fb48d72f29ec8f9573bdcd52abf1b7cristy continue; 73910a6c61544fb48d72f29ec8f9573bdcd52abf1b7cristy } 74014973baa8fa5c79889bc4db247200bb7d4626324cristy for (i=0; i < (ssize_t) GetPixelChannels(image); i++) 74114973baa8fa5c79889bc4db247200bb7d4626324cristy { 7425a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelChannel channel=GetPixelChannelChannel(image,i); 7435a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelTrait traits=GetPixelChannelTraits(image,channel); 744d09f880db9ae231429495434fc7f908bdce240f4cristy if ((traits & UpdatePixelTrait) == 0) 745d09f880db9ae231429495434fc7f908bdce240f4cristy continue; 7461eced097f7f4f51d5aa14d46079292fa1dcf0e77cristy q[i]=ClampToQuantum(QuantumScale*((double) q[i]*AccentuateFactor+ 7471eced097f7f4f51d5aa14d46079292fa1dcf0e77cristy (double) foreground*(QuantumRange-AccentuateFactor))); 74814973baa8fa5c79889bc4db247200bb7d4626324cristy } 749ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(image); 7503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 751bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for ( ; x < (ssize_t) image->columns; x++) 7523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 753883fde11debec15cedb05dc5d7228d8588066bc0cristy if (GetPixelReadMask(image,q) == 0) 75410a6c61544fb48d72f29ec8f9573bdcd52abf1b7cristy { 75510a6c61544fb48d72f29ec8f9573bdcd52abf1b7cristy q+=GetPixelChannels(image); 75610a6c61544fb48d72f29ec8f9573bdcd52abf1b7cristy continue; 75710a6c61544fb48d72f29ec8f9573bdcd52abf1b7cristy } 75814973baa8fa5c79889bc4db247200bb7d4626324cristy for (i=0; i < (ssize_t) GetPixelChannels(image); i++) 75914973baa8fa5c79889bc4db247200bb7d4626324cristy { 7605a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelChannel channel=GetPixelChannelChannel(image,i); 7615a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelTrait traits=GetPixelChannelTraits(image,channel); 762d09f880db9ae231429495434fc7f908bdce240f4cristy if ((traits & UpdatePixelTrait) == 0) 763d09f880db9ae231429495434fc7f908bdce240f4cristy continue; 7641eced097f7f4f51d5aa14d46079292fa1dcf0e77cristy q[i]=ClampToQuantum(QuantumScale*((double) q[i]*ShadowFactor+(double) 7651eced097f7f4f51d5aa14d46079292fa1dcf0e77cristy background*(QuantumRange-ShadowFactor))); 76614973baa8fa5c79889bc4db247200bb7d4626324cristy } 767ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(image); 7683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 7693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (SyncCacheViewAuthenticPixels(image_view,exception) == MagickFalse) 7703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=MagickFalse; 7713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (image->progress_monitor != (MagickProgressMonitor) NULL) 7723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 7733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickBooleanType 7743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy proceed; 7753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 77626b649100680af051e65caec259bf535dbdb5b1acristy#if defined(MAGICKCORE_OPENMP_SUPPORT) 7779a5a52fdbea9190e1c868ba9298a6f64d1c896d1cristy #pragma omp critical (MagickCore_RaiseImage) 7789a5a52fdbea9190e1c868ba9298a6f64d1c896d1cristy#endif 7793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy proceed=SetImageProgress(image,RaiseImageTag,progress++,image->rows); 7803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (proceed == MagickFalse) 7813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=MagickFalse; 7823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 7833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 78426b649100680af051e65caec259bf535dbdb5b1acristy#if defined(MAGICKCORE_OPENMP_SUPPORT) 785d643247965337aae790abe62ef297abc3cc63c3dcristy #pragma omp parallel for schedule(static,4) shared(progress,status) \ 786cb7dfccc2e3a9d57a44294cde5228e6f3f27d003cristy magick_threads(image,image,1,1) 7873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 788bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (y=(ssize_t) raise_info->height; y < (ssize_t) (image->rows-raise_info->height); y++) 7893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 790bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 7916170ac3e0ac67b0ea3716fe9e886a52c90c1bd3fcristy i, 7923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x; 7933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7944c08aed51c5899665ade97263692328eea4af106cristy register Quantum 79505d2ff7ebf21f659f5b11e45afb294e152f4330cdirk *magick_restrict q; 7963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == MagickFalse) 7983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 7993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=GetCacheViewAuthenticPixels(image_view,0,y,image->columns,1,exception); 800acd2ed254c18c254a0ab5aafa06d1645e5d079d8cristy if (q == (Quantum *) NULL) 8013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 8023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=MagickFalse; 8033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 8043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 805bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (x=0; x < (ssize_t) raise_info->width; x++) 8063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 807883fde11debec15cedb05dc5d7228d8588066bc0cristy if (GetPixelReadMask(image,q) == 0) 80810a6c61544fb48d72f29ec8f9573bdcd52abf1b7cristy { 80910a6c61544fb48d72f29ec8f9573bdcd52abf1b7cristy q+=GetPixelChannels(image); 81010a6c61544fb48d72f29ec8f9573bdcd52abf1b7cristy continue; 81110a6c61544fb48d72f29ec8f9573bdcd52abf1b7cristy } 8126170ac3e0ac67b0ea3716fe9e886a52c90c1bd3fcristy for (i=0; i < (ssize_t) GetPixelChannels(image); i++) 8136170ac3e0ac67b0ea3716fe9e886a52c90c1bd3fcristy { 8145a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelChannel channel=GetPixelChannelChannel(image,i); 8155a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelTrait traits=GetPixelChannelTraits(image,channel); 816d09f880db9ae231429495434fc7f908bdce240f4cristy if ((traits & UpdatePixelTrait) == 0) 817d09f880db9ae231429495434fc7f908bdce240f4cristy continue; 8181eced097f7f4f51d5aa14d46079292fa1dcf0e77cristy q[i]=ClampToQuantum(QuantumScale*((double) q[i]*HighlightFactor+(double) 8191eced097f7f4f51d5aa14d46079292fa1dcf0e77cristy foreground*(QuantumRange-HighlightFactor))); 8206170ac3e0ac67b0ea3716fe9e886a52c90c1bd3fcristy } 821ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(image); 8223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 823bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for ( ; x < (ssize_t) (image->columns-raise_info->width); x++) 824ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(image); 825bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for ( ; x < (ssize_t) image->columns; x++) 8263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 827883fde11debec15cedb05dc5d7228d8588066bc0cristy if (GetPixelReadMask(image,q) == 0) 82810a6c61544fb48d72f29ec8f9573bdcd52abf1b7cristy { 82910a6c61544fb48d72f29ec8f9573bdcd52abf1b7cristy q+=GetPixelChannels(image); 83010a6c61544fb48d72f29ec8f9573bdcd52abf1b7cristy continue; 83110a6c61544fb48d72f29ec8f9573bdcd52abf1b7cristy } 8326170ac3e0ac67b0ea3716fe9e886a52c90c1bd3fcristy for (i=0; i < (ssize_t) GetPixelChannels(image); i++) 8336170ac3e0ac67b0ea3716fe9e886a52c90c1bd3fcristy { 8345a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelChannel channel=GetPixelChannelChannel(image,i); 8355a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelTrait traits=GetPixelChannelTraits(image,channel); 836d09f880db9ae231429495434fc7f908bdce240f4cristy if ((traits & UpdatePixelTrait) == 0) 837d09f880db9ae231429495434fc7f908bdce240f4cristy continue; 8381eced097f7f4f51d5aa14d46079292fa1dcf0e77cristy q[i]=ClampToQuantum(QuantumScale*((double) q[i]*ShadowFactor+(double) 8391eced097f7f4f51d5aa14d46079292fa1dcf0e77cristy background*(QuantumRange-ShadowFactor))); 8406170ac3e0ac67b0ea3716fe9e886a52c90c1bd3fcristy } 841ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(image); 8423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 8433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (SyncCacheViewAuthenticPixels(image_view,exception) == MagickFalse) 8443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=MagickFalse; 8453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (image->progress_monitor != (MagickProgressMonitor) NULL) 8463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 8473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickBooleanType 8483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy proceed; 8493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 85026b649100680af051e65caec259bf535dbdb5b1acristy#if defined(MAGICKCORE_OPENMP_SUPPORT) 8519a5a52fdbea9190e1c868ba9298a6f64d1c896d1cristy #pragma omp critical (MagickCore_RaiseImage) 8529a5a52fdbea9190e1c868ba9298a6f64d1c896d1cristy#endif 8533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy proceed=SetImageProgress(image,RaiseImageTag,progress++,image->rows); 8543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (proceed == MagickFalse) 8553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=MagickFalse; 8563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 8573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 85826b649100680af051e65caec259bf535dbdb5b1acristy#if defined(MAGICKCORE_OPENMP_SUPPORT) 859d643247965337aae790abe62ef297abc3cc63c3dcristy #pragma omp parallel for schedule(static,4) shared(progress,status) \ 860cb7dfccc2e3a9d57a44294cde5228e6f3f27d003cristy magick_threads(image,image,1,1) 8613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 862bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (y=(ssize_t) (image->rows-raise_info->height); y < (ssize_t) image->rows; y++) 8633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 864bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 8656170ac3e0ac67b0ea3716fe9e886a52c90c1bd3fcristy i, 8663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x; 8673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 8684c08aed51c5899665ade97263692328eea4af106cristy register Quantum 86905d2ff7ebf21f659f5b11e45afb294e152f4330cdirk *magick_restrict q; 8703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 8713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == MagickFalse) 8723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 8733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=GetCacheViewAuthenticPixels(image_view,0,y,image->columns,1,exception); 874acd2ed254c18c254a0ab5aafa06d1645e5d079d8cristy if (q == (Quantum *) NULL) 8753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 8763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=MagickFalse; 8773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 8783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 879bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (x=0; x < (ssize_t) (image->rows-y); x++) 8803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 881883fde11debec15cedb05dc5d7228d8588066bc0cristy if (GetPixelReadMask(image,q) == 0) 88210a6c61544fb48d72f29ec8f9573bdcd52abf1b7cristy { 88310a6c61544fb48d72f29ec8f9573bdcd52abf1b7cristy q+=GetPixelChannels(image); 88410a6c61544fb48d72f29ec8f9573bdcd52abf1b7cristy continue; 88510a6c61544fb48d72f29ec8f9573bdcd52abf1b7cristy } 8866170ac3e0ac67b0ea3716fe9e886a52c90c1bd3fcristy for (i=0; i < (ssize_t) GetPixelChannels(image); i++) 8876170ac3e0ac67b0ea3716fe9e886a52c90c1bd3fcristy { 8885a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelChannel channel=GetPixelChannelChannel(image,i); 8895a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelTrait traits=GetPixelChannelTraits(image,channel); 890d09f880db9ae231429495434fc7f908bdce240f4cristy if ((traits & UpdatePixelTrait) == 0) 891d09f880db9ae231429495434fc7f908bdce240f4cristy continue; 8921eced097f7f4f51d5aa14d46079292fa1dcf0e77cristy q[i]=ClampToQuantum(QuantumScale*((double) q[i]*HighlightFactor+(double) 8931eced097f7f4f51d5aa14d46079292fa1dcf0e77cristy foreground*(QuantumRange-HighlightFactor))); 8946170ac3e0ac67b0ea3716fe9e886a52c90c1bd3fcristy } 895ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(image); 8963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 897bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for ( ; x < (ssize_t) (image->columns-(image->rows-y)); x++) 8983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 8996170ac3e0ac67b0ea3716fe9e886a52c90c1bd3fcristy for (i=0; i < (ssize_t) GetPixelChannels(image); i++) 9006170ac3e0ac67b0ea3716fe9e886a52c90c1bd3fcristy { 9015a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelChannel channel=GetPixelChannelChannel(image,i); 9025a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelTrait traits=GetPixelChannelTraits(image,channel); 903d09f880db9ae231429495434fc7f908bdce240f4cristy if ((traits & UpdatePixelTrait) == 0) 904d09f880db9ae231429495434fc7f908bdce240f4cristy continue; 905a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy q[i]=ClampToQuantum(QuantumScale*((double) q[i]*TroughFactor+ 906a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy (double) background*(QuantumRange-TroughFactor))); 9076170ac3e0ac67b0ea3716fe9e886a52c90c1bd3fcristy } 908ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(image); 9093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 910bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for ( ; x < (ssize_t) image->columns; x++) 9113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 912883fde11debec15cedb05dc5d7228d8588066bc0cristy if (GetPixelReadMask(image,q) == 0) 91310a6c61544fb48d72f29ec8f9573bdcd52abf1b7cristy { 91410a6c61544fb48d72f29ec8f9573bdcd52abf1b7cristy q+=GetPixelChannels(image); 91510a6c61544fb48d72f29ec8f9573bdcd52abf1b7cristy continue; 91610a6c61544fb48d72f29ec8f9573bdcd52abf1b7cristy } 9176170ac3e0ac67b0ea3716fe9e886a52c90c1bd3fcristy for (i=0; i < (ssize_t) GetPixelChannels(image); i++) 9186170ac3e0ac67b0ea3716fe9e886a52c90c1bd3fcristy { 9195a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelChannel channel=GetPixelChannelChannel(image,i); 9205a23c55ddcfdf6ae717dd42d8a1c1a2ff8c6305fcristy PixelTrait traits=GetPixelChannelTraits(image,channel); 921d09f880db9ae231429495434fc7f908bdce240f4cristy if ((traits & UpdatePixelTrait) == 0) 922d09f880db9ae231429495434fc7f908bdce240f4cristy continue; 9231eced097f7f4f51d5aa14d46079292fa1dcf0e77cristy q[i]=ClampToQuantum(QuantumScale*((double) q[i]*ShadowFactor+(double) 9241eced097f7f4f51d5aa14d46079292fa1dcf0e77cristy background*(QuantumRange-ShadowFactor))); 9256170ac3e0ac67b0ea3716fe9e886a52c90c1bd3fcristy } 926ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(image); 9273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 9283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (SyncCacheViewAuthenticPixels(image_view,exception) == MagickFalse) 9293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=MagickFalse; 9303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (image->progress_monitor != (MagickProgressMonitor) NULL) 9313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 9323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickBooleanType 9333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy proceed; 9343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 93526b649100680af051e65caec259bf535dbdb5b1acristy#if defined(MAGICKCORE_OPENMP_SUPPORT) 93669cfa02cfc7b694242c26efab9d8fde75adf3c38cristy #pragma omp critical (MagickCore_RaiseImage) 9373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 9383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy proceed=SetImageProgress(image,RaiseImageTag,progress++,image->rows); 9393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (proceed == MagickFalse) 9403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=MagickFalse; 9413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 9423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 9433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy image_view=DestroyCacheView(image_view); 9443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(status); 9453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 946