2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6 % CCCC AAA CCCC H H EEEEE %
8 % C AAAAA C HHHHH EEE %
10 % CCCC A A CCCC H H EEEEE %
12 % V V IIIII EEEEE W W %
19 % MagickCore Cache View Methods %
26 % Copyright 1999-2010 ImageMagick Studio LLC, a non-profit organization %
27 % dedicated to making software imaging solutions freely available. %
29 % You may not use this file except in compliance with the License. You may %
30 % obtain a copy of the License at %
32 % http://www.imagemagick.org/script/license.php %
34 % Unless required by applicable law or agreed to in writing, software %
35 % distributed under the License is distributed on an "AS IS" BASIS, %
36 % WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. %
37 % See the License for the specific language governing permissions and %
38 % limitations under the License. %
40 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
49 #include "magick/studio.h"
50 #include "magick/cache.h"
51 #include "magick/cache-private.h"
52 #include "magick/cache-view.h"
53 #include "magick/memory_.h"
54 #include "magick/exception.h"
55 #include "magick/exception-private.h"
56 #include "magick/string_.h"
57 #include "magick/thread-private.h"
84 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
88 % A c q u i r e C a c h e V i e w %
92 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
94 % AcquireCacheView() acquires a view into the pixel cache, using the
95 % VirtualPixelMethod that is defined within the given image itself.
97 % The format of the AcquireCacheView method is:
99 % CacheView *AcquireCacheView(const Image *image)
101 % A description of each parameter follows:
103 % o image: the image.
106 MagickExport CacheView *AcquireCacheView(const Image *image)
111 assert(image != (Image *) NULL);
112 assert(image->signature == MagickSignature);
113 if (image->debug != MagickFalse)
114 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
115 cache_view=(CacheView *) AcquireAlignedMemory(1,sizeof(*cache_view));
116 if (cache_view == (CacheView *) NULL)
117 ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed");
118 (void) ResetMagickMemory(cache_view,0,sizeof(*cache_view));
119 cache_view->image=ReferenceImage((Image *) image);
120 cache_view->number_threads=GetOpenMPMaximumThreads();
121 cache_view->nexus_info=AcquirePixelCacheNexus(cache_view->number_threads);
122 cache_view->virtual_pixel_method=GetImageVirtualPixelMethod(image);
123 cache_view->debug=IsEventLogging();
124 cache_view->signature=MagickSignature;
125 if (cache_view->nexus_info == (NexusInfo **) NULL)
126 ThrowFatalException(CacheFatalError,"UnableToAcquireCacheView");
131 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
135 % C l o n e C a c h e V i e w %
139 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
141 % CloneCacheView() makes an exact copy of the specified cache view.
143 % The format of the CloneCacheView method is:
145 % CacheView *CloneCacheView(const CacheView *cache_view)
147 % A description of each parameter follows:
149 % o cache_view: the cache view.
152 MagickExport CacheView *CloneCacheView(const CacheView *cache_view)
157 assert(cache_view != (CacheView *) NULL);
158 assert(cache_view->signature == MagickSignature);
159 if (cache_view->debug != MagickFalse)
160 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
161 cache_view->image->filename);
162 clone_view=(CacheView *) AcquireAlignedMemory(1,sizeof(*clone_view));
163 if (clone_view == (CacheView *) NULL)
164 ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed");
165 (void) ResetMagickMemory(clone_view,0,sizeof(*clone_view));
166 clone_view->image=ReferenceImage(cache_view->image);
167 clone_view->number_threads=cache_view->number_threads;
168 clone_view->nexus_info=AcquirePixelCacheNexus(cache_view->number_threads);
169 clone_view->virtual_pixel_method=cache_view->virtual_pixel_method;
170 clone_view->debug=cache_view->debug;
171 clone_view->signature=MagickSignature;
176 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
180 % D e s t r o y C a c h e V i e w %
184 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
186 % DestroyCacheView() destroys the specified view returned by a previous call
187 % to AcquireCacheView().
189 % The format of the DestroyCacheView method is:
191 % CacheView *DestroyCacheView(CacheView *cache_view)
193 % A description of each parameter follows:
195 % o cache_view: the cache view.
198 MagickExport CacheView *DestroyCacheView(CacheView *cache_view)
200 assert(cache_view != (CacheView *) NULL);
201 assert(cache_view->signature == MagickSignature);
202 if (cache_view->debug != MagickFalse)
203 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
204 cache_view->image->filename);
205 if (cache_view->nexus_info != (NexusInfo **) NULL)
206 cache_view->nexus_info=DestroyPixelCacheNexus(cache_view->nexus_info,
207 cache_view->number_threads);
208 cache_view->image=DestroyImage(cache_view->image);
209 cache_view->signature=(~MagickSignature);
210 cache_view=(CacheView *) RelinquishAlignedMemory(cache_view);
215 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
219 % G e t C a c h e V i e w C o l o r s p a c e %
223 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
225 % GetCacheViewColorspace() returns the image colorspace associated with the
228 % The format of the GetCacheViewColorspace method is:
230 % ColorspaceType GetCacheViewColorspace(const CacheView *cache_view)
232 % A description of each parameter follows:
234 % o cache_view: the cache view.
237 MagickExport ColorspaceType GetCacheViewColorspace(const CacheView *cache_view)
239 assert(cache_view != (CacheView *) NULL);
240 assert(cache_view->signature == MagickSignature);
241 if (cache_view->debug != MagickFalse)
242 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
243 cache_view->image->filename);
244 return(cache_view->image->colorspace);
248 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
252 % G e t C a c h e V i e w E x c e p t i o n %
256 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
258 % GetCacheViewException() returns the image exception associated with the
261 % The format of the GetCacheViewException method is:
263 % ExceptionInfo GetCacheViewException(const CacheView *cache_view)
265 % A description of each parameter follows:
267 % o cache_view: the cache view.
270 MagickExport ExceptionInfo *GetCacheViewException(const CacheView *cache_view)
272 assert(cache_view != (CacheView *) NULL);
273 assert(cache_view->signature == MagickSignature);
274 if (cache_view->debug != MagickFalse)
275 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
276 cache_view->image->filename);
277 return(&cache_view->image->exception);
281 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
285 + G e t C a c h e V i e w E x t e n t %
289 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
291 % GetCacheViewExtent() returns the extent of the pixels associated with the
292 % last call to QueueCacheViewAuthenticPixels() or
293 % GetCacheViewAuthenticPixels().
295 % The format of the GetCacheViewExtent() method is:
297 % MagickSizeType GetCacheViewExtent(const CacheView *cache_view)
299 % A description of each parameter follows:
301 % o cache_view: the cache view.
304 MagickExport MagickSizeType GetCacheViewExtent(const CacheView *cache_view)
312 assert(cache_view != (CacheView *) NULL);
313 assert(cache_view->signature == MagickSignature);
314 if (cache_view->debug != MagickFalse)
315 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
316 cache_view->image->filename);
317 assert(cache_view->image->cache != (Cache) NULL);
318 id=GetOpenMPThreadId();
319 assert(id < (long) cache_view->number_threads);
320 extent=GetPixelCacheNexusExtent(cache_view->image->cache,
321 cache_view->nexus_info[id]);
326 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
330 % G e t C a c h e V i e w S t o r a g e C l a s s %
334 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
336 % GetCacheViewStorageClass() returns the image storage class associated with
337 % the specified view.
339 % The format of the GetCacheViewStorageClass method is:
341 % ClassType GetCacheViewStorageClass(const CacheView *cache_view)
343 % A description of each parameter follows:
345 % o cache_view: the cache view.
348 MagickExport ClassType GetCacheViewStorageClass(const CacheView *cache_view)
350 assert(cache_view != (CacheView *) NULL);
351 assert(cache_view->signature == MagickSignature);
352 if (cache_view->debug != MagickFalse)
353 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
354 cache_view->image->filename);
355 return(cache_view->image->storage_class);
359 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
363 % G e t C a c h e V i e w A u t h e n t i c P i x e l s %
367 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
369 % GetCacheViewAuthenticPixels() gets pixels from the in-memory or disk pixel
370 % cache as defined by the geometry parameters. A pointer to the pixels is
371 % returned if the pixels are transferred, otherwise a NULL is returned.
373 % The format of the GetCacheViewAuthenticPixels method is:
375 % PixelPacket *GetCacheViewAuthenticPixels(CacheView *cache_view,
376 % const long x,const long y,const unsigned long columns,
377 % const unsigned long rows,ExceptionInfo *exception)
379 % A description of each parameter follows:
381 % o cache_view: the cache view.
383 % o x,y,columns,rows: These values define the perimeter of a region of
387 MagickExport PixelPacket *GetCacheViewAuthenticPixels(CacheView *cache_view,
388 const long x,const long y,const unsigned long columns,
389 const unsigned long rows,ExceptionInfo *exception)
400 assert(cache_view != (CacheView *) NULL);
401 assert(cache_view->signature == MagickSignature);
402 if (cache_view->debug != MagickFalse)
403 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
404 cache_view->image->filename);
405 cache=GetImagePixelCache(cache_view->image,MagickTrue,exception);
406 if (cache == (Cache) NULL)
407 return((PixelPacket *) NULL);
408 id=GetOpenMPThreadId();
409 assert(id < (long) cache_view->number_threads);
410 pixels=GetAuthenticPixelCacheNexus(cache_view->image,x,y,columns,rows,
411 cache_view->nexus_info[id],exception);
416 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
420 % G e t O n e C a c h e V i e w A u t h e n t i c P i x e l %
424 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
426 % GetOneCacheViewAuthenticPixel() returns a single pixel at the specified (x,y)
427 % location. The image background color is returned if an error occurs.
429 % The format of the GetOneCacheViewAuthenticPixel method is:
431 % MagickBooleaNType GetOneCacheViewAuthenticPixel(
432 % const CacheView *cache_view,const long x,const long y,
433 % Pixelpacket *pixel,ExceptionInfo *exception)
435 % A description of each parameter follows:
437 % o cache_view: the cache view.
439 % o x,y: These values define the offset of the pixel.
441 % o pixel: return a pixel at the specified (x,y) location.
443 % o exception: return any errors or warnings in this structure.
446 MagickExport MagickBooleanType GetOneCacheViewAuthenticPixel(
447 const CacheView *cache_view,const long x,const long y,PixelPacket *pixel,
448 ExceptionInfo *exception)
459 assert(cache_view != (CacheView *) NULL);
460 assert(cache_view->signature == MagickSignature);
461 if (cache_view->debug != MagickFalse)
462 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
463 cache_view->image->filename);
464 cache=GetImagePixelCache(cache_view->image,MagickTrue,exception);
465 if (cache == (Cache) NULL)
467 *pixel=cache_view->image->background_color;
468 id=GetOpenMPThreadId();
469 assert(id < (long) cache_view->number_threads);
470 pixels=GetAuthenticPixelCacheNexus(cache_view->image,x,y,1,1,
471 cache_view->nexus_info[id],exception);
472 if (pixels == (const PixelPacket *) NULL)
479 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
483 % G e t C a c h e V i e w A u t h e n t i c I n d e x Q u e u e %
487 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
489 % GetCacheViewAuthenticIndexQueue() returns the indexes associated with the
490 % last call to SetCacheViewIndexes() or GetCacheViewAuthenticIndexQueue(). The
491 % indexes are authentic and can be updated.
493 % The format of the GetCacheViewAuthenticIndexQueue() method is:
495 % IndexPacket *GetCacheViewAuthenticIndexQueue(CacheView *cache_view)
497 % A description of each parameter follows:
499 % o cache_view: the cache view.
502 MagickExport IndexPacket *GetCacheViewAuthenticIndexQueue(CacheView *cache_view)
510 assert(cache_view != (CacheView *) NULL);
511 assert(cache_view->signature == MagickSignature);
512 if (cache_view->debug != MagickFalse)
513 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
514 cache_view->image->filename);
515 assert(cache_view->image->cache != (Cache) NULL);
516 id=GetOpenMPThreadId();
517 assert(id < (long) cache_view->number_threads);
518 indexes=GetPixelCacheNexusIndexes(cache_view->image->cache,
519 cache_view->nexus_info[id]);
524 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
528 % G e t C a c h e V i e w A u t h e n t i c P i x e l Q u e u e %
532 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
534 % GetCacheViewAuthenticPixelQueue() returns the pixels associated with the
535 % last call to QueueCacheViewAuthenticPixels() or
536 % GetCacheViewAuthenticPixels(). The pixels are authentic and therefore can be
539 % The format of the GetCacheViewAuthenticPixelQueue() method is:
541 % PixelPacket *GetCacheViewAuthenticPixelQueue(CacheView *cache_view)
543 % A description of each parameter follows:
545 % o cache_view: the cache view.
548 MagickExport PixelPacket *GetCacheViewAuthenticPixelQueue(CacheView *cache_view)
556 assert(cache_view != (CacheView *) NULL);
557 assert(cache_view->signature == MagickSignature);
558 if (cache_view->debug != MagickFalse)
559 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
560 cache_view->image->filename);
561 assert(cache_view->image->cache != (Cache) NULL);
562 id=GetOpenMPThreadId();
563 assert(id < (long) cache_view->number_threads);
564 pixels=GetPixelCacheNexusPixels(cache_view->image->cache,
565 cache_view->nexus_info[id]);
570 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
574 % G e t C a c h e V i e w V i r t u a l I n d e x Q u e u e %
578 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
580 % GetCacheViewVirtualIndexQueue() returns the indexes associated with the
581 % last call to GetCacheViewVirtualIndexQueue(). The indexes are virtual and
582 % therefore cannot be updated.
584 % The format of the GetCacheViewVirtualIndexQueue() method is:
586 % const IndexPacket *GetCacheViewVirtualIndexQueue(
587 % const CacheView *cache_view)
589 % A description of each parameter follows:
591 % o cache_view: the cache view.
594 MagickExport const IndexPacket *GetCacheViewVirtualIndexQueue(
595 const CacheView *cache_view)
603 assert(cache_view != (const CacheView *) NULL);
604 assert(cache_view->signature == MagickSignature);
605 if (cache_view->debug != MagickFalse)
606 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
607 cache_view->image->filename);
608 assert(cache_view->image->cache != (Cache) NULL);
609 id=GetOpenMPThreadId();
610 assert(id < (long) cache_view->number_threads);
611 indexes=GetVirtualIndexesFromNexus(cache_view->image->cache,
612 cache_view->nexus_info[id]);
617 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
621 % G e t C a c h e V i e w V i r t u a l P i x e l Q u e u e %
625 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
627 % GetCacheViewVirtualPixelQueue() returns the the pixels associated with
628 % the last call to GetCacheViewVirtualPixels(). The pixels are virtual
629 % and therefore cannot be updated.
631 % The format of the GetCacheViewVirtualPixelQueue() method is:
633 % const PixelPacket *GetCacheViewVirtualPixelQueue(
634 % const CacheView *cache_view)
636 % A description of each parameter follows:
638 % o cache_view: the cache view.
641 MagickExport const PixelPacket *GetCacheViewVirtualPixelQueue(
642 const CacheView *cache_view)
650 assert(cache_view != (const CacheView *) NULL);
651 assert(cache_view->signature == MagickSignature);
652 if (cache_view->debug != MagickFalse)
653 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
654 cache_view->image->filename);
655 assert(cache_view->image->cache != (Cache) NULL);
656 id=GetOpenMPThreadId();
657 assert(id < (long) cache_view->number_threads);
658 pixels=GetVirtualPixelsNexus(cache_view->image->cache,
659 cache_view->nexus_info[id]);
664 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
668 % G e t C a c h e V i e w V i r t u a l P i x e l s %
672 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
674 % GetCacheViewVirtualPixels() gets virtual pixels from the in-memory or
675 % disk pixel cache as defined by the geometry parameters. A pointer to the
676 % pixels is returned if the pixels are transferred, otherwise a NULL is
679 % The format of the GetCacheViewVirtualPixels method is:
681 % const PixelPacket *GetCacheViewVirtualPixels(
682 % const CacheView *cache_view,const long x,const long y,
683 % const unsigned long columns,const unsigned long rows,
684 % ExceptionInfo *exception)
686 % A description of each parameter follows:
688 % o cache_view: the cache view.
690 % o x,y,columns,rows: These values define the perimeter of a region of
693 % o exception: return any errors or warnings in this structure.
696 MagickExport const PixelPacket *GetCacheViewVirtualPixels(
697 const CacheView *cache_view,const long x,const long y,
698 const unsigned long columns,const unsigned long rows,ExceptionInfo *exception)
706 assert(cache_view != (CacheView *) NULL);
707 assert(cache_view->signature == MagickSignature);
708 if (cache_view->debug != MagickFalse)
709 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
710 cache_view->image->filename);
711 id=GetOpenMPThreadId();
712 assert(id < (long) cache_view->number_threads);
713 pixels=GetVirtualPixelsFromNexus(cache_view->image,
714 cache_view->virtual_pixel_method,x,y,columns,rows,
715 cache_view->nexus_info[id],exception);
720 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
724 % G e t O n e C a c h e V i e w V i r t u a l P i x e l %
728 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
730 % GetOneCacheViewVirtualPixel() returns a single pixel at the specified (x,y)
731 % location. The image background color is returned if an error occurs. If
732 % you plan to modify the pixel, use GetOneCacheViewAuthenticPixel() instead.
734 % The format of the GetOneCacheViewVirtualPixel method is:
736 % MagickBooleanType GetOneCacheViewVirtualPixel(
737 % const CacheView *cache_view,const long x,const long y,
738 % PixelPacket *pixel,ExceptionInfo *exception)
740 % A description of each parameter follows:
742 % o cache_view: the cache view.
744 % o x,y: These values define the offset of the pixel.
746 % o pixel: return a pixel at the specified (x,y) location.
748 % o exception: return any errors or warnings in this structure.
751 MagickExport MagickBooleanType GetOneCacheViewVirtualPixel(
752 const CacheView *cache_view,const long x,const long y,PixelPacket *pixel,
753 ExceptionInfo *exception)
761 assert(cache_view != (CacheView *) NULL);
762 assert(cache_view->signature == MagickSignature);
763 if (cache_view->debug != MagickFalse)
764 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
765 cache_view->image->filename);
766 *pixel=cache_view->image->background_color;
767 id=GetOpenMPThreadId();
768 assert(id < (long) cache_view->number_threads);
769 pixels=GetVirtualPixelsFromNexus(cache_view->image,
770 cache_view->virtual_pixel_method,x,y,1,1,cache_view->nexus_info[id],
772 if (pixels == (const PixelPacket *) NULL)
779 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
783 % G e t O n e C a c h e V i e w V i r t u a l P i x e l %
787 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
789 % GetOneCacheViewVirtualMethodPixel() returns a single virtual pixel at
790 % the specified (x,y) location. The image background color is returned if an
791 % error occurs. If you plan to modify the pixel, use
792 % GetOneCacheViewAuthenticPixel() instead.
794 % The format of the GetOneCacheViewVirtualPixel method is:
796 % MagickBooleanType GetOneCacheViewVirtualMethodPixel(
797 % const CacheView *cache_view,
798 % const VirtualPixelMethod virtual_pixel_method,const long x,
799 % const long y,PixelPacket *pixel,ExceptionInfo *exception)
801 % A description of each parameter follows:
803 % o cache_view: the cache view.
805 % o virtual_pixel_method: the virtual pixel method.
807 % o x,y: These values define the offset of the pixel.
809 % o pixel: return a pixel at the specified (x,y) location.
811 % o exception: return any errors or warnings in this structure.
814 MagickExport MagickBooleanType GetOneCacheViewVirtualMethodPixel(
815 const CacheView *cache_view,const VirtualPixelMethod virtual_pixel_method,
816 const long x,const long y,PixelPacket *pixel,ExceptionInfo *exception)
824 assert(cache_view != (CacheView *) NULL);
825 assert(cache_view->signature == MagickSignature);
826 if (cache_view->debug != MagickFalse)
827 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
828 cache_view->image->filename);
829 *pixel=cache_view->image->background_color;
830 id=GetOpenMPThreadId();
831 assert(id < (long) cache_view->number_threads);
832 pixels=GetVirtualPixelsFromNexus(cache_view->image,virtual_pixel_method,x,y,1,
833 1,cache_view->nexus_info[id],exception);
834 if (pixels == (const PixelPacket *) NULL)
841 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
845 % Q u e u e C a c h e V i e w A u t h e n t i c P i x e l s %
849 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
851 % QueueCacheViewAuthenticPixels() queues authentic pixels from the in-memory or
852 % disk pixel cache as defined by the geometry parameters. A pointer to the
853 % pixels is returned if the pixels are transferred, otherwise a NULL is
856 % The format of the QueueCacheViewAuthenticPixels method is:
858 % PixelPacket *QueueCacheViewAuthenticPixels(CacheView *cache_view,
859 % const long x,const long y,const unsigned long columns,
860 % const unsigned long rows,ExceptionInfo *exception)
862 % A description of each parameter follows:
864 % o cache_view: the cache view.
866 % o x,y,columns,rows: These values define the perimeter of a region of
869 % o exception: return any errors or warnings in this structure.
872 MagickExport PixelPacket *QueueCacheViewAuthenticPixels(CacheView *cache_view,
873 const long x,const long y,const unsigned long columns,
874 const unsigned long rows,ExceptionInfo *exception)
885 assert(cache_view != (CacheView *) NULL);
886 assert(cache_view->signature == MagickSignature);
887 if (cache_view->debug != MagickFalse)
888 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
889 cache_view->image->filename);
890 cache=GetImagePixelCache(cache_view->image,MagickFalse,exception);
891 if (cache == (Cache) NULL)
892 return((PixelPacket *) NULL);
893 id=GetOpenMPThreadId();
894 assert(id < (long) cache_view->number_threads);
895 pixels=QueueAuthenticNexus(cache_view->image,x,y,columns,rows,
896 cache_view->nexus_info[id],exception);
901 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
905 % S e t C a c h e V i e w S t o r a g e C l a s s %
909 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
911 % SetCacheViewStorageClass() sets the image storage class associated with
912 % the specified view.
914 % The format of the SetCacheViewStorageClass method is:
916 % MagickBooleanType SetCacheViewStorageClass(CacheView *cache_view,
917 % const ClassType storage_class)
919 % A description of each parameter follows:
921 % o cache_view: the cache view.
923 % o storage_class: the image storage class: PseudoClass or DirectClass.
926 MagickExport MagickBooleanType SetCacheViewStorageClass(CacheView *cache_view,
927 const ClassType storage_class)
929 assert(cache_view != (CacheView *) NULL);
930 assert(cache_view->signature == MagickSignature);
931 if (cache_view->debug != MagickFalse)
932 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
933 cache_view->image->filename);
934 return(SetImageStorageClass(cache_view->image,storage_class));
938 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
942 % S e t C a c h e V i e w V i r t u a l P i x e l M e t h o d %
946 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
948 % SetCacheViewVirtualPixelMethod() sets the virtual pixel method associated
949 % with the specified cache view.
951 % The format of the SetCacheViewVirtualPixelMethod method is:
953 % MagickBooleanType SetCacheViewVirtualPixelMethod(CacheView *cache_view,
954 % const VirtualPixelMethod virtual_pixel_method)
956 % A description of each parameter follows:
958 % o cache_view: the cache view.
960 % o virtual_pixel_method: the virtual pixel method.
963 MagickExport MagickBooleanType SetCacheViewVirtualPixelMethod(
964 CacheView *cache_view,const VirtualPixelMethod virtual_pixel_method)
966 assert(cache_view != (CacheView *) NULL);
967 assert(cache_view->signature == MagickSignature);
968 if (cache_view->debug != MagickFalse)
969 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
970 cache_view->image->filename);
971 cache_view->virtual_pixel_method=virtual_pixel_method;
976 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
980 % S y n c C a c h e V i e w A u t h e n t i c P i x e l s %
984 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
986 % SyncCacheViewAuthenticPixels() saves the cache view pixels to the in-memory
987 % or disk cache. It returns MagickTrue if the pixel region is flushed,
988 % otherwise MagickFalse.
990 % The format of the SyncCacheViewAuthenticPixels method is:
992 % MagickBooleanType SyncCacheViewAuthenticPixels(CacheView *cache_view,
993 % ExceptionInfo *exception)
995 % A description of each parameter follows:
997 % o cache_view: the cache view.
999 % o exception: return any errors or warnings in this structure.
1002 MagickExport MagickBooleanType SyncCacheViewAuthenticPixels(
1003 CacheView *cache_view,ExceptionInfo *exception)
1011 assert(cache_view != (CacheView *) NULL);
1012 assert(cache_view->signature == MagickSignature);
1013 if (cache_view->debug != MagickFalse)
1014 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
1015 cache_view->image->filename);
1016 id=GetOpenMPThreadId();
1017 assert(id < (long) cache_view->number_threads);
1018 status=SyncAuthenticPixelCacheNexus(cache_view->image,
1019 cache_view->nexus_info[id],exception);