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 < (ssize_t) 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 ssize_t x,const ssize_t y,const size_t columns,
377 % const size_t 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 ssize_t x,const ssize_t y,const size_t columns,const size_t rows,
389 ExceptionInfo *exception)
400 assert(cache_view != (CacheView *) NULL);
401 assert(cache_view->signature == MagickSignature);
402 cache=GetImagePixelCache(cache_view->image,MagickTrue,exception);
403 if (cache == (Cache) NULL)
404 return((PixelPacket *) NULL);
405 id=GetOpenMPThreadId();
406 assert(id < (ssize_t) cache_view->number_threads);
407 pixels=GetAuthenticPixelCacheNexus(cache_view->image,x,y,columns,rows,
408 cache_view->nexus_info[id],exception);
413 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
417 % 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 %
421 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
423 % GetOneCacheViewAuthenticPixel() returns a single pixel at the specified (x,y)
424 % location. The image background color is returned if an error occurs.
426 % The format of the GetOneCacheViewAuthenticPixel method is:
428 % MagickBooleaNType GetOneCacheViewAuthenticPixel(
429 % const CacheView *cache_view,const ssize_t x,const ssize_t y,
430 % Pixelpacket *pixel,ExceptionInfo *exception)
432 % A description of each parameter follows:
434 % o cache_view: the cache view.
436 % o x,y: These values define the offset of the pixel.
438 % o pixel: return a pixel at the specified (x,y) location.
440 % o exception: return any errors or warnings in this structure.
443 MagickExport MagickBooleanType GetOneCacheViewAuthenticPixel(
444 const CacheView *cache_view,const ssize_t x,const ssize_t y,
445 PixelPacket *pixel,ExceptionInfo *exception)
456 assert(cache_view != (CacheView *) NULL);
457 assert(cache_view->signature == MagickSignature);
458 cache=GetImagePixelCache(cache_view->image,MagickTrue,exception);
459 if (cache == (Cache) NULL)
461 *pixel=cache_view->image->background_color;
462 id=GetOpenMPThreadId();
463 assert(id < (ssize_t) cache_view->number_threads);
464 pixels=GetAuthenticPixelCacheNexus(cache_view->image,x,y,1,1,
465 cache_view->nexus_info[id],exception);
466 if (pixels == (const PixelPacket *) NULL)
473 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
477 % 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 %
481 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
483 % GetCacheViewAuthenticIndexQueue() returns the indexes associated with the
484 % last call to SetCacheViewIndexes() or GetCacheViewAuthenticIndexQueue(). The
485 % indexes are authentic and can be updated.
487 % The format of the GetCacheViewAuthenticIndexQueue() method is:
489 % IndexPacket *GetCacheViewAuthenticIndexQueue(CacheView *cache_view)
491 % A description of each parameter follows:
493 % o cache_view: the cache view.
496 MagickExport IndexPacket *GetCacheViewAuthenticIndexQueue(CacheView *cache_view)
504 assert(cache_view != (CacheView *) NULL);
505 assert(cache_view->signature == MagickSignature);
506 assert(cache_view->image->cache != (Cache) NULL);
507 id=GetOpenMPThreadId();
508 assert(id < (ssize_t) cache_view->number_threads);
509 indexes=GetPixelCacheNexusIndexes(cache_view->image->cache,
510 cache_view->nexus_info[id]);
515 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
519 % 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 %
523 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
525 % GetCacheViewAuthenticPixelQueue() returns the pixels associated with the
526 % last call to QueueCacheViewAuthenticPixels() or
527 % GetCacheViewAuthenticPixels(). The pixels are authentic and therefore can be
530 % The format of the GetCacheViewAuthenticPixelQueue() method is:
532 % PixelPacket *GetCacheViewAuthenticPixelQueue(CacheView *cache_view)
534 % A description of each parameter follows:
536 % o cache_view: the cache view.
539 MagickExport PixelPacket *GetCacheViewAuthenticPixelQueue(CacheView *cache_view)
547 assert(cache_view != (CacheView *) NULL);
548 assert(cache_view->signature == MagickSignature);
549 assert(cache_view->image->cache != (Cache) NULL);
550 id=GetOpenMPThreadId();
551 assert(id < (ssize_t) cache_view->number_threads);
552 pixels=GetPixelCacheNexusPixels(cache_view->image->cache,
553 cache_view->nexus_info[id]);
558 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
562 % 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 %
566 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
568 % GetCacheViewVirtualIndexQueue() returns the indexes associated with the
569 % last call to GetCacheViewVirtualIndexQueue(). The indexes are virtual and
570 % therefore cannot be updated.
572 % The format of the GetCacheViewVirtualIndexQueue() method is:
574 % const IndexPacket *GetCacheViewVirtualIndexQueue(
575 % const CacheView *cache_view)
577 % A description of each parameter follows:
579 % o cache_view: the cache view.
582 MagickExport const IndexPacket *GetCacheViewVirtualIndexQueue(
583 const CacheView *cache_view)
591 assert(cache_view != (const CacheView *) NULL);
592 assert(cache_view->signature == MagickSignature);
593 assert(cache_view->image->cache != (Cache) NULL);
594 id=GetOpenMPThreadId();
595 assert(id < (ssize_t) cache_view->number_threads);
596 indexes=GetVirtualIndexesFromNexus(cache_view->image->cache,
597 cache_view->nexus_info[id]);
602 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
606 % 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 %
610 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
612 % GetCacheViewVirtualPixelQueue() returns the the pixels associated with
613 % the last call to GetCacheViewVirtualPixels(). The pixels are virtual
614 % and therefore cannot be updated.
616 % The format of the GetCacheViewVirtualPixelQueue() method is:
618 % const PixelPacket *GetCacheViewVirtualPixelQueue(
619 % const CacheView *cache_view)
621 % A description of each parameter follows:
623 % o cache_view: the cache view.
626 MagickExport const PixelPacket *GetCacheViewVirtualPixelQueue(
627 const CacheView *cache_view)
635 assert(cache_view != (const CacheView *) NULL);
636 assert(cache_view->signature == MagickSignature);
637 assert(cache_view->image->cache != (Cache) NULL);
638 id=GetOpenMPThreadId();
639 assert(id < (ssize_t) cache_view->number_threads);
640 pixels=GetVirtualPixelsNexus(cache_view->image->cache,
641 cache_view->nexus_info[id]);
646 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
650 % 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 %
654 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
656 % GetCacheViewVirtualPixels() gets virtual pixels from the in-memory or
657 % disk pixel cache as defined by the geometry parameters. A pointer to the
658 % pixels is returned if the pixels are transferred, otherwise a NULL is
661 % The format of the GetCacheViewVirtualPixels method is:
663 % const PixelPacket *GetCacheViewVirtualPixels(
664 % const CacheView *cache_view,const ssize_t x,const ssize_t y,
665 % const size_t columns,const size_t rows,ExceptionInfo *exception)
667 % A description of each parameter follows:
669 % o cache_view: the cache view.
671 % o x,y,columns,rows: These values define the perimeter of a region of
674 % o exception: return any errors or warnings in this structure.
677 MagickExport const PixelPacket *GetCacheViewVirtualPixels(
678 const CacheView *cache_view,const ssize_t x,const ssize_t y,
679 const size_t columns,const size_t rows,ExceptionInfo *exception)
687 assert(cache_view != (CacheView *) NULL);
688 assert(cache_view->signature == MagickSignature);
689 id=GetOpenMPThreadId();
690 assert(id < (ssize_t) cache_view->number_threads);
691 pixels=GetVirtualPixelsFromNexus(cache_view->image,
692 cache_view->virtual_pixel_method,x,y,columns,rows,
693 cache_view->nexus_info[id],exception);
698 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
702 % 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 %
706 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
708 % GetOneCacheViewVirtualPixel() returns a single pixel at the specified (x,y)
709 % location. The image background color is returned if an error occurs. If
710 % you plan to modify the pixel, use GetOneCacheViewAuthenticPixel() instead.
712 % The format of the GetOneCacheViewVirtualPixel method is:
714 % MagickBooleanType GetOneCacheViewVirtualPixel(
715 % const CacheView *cache_view,const ssize_t x,const ssize_t y,
716 % PixelPacket *pixel,ExceptionInfo *exception)
718 % A description of each parameter follows:
720 % o cache_view: the cache view.
722 % o x,y: These values define the offset of the pixel.
724 % o pixel: return a pixel at the specified (x,y) location.
726 % o exception: return any errors or warnings in this structure.
729 MagickExport MagickBooleanType GetOneCacheViewVirtualPixel(
730 const CacheView *cache_view,const ssize_t x,const ssize_t y,
731 PixelPacket *pixel,ExceptionInfo *exception)
739 assert(cache_view != (CacheView *) NULL);
740 assert(cache_view->signature == MagickSignature);
741 *pixel=cache_view->image->background_color;
742 id=GetOpenMPThreadId();
743 assert(id < (ssize_t) cache_view->number_threads);
744 pixels=GetVirtualPixelsFromNexus(cache_view->image,
745 cache_view->virtual_pixel_method,x,y,1,1,cache_view->nexus_info[id],
747 if (pixels == (const PixelPacket *) NULL)
754 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
758 % 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 %
762 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
764 % GetOneCacheViewVirtualMethodPixel() returns a single virtual pixel at
765 % the specified (x,y) location. The image background color is returned if an
766 % error occurs. If you plan to modify the pixel, use
767 % GetOneCacheViewAuthenticPixel() instead.
769 % The format of the GetOneCacheViewVirtualPixel method is:
771 % MagickBooleanType GetOneCacheViewVirtualMethodPixel(
772 % const CacheView *cache_view,
773 % const VirtualPixelMethod virtual_pixel_method,const ssize_t x,
774 % const ssize_t y,PixelPacket *pixel,ExceptionInfo *exception)
776 % A description of each parameter follows:
778 % o cache_view: the cache view.
780 % o virtual_pixel_method: the virtual pixel method.
782 % o x,y: These values define the offset of the pixel.
784 % o pixel: return a pixel at the specified (x,y) location.
786 % o exception: return any errors or warnings in this structure.
789 MagickExport MagickBooleanType GetOneCacheViewVirtualMethodPixel(
790 const CacheView *cache_view,const VirtualPixelMethod virtual_pixel_method,
791 const ssize_t x,const ssize_t y,PixelPacket *pixel,ExceptionInfo *exception)
799 assert(cache_view != (CacheView *) NULL);
800 assert(cache_view->signature == MagickSignature);
801 *pixel=cache_view->image->background_color;
802 id=GetOpenMPThreadId();
803 assert(id < (ssize_t) cache_view->number_threads);
804 pixels=GetVirtualPixelsFromNexus(cache_view->image,virtual_pixel_method,x,y,1,
805 1,cache_view->nexus_info[id],exception);
806 if (pixels == (const PixelPacket *) NULL)
813 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
817 % 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 %
821 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
823 % QueueCacheViewAuthenticPixels() queues authentic pixels from the in-memory or
824 % disk pixel cache as defined by the geometry parameters. A pointer to the
825 % pixels is returned if the pixels are transferred, otherwise a NULL is
828 % The format of the QueueCacheViewAuthenticPixels method is:
830 % PixelPacket *QueueCacheViewAuthenticPixels(CacheView *cache_view,
831 % const ssize_t x,const ssize_t y,const size_t columns,
832 % const size_t rows,ExceptionInfo *exception)
834 % A description of each parameter follows:
836 % o cache_view: the cache view.
838 % o x,y,columns,rows: These values define the perimeter of a region of
841 % o exception: return any errors or warnings in this structure.
844 MagickExport PixelPacket *QueueCacheViewAuthenticPixels(CacheView *cache_view,
845 const ssize_t x,const ssize_t y,const size_t columns,const size_t rows,
846 ExceptionInfo *exception)
857 assert(cache_view != (CacheView *) NULL);
858 assert(cache_view->signature == MagickSignature);
859 cache=GetImagePixelCache(cache_view->image,MagickFalse,exception);
860 if (cache == (Cache) NULL)
861 return((PixelPacket *) NULL);
862 id=GetOpenMPThreadId();
863 assert(id < (ssize_t) cache_view->number_threads);
864 pixels=QueueAuthenticNexus(cache_view->image,x,y,columns,rows,
865 cache_view->nexus_info[id],exception);
870 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
874 % S e t C a c h e V i e w S t o r a g e C l a s s %
878 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
880 % SetCacheViewStorageClass() sets the image storage class associated with
881 % the specified view.
883 % The format of the SetCacheViewStorageClass method is:
885 % MagickBooleanType SetCacheViewStorageClass(CacheView *cache_view,
886 % const ClassType storage_class)
888 % A description of each parameter follows:
890 % o cache_view: the cache view.
892 % o storage_class: the image storage class: PseudoClass or DirectClass.
895 MagickExport MagickBooleanType SetCacheViewStorageClass(CacheView *cache_view,
896 const ClassType storage_class)
898 assert(cache_view != (CacheView *) NULL);
899 assert(cache_view->signature == MagickSignature);
900 if (cache_view->debug != MagickFalse)
901 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
902 cache_view->image->filename);
903 return(SetImageStorageClass(cache_view->image,storage_class));
907 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
911 % 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 %
915 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
917 % SetCacheViewVirtualPixelMethod() sets the virtual pixel method associated
918 % with the specified cache view.
920 % The format of the SetCacheViewVirtualPixelMethod method is:
922 % MagickBooleanType SetCacheViewVirtualPixelMethod(CacheView *cache_view,
923 % const VirtualPixelMethod virtual_pixel_method)
925 % A description of each parameter follows:
927 % o cache_view: the cache view.
929 % o virtual_pixel_method: the virtual pixel method.
932 MagickExport MagickBooleanType SetCacheViewVirtualPixelMethod(
933 CacheView *cache_view,const VirtualPixelMethod virtual_pixel_method)
935 assert(cache_view != (CacheView *) NULL);
936 assert(cache_view->signature == MagickSignature);
937 if (cache_view->debug != MagickFalse)
938 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
939 cache_view->image->filename);
940 cache_view->virtual_pixel_method=virtual_pixel_method;
945 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
949 % 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 %
953 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
955 % SyncCacheViewAuthenticPixels() saves the cache view pixels to the in-memory
956 % or disk cache. It returns MagickTrue if the pixel region is flushed,
957 % otherwise MagickFalse.
959 % The format of the SyncCacheViewAuthenticPixels method is:
961 % MagickBooleanType SyncCacheViewAuthenticPixels(CacheView *cache_view,
962 % ExceptionInfo *exception)
964 % A description of each parameter follows:
966 % o cache_view: the cache view.
968 % o exception: return any errors or warnings in this structure.
971 MagickExport MagickBooleanType SyncCacheViewAuthenticPixels(
972 CacheView *cache_view,ExceptionInfo *exception)
980 assert(cache_view != (CacheView *) NULL);
981 assert(cache_view->signature == MagickSignature);
982 id=GetOpenMPThreadId();
983 assert(id < (ssize_t) cache_view->number_threads);
984 status=SyncAuthenticPixelCacheNexus(cache_view->image,
985 cache_view->nexus_info[id],exception);