116881e68c6165c6191fc44151a8a4320e3dd1ffdcristy/* 23ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 33ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 43ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 57eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy% IIIII M M AAA GGGG EEEEE % 67eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy% I MM MM A A G E % 77eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy% I M M M AAAAA G GG EEE % 87eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy% I M M A A G G E % 97eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy% IIIII M M A A GGGG EEEEE % 103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% V V IIIII EEEEE W W % 12cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% V V I E W W % 13cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% V V I EEE W W W % 14cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% V V I E WW WW % 15cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% V IIIII EEEEE W W % 163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 187eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy% MagickCore Image View Methods % 193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Software Design % 21de984cdc3631106b1cbbb8d3972b76a0fc27e8e8cristy% Cristy % 223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% March 2003 % 233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 257ce65e7125a4e1df1a274ce373c537a9df9c16cdCristy% Copyright 1999-2016 ImageMagick Studio LLC, a non-profit organization % 263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% dedicated to making software imaging solutions freely available. % 273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% You may not use this file except in compliance with the License. You may % 293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% obtain a copy of the License at % 303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% http://www.imagemagick.org/script/license.php % 323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Unless required by applicable law or agreed to in writing, software % 343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% distributed under the License is distributed on an "AS IS" BASIS, % 353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. % 363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% See the License for the specific language governing permissions and % 373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% limitations under the License. % 383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Include declarations. 473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 484c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/studio.h" 494c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/MagickCore.h" 504c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/exception-private.h" 514c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/monitor-private.h" 524c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/thread-private.h" 533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Typedef declarations. 563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 577eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristystruct _ImageView 583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 59c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy char 60c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy *description; 61c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy 62c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy RectangleInfo 63c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy extent; 643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 657eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy Image 667eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy *image; 673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy CacheView 693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *view; 703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 71c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy ExceptionInfo 72c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy *exception; 73c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy 743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickBooleanType 753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy debug; 763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 77bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t 783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy signature; 793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy}; 803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 867eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy% C l o n e I m a g e V i e w % 873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9273b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% CloneImageView() makes a copy of the specified image view. 933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 947eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy% The format of the CloneImageView method is: 953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9673b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% ImageView *CloneImageView(const ImageView *image_view) 973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10073b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% o image_view: the image view. 1013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 10373b7d4c082e57242f06e402275b2c9b1bb4e8feecristyMagickExport ImageView *CloneImageView(const ImageView *image_view) 1043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 1057eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy ImageView 1063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *clone_view; 1073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 10873b7d4c082e57242f06e402275b2c9b1bb4e8feecristy assert(image_view != (ImageView *) NULL); 109e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(image_view->signature == MagickCoreSignature); 11073bd4a51b419e914565bdf204bf1540dc4c8ee26cristy clone_view=(ImageView *) AcquireMagickMemory(sizeof(*clone_view)); 1117eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy if (clone_view == (ImageView *) NULL) 1127eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed"); 1133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ResetMagickMemory(clone_view,0,sizeof(*clone_view)); 114c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy clone_view->description=ConstantString(image_view->description); 115c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy clone_view->extent=image_view->extent; 11673b7d4c082e57242f06e402275b2c9b1bb4e8feecristy clone_view->view=CloneCacheView(image_view->view); 117c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy clone_view->exception=AcquireExceptionInfo(); 118c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy InheritException(clone_view->exception,image_view->exception); 11973b7d4c082e57242f06e402275b2c9b1bb4e8feecristy clone_view->debug=image_view->debug; 120e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy clone_view->signature=MagickCoreSignature; 1213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(clone_view); 1223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 1233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 1253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1297eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy% D e s t r o y I m a g e V i e w % 1303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 13573b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% DestroyImageView() deallocates memory associated with a image view. 1363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1377eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy% The format of the DestroyImageView method is: 1383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 13973b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% ImageView *DestroyImageView(ImageView *image_view) 1403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 1423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14373b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% o image_view: the image view. 1443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 14673b7d4c082e57242f06e402275b2c9b1bb4e8feecristyMagickExport ImageView *DestroyImageView(ImageView *image_view) 1473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 14873b7d4c082e57242f06e402275b2c9b1bb4e8feecristy assert(image_view != (ImageView *) NULL); 149e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(image_view->signature == MagickCoreSignature); 150c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy if (image_view->description != (char *) NULL) 151c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy image_view->description=DestroyString(image_view->description); 15273b7d4c082e57242f06e402275b2c9b1bb4e8feecristy image_view->view=DestroyCacheView(image_view->view); 15373b7d4c082e57242f06e402275b2c9b1bb4e8feecristy image_view->exception=DestroyExceptionInfo(image_view->exception); 154e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy image_view->signature=(~MagickCoreSignature); 15573b7d4c082e57242f06e402275b2c9b1bb4e8feecristy image_view=(ImageView *) RelinquishMagickMemory(image_view); 15673b7d4c082e57242f06e402275b2c9b1bb4e8feecristy return(image_view); 1573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 1583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 1603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1647eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy% D u p l e x T r a n s f e r I m a g e V i e w I t e r a t o r % 1653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 17073b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% DuplexTransferImageViewIterator() iterates over three image views in 1713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% parallel and calls your transfer method for each scanline of the view. The 172c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy% source and duplex pixel extent is not confined to the image canvas-- that is 1733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% you can include negative offsets or widths or heights that exceed the image 17473b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% dimension. However, the destination image view is confined to the image 1753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% canvas-- that is no negative offsets or widths or heights that exceed the 1763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% image dimension are permitted. 1773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 178d6dfc0d795119799f97da48c731a7e30e1ed671dcristy% The callback signature is: 179d6dfc0d795119799f97da48c731a7e30e1ed671dcristy% 180d6dfc0d795119799f97da48c731a7e30e1ed671dcristy% MagickBooleanType DuplexTransferImageViewMethod(const ImageView *source, 181d6dfc0d795119799f97da48c731a7e30e1ed671dcristy% const ImageView *duplex,ImageView *destination,const ssize_t y, 182d6dfc0d795119799f97da48c731a7e30e1ed671dcristy% const int thread_id,void *context) 183d6dfc0d795119799f97da48c731a7e30e1ed671dcristy% 18458739475eaf89390210048221cd0fb7204e0908fcristy% Use this pragma if the view is not single threaded: 1853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% #pragma omp critical 1873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% to define a section of code in your callback transfer method that must be 1893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% executed by a single thread at a time. 1903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1917eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy% The format of the DuplexTransferImageViewIterator method is: 1923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1937eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy% MagickBooleanType DuplexTransferImageViewIterator(ImageView *source, 1947eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy% ImageView *duplex,ImageView *destination, 1957eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy% DuplexTransferImageViewMethod transfer,void *context) 1963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 1983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 19973b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% o source: the source image view. 2003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 20173b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% o duplex: the duplex image view. 2023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 20373b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% o destination: the destination image view. 2043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o transfer: the transfer callback method. 2063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o context: the user defined context. 2083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 2107eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristyMagickExport MagickBooleanType DuplexTransferImageViewIterator( 2117eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy ImageView *source,ImageView *duplex,ImageView *destination, 2127eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy DuplexTransferImageViewMethod transfer,void *context) 2133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 2143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Image 2153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *destination_image, 2163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *source_image; 2173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickBooleanType 2193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 2203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 221cee9711bbc334b5677d5ec4ea1cc70340d35ee35cristy MagickOffsetType 222cee9711bbc334b5677d5ec4ea1cc70340d35ee35cristy progress; 223cee9711bbc334b5677d5ec4ea1cc70340d35ee35cristy 22437618d6dda040a999610efa231f6a547fb703b25glennrp#if defined(MAGICKCORE_OPENMP_SUPPORT) 225ac245f8a51ea65b085d751c41d8ca4b426bdfe5bcristy size_t 22626b649100680af051e65caec259bf535dbdb5b1acristy height; 22737618d6dda040a999610efa231f6a547fb703b25glennrp#endif 228ac245f8a51ea65b085d751c41d8ca4b426bdfe5bcristy 229cee9711bbc334b5677d5ec4ea1cc70340d35ee35cristy ssize_t 230cee9711bbc334b5677d5ec4ea1cc70340d35ee35cristy y; 231cee9711bbc334b5677d5ec4ea1cc70340d35ee35cristy 2327eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy assert(source != (ImageView *) NULL); 233e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(source->signature == MagickCoreSignature); 2347eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy if (transfer == (DuplexTransferImageViewMethod) NULL) 2353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 2367eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy source_image=source->image; 2377eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy destination_image=destination->image; 2387c3af951210f34d3f244b31f06ee291e5be8ecb7cristy status=SetImageStorageClass(destination_image,DirectClass, 2397c3af951210f34d3f244b31f06ee291e5be8ecb7cristy destination->exception); 2407c3af951210f34d3f244b31f06ee291e5be8ecb7cristy if (status == MagickFalse) 2413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 2423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=MagickTrue; 2433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy progress=0; 24437618d6dda040a999610efa231f6a547fb703b25glennrp#if defined(MAGICKCORE_OPENMP_SUPPORT) 245ac245f8a51ea65b085d751c41d8ca4b426bdfe5bcristy height=source->extent.height-source->extent.y; 2469a5a52fdbea9190e1c868ba9298a6f64d1c896d1cristy #pragma omp parallel for schedule(static,4) shared(progress,status) \ 2475e6b259130f9dbe0da4666f734937017babe573acristy magick_threads(source_image,destination_image,height,1) 2483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 249c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy for (y=source->extent.y; y < (ssize_t) source->extent.height; y++) 2503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2515c9e6f2ec2e7738ede83902931da0f80db60f565cristy const int 2525c9e6f2ec2e7738ede83902931da0f80db60f565cristy id = GetOpenMPThreadId(); 253ad740057043b3db03f329993b8af90932852ef06cristy 2543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickBooleanType 2553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy sync; 2563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2574c08aed51c5899665ade97263692328eea4af106cristy register const Quantum 25805d2ff7ebf21f659f5b11e45afb294e152f4330cdirk *magick_restrict duplex_pixels, 25905d2ff7ebf21f659f5b11e45afb294e152f4330cdirk *magick_restrict pixels; 2603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2614c08aed51c5899665ade97263692328eea4af106cristy register Quantum 26205d2ff7ebf21f659f5b11e45afb294e152f4330cdirk *magick_restrict destination_pixels; 2633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == MagickFalse) 2653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 266c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy pixels=GetCacheViewVirtualPixels(source->view,source->extent.x,y, 267c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy source->extent.width,1,source->exception); 2684c08aed51c5899665ade97263692328eea4af106cristy if (pixels == (const Quantum *) NULL) 2693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=MagickFalse; 2713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 2723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 273c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy duplex_pixels=GetCacheViewVirtualPixels(duplex->view,duplex->extent.x,y, 274c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy duplex->extent.width,1,duplex->exception); 2754c08aed51c5899665ade97263692328eea4af106cristy if (duplex_pixels == (const Quantum *) NULL) 2763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=MagickFalse; 2783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 2793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy destination_pixels=GetCacheViewAuthenticPixels(destination->view, 2817c3af951210f34d3f244b31f06ee291e5be8ecb7cristy destination->extent.x,y,destination->extent.width,1, 2827c3af951210f34d3f244b31f06ee291e5be8ecb7cristy destination->exception); 2834c08aed51c5899665ade97263692328eea4af106cristy if (destination_pixels == (Quantum *) NULL) 2843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=MagickFalse; 2863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 2873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 288c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy if (transfer(source,duplex,destination,y,id,context) == MagickFalse) 2893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=MagickFalse; 2907c3af951210f34d3f244b31f06ee291e5be8ecb7cristy sync=SyncCacheViewAuthenticPixels(destination->view,destination->exception); 2913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (sync == MagickFalse) 2927c3af951210f34d3f244b31f06ee291e5be8ecb7cristy status=MagickFalse; 2933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (source_image->progress_monitor != (MagickProgressMonitor) NULL) 2943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickBooleanType 2963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy proceed; 2973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 298b5d5f725fef80ff5d50db3111c05a1a521b81e7fcristy#if defined(MAGICKCORE_OPENMP_SUPPORT) 299ac245f8a51ea65b085d751c41d8ca4b426bdfe5bcristy #pragma omp critical (MagickCore_DuplexTransferImageViewIterator) 3003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 301c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy proceed=SetImageProgress(source_image,source->description,progress++, 302c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy source->extent.height); 3033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (proceed == MagickFalse) 3043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=MagickFalse; 3053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(status); 3083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 3093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 3113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3157c3af951210f34d3f244b31f06ee291e5be8ecb7cristy% G e t I m a g e V i e w A u t h e n t i c M e t a c o n t e n t % 316cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% % 317cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% % 318cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% % 319cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 320cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% 3214c08aed51c5899665ade97263692328eea4af106cristy% GetImageViewAuthenticMetacontent() returns the image view authentic 3224c08aed51c5899665ade97263692328eea4af106cristy% meta-content. 323cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% 324cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% The format of the GetImageViewAuthenticPixels method is: 325cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% 3264c08aed51c5899665ade97263692328eea4af106cristy% void *GetImageViewAuthenticMetacontent( 3274c08aed51c5899665ade97263692328eea4af106cristy% const ImageView *image_view) 328cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% 329cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% A description of each parameter follows: 330cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% 33173b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% o image_view: the image view. 332cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% 333cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy*/ 3344c08aed51c5899665ade97263692328eea4af106cristyMagickExport void *GetImageViewAuthenticMetacontent( 33573b7d4c082e57242f06e402275b2c9b1bb4e8feecristy const ImageView *image_view) 336cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy{ 33773b7d4c082e57242f06e402275b2c9b1bb4e8feecristy assert(image_view != (ImageView *) NULL); 338e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(image_view->signature == MagickCoreSignature); 3394c08aed51c5899665ade97263692328eea4af106cristy return(GetCacheViewAuthenticMetacontent(image_view->view)); 340cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy} 341cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy 342cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy/* 343cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 344cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% % 345cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% % 346cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% % 347cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% G e t I m a g e V i e w A u t h e n t i c P i x e l s % 348cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% % 349cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% % 350cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% % 351cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 352cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% 35373b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% GetImageViewAuthenticPixels() returns the image view authentic pixels. 354cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% 355cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% The format of the GetImageViewAuthenticPixels method is: 356cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% 3574c08aed51c5899665ade97263692328eea4af106cristy% Quantum *GetImageViewAuthenticPixels(const ImageView *image_view) 358cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% 359cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% A description of each parameter follows: 360cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% 36173b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% o image_view: the image view. 362cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% 363cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy*/ 3644c08aed51c5899665ade97263692328eea4af106cristyMagickExport Quantum *GetImageViewAuthenticPixels( 36573b7d4c082e57242f06e402275b2c9b1bb4e8feecristy const ImageView *image_view) 366cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy{ 36773b7d4c082e57242f06e402275b2c9b1bb4e8feecristy assert(image_view != (ImageView *) NULL); 368e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(image_view->signature == MagickCoreSignature); 36973b7d4c082e57242f06e402275b2c9b1bb4e8feecristy return(GetCacheViewAuthenticPixelQueue(image_view->view)); 370cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy} 371cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy 372cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy/* 373cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 374cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% % 375cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% % 376cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% % 3777eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy% G e t I m a g e V i e w E x c e p t i o n % 3783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3837eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy% GetImageViewException() returns the severity, reason, and description of any 38473b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% error that occurs when utilizing a image view. 3853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3867eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy% The format of the GetImageViewException method is: 3873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 38873b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% char *GetImageViewException(const PixelImage *image_view, 3893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ExceptionType *severity) 3903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 3923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 39373b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% o image_view: the pixel image_view. 3943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o severity: the severity of the error is returned here. 3963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 39873b7d4c082e57242f06e402275b2c9b1bb4e8feecristyMagickExport char *GetImageViewException(const ImageView *image_view, 3993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ExceptionType *severity) 4003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 4013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 4023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *description; 4033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 40473b7d4c082e57242f06e402275b2c9b1bb4e8feecristy assert(image_view != (const ImageView *) NULL); 405e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(image_view->signature == MagickCoreSignature); 4063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(severity != (ExceptionType *) NULL); 40773b7d4c082e57242f06e402275b2c9b1bb4e8feecristy *severity=image_view->exception->severity; 408151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy description=(char *) AcquireQuantumMemory(2UL*MagickPathExtent, 4093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy sizeof(*description)); 4103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (description == (char *) NULL) 4117eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed"); 4123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *description='\0'; 41373b7d4c082e57242f06e402275b2c9b1bb4e8feecristy if (image_view->exception->reason != (char *) NULL) 4143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(description,GetLocaleExceptionMessage( 41573b7d4c082e57242f06e402275b2c9b1bb4e8feecristy image_view->exception->severity,image_view->exception->reason), 416151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy MagickPathExtent); 41773b7d4c082e57242f06e402275b2c9b1bb4e8feecristy if (image_view->exception->description != (char *) NULL) 4183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 419151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) ConcatenateMagickString(description," (",MagickPathExtent); 4203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ConcatenateMagickString(description,GetLocaleExceptionMessage( 42173b7d4c082e57242f06e402275b2c9b1bb4e8feecristy image_view->exception->severity,image_view->exception->description), 422151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy MagickPathExtent); 423151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) ConcatenateMagickString(description,")",MagickPathExtent); 4243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 4253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(description); 4263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 4273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 4293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 433c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy% G e t I m a g e V i e w E x t e n t % 4343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 439c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy% GetImageViewExtent() returns the image view extent. 4403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 441c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy% The format of the GetImageViewExtent method is: 4423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 443c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy% RectangleInfo GetImageViewExtent(const ImageView *image_view) 4443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 4463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 44773b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% o image_view: the image view. 4483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 450c3ebda260e2cdca5c0efa27addf0a66748d7c6facristyMagickExport RectangleInfo GetImageViewExtent(const ImageView *image_view) 4513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 45273b7d4c082e57242f06e402275b2c9b1bb4e8feecristy assert(image_view != (ImageView *) NULL); 453e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(image_view->signature == MagickCoreSignature); 454c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy return(image_view->extent); 45573b7d4c082e57242f06e402275b2c9b1bb4e8feecristy} 45673b7d4c082e57242f06e402275b2c9b1bb4e8feecristy 45773b7d4c082e57242f06e402275b2c9b1bb4e8feecristy/* 45873b7d4c082e57242f06e402275b2c9b1bb4e8feecristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 45973b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% % 46073b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% % 46173b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% % 46273b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% G e t I m a g e V i e w I m a g e % 46373b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% % 46473b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% % 46573b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% % 46673b7d4c082e57242f06e402275b2c9b1bb4e8feecristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 46773b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% 46873b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% GetImageViewImage() returns the image associated with the image view. 46973b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% 47073b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% The format of the GetImageViewImage method is: 47173b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% 47273b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% MagickCore *GetImageViewImage(const ImageView *image_view) 47373b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% 47473b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% A description of each parameter follows: 47573b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% 47673b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% o image_view: the image view. 47773b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% 47873b7d4c082e57242f06e402275b2c9b1bb4e8feecristy*/ 47973b7d4c082e57242f06e402275b2c9b1bb4e8feecristyMagickExport Image *GetImageViewImage(const ImageView *image_view) 48073b7d4c082e57242f06e402275b2c9b1bb4e8feecristy{ 48173b7d4c082e57242f06e402275b2c9b1bb4e8feecristy assert(image_view != (ImageView *) NULL); 482e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(image_view->signature == MagickCoreSignature); 48373b7d4c082e57242f06e402275b2c9b1bb4e8feecristy return(image_view->image); 4843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 4853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 4873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4917eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy% G e t I m a g e V i e w I t e r a t o r % 4923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 49773b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% GetImageViewIterator() iterates over the image view in parallel and calls 498c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy% your get method for each scanline of the view. The pixel extent is 4993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% not confined to the image canvas-- that is you can include negative offsets 5003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% or widths or heights that exceed the image dimension. Any updates to 5013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% the pixels in your callback are ignored. 5023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 503d6dfc0d795119799f97da48c731a7e30e1ed671dcristy% The callback signature is: 504d6dfc0d795119799f97da48c731a7e30e1ed671dcristy% 505d6dfc0d795119799f97da48c731a7e30e1ed671dcristy% MagickBooleanType GetImageViewMethod(const ImageView *source, 506d6dfc0d795119799f97da48c731a7e30e1ed671dcristy% const ssize_t y,const int thread_id,void *context) 507d6dfc0d795119799f97da48c731a7e30e1ed671dcristy% 50858739475eaf89390210048221cd0fb7204e0908fcristy% Use this pragma if the view is not single threaded: 5093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% #pragma omp critical 5113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% to define a section of code in your callback get method that must be 5133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% executed by a single thread at a time. 5143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5157eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy% The format of the GetImageViewIterator method is: 5163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5177eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy% MagickBooleanType GetImageViewIterator(ImageView *source, 5187eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy% GetImageViewMethod get,void *context) 5193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 5213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 52273b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% o source: the source image view. 5233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o get: the get callback method. 5253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o context: the user defined context. 5273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 5297eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristyMagickExport MagickBooleanType GetImageViewIterator(ImageView *source, 5307eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy GetImageViewMethod get,void *context) 5313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 5323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Image 5333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *source_image; 5343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickBooleanType 5363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 5373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 538cee9711bbc334b5677d5ec4ea1cc70340d35ee35cristy MagickOffsetType 539cee9711bbc334b5677d5ec4ea1cc70340d35ee35cristy progress; 540cee9711bbc334b5677d5ec4ea1cc70340d35ee35cristy 54137618d6dda040a999610efa231f6a547fb703b25glennrp#if defined(MAGICKCORE_OPENMP_SUPPORT) 542ac245f8a51ea65b085d751c41d8ca4b426bdfe5bcristy size_t 54326b649100680af051e65caec259bf535dbdb5b1acristy height; 54437618d6dda040a999610efa231f6a547fb703b25glennrp#endif 545ac245f8a51ea65b085d751c41d8ca4b426bdfe5bcristy 546cee9711bbc334b5677d5ec4ea1cc70340d35ee35cristy ssize_t 547cee9711bbc334b5677d5ec4ea1cc70340d35ee35cristy y; 548cee9711bbc334b5677d5ec4ea1cc70340d35ee35cristy 5497eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy assert(source != (ImageView *) NULL); 550e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(source->signature == MagickCoreSignature); 5517eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy if (get == (GetImageViewMethod) NULL) 5523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 5537eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy source_image=source->image; 5543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=MagickTrue; 5553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy progress=0; 5569d9f0e5f677a2d995426ffdefc2c17473e021be8glennrp#if defined(MAGICKCORE_OPENMP_SUPPORT) 557ac245f8a51ea65b085d751c41d8ca4b426bdfe5bcristy height=source->extent.height-source->extent.y; 5589a5a52fdbea9190e1c868ba9298a6f64d1c896d1cristy #pragma omp parallel for schedule(static,4) shared(progress,status) \ 5595e6b259130f9dbe0da4666f734937017babe573acristy magick_threads(source_image,source_image,height,1) 5603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 561c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy for (y=source->extent.y; y < (ssize_t) source->extent.height; y++) 5623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 5635c9e6f2ec2e7738ede83902931da0f80db60f565cristy const int 5645c9e6f2ec2e7738ede83902931da0f80db60f565cristy id = GetOpenMPThreadId(); 565ad740057043b3db03f329993b8af90932852ef06cristy 5664c08aed51c5899665ade97263692328eea4af106cristy register const Quantum 5673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *pixels; 5683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == MagickFalse) 5703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 571c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy pixels=GetCacheViewVirtualPixels(source->view,source->extent.x,y, 572c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy source->extent.width,1,source->exception); 5734c08aed51c5899665ade97263692328eea4af106cristy if (pixels == (const Quantum *) NULL) 5743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 5753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=MagickFalse; 5763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 5773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 578d6dfc0d795119799f97da48c731a7e30e1ed671dcristy if (get(source,y,id,context) == MagickFalse) 5793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=MagickFalse; 5803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (source_image->progress_monitor != (MagickProgressMonitor) NULL) 5813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 5823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickBooleanType 5833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy proceed; 5843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 585b5d5f725fef80ff5d50db3111c05a1a521b81e7fcristy#if defined(MAGICKCORE_OPENMP_SUPPORT) 586ac245f8a51ea65b085d751c41d8ca4b426bdfe5bcristy #pragma omp critical (MagickCore_GetImageViewIterator) 5873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 588c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy proceed=SetImageProgress(source_image,source->description,progress++, 589c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy source->extent.height); 5903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (proceed == MagickFalse) 5913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=MagickFalse; 5923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 5933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 5943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(status); 5953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 5963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 5983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6024c08aed51c5899665ade97263692328eea4af106cristy% G e t I m a g e V i e w V i r t u a l M e t a c o n t e n t % 6033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6084c08aed51c5899665ade97263692328eea4af106cristy% GetImageViewVirtualMetacontent() returns the image view virtual 6094c08aed51c5899665ade97263692328eea4af106cristy% meta-content. 6103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6114c08aed51c5899665ade97263692328eea4af106cristy% The format of the GetImageViewVirtualMetacontent method is: 6123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6134c08aed51c5899665ade97263692328eea4af106cristy% const void *GetImageViewVirtualMetacontent( 61473b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% const ImageView *image_view) 6153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 6173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 61873b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% o image_view: the image view. 6193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 6214c08aed51c5899665ade97263692328eea4af106cristyMagickExport const void *GetImageViewVirtualMetacontent( 62273b7d4c082e57242f06e402275b2c9b1bb4e8feecristy const ImageView *image_view) 6233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 62473b7d4c082e57242f06e402275b2c9b1bb4e8feecristy assert(image_view != (ImageView *) NULL); 625e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(image_view->signature == MagickCoreSignature); 6264c08aed51c5899665ade97263692328eea4af106cristy return(GetCacheViewVirtualMetacontent(image_view->view)); 627cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy} 628cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy 629cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy/* 630cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 631cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% % 632cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% % 633cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% % 634cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% G e t I m a g e V i e w V i r t u a l P i x e l s % 635cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% % 636cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% % 637cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% % 638cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 639cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% 64073b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% GetImageViewVirtualPixels() returns the image view virtual pixels. 641cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% 642cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% The format of the GetImageViewVirtualPixels method is: 643cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% 6444c08aed51c5899665ade97263692328eea4af106cristy% const Quantum *GetImageViewVirtualPixels(const ImageView *image_view) 645cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% 646cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% A description of each parameter follows: 647cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% 64873b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% o image_view: the image view. 649cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy% 650cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy*/ 6514c08aed51c5899665ade97263692328eea4af106cristyMagickExport const Quantum *GetImageViewVirtualPixels( 65273b7d4c082e57242f06e402275b2c9b1bb4e8feecristy const ImageView *image_view) 653cc34c496cc82dec84cc1b245d3188bac5fb03b4dcristy{ 65473b7d4c082e57242f06e402275b2c9b1bb4e8feecristy assert(image_view != (ImageView *) NULL); 655e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(image_view->signature == MagickCoreSignature); 65673b7d4c082e57242f06e402275b2c9b1bb4e8feecristy return(GetCacheViewVirtualPixelQueue(image_view->view)); 6573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 6583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 6593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 6603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6647eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy% I s I m a g e V i e w % 6653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 67073b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% IsImageView() returns MagickTrue if the the parameter is verified as a image 67173b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% view object. 6723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6737eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy% The format of the IsImageView method is: 6743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 67573b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% MagickBooleanType IsImageView(const ImageView *image_view) 6763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 6783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 67973b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% o image_view: the image view. 6803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 68273b7d4c082e57242f06e402275b2c9b1bb4e8feecristyMagickExport MagickBooleanType IsImageView(const ImageView *image_view) 6833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 68473b7d4c082e57242f06e402275b2c9b1bb4e8feecristy if (image_view == (const ImageView *) NULL) 6853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 686e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy if (image_view->signature != MagickCoreSignature) 6873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 6883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickTrue); 6893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 6903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 6913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 6923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6967eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy% N e w I m a g e V i e w % 6973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 70273b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% NewImageView() returns a image view required for all other methods in the 70373b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% Image View API. 7043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7057eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy% The format of the NewImageView method is: 7063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 707db070957cf6bf959df9283a482377e8854c3d4d2cristy% ImageView *NewImageView(MagickCore *wand,ExceptionInfo *exception) 7083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 7103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 711db070957cf6bf959df9283a482377e8854c3d4d2cristy% o image: the image. 712db070957cf6bf959df9283a482377e8854c3d4d2cristy% 713db070957cf6bf959df9283a482377e8854c3d4d2cristy% o exception: return any errors or warnings in this structure. 7143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 716db070957cf6bf959df9283a482377e8854c3d4d2cristyMagickExport ImageView *NewImageView(Image *image,ExceptionInfo *exception) 7173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 7187eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy ImageView 71973b7d4c082e57242f06e402275b2c9b1bb4e8feecristy *image_view; 7203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7217eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy assert(image != (Image *) NULL); 722e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(image->signature == MagickCoreSignature); 72373bd4a51b419e914565bdf204bf1540dc4c8ee26cristy image_view=(ImageView *) AcquireMagickMemory(sizeof(*image_view)); 72473b7d4c082e57242f06e402275b2c9b1bb4e8feecristy if (image_view == (ImageView *) NULL) 7257eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed"); 72673b7d4c082e57242f06e402275b2c9b1bb4e8feecristy (void) ResetMagickMemory(image_view,0,sizeof(*image_view)); 727c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy image_view->description=ConstantString("ImageView"); 72873b7d4c082e57242f06e402275b2c9b1bb4e8feecristy image_view->image=image; 72946ff2676b1044ea4101ac7a59b83289cd8f6cfdacristy image_view->view=AcquireVirtualCacheView(image_view->image,exception); 730c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy image_view->extent.width=image->columns; 731c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy image_view->extent.height=image->rows; 732c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy image_view->extent.x=0; 733c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy image_view->extent.y=0; 734c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy image_view->exception=AcquireExceptionInfo(); 73573b7d4c082e57242f06e402275b2c9b1bb4e8feecristy image_view->debug=IsEventLogging(); 736e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy image_view->signature=MagickCoreSignature; 73773b7d4c082e57242f06e402275b2c9b1bb4e8feecristy return(image_view); 7383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 7393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 7413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7457eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy% N e w I m a g e V i e w R e g i o n % 7463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 75173b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% NewImageViewRegion() returns a image view required for all other methods 75273b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% in the Image View API. 7533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7547eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy% The format of the NewImageViewRegion method is: 7553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7567eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy% ImageView *NewImageViewRegion(MagickCore *wand,const ssize_t x, 757db070957cf6bf959df9283a482377e8854c3d4d2cristy% const ssize_t y,const size_t width,const size_t height, 758db070957cf6bf959df9283a482377e8854c3d4d2cristy% ExceptionInfo *exception) 7593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 7613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o wand: the magick wand. 7633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 764c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy% o x,y,columns,rows: These values define the perimeter of a extent of 7653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% pixel_wands view. 7663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 767db070957cf6bf959df9283a482377e8854c3d4d2cristy% o exception: return any errors or warnings in this structure. 768db070957cf6bf959df9283a482377e8854c3d4d2cristy% 7693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 7707eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristyMagickExport ImageView *NewImageViewRegion(Image *image,const ssize_t x, 771db070957cf6bf959df9283a482377e8854c3d4d2cristy const ssize_t y,const size_t width,const size_t height, 772db070957cf6bf959df9283a482377e8854c3d4d2cristy ExceptionInfo *exception) 7733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 7747eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy ImageView 77573b7d4c082e57242f06e402275b2c9b1bb4e8feecristy *image_view; 7763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7777eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy assert(image != (Image *) NULL); 778e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(image->signature == MagickCoreSignature); 77973bd4a51b419e914565bdf204bf1540dc4c8ee26cristy image_view=(ImageView *) AcquireMagickMemory(sizeof(*image_view)); 78073b7d4c082e57242f06e402275b2c9b1bb4e8feecristy if (image_view == (ImageView *) NULL) 7817eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed"); 78273b7d4c082e57242f06e402275b2c9b1bb4e8feecristy (void) ResetMagickMemory(image_view,0,sizeof(*image_view)); 783c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy image_view->description=ConstantString("ImageView"); 78446ff2676b1044ea4101ac7a59b83289cd8f6cfdacristy image_view->view=AcquireVirtualCacheView(image_view->image,exception); 78573b7d4c082e57242f06e402275b2c9b1bb4e8feecristy image_view->image=image; 786c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy image_view->extent.width=width; 787c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy image_view->extent.height=height; 788c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy image_view->extent.x=x; 789c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy image_view->extent.y=y; 790c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy image_view->exception=AcquireExceptionInfo(); 79173b7d4c082e57242f06e402275b2c9b1bb4e8feecristy image_view->debug=IsEventLogging(); 792e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy image_view->signature=MagickCoreSignature; 79373b7d4c082e57242f06e402275b2c9b1bb4e8feecristy return(image_view); 7943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 7953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 7973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 801c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy% S e t I m a g e V i e w D e s c r i p t i o n % 802c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy% % 803c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy% % 804c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy% % 805c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 806c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy% 807c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy% SetImageViewDescription() associates a description with an image view. 808c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy% 809c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy% The format of the SetImageViewDescription method is: 810c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy% 811c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy% void SetImageViewDescription(ImageView *image_view, 812c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy% const char *description) 813c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy% 814c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy% A description of each parameter follows: 815c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy% 816c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy% o image_view: the image view. 817c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy% 818c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy% o description: the image view description. 819c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy% 820c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy*/ 821c3ebda260e2cdca5c0efa27addf0a66748d7c6facristyMagickExport void SetImageViewDescription(ImageView *image_view, 822c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy const char *description) 823c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy{ 824c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy assert(image_view != (ImageView *) NULL); 825e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(image_view->signature == MagickCoreSignature); 826c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy image_view->description=ConstantString(description); 827c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy} 828c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy 829c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy/* 830c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 831c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy% % 832c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy% % 833c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy% % 8347eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy% S e t I m a g e V i e w I t e r a t o r % 8353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 84073b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% SetImageViewIterator() iterates over the image view in parallel and calls 841c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy% your set method for each scanline of the view. The pixel extent is 8423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% confined to the image canvas-- that is no negative offsets or widths or 8433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% heights that exceed the image dimension. The pixels are initiallly 8443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% undefined and any settings you make in the callback method are automagically 8453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% synced back to your image. 8463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 847d6dfc0d795119799f97da48c731a7e30e1ed671dcristy% The callback signature is: 848d6dfc0d795119799f97da48c731a7e30e1ed671dcristy% 849d6dfc0d795119799f97da48c731a7e30e1ed671dcristy% MagickBooleanType SetImageViewMethod(ImageView *destination, 850d6dfc0d795119799f97da48c731a7e30e1ed671dcristy% const ssize_t y,const int thread_id,void *context) 851d6dfc0d795119799f97da48c731a7e30e1ed671dcristy% 85258739475eaf89390210048221cd0fb7204e0908fcristy% Use this pragma if the view is not single threaded: 8533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% #pragma omp critical 8553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% to define a section of code in your callback set method that must be 8573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% executed by a single thread at a time. 8583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8597eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy% The format of the SetImageViewIterator method is: 8603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8617eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy% MagickBooleanType SetImageViewIterator(ImageView *destination, 8627eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy% SetImageViewMethod set,void *context) 8633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 8653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 86673b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% o destination: the image view. 8673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o set: the set callback method. 8693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o context: the user defined context. 8713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 8737eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristyMagickExport MagickBooleanType SetImageViewIterator(ImageView *destination, 8747eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy SetImageViewMethod set,void *context) 8753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 8763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Image 8773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *destination_image; 8783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 8793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickBooleanType 8803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 8813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 882cee9711bbc334b5677d5ec4ea1cc70340d35ee35cristy MagickOffsetType 883cee9711bbc334b5677d5ec4ea1cc70340d35ee35cristy progress; 884cee9711bbc334b5677d5ec4ea1cc70340d35ee35cristy 88537618d6dda040a999610efa231f6a547fb703b25glennrp#if defined(MAGICKCORE_OPENMP_SUPPORT) 886ac245f8a51ea65b085d751c41d8ca4b426bdfe5bcristy size_t 88726b649100680af051e65caec259bf535dbdb5b1acristy height; 88837618d6dda040a999610efa231f6a547fb703b25glennrp#endif 889ac245f8a51ea65b085d751c41d8ca4b426bdfe5bcristy 890cee9711bbc334b5677d5ec4ea1cc70340d35ee35cristy ssize_t 891cee9711bbc334b5677d5ec4ea1cc70340d35ee35cristy y; 892cee9711bbc334b5677d5ec4ea1cc70340d35ee35cristy 8937eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy assert(destination != (ImageView *) NULL); 894e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(destination->signature == MagickCoreSignature); 8957eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy if (set == (SetImageViewMethod) NULL) 8963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 8977eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy destination_image=destination->image; 8987c3af951210f34d3f244b31f06ee291e5be8ecb7cristy status=SetImageStorageClass(destination_image,DirectClass, 8997c3af951210f34d3f244b31f06ee291e5be8ecb7cristy destination->exception); 9007c3af951210f34d3f244b31f06ee291e5be8ecb7cristy if (status == MagickFalse) 9013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 9023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=MagickTrue; 9033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy progress=0; 90437618d6dda040a999610efa231f6a547fb703b25glennrp#if defined(MAGICKCORE_OPENMP_SUPPORT) 905ac245f8a51ea65b085d751c41d8ca4b426bdfe5bcristy height=destination->extent.height-destination->extent.y; 9069a5a52fdbea9190e1c868ba9298a6f64d1c896d1cristy #pragma omp parallel for schedule(static,4) shared(progress,status) \ 9075e6b259130f9dbe0da4666f734937017babe573acristy magick_threads(destination_image,destination_image,height,1) 9083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 909c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy for (y=destination->extent.y; y < (ssize_t) destination->extent.height; y++) 9103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 9115c9e6f2ec2e7738ede83902931da0f80db60f565cristy const int 9125c9e6f2ec2e7738ede83902931da0f80db60f565cristy id = GetOpenMPThreadId(); 913ad740057043b3db03f329993b8af90932852ef06cristy 9143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickBooleanType 9153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy sync; 9163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9174c08aed51c5899665ade97263692328eea4af106cristy register Quantum 91805d2ff7ebf21f659f5b11e45afb294e152f4330cdirk *magick_restrict pixels; 9193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == MagickFalse) 9213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 922c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy pixels=GetCacheViewAuthenticPixels(destination->view,destination->extent.x, 9237c3af951210f34d3f244b31f06ee291e5be8ecb7cristy y,destination->extent.width,1,destination->exception); 9244c08aed51c5899665ade97263692328eea4af106cristy if (pixels == (Quantum *) NULL) 9253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 9263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=MagickFalse; 9273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 9283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 929d6dfc0d795119799f97da48c731a7e30e1ed671dcristy if (set(destination,y,id,context) == MagickFalse) 9303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=MagickFalse; 9317c3af951210f34d3f244b31f06ee291e5be8ecb7cristy sync=SyncCacheViewAuthenticPixels(destination->view,destination->exception); 9323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (sync == MagickFalse) 9337c3af951210f34d3f244b31f06ee291e5be8ecb7cristy status=MagickFalse; 9343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (destination_image->progress_monitor != (MagickProgressMonitor) NULL) 9353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 9363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickBooleanType 9373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy proceed; 9383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 939b5d5f725fef80ff5d50db3111c05a1a521b81e7fcristy#if defined(MAGICKCORE_OPENMP_SUPPORT) 940ac245f8a51ea65b085d751c41d8ca4b426bdfe5bcristy #pragma omp critical (MagickCore_SetImageViewIterator) 9413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 942c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy proceed=SetImageProgress(destination_image,destination->description, 943c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy progress++,destination->extent.height); 9443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (proceed == MagickFalse) 9453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=MagickFalse; 9463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 9473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 9483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(status); 9493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 9503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 9523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9567eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy% T r a n s f e r I m a g e V i e w I t e r a t o r % 9573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 96273b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% TransferImageViewIterator() iterates over two image views in parallel and 9633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% calls your transfer method for each scanline of the view. The source pixel 964c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy% extent is not confined to the image canvas-- that is you can include 9653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% negative offsets or widths or heights that exceed the image dimension. 96673b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% However, the destination image view is confined to the image canvas-- that 9673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% is no negative offsets or widths or heights that exceed the image dimension 9683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% are permitted. 9693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 970d6dfc0d795119799f97da48c731a7e30e1ed671dcristy% The callback signature is: 971d6dfc0d795119799f97da48c731a7e30e1ed671dcristy% 972d6dfc0d795119799f97da48c731a7e30e1ed671dcristy% MagickBooleanType TransferImageViewMethod(const ImageView *source, 973d6dfc0d795119799f97da48c731a7e30e1ed671dcristy% ImageView *destination,const ssize_t y,const int thread_id, 974d6dfc0d795119799f97da48c731a7e30e1ed671dcristy% void *context) 975d6dfc0d795119799f97da48c731a7e30e1ed671dcristy% 97658739475eaf89390210048221cd0fb7204e0908fcristy% Use this pragma if the view is not single threaded: 9773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% #pragma omp critical 9793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% to define a section of code in your callback transfer method that must be 9813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% executed by a single thread at a time. 9823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9837eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy% The format of the TransferImageViewIterator method is: 9843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9857eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy% MagickBooleanType TransferImageViewIterator(ImageView *source, 9867eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy% ImageView *destination,TransferImageViewMethod transfer,void *context) 9873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 9893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 99073b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% o source: the source image view. 9913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 99273b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% o destination: the destination image view. 9933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o transfer: the transfer callback method. 9953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o context: the user defined context. 9973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 9997eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristyMagickExport MagickBooleanType TransferImageViewIterator(ImageView *source, 10007eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy ImageView *destination,TransferImageViewMethod transfer,void *context) 10013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 10023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Image 10033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *destination_image, 10043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *source_image; 10053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 10063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickBooleanType 10073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 10083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1009cee9711bbc334b5677d5ec4ea1cc70340d35ee35cristy MagickOffsetType 1010cee9711bbc334b5677d5ec4ea1cc70340d35ee35cristy progress; 1011cee9711bbc334b5677d5ec4ea1cc70340d35ee35cristy 101237618d6dda040a999610efa231f6a547fb703b25glennrp#if defined(MAGICKCORE_OPENMP_SUPPORT) 1013ac245f8a51ea65b085d751c41d8ca4b426bdfe5bcristy size_t 101426b649100680af051e65caec259bf535dbdb5b1acristy height; 101537618d6dda040a999610efa231f6a547fb703b25glennrp#endif 1016ac245f8a51ea65b085d751c41d8ca4b426bdfe5bcristy 1017cee9711bbc334b5677d5ec4ea1cc70340d35ee35cristy ssize_t 1018cee9711bbc334b5677d5ec4ea1cc70340d35ee35cristy y; 1019cee9711bbc334b5677d5ec4ea1cc70340d35ee35cristy 10207eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy assert(source != (ImageView *) NULL); 1021e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(source->signature == MagickCoreSignature); 10227eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy if (transfer == (TransferImageViewMethod) NULL) 10233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 10247eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy source_image=source->image; 10257eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy destination_image=destination->image; 10267c3af951210f34d3f244b31f06ee291e5be8ecb7cristy status=SetImageStorageClass(destination_image,DirectClass, 10277c3af951210f34d3f244b31f06ee291e5be8ecb7cristy destination->exception); 10287c3af951210f34d3f244b31f06ee291e5be8ecb7cristy if (status == MagickFalse) 10293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 10303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=MagickTrue; 10313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy progress=0; 103237618d6dda040a999610efa231f6a547fb703b25glennrp#if defined(MAGICKCORE_OPENMP_SUPPORT) 1033ac245f8a51ea65b085d751c41d8ca4b426bdfe5bcristy height=source->extent.height-source->extent.y; 10349a5a52fdbea9190e1c868ba9298a6f64d1c896d1cristy #pragma omp parallel for schedule(static,4) shared(progress,status) \ 10355e6b259130f9dbe0da4666f734937017babe573acristy magick_threads(source_image,destination_image,height,1) 10363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 1037c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy for (y=source->extent.y; y < (ssize_t) source->extent.height; y++) 10383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 10395c9e6f2ec2e7738ede83902931da0f80db60f565cristy const int 10405c9e6f2ec2e7738ede83902931da0f80db60f565cristy id = GetOpenMPThreadId(); 1041ad740057043b3db03f329993b8af90932852ef06cristy 10423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickBooleanType 10433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy sync; 10443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 10454c08aed51c5899665ade97263692328eea4af106cristy register const Quantum 104605d2ff7ebf21f659f5b11e45afb294e152f4330cdirk *magick_restrict pixels; 10473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 10484c08aed51c5899665ade97263692328eea4af106cristy register Quantum 104905d2ff7ebf21f659f5b11e45afb294e152f4330cdirk *magick_restrict destination_pixels; 10503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 10513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == MagickFalse) 10523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 1053c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy pixels=GetCacheViewVirtualPixels(source->view,source->extent.x,y, 1054c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy source->extent.width,1,source->exception); 10554c08aed51c5899665ade97263692328eea4af106cristy if (pixels == (const Quantum *) NULL) 10563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 10573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=MagickFalse; 10583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 10593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 10603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy destination_pixels=GetCacheViewAuthenticPixels(destination->view, 10617c3af951210f34d3f244b31f06ee291e5be8ecb7cristy destination->extent.x,y,destination->extent.width,1, 10627c3af951210f34d3f244b31f06ee291e5be8ecb7cristy destination->exception); 10634c08aed51c5899665ade97263692328eea4af106cristy if (destination_pixels == (Quantum *) NULL) 10643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 10653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=MagickFalse; 10663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 10673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1068c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy if (transfer(source,destination,y,id,context) == MagickFalse) 10693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=MagickFalse; 10707c3af951210f34d3f244b31f06ee291e5be8ecb7cristy sync=SyncCacheViewAuthenticPixels(destination->view,destination->exception); 10713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (sync == MagickFalse) 10727c3af951210f34d3f244b31f06ee291e5be8ecb7cristy status=MagickFalse; 10733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (source_image->progress_monitor != (MagickProgressMonitor) NULL) 10743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 10753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickBooleanType 10763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy proceed; 10773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1078b5d5f725fef80ff5d50db3111c05a1a521b81e7fcristy#if defined(MAGICKCORE_OPENMP_SUPPORT) 1079ac245f8a51ea65b085d751c41d8ca4b426bdfe5bcristy #pragma omp critical (MagickCore_TransferImageViewIterator) 10803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 1081c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy proceed=SetImageProgress(source_image,source->description,progress++, 1082c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy source->extent.height); 10833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (proceed == MagickFalse) 10843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=MagickFalse; 10853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 10863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 10873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(status); 10883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 10893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 10903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 10913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10957eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy% U p d a t e I m a g e V i e w I t e r a t o r % 10963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 110173b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% UpdateImageViewIterator() iterates over the image view in parallel and calls 1102c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy% your update method for each scanline of the view. The pixel extent is 11033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% confined to the image canvas-- that is no negative offsets or widths or 11043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% heights that exceed the image dimension are permitted. Updates to pixels 11053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% in your callback are automagically synced back to the image. 11063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1107d6dfc0d795119799f97da48c731a7e30e1ed671dcristy% The callback signature is: 1108d6dfc0d795119799f97da48c731a7e30e1ed671dcristy% 1109d6dfc0d795119799f97da48c731a7e30e1ed671dcristy% MagickBooleanType UpdateImageViewMethod(ImageView *source, 1110d6dfc0d795119799f97da48c731a7e30e1ed671dcristy% const ssize_t y,const int thread_id,void *context) 1111d6dfc0d795119799f97da48c731a7e30e1ed671dcristy% 111258739475eaf89390210048221cd0fb7204e0908fcristy% Use this pragma if the view is not single threaded: 11133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% #pragma omp critical 11153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% to define a section of code in your callback update method that must be 11173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% executed by a single thread at a time. 11183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11197eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy% The format of the UpdateImageViewIterator method is: 11203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11217eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy% MagickBooleanType UpdateImageViewIterator(ImageView *source, 11227eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy% UpdateImageViewMethod update,void *context) 11233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 11253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 112673b7d4c082e57242f06e402275b2c9b1bb4e8feecristy% o source: the source image view. 11273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o update: the update callback method. 11293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o context: the user defined context. 11313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 11337eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristyMagickExport MagickBooleanType UpdateImageViewIterator(ImageView *source, 11347eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy UpdateImageViewMethod update,void *context) 11353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 11363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Image 11373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *source_image; 11383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 11393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickBooleanType 11403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 11413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1142cee9711bbc334b5677d5ec4ea1cc70340d35ee35cristy MagickOffsetType 1143cee9711bbc334b5677d5ec4ea1cc70340d35ee35cristy progress; 1144cee9711bbc334b5677d5ec4ea1cc70340d35ee35cristy 114537618d6dda040a999610efa231f6a547fb703b25glennrp#if defined(MAGICKCORE_OPENMP_SUPPORT) 1146ac245f8a51ea65b085d751c41d8ca4b426bdfe5bcristy size_t 114726b649100680af051e65caec259bf535dbdb5b1acristy height; 114837618d6dda040a999610efa231f6a547fb703b25glennrp#endif 1149ac245f8a51ea65b085d751c41d8ca4b426bdfe5bcristy 1150cee9711bbc334b5677d5ec4ea1cc70340d35ee35cristy ssize_t 1151cee9711bbc334b5677d5ec4ea1cc70340d35ee35cristy y; 1152cee9711bbc334b5677d5ec4ea1cc70340d35ee35cristy 11537eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy assert(source != (ImageView *) NULL); 1154e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(source->signature == MagickCoreSignature); 11557eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy if (update == (UpdateImageViewMethod) NULL) 11563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 11577eb1b7a244425a6d1821076a6c3da3f5c3e4b771cristy source_image=source->image; 11587c3af951210f34d3f244b31f06ee291e5be8ecb7cristy status=SetImageStorageClass(source_image,DirectClass,source->exception); 11597c3af951210f34d3f244b31f06ee291e5be8ecb7cristy if (status == MagickFalse) 11603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 11613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=MagickTrue; 11623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy progress=0; 116337618d6dda040a999610efa231f6a547fb703b25glennrp#if defined(MAGICKCORE_OPENMP_SUPPORT) 1164ac245f8a51ea65b085d751c41d8ca4b426bdfe5bcristy height=source->extent.height-source->extent.y; 11659a5a52fdbea9190e1c868ba9298a6f64d1c896d1cristy #pragma omp parallel for schedule(static,4) shared(progress,status) \ 11665e6b259130f9dbe0da4666f734937017babe573acristy magick_threads(source_image,source_image,height,1) 11673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 1168c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy for (y=source->extent.y; y < (ssize_t) source->extent.height; y++) 11693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 11705c9e6f2ec2e7738ede83902931da0f80db60f565cristy const int 11715c9e6f2ec2e7738ede83902931da0f80db60f565cristy id = GetOpenMPThreadId(); 1172ad740057043b3db03f329993b8af90932852ef06cristy 11734c08aed51c5899665ade97263692328eea4af106cristy register Quantum 117405d2ff7ebf21f659f5b11e45afb294e152f4330cdirk *magick_restrict pixels; 11753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 11763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == MagickFalse) 11773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 1178c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy pixels=GetCacheViewAuthenticPixels(source->view,source->extent.x,y, 11797c3af951210f34d3f244b31f06ee291e5be8ecb7cristy source->extent.width,1,source->exception); 11804c08aed51c5899665ade97263692328eea4af106cristy if (pixels == (Quantum *) NULL) 11813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 11823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=MagickFalse; 11833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 11843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1185c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy if (update(source,y,id,context) == MagickFalse) 11863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=MagickFalse; 11877c3af951210f34d3f244b31f06ee291e5be8ecb7cristy status=SyncCacheViewAuthenticPixels(source->view,source->exception); 11887c3af951210f34d3f244b31f06ee291e5be8ecb7cristy if (status == MagickFalse) 11897c3af951210f34d3f244b31f06ee291e5be8ecb7cristy status=MagickFalse; 11903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (source_image->progress_monitor != (MagickProgressMonitor) NULL) 11913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 11923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickBooleanType 11933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy proceed; 11943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1195b5d5f725fef80ff5d50db3111c05a1a521b81e7fcristy#if defined(MAGICKCORE_OPENMP_SUPPORT) 1196ac245f8a51ea65b085d751c41d8ca4b426bdfe5bcristy #pragma omp critical (MagickCore_UpdateImageViewIterator) 11973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 1198c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy proceed=SetImageProgress(source_image,source->description,progress++, 1199c3ebda260e2cdca5c0efa27addf0a66748d7c6facristy source->extent.height); 12003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (proceed == MagickFalse) 12013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=MagickFalse; 12023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 12033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 12043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(status); 12053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 1206