% DDDD EEEEE P R R EEEEE CCCC A A T EEEEE %
% %
% %
-% MagickCore Deprecated Methods %
+% MagickWand Deprecated Methods %
% %
% Software Design %
% John Cristy %
/*
Include declarations.
*/
-#include "magick/studio.h"
-#include "magick/property.h"
-#include "magick/blob.h"
-#include "magick/blob-private.h"
-#include "magick/cache.h"
-#include "magick/cache-view.h"
-#include "magick/client.h"
-#include "magick/color.h"
-#include "magick/color-private.h"
-#include "magick/colormap.h"
-#include "magick/colormap-private.h"
-#include "magick/colorspace.h"
-#include "magick/composite.h"
-#include "magick/composite-private.h"
-#include "magick/constitute.h"
-#include "magick/deprecate.h"
-#include "magick/draw.h"
-#include "magick/draw-private.h"
-#include "magick/effect.h"
-#include "magick/enhance.h"
-#include "magick/exception.h"
-#include "magick/exception-private.h"
-#include "magick/fx.h"
-#include "magick/geometry.h"
-#include "magick/identify.h"
-#include "magick/image.h"
-#include "magick/image-private.h"
-#include "magick/list.h"
-#include "magick/log.h"
-#include "magick/memory_.h"
-#include "magick/magick.h"
-#include "magick/monitor.h"
+#include "wand/studio.h"
+#include "wand/MagickWand.h"
+#include "wand/magick-wand-private.h"
+#include "wand/wand.h"
#include "magick/monitor-private.h"
-#include "magick/morphology.h"
-#include "magick/paint.h"
-#include "magick/pixel.h"
-#include "magick/pixel-private.h"
-#include "magick/quantize.h"
-#include "magick/random_.h"
-#include "magick/resource_.h"
-#include "magick/semaphore.h"
-#include "magick/segment.h"
-#include "magick/splay-tree.h"
-#include "magick/statistic.h"
-#include "magick/string_.h"
-#include "magick/threshold.h"
-#include "magick/transform.h"
-#include "magick/utility.h"
+#include "magick/thread-private.h"
+\f
+/*
+ Define declarations.
+*/
+#define PixelViewId "PixelView"
+#define ThrowWandException(severity,tag,context) \
+{ \
+ (void) ThrowMagickException(wand->exception,GetMagickModule(),severity, \
+ tag,"`%s'",context); \
+ return(MagickFalse); \
+}
\f
-#if !defined(MAGICKCORE_EXCLUDE_DEPRECATED)
/*
- Global declarations.
+ Typedef declarations.
*/
-static MonitorHandler
- monitor_handler = (MonitorHandler) NULL;
+struct _PixelView
+{
+ size_t
+ id;
+
+ char
+ name[MaxTextExtent];
+
+ ExceptionInfo
+ *exception;
+
+ MagickWand
+ *wand;
+
+ CacheView
+ *view;
+
+ RectangleInfo
+ region;
+
+ size_t
+ number_threads;
+
+ PixelWand
+ ***pixel_wands;
+
+ MagickBooleanType
+ debug;
+
+ size_t
+ signature;
+};
+\f
+#if !defined(MAGICKCORE_EXCLUDE_DEPRECATED)
\f
/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% %
% %
-% A c q u i r e C a c h e V i e w I n d e x e s %
+% M a g i c k A v e r a g e I m a g e s %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% AcquireCacheViewIndexes() returns the indexes associated with the specified
-% view.
-%
-% Deprecated, replace with:
+% MagickAverageImages() average a set of images.
%
-% GetCacheViewVirtualIndexQueue(cache_view);
+% The format of the MagickAverageImages method is:
%
-% The format of the AcquireCacheViewIndexes method is:
-%
-% const IndexPacket *AcquireCacheViewIndexes(const CacheView *cache_view)
+% MagickWand *MagickAverageImages(MagickWand *wand)
%
% A description of each parameter follows:
%
-% o cache_view: the cache view.
+% o wand: the magick wand.
%
*/
-MagickExport const IndexPacket *AcquireCacheViewIndexes(
- const CacheView *cache_view)
+
+static MagickWand *CloneMagickWandFromImages(const MagickWand *wand,
+ Image *images)
+{
+ MagickWand
+ *clone_wand;
+
+ assert(wand != (MagickWand *) NULL);
+ assert(wand->signature == WandSignature);
+ if (wand->debug != MagickFalse)
+ (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
+ clone_wand=(MagickWand *) AcquireMagickMemory(sizeof(*clone_wand));
+ if (clone_wand == (MagickWand *) NULL)
+ ThrowWandFatalException(ResourceLimitFatalError,"MemoryAllocationFailed",
+ images->filename);
+ (void) ResetMagickMemory(clone_wand,0,sizeof(*clone_wand));
+ clone_wand->id=AcquireWandId();
+ (void) FormatMagickString(clone_wand->name,MaxTextExtent,"%s-%.20g",
+ MagickWandId,(double) clone_wand->id);
+ clone_wand->exception=AcquireExceptionInfo();
+ InheritException(clone_wand->exception,wand->exception);
+ clone_wand->image_info=CloneImageInfo(wand->image_info);
+ clone_wand->quantize_info=CloneQuantizeInfo(wand->quantize_info);
+ clone_wand->images=images;
+ clone_wand->debug=IsEventLogging();
+ if (clone_wand->debug != MagickFalse)
+ (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",clone_wand->name);
+ clone_wand->signature=WandSignature;
+ return(clone_wand);
+}
+
+WandExport MagickWand *MagickAverageImages(MagickWand *wand)
{
- return(GetCacheViewVirtualIndexQueue(cache_view));
+ Image
+ *average_image;
+
+ assert(wand != (MagickWand *) NULL);
+ assert(wand->signature == WandSignature);
+ if (wand->debug != MagickFalse)
+ (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
+ if (wand->images == (Image *) NULL)
+ return((MagickWand *) NULL);
+ average_image=EvaluateImages(wand->images,MeanEvaluateOperator,
+ wand->exception);
+ if (average_image == (Image *) NULL)
+ return((MagickWand *) NULL);
+ return(CloneMagickWandFromImages(wand,average_image));
}
\f
/*
% %
% %
% %
-% A c q u i r e C a c h e V i e w P i x e l s %
+% C l o n e P i x e l V i e w %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% AcquireCacheViewPixels() gets pixels from the in-memory or disk pixel cache
-% as defined by the geometry parameters. A pointer to the pixels is returned
-% if the pixels are transferred, otherwise a NULL is returned.
+% ClonePixelView() makes a copy of the specified pixel view.
%
-% Deprecated, replace with:
+% The format of the ClonePixelView method is:
%
-% GetCacheViewVirtualPixels(cache_view,x,y,columns,rows,exception);
-%
-% The format of the AcquireCacheViewPixels method is:
-%
-% const PixelPacket *AcquireCacheViewPixels(const CacheView *cache_view,
-% const ssize_t x,const ssize_t y,const size_t columns,
-% const size_t rows,ExceptionInfo *exception)
+% PixelView *ClonePixelView(const PixelView *pixel_view)
%
% A description of each parameter follows:
%
-% o cache_view: the cache view.
-%
-% o x,y,columns,rows: These values define the perimeter of a region of
-% pixels.
-%
-% o exception: return any errors or warnings in this structure.
+% o pixel_view: the pixel view.
%
*/
-MagickExport const PixelPacket *AcquireCacheViewPixels(
- const CacheView *cache_view,const ssize_t x,const ssize_t y,
- const size_t columns,const size_t rows,ExceptionInfo *exception)
+WandExport PixelView *ClonePixelView(const PixelView *pixel_view)
{
- return(GetCacheViewVirtualPixels(cache_view,x,y,columns,rows,exception));
+ PixelView
+ *clone_view;
+
+ register ssize_t
+ i;
+
+ assert(pixel_view != (PixelView *) NULL);
+ assert(pixel_view->signature == WandSignature);
+ if (pixel_view->debug != MagickFalse)
+ (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",pixel_view->name);
+ clone_view=(PixelView *) AcquireMagickMemory(sizeof(*clone_view));
+ if (clone_view == (PixelView *) NULL)
+ ThrowWandFatalException(ResourceLimitFatalError,"MemoryAllocationFailed",
+ pixel_view->name);
+ (void) ResetMagickMemory(clone_view,0,sizeof(*clone_view));
+ clone_view->id=AcquireWandId();
+ (void) FormatMagickString(clone_view->name,MaxTextExtent,"%s-%.20g",
+ PixelViewId,(double) clone_view->id);
+ clone_view->exception=AcquireExceptionInfo();
+ InheritException(clone_view->exception,pixel_view->exception);
+ clone_view->view=CloneCacheView(pixel_view->view);
+ clone_view->region=pixel_view->region;
+ clone_view->number_threads=pixel_view->number_threads;
+ for (i=0; i < (ssize_t) pixel_view->number_threads; i++)
+ clone_view->pixel_wands[i]=ClonePixelWands((const PixelWand **)
+ pixel_view->pixel_wands[i],pixel_view->region.width);
+ clone_view->debug=pixel_view->debug;
+ if (clone_view->debug != MagickFalse)
+ (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",clone_view->name);
+ clone_view->signature=WandSignature;
+ return(clone_view);
}
\f
/*
% %
% %
% %
-% A c q u i r e I m a g e P i x e l s %
-% % % %
+% D e s t r o y P i x e l V i e w %
+% %
+% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% AcquireImagePixels() returns an immutable pixel region. If the
-% region is successfully accessed, a pointer to it is returned, otherwise
-% NULL is returned. The returned pointer may point to a temporary working
-% copy of the pixels or it may point to the original pixels in memory.
-% Performance is maximized if the selected region is part of one row, or one
-% or more full rows, since there is opportunity to access the pixels in-place
-% (without a copy) if the image is in RAM, or in a memory-mapped file. The
-% returned pointer should *never* be deallocated by the user.
+% DestroyPixelView() deallocates memory associated with a pixel view.
%
-% Pixels accessed via the returned pointer represent a simple array of type
-% PixelPacket. If the image type is CMYK or the storage class is PseudoClass,
-% call GetAuthenticIndexQueue() after invoking GetAuthenticPixels() to access
-% the black color component or to obtain the colormap indexes (of type
-% IndexPacket) corresponding to the region.
+% The format of the DestroyPixelView method is:
%
-% If you plan to modify the pixels, use GetAuthenticPixels() instead.
-%
-% Note, the AcquireImagePixels() and GetAuthenticPixels() methods are not
-% thread-safe. In a threaded environment, use GetCacheViewVirtualPixels() or
-% GetCacheViewAuthenticPixels() instead.
-%
-% Deprecated, replace with:
-%
-% GetVirtualPixels(image,x,y,columns,rows,exception);
-%
-% The format of the AcquireImagePixels() method is:
-%
-% const PixelPacket *AcquireImagePixels(const Image *image,const ssize_t x,
-% const ssize_t y,const size_t columns,const size_t rows,
-% ExceptionInfo *exception)
+% PixelView *DestroyPixelView(PixelView *pixel_view,
+% const size_t number_wands,const size_t number_threads)
%
% A description of each parameter follows:
%
-% o image: the image.
+% o pixel_view: the pixel view.
%
-% o x,y,columns,rows: These values define the perimeter of a region of
-% pixels.
+% o number_wand: the number of pixel wands.
%
-% o exception: return any errors or warnings in this structure.
+% o number_threads: number of threads.
%
*/
-MagickExport const PixelPacket *AcquireImagePixels(const Image *image,
- const ssize_t x,const ssize_t y,const size_t columns,
- const size_t rows,ExceptionInfo *exception)
+
+static PixelWand ***DestroyPixelsThreadSet(PixelWand ***pixel_wands,
+ const size_t number_wands,const size_t number_threads)
{
- return(GetVirtualPixels(image,x,y,columns,rows,exception));
+ register ssize_t
+ i;
+
+ assert(pixel_wands != (PixelWand ***) NULL);
+ for (i=0; i < (ssize_t) number_threads; i++)
+ if (pixel_wands[i] != (PixelWand **) NULL)
+ pixel_wands[i]=DestroyPixelWands(pixel_wands[i],number_wands);
+ pixel_wands=(PixelWand ***) RelinquishMagickMemory(pixel_wands);
+ return(pixel_wands);
+}
+
+WandExport PixelView *DestroyPixelView(PixelView *pixel_view)
+{
+ assert(pixel_view != (PixelView *) NULL);
+ assert(pixel_view->signature == WandSignature);
+ pixel_view->pixel_wands=DestroyPixelsThreadSet(pixel_view->pixel_wands,
+ pixel_view->region.width,pixel_view->number_threads);
+ pixel_view->view=DestroyCacheView(pixel_view->view);
+ pixel_view->exception=DestroyExceptionInfo(pixel_view->exception);
+ pixel_view->signature=(~WandSignature);
+ RelinquishWandId(pixel_view->id);
+ pixel_view=(PixelView *) RelinquishMagickMemory(pixel_view);
+ return(pixel_view);
}
\f
/*
% %
% %
% %
-% A c q u i r e I n d e x e s %
+% D u p l e x T r a n s f e r P i x e l V i e w I t e r a t o r %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% AcquireIndexes() returns the black channel or the colormap indexes
-% associated with the last call to QueueAuthenticPixels() or
-% GetVirtualPixels(). NULL is returned if the black channel or colormap
-% indexes are not available.
+% DuplexTransferPixelViewIterator() iterates over three pixel views in
+% parallel and calls your transfer method for each scanline of the view. The
+% source and duplex pixel region is not confined to the image canvas-- that is
+% you can include negative offsets or widths or heights that exceed the image
+% dimension. However, the destination pixel view is confined to the image
+% canvas-- that is no negative offsets or widths or heights that exceed the
+% image dimension are permitted.
%
-% Deprecated, replace with:
+% Use this pragma:
%
-% GetVirtualIndexQueue(image);
+% #pragma omp critical
%
-% The format of the AcquireIndexes() method is:
+% to define a section of code in your callback transfer method that must be
+% executed by a single thread at a time.
%
-% const IndexPacket *AcquireIndexes(const Image *image)
+% The format of the DuplexTransferPixelViewIterator method is:
+%
+% MagickBooleanType DuplexTransferPixelViewIterator(PixelView *source,
+% PixelView *duplex,PixelView *destination,
+% DuplexTransferPixelViewMethod transfer,void *context)
%
% A description of each parameter follows:
%
-% o indexes: AcquireIndexes() returns the indexes associated with the last
-% call to QueueAuthenticPixels() or GetVirtualPixels().
+% o source: the source pixel view.
+%
+% o duplex: the duplex pixel view.
%
-% o image: the image.
+% o destination: the destination pixel view.
+%
+% o transfer: the transfer callback method.
+%
+% o context: the user defined context.
%
*/
-MagickExport const IndexPacket *AcquireIndexes(const Image *image)
+WandExport MagickBooleanType DuplexTransferPixelViewIterator(
+ PixelView *source,PixelView *duplex,PixelView *destination,
+ DuplexTransferPixelViewMethod transfer,void *context)
{
- return(GetVirtualIndexQueue(image));
+#define DuplexTransferPixelViewTag "PixelView/DuplexTransfer"
+
+ ExceptionInfo
+ *exception;
+
+ Image
+ *destination_image,
+ *duplex_image,
+ *source_image;
+
+ MagickBooleanType
+ status;
+
+ MagickOffsetType
+ progress;
+
+ ssize_t
+ y;
+
+ assert(source != (PixelView *) NULL);
+ assert(source->signature == WandSignature);
+ if (transfer == (DuplexTransferPixelViewMethod) NULL)
+ return(MagickFalse);
+ source_image=source->wand->images;
+ duplex_image=duplex->wand->images;
+ destination_image=destination->wand->images;
+ if (SetImageStorageClass(destination_image,DirectClass) == MagickFalse)
+ return(MagickFalse);
+ status=MagickTrue;
+ progress=0;
+ exception=destination->exception;
+#if defined(MAGICKCORE_OPENMP_SUPPORT)
+ #pragma omp parallel for schedule(static,1) shared(progress,status)
+#endif
+ for (y=source->region.y; y < (ssize_t) source->region.height; y++)
+ {
+ const int
+ id = GetOpenMPThreadId();
+
+ MagickBooleanType
+ sync;
+
+ register const IndexPacket
+ *restrict duplex_indexes,
+ *restrict indexes;
+
+ register const PixelPacket
+ *restrict duplex_pixels,
+ *restrict pixels;
+
+ register IndexPacket
+ *restrict destination_indexes;
+
+ register ssize_t
+ x;
+
+ register PixelPacket
+ *restrict destination_pixels;
+
+ if (status == MagickFalse)
+ continue;
+ pixels=GetCacheViewVirtualPixels(source->view,source->region.x,y,
+ source->region.width,1,source->exception);
+ if (pixels == (const PixelPacket *) NULL)
+ {
+ status=MagickFalse;
+ continue;
+ }
+ indexes=GetCacheViewVirtualIndexQueue(source->view);
+ for (x=0; x < (ssize_t) source->region.width; x++)
+ PixelSetQuantumColor(source->pixel_wands[id][x],pixels+x);
+ if (source_image->colorspace == CMYKColorspace)
+ for (x=0; x < (ssize_t) source->region.width; x++)
+ PixelSetBlackQuantum(source->pixel_wands[id][x],
+ GetIndexPixelComponent(indexes+x));
+ if (source_image->storage_class == PseudoClass)
+ for (x=0; x < (ssize_t) source->region.width; x++)
+ PixelSetIndex(source->pixel_wands[id][x],
+ GetIndexPixelComponent(indexes+x));
+ duplex_pixels=GetCacheViewVirtualPixels(duplex->view,duplex->region.x,y,
+ duplex->region.width,1,duplex->exception);
+ if (duplex_pixels == (const PixelPacket *) NULL)
+ {
+ status=MagickFalse;
+ continue;
+ }
+ duplex_indexes=GetCacheViewVirtualIndexQueue(duplex->view);
+ for (x=0; x < (ssize_t) duplex->region.width; x++)
+ PixelSetQuantumColor(duplex->pixel_wands[id][x],duplex_pixels+x);
+ if (duplex_image->colorspace == CMYKColorspace)
+ for (x=0; x < (ssize_t) duplex->region.width; x++)
+ PixelSetBlackQuantum(duplex->pixel_wands[id][x],
+ GetIndexPixelComponent(duplex_indexes+x));
+ if (duplex_image->storage_class == PseudoClass)
+ for (x=0; x < (ssize_t) duplex->region.width; x++)
+ PixelSetIndex(duplex->pixel_wands[id][x],
+ GetIndexPixelComponent(duplex_indexes+x));
+ destination_pixels=GetCacheViewAuthenticPixels(destination->view,
+ destination->region.x,y,destination->region.width,1,exception);
+ if (destination_pixels == (PixelPacket *) NULL)
+ {
+ status=MagickFalse;
+ continue;
+ }
+ destination_indexes=GetCacheViewAuthenticIndexQueue(destination->view);
+ for (x=0; x < (ssize_t) destination->region.width; x++)
+ PixelSetQuantumColor(destination->pixel_wands[id][x],
+ destination_pixels+x);
+ if (destination_image->colorspace == CMYKColorspace)
+ for (x=0; x < (ssize_t) destination->region.width; x++)
+ PixelSetBlackQuantum(destination->pixel_wands[id][x],
+ GetIndexPixelComponent(destination_indexes+x));
+ if (destination_image->storage_class == PseudoClass)
+ for (x=0; x < (ssize_t) destination->region.width; x++)
+ PixelSetIndex(destination->pixel_wands[id][x],
+ GetIndexPixelComponent(destination_indexes+x));
+ if (transfer(source,duplex,destination,context) == MagickFalse)
+ status=MagickFalse;
+ for (x=0; x < (ssize_t) destination->region.width; x++)
+ PixelGetQuantumColor(destination->pixel_wands[id][x],
+ destination_pixels+x);
+ if (destination_image->colorspace == CMYKColorspace)
+ for (x=0; x < (ssize_t) destination->region.width; x++)
+ SetIndexPixelComponent(destination_indexes+x,PixelGetBlackQuantum(
+ destination->pixel_wands[id][x]));
+ sync=SyncCacheViewAuthenticPixels(destination->view,exception);
+ if (sync == MagickFalse)
+ {
+ InheritException(destination->exception,GetCacheViewException(
+ source->view));
+ status=MagickFalse;
+ }
+ if (source_image->progress_monitor != (MagickProgressMonitor) NULL)
+ {
+ MagickBooleanType
+ proceed;
+
+#if defined(MAGICKCORE_OPENMP_SUPPORT)
+ #pragma omp critical (MagickWand_DuplexTransferPixelViewIterator)
+#endif
+ proceed=SetImageProgress(source_image,DuplexTransferPixelViewTag,
+ progress++,source->region.height);
+ if (proceed == MagickFalse)
+ status=MagickFalse;
+ }
+ }
+ return(status);
}
\f
/*
% %
% %
% %
-% A c q u i r e M e m o r y %
+% G e t P i x e l V i e w E x c e p t i o n %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% AcquireMemory() returns a pointer to a block of memory at least size bytes
-% suitably aligned for any use.
+% GetPixelViewException() returns the severity, reason, and description of any
+% error that occurs when utilizing a pixel view.
%
-% The format of the AcquireMemory method is:
+% The format of the GetPixelViewException method is:
%
-% void *AcquireMemory(const size_t size)
+% char *GetPixelViewException(const PixelWand *pixel_view,
+% ExceptionType *severity)
%
% A description of each parameter follows:
%
-% o size: the size of the memory in bytes to allocate.
+% o pixel_view: the pixel pixel_view.
+%
+% o severity: the severity of the error is returned here.
%
*/
-MagickExport void *AcquireMemory(const size_t size)
+WandExport char *GetPixelViewException(const PixelView *pixel_view,
+ ExceptionType *severity)
{
- void
- *allocation;
-
- assert(size != 0);
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v5.5.7");
- allocation=malloc(size);
- return(allocation);
+ char
+ *description;
+
+ assert(pixel_view != (const PixelView *) NULL);
+ assert(pixel_view->signature == WandSignature);
+ if (pixel_view->debug != MagickFalse)
+ (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",pixel_view->name);
+ assert(severity != (ExceptionType *) NULL);
+ *severity=pixel_view->exception->severity;
+ description=(char *) AcquireQuantumMemory(2UL*MaxTextExtent,
+ sizeof(*description));
+ if (description == (char *) NULL)
+ ThrowWandFatalException(ResourceLimitFatalError,"MemoryAllocationFailed",
+ pixel_view->name);
+ *description='\0';
+ if (pixel_view->exception->reason != (char *) NULL)
+ (void) CopyMagickString(description,GetLocaleExceptionMessage(
+ pixel_view->exception->severity,pixel_view->exception->reason),
+ MaxTextExtent);
+ if (pixel_view->exception->description != (char *) NULL)
+ {
+ (void) ConcatenateMagickString(description," (",MaxTextExtent);
+ (void) ConcatenateMagickString(description,GetLocaleExceptionMessage(
+ pixel_view->exception->severity,pixel_view->exception->description),
+ MaxTextExtent);
+ (void) ConcatenateMagickString(description,")",MaxTextExtent);
+ }
+ return(description);
}
\f
/*
% %
% %
% %
-% A c q u i r e O n e C a c h e V i e w P i x e l %
+% G e t P i x e l V i e w H e i g h t %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% AcquireOneCacheViewPixel() returns a single pixel at the specified (x,y)
-% location. The image background color is returned if an error occurs. If
-% you plan to modify the pixel, use GetOneCacheViewAuthenticPixel() instead.
-%
-% Deprecated, replace with:
+% GetPixelViewHeight() returns the pixel view height.
%
-% GetOneCacheViewVirtualPixel(cache_view,x,y,pixel,exception);
+% The format of the GetPixelViewHeight method is:
%
-% The format of the AcquireOneCacheViewPixel method is:
-%
-% MagickBooleanType AcquireOneCacheViewPixel(const CacheView *cache_view,
-% const ssize_t x,const ssize_t y,PixelPacket *pixel,ExceptionInfo *exception)
+% size_t GetPixelViewHeight(const PixelView *pixel_view)
%
% A description of each parameter follows:
%
-% o cache_view: the cache view.
-%
-% o x,y: These values define the offset of the pixel.
-%
-% o pixel: return a pixel at the specified (x,y) location.
-%
-% o exception: return any errors or warnings in this structure.
+% o pixel_view: the pixel view.
%
*/
-MagickExport MagickBooleanType AcquireOneCacheViewPixel(
- const CacheView *cache_view,const ssize_t x,const ssize_t y,PixelPacket *pixel,
- ExceptionInfo *exception)
+WandExport size_t GetPixelViewHeight(const PixelView *pixel_view)
{
- return(GetOneCacheViewVirtualPixel(cache_view,x,y,pixel,exception));
+ assert(pixel_view != (PixelView *) NULL);
+ assert(pixel_view->signature == WandSignature);
+ return(pixel_view->region.height);
}
\f
/*
% %
% %
% %
-% A c q u i r e O n e C a c h e V i e w V i r t u a l P i x e l %
+% G e t P i x e l V i e w I t e r a t o r %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% AcquireOneCacheViewVirtualPixel() returns a single pixel at the specified
-% (x,y) location. The image background color is returned if an error occurs.
-% If you plan to modify the pixel, use GetOneCacheViewAuthenticPixel() instead.
+% GetPixelViewIterator() iterates over the pixel view in parallel and calls
+% your get method for each scanline of the view. The pixel region is
+% not confined to the image canvas-- that is you can include negative offsets
+% or widths or heights that exceed the image dimension. Any updates to
+% the pixels in your callback are ignored.
%
-% Deprecated, replace with:
+% Use this pragma:
%
-% GetOneCacheViewVirtualMethodPixel(cache_view,virtual_pixel_method,
-% x,y,pixel,exception);
+% #pragma omp critical
%
-% The format of the AcquireOneCacheViewPixel method is:
+% to define a section of code in your callback get method that must be
+% executed by a single thread at a time.
%
-% MagickBooleanType AcquireOneCacheViewVirtualPixel(
-% const CacheView *cache_view,
-% const VirtualPixelMethod virtual_pixel_method,const ssize_t x,
-% const ssize_t y,PixelPacket *pixel,ExceptionInfo *exception)
+% The format of the GetPixelViewIterator method is:
%
-% A description of each parameter follows:
-%
-% o cache_view: the cache view.
+% MagickBooleanType GetPixelViewIterator(PixelView *source,
+% GetPixelViewMethod get,void *context)
%
-% o virtual_pixel_method: the virtual pixel method.
+% A description of each parameter follows:
%
-% o x,y: These values define the offset of the pixel.
+% o source: the source pixel view.
%
-% o pixel: return a pixel at the specified (x,y) location.
+% o get: the get callback method.
%
-% o exception: return any errors or warnings in this structure.
+% o context: the user defined context.
%
*/
-MagickExport MagickBooleanType AcquireOneCacheViewVirtualPixel(
- const CacheView *cache_view,const VirtualPixelMethod virtual_pixel_method,
- const ssize_t x,const ssize_t y,PixelPacket *pixel,ExceptionInfo *exception)
+WandExport MagickBooleanType GetPixelViewIterator(PixelView *source,
+ GetPixelViewMethod get,void *context)
{
+#define GetPixelViewTag "PixelView/Get"
+
+ Image
+ *source_image;
+
MagickBooleanType
status;
- status=GetOneCacheViewVirtualMethodPixel(cache_view,virtual_pixel_method,
- x,y,pixel,exception);
+ MagickOffsetType
+ progress;
+
+ ssize_t
+ y;
+
+ assert(source != (PixelView *) NULL);
+ assert(source->signature == WandSignature);
+ if (get == (GetPixelViewMethod) NULL)
+ return(MagickFalse);
+ source_image=source->wand->images;
+ status=MagickTrue;
+ progress=0;
+#if defined(MAGICKCORE_OPENMP_SUPPORT)
+ #pragma omp parallel for schedule(static,1) shared(progress,status)
+#endif
+ for (y=source->region.y; y < (ssize_t) source->region.height; y++)
+ {
+ const int
+ id = GetOpenMPThreadId();
+
+ register const IndexPacket
+ *indexes;
+
+ register const PixelPacket
+ *pixels;
+
+ register ssize_t
+ x;
+
+ if (status == MagickFalse)
+ continue;
+ pixels=GetCacheViewVirtualPixels(source->view,source->region.x,y,
+ source->region.width,1,source->exception);
+ if (pixels == (const PixelPacket *) NULL)
+ {
+ status=MagickFalse;
+ continue;
+ }
+ indexes=GetCacheViewVirtualIndexQueue(source->view);
+ for (x=0; x < (ssize_t) source->region.width; x++)
+ PixelSetQuantumColor(source->pixel_wands[id][x],pixels+x);
+ if (source_image->colorspace == CMYKColorspace)
+ for (x=0; x < (ssize_t) source->region.width; x++)
+ PixelSetBlackQuantum(source->pixel_wands[id][x],
+ GetIndexPixelComponent(indexes+x));
+ if (source_image->storage_class == PseudoClass)
+ for (x=0; x < (ssize_t) source->region.width; x++)
+ PixelSetIndex(source->pixel_wands[id][x],
+ GetIndexPixelComponent(indexes+x));
+ if (get(source,context) == MagickFalse)
+ status=MagickFalse;
+ if (source_image->progress_monitor != (MagickProgressMonitor) NULL)
+ {
+ MagickBooleanType
+ proceed;
+
+#if defined(MAGICKCORE_OPENMP_SUPPORT)
+ #pragma omp critical (MagickWand_GetPixelViewIterator)
+#endif
+ proceed=SetImageProgress(source_image,GetPixelViewTag,progress++,
+ source->region.height);
+ if (proceed == MagickFalse)
+ status=MagickFalse;
+ }
+ }
return(status);
}
\f
% %
% %
% %
-% A c q u i r e O n e M a g i c k P i x e l %
+% G e t P i x e l V i e w P i x e l s %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% AcquireOneMagickPixel() returns a single pixel at the specified (x,y)
-% location. The image background color is returned if an error occurs. If
-% you plan to modify the pixel, use GetOnePixel() instead.
-%
-% Deprecated, replace with:
+% GetPixelViewPixels() returns the pixel view pixel_wands.
%
-% MagickPixelPacket pixel;
-% GetOneVirtualMagickPixel(image,x,y,&pixel,exception);
+% The format of the GetPixelViewPixels method is:
%
-% The format of the AcquireOneMagickPixel() method is:
-%
-% MagickPixelPacket AcquireOneMagickPixel(const Image image,const ssize_t x,
-% const ssize_t y,ExceptionInfo exception)
+% PixelWand *GetPixelViewPixels(const PixelView *pixel_view)
%
% A description of each parameter follows:
%
-% o image: the image.
-%
-% o x,y: These values define the location of the pixel to return.
-%
-% o exception: return any errors or warnings in this structure.
+% o pixel_view: the pixel view.
%
*/
-MagickExport MagickPixelPacket AcquireOneMagickPixel(const Image *image,
- const ssize_t x,const ssize_t y,ExceptionInfo *exception)
+WandExport PixelWand **GetPixelViewPixels(const PixelView *pixel_view)
{
- MagickPixelPacket
- pixel;
+ const int
+ id = GetOpenMPThreadId();
- (void) GetOneVirtualMagickPixel(image,x,y,&pixel,exception);
- return(pixel);
+ assert(pixel_view != (PixelView *) NULL);
+ assert(pixel_view->signature == WandSignature);
+ return(pixel_view->pixel_wands[id]);
}
\f
/*
% %
% %
% %
-% A c q u i r e O n e P i x e l %
+% G e t P i x e l V i e w W a n d %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% AcquireOnePixel() returns a single pixel at the specified (x,y) location.
-% The image background color is returned if an error occurs. If you plan to
-% modify the pixel, use GetOnePixel() instead.
-%
-% Deprecated, replace with:
+% GetPixelViewWand() returns the magick wand associated with the pixel view.
%
-% PixelPacket pixel;
-% GetOneVirtualPixel(image,x,y,&pixel,exception);
+% The format of the GetPixelViewWand method is:
%
-% The format of the AcquireOnePixel() method is:
-%
-% PixelPacket AcquireOnePixel(const Image image,const ssize_t x,
-% const ssize_t y,ExceptionInfo exception)
+% MagickWand *GetPixelViewWand(const PixelView *pixel_view)
%
% A description of each parameter follows:
%
-% o image: the image.
-%
-% o x,y: These values define the location of the pixel to return.
-%
-% o exception: return any errors or warnings in this structure.
+% o pixel_view: the pixel view.
%
*/
-MagickExport PixelPacket AcquireOnePixel(const Image *image,const ssize_t x,
- const ssize_t y,ExceptionInfo *exception)
+WandExport MagickWand *GetPixelViewWand(const PixelView *pixel_view)
{
- PixelPacket
- pixel;
-
- (void) GetOneVirtualPixel(image,x,y,&pixel,exception);
- return(pixel);
+ assert(pixel_view != (PixelView *) NULL);
+ assert(pixel_view->signature == WandSignature);
+ return(pixel_view->wand);
}
\f
/*
% %
% %
% %
-% A c q u i r e O n e V i r t u a l P i x e l %
+% G e t P i x e l V i e w W i d t h %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% AcquireOneVirtualPixel() returns a single pixel at the specified (x,y)
-% location as defined by specified pixel method. The image background color
-% is returned if an error occurs. If you plan to modify the pixel, use
-% GetOnePixel() instead.
-%
-% Deprecated, replace with:
+% GetPixelViewWidth() returns the pixel view width.
%
-% PixelPacket pixel;
-% GetOneVirtualMethodPixel(image,virtual_pixel_method,x,y,&pixel,exception);
+% The format of the GetPixelViewWidth method is:
%
-% The format of the AcquireOneVirtualPixel() method is:
-%
-% PixelPacket AcquireOneVirtualPixel(const Image image,
-% const VirtualPixelMethod virtual_pixel_method,const ssize_t x,
-% const ssize_t y,ExceptionInfo exception)
+% size_t GetPixelViewWidth(const PixelView *pixel_view)
%
% A description of each parameter follows:
%
-% o virtual_pixel_method: the virtual pixel method.
-%
-% o image: the image.
-%
-% o x,y: These values define the location of the pixel to return.
-%
-% o exception: return any errors or warnings in this structure.
+% o pixel_view: the pixel view.
%
*/
-MagickExport PixelPacket AcquireOneVirtualPixel(const Image *image,
- const VirtualPixelMethod virtual_pixel_method,const ssize_t x,const ssize_t y,
- ExceptionInfo *exception)
+WandExport size_t GetPixelViewWidth(const PixelView *pixel_view)
{
- PixelPacket
- pixel;
-
- (void) GetOneVirtualMethodPixel(image,virtual_pixel_method,x,y,&pixel,
- exception);
- return(pixel);
+ assert(pixel_view != (PixelView *) NULL);
+ assert(pixel_view->signature == WandSignature);
+ return(pixel_view->region.width);
}
\f
/*
% %
% %
% %
-% A c q u i r e P i x e l s %
+% G e t P i x e l V i e w X %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% AcquirePixels() returns the pixels associated with the last call to
-% QueueAuthenticPixels() or GetVirtualPixels().
-%
-% Deprecated, replace with:
-%
-% GetVirtualPixelQueue(image);
+% GetPixelViewX() returns the pixel view x offset.
%
-% The format of the AcquirePixels() method is:
+% The format of the GetPixelViewX method is:
%
-% const PixelPacket *AcquirePixels(const Image image)
+% ssize_t GetPixelViewX(const PixelView *pixel_view)
%
% A description of each parameter follows:
%
-% o image: the image.
+% o pixel_view: the pixel view.
%
*/
-MagickExport const PixelPacket *AcquirePixels(const Image *image)
+WandExport ssize_t GetPixelViewX(const PixelView *pixel_view)
{
- return(GetVirtualPixelQueue(image));
+ assert(pixel_view != (PixelView *) NULL);
+ assert(pixel_view->signature == WandSignature);
+ return(pixel_view->region.x);
}
\f
/*
% %
% %
% %
-% A f f i n i t y I m a g e %
+% G e t P i x e l V i e w Y %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% AffinityImage() replaces the colors of an image with the closest color from
-% a reference image.
+% GetPixelViewY() returns the pixel view y offset.
%
-% Deprecated, replace with:
+% The format of the GetPixelViewY method is:
%
-% RemapImage(quantize_info,image,affinity_image);
-%
-% The format of the AffinityImage method is:
-%
-% MagickBooleanType AffinityImage(const QuantizeInfo *quantize_info,
-% Image *image,const Image *affinity_image)
+% ssize_t GetPixelViewY(const PixelView *pixel_view)
%
% A description of each parameter follows:
%
-% o quantize_info: Specifies a pointer to an QuantizeInfo structure.
-%
-% o image: the image.
-%
-% o affinity_image: the reference image.
+% o pixel_view: the pixel view.
%
*/
-MagickExport MagickBooleanType AffinityImage(const QuantizeInfo *quantize_info,
- Image *image,const Image *affinity_image)
+WandExport ssize_t GetPixelViewY(const PixelView *pixel_view)
{
- return(RemapImage(quantize_info,image,affinity_image));
+ assert(pixel_view != (PixelView *) NULL);
+ assert(pixel_view->signature == WandSignature);
+ return(pixel_view->region.y);
}
\f
/*
% %
% %
% %
-% A f f i n i t y I m a g e s %
+% I s P i x e l V i e w %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% AffinityImages() replaces the colors of a sequence of images with the
-% closest color from a reference image.
+% IsPixelView() returns MagickTrue if the the parameter is verified as a pixel
+% view container.
%
-% Deprecated, replace with:
+% The format of the IsPixelView method is:
%
-% RemapImages(quantize_info,images,affinity_image);
-%
-% The format of the AffinityImage method is:
-%
-% MagickBooleanType AffinityImages(const QuantizeInfo *quantize_info,
-% Image *images,Image *affinity_image)
+% MagickBooleanType IsPixelView(const PixelView *pixel_view)
%
% A description of each parameter follows:
%
-% o quantize_info: Specifies a pointer to an QuantizeInfo structure.
-%
-% o images: the image sequence.
-%
-% o affinity_image: the reference image.
+% o pixel_view: the pixel view.
%
*/
-MagickExport MagickBooleanType AffinityImages(const QuantizeInfo *quantize_info,
- Image *images,const Image *affinity_image)
+WandExport MagickBooleanType IsPixelView(const PixelView *pixel_view)
{
- return(RemapImages(quantize_info,images,affinity_image));
+ size_t
+ length;
+
+ if (pixel_view == (const PixelView *) NULL)
+ return(MagickFalse);
+ if (pixel_view->signature != WandSignature)
+ return(MagickFalse);
+ length=strlen(PixelViewId);
+ if (LocaleNCompare(pixel_view->name,PixelViewId,length) != 0)
+ return(MagickFalse);
+ return(MagickTrue);
}
\f
/*
% %
% %
% %
-% A l l o c a t e I m a g e %
+% M a g i c k C l i p P a t h I m a g e %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% AllocateImage() returns a pointer to an image structure initialized to
-% default values.
+% MagickClipPathImage() clips along the named paths from the 8BIM profile, if
+% present. Later operations take effect inside the path. Id may be a number
+% if preceded with #, to work on a numbered path, e.g., "#1" to use the first
+% path.
%
-% Deprecated, replace with:
+% The format of the MagickClipPathImage method is:
%
-% AcquireImage(image_info);
+% MagickBooleanType MagickClipPathImage(MagickWand *wand,
+% const char *pathname,const MagickBooleanType inside)
%
-% The format of the AllocateImage method is:
+% A description of each parameter follows:
%
-% Image *AllocateImage(const ImageInfo *image_info)
+% o wand: the magick wand.
%
-% A description of each parameter follows:
+% o pathname: name of clipping path resource. If name is preceded by #, use
+% clipping path numbered by name.
%
-% o image_info: Many of the image default values are set from this
-% structure. For example, filename, compression, depth, background color,
-% and others.
+% o inside: if non-zero, later operations take effect inside clipping path.
+% Otherwise later operations take effect outside clipping path.
%
*/
-MagickExport Image *AllocateImage(const ImageInfo *image_info)
+WandExport MagickBooleanType MagickClipPathImage(MagickWand *wand,
+ const char *pathname,const MagickBooleanType inside)
{
- return(AcquireImage(image_info));
+ return(MagickClipImagePath(wand,pathname,inside));
}
-\f
/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% %
% %
-% A l l o c a t e I m a g e C o l o r m a p %
+% D r a w G e t F i l l A l p h a %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% AllocateImageColormap() allocates an image colormap and initializes
-% it to a linear gray colorspace. If the image already has a colormap,
-% it is replaced. AllocateImageColormap() returns MagickTrue if successful,
-% otherwise MagickFalse if there is not enough memory.
-%
-% Deprecated, replace with:
-%
-% AcquireImageColormap(image,colors);
+% DrawGetFillAlpha() returns the alpha used when drawing using the fill
+% color or fill texture. Fully opaque is 1.0.
%
-% The format of the AllocateImageColormap method is:
+% The format of the DrawGetFillAlpha method is:
%
-% MagickBooleanType AllocateImageColormap(Image *image,
-% const size_t colors)
+% double DrawGetFillAlpha(const DrawingWand *wand)
%
% A description of each parameter follows:
%
-% o image: the image.
-%
-% o colors: the number of colors in the image colormap.
+% o wand: the drawing wand.
%
*/
-MagickExport MagickBooleanType AllocateImageColormap(Image *image,
- const size_t colors)
+WandExport double DrawGetFillAlpha(const DrawingWand *wand)
{
- return(AcquireImageColormap(image,colors));
+ return(DrawGetFillOpacity(wand));
}
\f
/*
% %
% %
% %
-% A l l o c a t e N e x t I m a g e %
+% D r a w G e t S t r o k e A l p h a %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% AllocateNextImage() initializes the next image in a sequence to
-% default values. The next member of image points to the newly allocated
-% image. If there is a memory shortage, next is assigned NULL.
-%
-% Deprecated, replace with:
+% DrawGetStrokeAlpha() returns the alpha of stroked object outlines.
%
-% AcquireNextImage(image_info,image);
+% The format of the DrawGetStrokeAlpha method is:
%
-% The format of the AllocateNextImage method is:
-%
-% void AllocateNextImage(const ImageInfo *image_info,Image *image)
+% double DrawGetStrokeAlpha(const DrawingWand *wand)
%
% A description of each parameter follows:
%
-% o image_info: Many of the image default values are set from this
-% structure. For example, filename, compression, depth, background color,
-% and others.
-%
-% o image: the image.
-%
+% o wand: the drawing wand.
*/
-MagickExport void AllocateNextImage(const ImageInfo *image_info,Image *image)
+WandExport double DrawGetStrokeAlpha(const DrawingWand *wand)
{
- AcquireNextImage(image_info,image);
+ return(DrawGetStrokeOpacity(wand));
}
\f
/*
% %
% %
% %
-% A l l o c a t e S t r i n g %
+% D r a w P e e k G r a p h i c W a n d %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% AllocateString() allocates memory for a string and copies the source string
-% to that memory location (and returns it).
+% DrawPeekGraphicWand() returns the current drawing wand.
%
-% The format of the AllocateString method is:
+% The format of the PeekDrawingWand method is:
%
-% char *AllocateString(const char *source)
+% DrawInfo *DrawPeekGraphicWand(const DrawingWand *wand)
%
% A description of each parameter follows:
%
-% o source: A character string.
+% o wand: the drawing wand.
%
*/
-MagickExport char *AllocateString(const char *source)
+WandExport DrawInfo *DrawPeekGraphicWand(const DrawingWand *wand)
{
- char
- *destination;
-
- size_t
- length;
-
- assert(source != (const char *) NULL);
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v5.5.7");
- length=strlen(source)+MaxTextExtent+1;
- destination=(char *) AcquireQuantumMemory(length,sizeof(*destination));
- if (destination == (char *) NULL)
- ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed");
- *destination='\0';
- if (source != (char *) NULL)
- (void) CopyMagickString(destination,source,length);
- return(destination);
+ return(PeekDrawingWand(wand));
}
\f
/*
% %
% %
% %
-% A v e r a g e I m a g e s %
+% D r a w P o p G r a p h i c C o n t e x t %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% AverageImages() takes a set of images and averages them together. Each
-% image in the set must have the same width and height. AverageImages()
-% returns a single image with each corresponding pixel component of each
-% image averaged. On failure, a NULL image is returned and exception
-% describes the reason for the failure.
-%
-% Deprecated, replace with:
-%
-% EvaluateImages(images,MeanEvaluateOperator,exception);
+% DrawPopGraphicContext() destroys the current drawing wand and returns to the
+% previously pushed drawing wand. Multiple drawing wands may exist. It is an
+% error to attempt to pop more drawing wands than have been pushed, and it is
+% proper form to pop all drawing wands which have been pushed.
%
-% The format of the AverageImages method is:
+% The format of the DrawPopGraphicContext method is:
%
-% Image *AverageImages(Image *images,ExceptionInfo *exception)
+% MagickBooleanType DrawPopGraphicContext(DrawingWand *wand)
%
% A description of each parameter follows:
%
-% o image: the image sequence.
-%
-% o exception: return any errors or warnings in this structure.
+% o wand: the drawing wand.
%
*/
-MagickExport Image *AverageImages(const Image *images,ExceptionInfo *exception)
+WandExport void DrawPopGraphicContext(DrawingWand *wand)
{
- return(EvaluateImages(images,MeanEvaluateOperator,exception));
+ (void) PopDrawingWand(wand);
}
\f
/*
% %
% %
% %
-% C h a n n e l I m a g e %
+% D r a w P u s h G r a p h i c C o n t e x t %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% Extract a channel from the image. A channel is a particular color component
-% of each pixel in the image.
-%
-% Deprecated, replace with:
+% DrawPushGraphicContext() clones the current drawing wand to create a new
+% drawing wand. The original drawing wand(s) may be returned to by
+% invoking PopDrawingWand(). The drawing wands are stored on a drawing wand
+% stack. For every Pop there must have already been an equivalent Push.
%
-% SeparateImageChannel(image,channel);
+% The format of the DrawPushGraphicContext method is:
%
-% The format of the ChannelImage method is:
-%
-% unsigned int ChannelImage(Image *image,const ChannelType channel)
+% MagickBooleanType DrawPushGraphicContext(DrawingWand *wand)
%
% A description of each parameter follows:
%
-% o image: the image.
-%
-% o channel: Identify which channel to extract: RedChannel, GreenChannel,
-% BlueChannel, OpacityChannel, CyanChannel, MagentaChannel, YellowChannel,
-% or BlackChannel.
+% o wand: the drawing wand.
%
*/
-MagickExport unsigned int ChannelImage(Image *image,const ChannelType channel)
+WandExport void DrawPushGraphicContext(DrawingWand *wand)
{
- return(SeparateImageChannel(image,channel));
+ (void) PushDrawingWand(wand);
}
\f
/*
% %
% %
% %
-% C h a n n e l T h r e s h o l d I m a g e %
+% D r a w S e t F i l l A l p h a %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% ChannelThresholdImage() changes the value of individual pixels based on
-% the intensity of each pixel channel. The result is a high-contrast image.
+% DrawSetFillAlpha() sets the alpha to use when drawing using the fill
+% color or fill texture. Fully opaque is 1.0.
%
-% The format of the ChannelThresholdImage method is:
+% The format of the DrawSetFillAlpha method is:
%
-% unsigned int ChannelThresholdImage(Image *image,const char *level)
+% void DrawSetFillAlpha(DrawingWand *wand,const double fill_alpha)
%
% A description of each parameter follows:
%
-% o image: the image.
+% o wand: the drawing wand.
%
-% o level: define the threshold values.
+% o fill_alpha: fill alpha
%
*/
-MagickExport unsigned int ChannelThresholdImage(Image *image,const char *level)
+WandExport void DrawSetFillAlpha(DrawingWand *wand,const double fill_alpha)
{
- MagickPixelPacket
- threshold;
-
- GeometryInfo
- geometry_info;
-
- unsigned int
- flags,
- status;
-
- assert(image != (Image *) NULL);
- assert(image->signature == MagickSignature);
- if (image->debug != MagickFalse)
- (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
- if (image->debug != MagickFalse)
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v5.5.7");
- if (level == (char *) NULL)
- return(MagickFalse);
- flags=ParseGeometry(level,&geometry_info);
- threshold.red=geometry_info.rho;
- threshold.green=geometry_info.sigma;
- if ((flags & SigmaValue) == 0)
- threshold.green=threshold.red;
- threshold.blue=geometry_info.xi;
- if ((flags & XiValue) == 0)
- threshold.blue=threshold.red;
- status=BilevelImageChannel(image,RedChannel,threshold.red);
- status|=BilevelImageChannel(image,GreenChannel,threshold.green);
- status|=BilevelImageChannel(image,BlueChannel,threshold.blue);
- return(status);
+ DrawSetFillOpacity(wand,fill_alpha);
}
\f
/*
% %
% %
% %
-% C l i p I m a g e P a t h %
+% D r a w S e t S t r o k e A l p h a %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% ClipPathImage() sets the image clip mask based any clipping path information
-% if it exists.
-%
-% Deprecated, replace with:
-%
-% ClipImagePath(image,pathname,inside);
+% DrawSetStrokeAlpha() specifies the alpha of stroked object outlines.
%
-% The format of the ClipImage method is:
+% The format of the DrawSetStrokeAlpha method is:
%
-% MagickBooleanType ClipPathImage(Image *image,const char *pathname,
-% const MagickBooleanType inside)
+% void DrawSetStrokeAlpha(DrawingWand *wand,const double stroke_alpha)
%
% A description of each parameter follows:
%
-% o image: the image.
+% o wand: the drawing wand.
%
-% o pathname: name of clipping path resource. If name is preceded by #, use
-% clipping path numbered by name.
-%
-% o inside: if non-zero, later operations take effect inside clipping path.
-% Otherwise later operations take effect outside clipping path.
+% o stroke_alpha: stroke alpha. The value 1.0 is opaque.
%
*/
-MagickExport MagickBooleanType ClipPathImage(Image *image,const char *pathname,
- const MagickBooleanType inside)
+WandExport void DrawSetStrokeAlpha(DrawingWand *wand,const double stroke_alpha)
{
- return(ClipImagePath(image,pathname,inside));
+ DrawSetStrokeOpacity(wand,stroke_alpha);
}
\f
/*
% %
% %
% %
-% C l o n e I m a g e A t t r i b u t e s %
+% M a g i c k C o l o r F l o o d f i l l I m a g e %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% CloneImageAttributes() clones one or more image attributes.
+% MagickColorFloodfillImage() changes the color value of any pixel that matches
+% target and is an immediate neighbor. If the method FillToBorderMethod is
+% specified, the color value is changed for any neighbor pixel that does not
+% match the bordercolor member of image.
+%
+% The format of the MagickColorFloodfillImage method is:
%
-% Deprecated, replace with:
+% MagickBooleanType MagickColorFloodfillImage(MagickWand *wand,
+% const PixelWand *fill,const double fuzz,const PixelWand *bordercolor,
+% const ssize_t x,const ssize_t y)
%
-% CloneImageProperties(image,clone_image);
+% A description of each parameter follows:
%
-% The format of the CloneImageAttributes method is:
+% o wand: the magick wand.
%
-% MagickBooleanType CloneImageAttributes(Image *image,
-% const Image *clone_image)
+% o fill: the floodfill color pixel wand.
%
-% A description of each parameter follows:
+% o fuzz: By default target must match a particular pixel color
+% exactly. However, in many cases two colors may differ by a small amount.
+% The fuzz member of image defines how much tolerance is acceptable to
+% consider two colors as the same. For example, set fuzz to 10 and the
+% color red at intensities of 100 and 102 respectively are now interpreted
+% as the same color for the purposes of the floodfill.
%
-% o image: the image.
+% o bordercolor: the border color pixel wand.
%
-% o clone_image: the clone image.
+% o x,y: the starting location of the operation.
%
*/
-MagickExport MagickBooleanType CloneImageAttributes(Image *image,
- const Image *clone_image)
+WandExport MagickBooleanType MagickColorFloodfillImage(MagickWand *wand,
+ const PixelWand *fill,const double fuzz,const PixelWand *bordercolor,
+ const ssize_t x,const ssize_t y)
{
- return(CloneImageProperties(image,clone_image));
+ DrawInfo
+ *draw_info;
+
+ MagickBooleanType
+ status;
+
+ PixelPacket
+ target;
+
+ assert(wand != (MagickWand *) NULL);
+ assert(wand->signature == WandSignature);
+ if (wand->debug != MagickFalse)
+ (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
+ if (wand->images == (Image *) NULL)
+ ThrowWandException(WandError,"ContainsNoImages",wand->name);
+ draw_info=CloneDrawInfo(wand->image_info,(DrawInfo *) NULL);
+ PixelGetQuantumColor(fill,&draw_info->fill);
+ (void) GetOneVirtualPixel(wand->images,x % wand->images->columns,
+ y % wand->images->rows,&target,wand->exception);
+ if (bordercolor != (PixelWand *) NULL)
+ PixelGetQuantumColor(bordercolor,&target);
+ wand->images->fuzz=fuzz;
+ status=ColorFloodfillImage(wand->images,draw_info,target,x,y,
+ bordercolor != (PixelWand *) NULL ? FillToBorderMethod : FloodfillMethod);
+ if (status == MagickFalse)
+ InheritException(wand->exception,&wand->images->exception);
+ draw_info=DestroyDrawInfo(draw_info);
+ return(status);
}
\f
/*
% %
% %
% %
-% C l o n e M e m o r y %
+% M a g i c k D e s c r i b e I m a g e %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% CloneMemory() copies size bytes from memory area source to the destination.
-% Copying between objects that overlap will take place correctly. It returns
-% destination.
+% MagickDescribeImage() identifies an image by printing its attributes to the
+% file. Attributes include the image width, height, size, and others.
%
-% The format of the CloneMemory method is:
+% The format of the MagickDescribeImage method is:
%
-% void *CloneMemory(void *destination,const void *source,
-% const size_t size)
+% const char *MagickDescribeImage(MagickWand *wand)
%
% A description of each parameter follows:
%
-% o destination: the destination.
-%
-% o source: the source.
-%
-% o size: the size of the memory in bytes to allocate.
+% o wand: the magick wand.
%
*/
-MagickExport void *CloneMemory(void *destination,const void *source,
- const size_t size)
+WandExport char *MagickDescribeImage(MagickWand *wand)
{
- register const unsigned char
- *p;
-
- register unsigned char
- *q;
-
- register ssize_t
- i;
-
- assert(destination != (void *) NULL);
- assert(source != (const void *) NULL);
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v5.5.7");
- p=(const unsigned char *) source;
- q=(unsigned char *) destination;
- if ((p <= q) || ((p+size) >= q))
- return(CopyMagickMemory(destination,source,size));
- /*
- Overlap, copy backwards.
- */
- p+=size;
- q+=size;
- for (i=(ssize_t) (size-1); i >= 0; i--)
- *--q=(*--p);
- return(destination);
+ return(MagickIdentifyImage(wand));
}
\f
/*
% %
% %
% %
-% C l o s e C a c h e V i e w %
+% M a g i c k F l a t t e n I m a g e s %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% CloseCacheView() closes the specified view returned by a previous call to
-% OpenCacheView().
-%
-% Deprecated, replace with:
-%
-% DestroyCacheView(view_info);
+% MagickFlattenImages() merges a sequence of images. This useful for
+% combining Photoshop layers into a single image.
%
-% The format of the CloseCacheView method is:
+% The format of the MagickFlattenImages method is:
%
-% CacheView *CloseCacheView(CacheView *view_info)
+% MagickWand *MagickFlattenImages(MagickWand *wand)
%
% A description of each parameter follows:
%
-% o view_info: the address of a structure of type CacheView.
+% o wand: the magick wand.
%
*/
-MagickExport CacheView *CloseCacheView(CacheView *view_info)
+WandExport MagickWand *MagickFlattenImages(MagickWand *wand)
{
- return(DestroyCacheView(view_info));
+ Image
+ *flatten_image;
+
+ assert(wand != (MagickWand *) NULL);
+ assert(wand->signature == WandSignature);
+ if (wand->debug != MagickFalse)
+ (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
+ if (wand->images == (Image *) NULL)
+ return((MagickWand *) NULL);
+ flatten_image=FlattenImages(wand->images,wand->exception);
+ if (flatten_image == (Image *) NULL)
+ return((MagickWand *) NULL);
+ return(CloneMagickWandFromImages(wand,flatten_image));
}
\f
/*
% %
% %
% %
-% C o l o r F l o o d f i l l I m a g e %
+% M a g i c k G e t I m a g e A t t r i b u t e %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% ColorFloodfill() changes the color value of any pixel that matches
-% target and is an immediate neighbor. If the method FillToBorderMethod is
-% specified, the color value is changed for any neighbor pixel that does not
-% match the bordercolor member of image.
-%
-% By default target must match a particular pixel color exactly.
-% However, in many cases two colors may differ by a small amount. The
-% fuzz member of image defines how much tolerance is acceptable to
-% consider two colors as the same. For example, set fuzz to 10 and the
-% color red at intensities of 100 and 102 respectively are now
-% interpreted as the same color for the purposes of the floodfill.
+% MagickGetImageAttribute() returns a value associated with the specified
+% property. Use MagickRelinquishMemory() to free the value when you are
+% finished with it.
%
-% The format of the ColorFloodfillImage method is:
+% The format of the MagickGetImageAttribute method is:
%
-% MagickBooleanType ColorFloodfillImage(Image *image,
-% const DrawInfo *draw_info,const PixelPacket target,
-% const ssize_t x_offset,const ssize_t y_offset,const PaintMethod method)
+% char *MagickGetImageAttribute(MagickWand *wand,const char *property)
%
% A description of each parameter follows:
%
-% o image: the image.
-%
-% o draw_info: the draw info.
-%
-% o target: the RGB value of the target color.
+% o wand: the magick wand.
%
-% o x,y: the starting location of the operation.
-%
-% o method: Choose either FloodfillMethod or FillToBorderMethod.
+% o property: the property.
%
*/
-
-#define MaxStacksize (1UL << 15)
-#define PushSegmentStack(up,left,right,delta) \
-{ \
- if (s >= (segment_stack+MaxStacksize)) \
- ThrowBinaryException(DrawError,"SegmentStackOverflow",image->filename) \
- else \
- { \
- if ((((up)+(delta)) >= 0) && (((up)+(delta)) < (ssize_t) image->rows)) \
- { \
- s->x1=(double) (left); \
- s->y1=(double) (up); \
- s->x2=(double) (right); \
- s->y2=(double) (delta); \
- s++; \
- } \
- } \
-}
-
-MagickExport MagickBooleanType ColorFloodfillImage(Image *image,
- const DrawInfo *draw_info,const PixelPacket target,const ssize_t x_offset,
- const ssize_t y_offset,const PaintMethod method)
+WandExport char *MagickGetImageAttribute(MagickWand *wand,const char *property)
{
- Image
- *floodplane_image;
-
- MagickBooleanType
- skip;
-
- PixelPacket
- fill_color;
-
- register SegmentInfo
- *s;
-
- SegmentInfo
- *segment_stack;
-
- ssize_t
- offset,
- start,
- x,
- x1,
- x2,
- y;
-
- /*
- Check boundary conditions.
- */
- assert(image != (Image *) NULL);
- assert(image->signature == MagickSignature);
- if (image->debug != MagickFalse)
- (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
- assert(draw_info != (DrawInfo *) NULL);
- assert(draw_info->signature == MagickSignature);
- if ((x_offset < 0) || (x_offset >= (ssize_t) image->columns))
- return(MagickFalse);
- if ((y_offset < 0) || (y_offset >= (ssize_t) image->rows))
- return(MagickFalse);
- if (SetImageStorageClass(image,DirectClass) == MagickFalse)
- return(MagickFalse);
- if (image->matte == MagickFalse)
- (void) SetImageAlphaChannel(image,OpaqueAlphaChannel);
- floodplane_image=CloneImage(image,image->columns,image->rows,MagickTrue,
- &image->exception);
- if (floodplane_image == (Image *) NULL)
- return(MagickFalse);
- (void) SetImageAlphaChannel(floodplane_image,OpaqueAlphaChannel);
- /*
- Set floodfill color.
- */
- segment_stack=(SegmentInfo *) AcquireQuantumMemory(MaxStacksize,
- sizeof(*segment_stack));
- if (segment_stack == (SegmentInfo *) NULL)
- {
- floodplane_image=DestroyImage(floodplane_image);
- ThrowBinaryException(ResourceLimitError,"MemoryAllocationFailed",
- image->filename);
- }
- /*
- Push initial segment on stack.
- */
- x=x_offset;
- y=y_offset;
- start=0;
- s=segment_stack;
- PushSegmentStack(y,x,x,1);
- PushSegmentStack(y+1,x,x,-1);
- while (s > segment_stack)
- {
- register const PixelPacket
- *restrict p;
-
- register ssize_t
- x;
-
- register PixelPacket
- *restrict q;
-
- /*
- Pop segment off stack.
- */
- s--;
- x1=(ssize_t) s->x1;
- x2=(ssize_t) s->x2;
- offset=(ssize_t) s->y2;
- y=(ssize_t) s->y1+offset;
- /*
- Recolor neighboring pixels.
- */
- p=GetVirtualPixels(image,0,y,(size_t) (x1+1),1,&image->exception);
- q=GetAuthenticPixels(floodplane_image,0,y,(size_t) (x1+1),1,
- &image->exception);
- if ((p == (const PixelPacket *) NULL) || (q == (PixelPacket *) NULL))
- break;
- p+=x1;
- q+=x1;
- for (x=x1; x >= 0; x--)
- {
- if (q->opacity == (Quantum) TransparentOpacity)
- break;
- if (method == FloodfillMethod)
- {
- if (IsColorSimilar(image,p,&target) == MagickFalse)
- break;
- }
- else
- if (IsColorSimilar(image,p,&target) != MagickFalse)
- break;
- q->opacity=(Quantum) TransparentOpacity;
- p--;
- q--;
- }
- if (SyncAuthenticPixels(floodplane_image,&image->exception) == MagickFalse)
- break;
- skip=x >= x1 ? MagickTrue : MagickFalse;
- if (skip == MagickFalse)
- {
- start=x+1;
- if (start < x1)
- PushSegmentStack(y,start,x1-1,-offset);
- x=x1+1;
- }
- do
- {
- if (skip == MagickFalse)
- {
- if (x < (ssize_t) image->columns)
- {
- p=GetVirtualPixels(image,x,y,image->columns-x,1,
- &image->exception);
- q=GetAuthenticPixels(floodplane_image,x,y,image->columns-x,1,
- &image->exception);
- if ((p == (const PixelPacket *) NULL) ||
- (q == (PixelPacket *) NULL))
- break;
- for ( ; x < (ssize_t) image->columns; x++)
- {
- if (q->opacity == (Quantum) TransparentOpacity)
- break;
- if (method == FloodfillMethod)
- {
- if (IsColorSimilar(image,p,&target) == MagickFalse)
- break;
- }
- else
- if (IsColorSimilar(image,p,&target) != MagickFalse)
- break;
- q->opacity=(Quantum) TransparentOpacity;
- p++;
- q++;
- }
- if (SyncAuthenticPixels(floodplane_image,&image->exception) == MagickFalse)
- break;
- }
- PushSegmentStack(y,start,x-1,offset);
- if (x > (x2+1))
- PushSegmentStack(y,x2+1,x-1,-offset);
- }
- skip=MagickFalse;
- x++;
- if (x <= x2)
- {
- p=GetVirtualPixels(image,x,y,(size_t) (x2-x+1),1,
- &image->exception);
- q=GetAuthenticPixels(floodplane_image,x,y,(size_t) (x2-x+1),1,
- &image->exception);
- if ((p == (const PixelPacket *) NULL) || (q == (PixelPacket *) NULL))
- break;
- for ( ; x <= x2; x++)
- {
- if (q->opacity == (Quantum) TransparentOpacity)
- break;
- if (method == FloodfillMethod)
- {
- if (IsColorSimilar(image,p,&target) != MagickFalse)
- break;
- }
- else
- if (IsColorSimilar(image,p,&target) == MagickFalse)
- break;
- p++;
- q++;
- }
- }
- start=x;
- } while (x <= x2);
- }
- for (y=0; y < (ssize_t) image->rows; y++)
- {
- register const PixelPacket
- *restrict p;
-
- register ssize_t
- x;
-
- register PixelPacket
- *restrict q;
-
- /*
- Tile fill color onto floodplane.
- */
- p=GetVirtualPixels(floodplane_image,0,y,image->columns,1,
- &image->exception);
- q=GetAuthenticPixels(image,0,y,image->columns,1,&image->exception);
- if ((p == (const PixelPacket *) NULL) || (q == (PixelPacket *) NULL))
- break;
- for (x=0; x < (ssize_t) image->columns; x++)
- {
- if (GetOpacityPixelComponent(p) != OpaqueOpacity)
- {
- (void) GetFillColor(draw_info,x,y,&fill_color);
- MagickCompositeOver(&fill_color,(MagickRealType) fill_color.opacity,q,
- (MagickRealType) q->opacity,q);
- }
- p++;
- q++;
- }
- if (SyncAuthenticPixels(image,&image->exception) == MagickFalse)
- break;
- }
- segment_stack=(SegmentInfo *) RelinquishMagickMemory(segment_stack);
- floodplane_image=DestroyImage(floodplane_image);
- return(y == (ssize_t) image->rows ? MagickTrue : MagickFalse);
+ return(MagickGetImageProperty(wand,property));
}
\f
/*
% %
% %
% %
-% D e l e t e I m a g e A t t r i b u t e %
++ M a g i c k G e t I m a g e I n d e x %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% DeleteImageAttribute() deletes an attribute from the image.
+% MagickGetImageIndex() returns the index of the current image.
%
-% Deprecated, replace with:
+% The format of the MagickGetImageIndex method is:
%
-% DeleteImageProperty(image,key);
-%
-% The format of the DeleteImageAttribute method is:
-%
-% MagickBooleanType DeleteImageAttribute(Image *image,const char *key)
+% ssize_t MagickGetImageIndex(MagickWand *wand)
%
% A description of each parameter follows:
%
-% o image: the image info.
-%
-% o key: the image key.
+% o wand: the magick wand.
%
*/
-MagickExport MagickBooleanType DeleteImageAttribute(Image *image,
- const char *key)
+WandExport ssize_t MagickGetImageIndex(MagickWand *wand)
{
- return(DeleteImageProperty(image,key));
+ return(MagickGetIteratorIndex(wand));
}
\f
/*
% %
% %
% %
-% D e l e t e I m a g e L i s t %
++ M a g i c k G e t I m a g e C h a n n e l E x t r e m a %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% DeleteImageList() deletes an image at the specified position in the list.
+% MagickGetImageChannelExtrema() gets the extrema for one or more image
+% channels.
%
-% The format of the DeleteImageList method is:
+% The format of the MagickGetImageChannelExtrema method is:
%
-% unsigned int DeleteImageList(Image *images,const ssize_t offset)
+% MagickBooleanType MagickGetImageChannelExtrema(MagickWand *wand,
+% const ChannelType channel,size_t *minima,size_t *maxima)
%
% A description of each parameter follows:
%
-% o images: the image list.
+% o wand: the magick wand.
+%
+% o channel: the image channel(s).
%
-% o offset: the position within the list.
+% o minima: The minimum pixel value for the specified channel(s).
+%
+% o maxima: The maximum pixel value for the specified channel(s).
%
*/
-MagickExport unsigned int DeleteImageList(Image *images,const ssize_t offset)
+WandExport MagickBooleanType MagickGetImageChannelExtrema(MagickWand *wand,
+ const ChannelType channel,size_t *minima,size_t *maxima)
{
- register ssize_t
- i;
+ MagickBooleanType
+ status;
- if (images->debug != MagickFalse)
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v5.5.2");
- while (GetPreviousImageInList(images) != (Image *) NULL)
- images=GetPreviousImageInList(images);
- for (i=0; i < offset; i++)
- {
- if (GetNextImageInList(images) == (Image *) NULL)
- return(MagickFalse);
- images=GetNextImageInList(images);
- }
- DeleteImageFromList(&images);
- return(MagickTrue);
+ assert(wand != (MagickWand *) NULL);
+ assert(wand->signature == WandSignature);
+ if (wand->debug != MagickFalse)
+ (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
+ if (wand->images == (Image *) NULL)
+ ThrowWandException(WandError,"ContainsNoImages",wand->name);
+ status=GetImageChannelExtrema(wand->images,channel,minima,maxima,
+ wand->exception);
+ return(status);
}
\f
/*
% %
% %
% %
-% D e l e t e M a g i c k R e g i s t r y %
++ M a g i c k G e t I m a g e E x t r e m a %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% DeleteMagickRegistry() deletes an entry in the registry as defined by the id.
-% It returns MagickTrue if the entry is deleted otherwise MagickFalse if no
-% entry is found in the registry that matches the id.
+% MagickGetImageExtrema() gets the extrema for the image.
%
-% Deprecated, replace with:
+% The format of the MagickGetImageExtrema method is:
%
-% char key[MaxTextExtent];
-% FormatMagickString(key,MaxTextExtent,"%ld\n",id);
-% DeleteImageRegistry(key);
+% MagickBooleanType MagickGetImageExtrema(MagickWand *wand,
+% size_t *minima,size_t *maxima)
%
-% The format of the DeleteMagickRegistry method is:
+% A description of each parameter follows:
%
-% MagickBooleanType DeleteMagickRegistry(const ssize_t id)
+% o wand: the magick wand.
%
-% A description of each parameter follows:
+% o minima: The minimum pixel value for the specified channel(s).
%
-% o id: the registry id.
+% o maxima: The maximum pixel value for the specified channel(s).
%
*/
-MagickExport MagickBooleanType DeleteMagickRegistry(const ssize_t id)
+WandExport MagickBooleanType MagickGetImageExtrema(MagickWand *wand,
+ size_t *minima,size_t *maxima)
{
- char
- key[MaxTextExtent];
+ MagickBooleanType
+ status;
- (void) FormatMagickString(key,MaxTextExtent,"%.20g\n",(double) id);
- return(DeleteImageRegistry(key));
+ assert(wand != (MagickWand *) NULL);
+ assert(wand->signature == WandSignature);
+ if (wand->debug != MagickFalse)
+ (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
+ if (wand->images == (Image *) NULL)
+ ThrowWandException(WandError,"ContainsNoImages",wand->name);
+ status=GetImageExtrema(wand->images,minima,maxima,wand->exception);
+ return(status);
}
\f
/*
% %
% %
% %
-+ D e s t r o y C o n s t i t u t e %
+% M a g i c k G e t I m a g e M a t t e %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% DestroyConstitute() destroys the constitute component.
+% MagickGetImageMatte() returns MagickTrue if the image has a matte channel
+% otherwise MagickFalse.
+%
+% The format of the MagickGetImageMatte method is:
+%
+% size_t MagickGetImageMatte(MagickWand *wand)
%
-% The format of the DestroyConstitute method is:
+% A description of each parameter follows:
%
-% DestroyConstitute(void)
+% o wand: the magick wand.
%
*/
-MagickExport void DestroyConstitute(void)
+WandExport MagickBooleanType MagickGetImageMatte(MagickWand *wand)
{
- ConstituteComponentTerminus();
+ assert(wand != (MagickWand *) NULL);
+ assert(wand->signature == WandSignature);
+ if (wand->debug != MagickFalse)
+ (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
+ if (wand->images == (Image *) NULL)
+ ThrowWandException(WandError,"ContainsNoImages",wand->name);
+ return(wand->images->matte);
}
\f
/*
% %
% %
% %
-+ D e s t r o y M a g i c k R e g i s t r y %
+% M a g i c k G e t I m a g e P i x e l s %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% DestroyMagickRegistry() deallocates memory associated the magick registry.
+% MagickGetImagePixels() extracts pixel data from an image and returns it to
+% you. The method returns MagickTrue on success otherwise MagickFalse if an
+% error is encountered. The data is returned as char, short int, int, ssize_t,
+% float, or double in the order specified by map.
+%
+% Suppose you want to extract the first scanline of a 640x480 image as
+% character data in red-green-blue order:
+%
+% MagickGetImagePixels(wand,0,0,640,1,"RGB",CharPixel,pixels);
+%
+% The format of the MagickGetImagePixels method is:
+%
+% MagickBooleanType MagickGetImagePixels(MagickWand *wand,
+% const ssize_t x,const ssize_t y,const size_t columns,
+% const size_t rows,const char *map,const StorageType storage,
+% void *pixels)
+%
+% A description of each parameter follows:
%
-% Deprecated, replace with:
+% o wand: the magick wand.
%
-% RegistryComponentTerminus();
+% o x, y, columns, rows: These values define the perimeter
+% of a region of pixels you want to extract.
+%
+% o map: This string reflects the expected ordering of the pixel array.
+% It can be any combination or order of R = red, G = green, B = blue,
+% A = alpha (0 is transparent), O = opacity (0 is opaque), C = cyan,
+% Y = yellow, M = magenta, K = black, I = intensity (for grayscale),
+% P = pad.
%
-% The format of the DestroyMagickRegistry method is:
+% o storage: Define the data type of the pixels. Float and double types are
+% expected to be normalized [0..1] otherwise [0..QuantumRange]. Choose from
+% these types: CharPixel, DoublePixel, FloatPixel, IntegerPixel,
+% LongPixel, QuantumPixel, or ShortPixel.
%
-% void DestroyMagickRegistry(void)
+% o pixels: This array of values contain the pixel components as defined by
+% map and type. You must preallocate this array where the expected
+% length varies depending on the values of width, height, map, and type.
%
*/
-MagickExport void DestroyMagickRegistry(void)
+WandExport MagickBooleanType MagickGetImagePixels(MagickWand *wand,
+ const ssize_t x,const ssize_t y,const size_t columns,
+ const size_t rows,const char *map,const StorageType storage,
+ void *pixels)
{
- RegistryComponentTerminus();
+ return(MagickExportImagePixels(wand,x,y,columns,rows,map,storage,pixels));
}
\f
/*
% %
% %
% %
-% D e s c r i b e I m a g e %
+% M a g i c k G e t I m a g e S i z e %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% DescribeImage() describes an image by printing its attributes to the file.
-% Attributes include the image width, height, size, and others.
+% MagickGetImageSize() returns the image length in bytes.
%
-% Deprecated, replace with:
+% The format of the MagickGetImageSize method is:
%
-% IdentifyImage(image,file,verbose);
-%
-% The format of the DescribeImage method is:
-%
-% MagickBooleanType DescribeImage(Image *image,FILE *file,
-% const MagickBooleanType verbose)
+% MagickBooleanType MagickGetImageSize(MagickWand *wand,
+% MagickSizeType *length)
%
% A description of each parameter follows:
%
-% o image: the image.
+% o wand: the magick wand.
%
-% o file: the file, typically stdout.
-%
-% o verbose: A value other than zero prints more detailed information
-% about the image.
+% o length: the image length in bytes.
%
*/
-MagickExport MagickBooleanType DescribeImage(Image *image,FILE *file,
- const MagickBooleanType verbose)
+WandExport MagickSizeType MagickGetImageSize(MagickWand *wand)
{
- return(IdentifyImage(image,file,verbose));
+ assert(wand != (MagickWand *) NULL);
+ assert(wand->signature == WandSignature);
+ if (wand->debug != MagickFalse)
+ (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
+ if (wand->images == (Image *) NULL)
+ ThrowWandException(WandError,"ContainsNoImages",wand->name);
+ return(GetBlobSize(wand->images));
}
\f
/*
% %
% %
% %
-% D e s t r o y I m a g e A t t r i b u t e s %
+% M a g i c k M a p I m a g e %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% DestroyImageAttributes() deallocates memory associated with the image
-% attribute list.
+% MagickMapImage() replaces the colors of an image with the closest color
+% from a reference image.
%
-% The format of the DestroyImageAttributes method is:
+% The format of the MagickMapImage method is:
%
-% DestroyImageAttributes(Image *image)
+% MagickBooleanType MagickMapImage(MagickWand *wand,
+% const MagickWand *map_wand,const MagickBooleanType dither)
%
% A description of each parameter follows:
%
-% o image: the image.
+% o wand: the magick wand.
+%
+% o map: the map wand.
+%
+% o dither: Set this integer value to something other than zero to dither
+% the mapped image.
%
*/
-MagickExport void DestroyImageAttributes(Image *image)
+WandExport MagickBooleanType MagickMapImage(MagickWand *wand,
+ const MagickWand *map_wand,const MagickBooleanType dither)
{
- assert(image != (Image *) NULL);
- assert(image->signature == MagickSignature);
- if (image->debug != MagickFalse)
- (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
- if (image->attributes != (void *) NULL)
- image->attributes=(void *) DestroySplayTree((SplayTreeInfo *)
- image->attributes);
+ MagickBooleanType
+ status;
+
+ assert(wand != (MagickWand *) NULL);
+ assert(wand->signature == WandSignature);
+ if (wand->debug != MagickFalse)
+ (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
+ if ((wand->images == (Image *) NULL) || (map_wand->images == (Image *) NULL))
+ ThrowWandException(WandError,"ContainsNoImages",wand->name);
+ status=MapImage(wand->images,map_wand->images,dither);
+ if (status == MagickFalse)
+ InheritException(wand->exception,&wand->images->exception);
+ return(status);
}
\f
/*
% %
% %
% %
-% D e s t r o y I m a g e s %
+% M a g i c k M a t t e F l o o d f i l l I m a g e %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% DestroyImages() destroys an image list.
+% MagickMatteFloodfillImage() changes the transparency value of any pixel that
+% matches target and is an immediate neighbor. If the method
+% FillToBorderMethod is specified, the transparency value is changed for any
+% neighbor pixel that does not match the bordercolor member of image.
%
-% Deprecated, replace with:
+% The format of the MagickMatteFloodfillImage method is:
%
-% DestroyImageList(image);
+% MagickBooleanType MagickMatteFloodfillImage(MagickWand *wand,
+% const double alpha,const double fuzz,const PixelWand *bordercolor,
+% const ssize_t x,const ssize_t y)
%
-% The format of the DestroyImages method is:
+% A description of each parameter follows:
%
-% void DestroyImages(Image *image)
+% o wand: the magick wand.
%
-% A description of each parameter follows:
+% o alpha: the level of transparency: 1.0 is fully opaque and 0.0 is fully
+% transparent.
%
-% o image: the image sequence.
+% o fuzz: By default target must match a particular pixel color
+% exactly. However, in many cases two colors may differ by a small amount.
+% The fuzz member of image defines how much tolerance is acceptable to
+% consider two colors as the same. For example, set fuzz to 10 and the
+% color red at intensities of 100 and 102 respectively are now interpreted
+% as the same color for the purposes of the floodfill.
+%
+% o bordercolor: the border color pixel wand.
+%
+% o x,y: the starting location of the operation.
%
*/
-MagickExport void DestroyImages(Image *image)
+WandExport MagickBooleanType MagickMatteFloodfillImage(MagickWand *wand,
+ const double alpha,const double fuzz,const PixelWand *bordercolor,
+ const ssize_t x,const ssize_t y)
{
- if (image == (Image *) NULL)
- return;
- if (image->debug != MagickFalse)
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v5.4.3");
- image=DestroyImageList(image);
+ DrawInfo
+ *draw_info;
+
+ MagickBooleanType
+ status;
+
+ PixelPacket
+ target;
+
+ assert(wand != (MagickWand *) NULL);
+ assert(wand->signature == WandSignature);
+ if (wand->debug != MagickFalse)
+ (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
+ if (wand->images == (Image *) NULL)
+ ThrowWandException(WandError,"ContainsNoImages",wand->name);
+ draw_info=CloneDrawInfo(wand->image_info,(DrawInfo *) NULL);
+ (void) GetOneVirtualPixel(wand->images,x % wand->images->columns,
+ y % wand->images->rows,&target,wand->exception);
+ if (bordercolor != (PixelWand *) NULL)
+ PixelGetQuantumColor(bordercolor,&target);
+ wand->images->fuzz=fuzz;
+ status=MatteFloodfillImage(wand->images,target,ClampToQuantum(
+ (MagickRealType) QuantumRange-QuantumRange*alpha),x,y,bordercolor !=
+ (PixelWand *) NULL ? FillToBorderMethod : FloodfillMethod);
+ if (status == MagickFalse)
+ InheritException(wand->exception,&wand->images->exception);
+ draw_info=DestroyDrawInfo(draw_info);
+ return(status);
}
\f
/*
% %
% %
% %
-% D e s t r o y M a g i c k %
+% M a g i c k M e d i a n F i l t e r I m a g e %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% DestroyMagick() destroys the ImageMagick environment.
+% MagickMedianFilterImage() applies a digital filter that improves the quality
+% of a noisy image. Each pixel is replaced by the median in a set of
+% neighboring pixels as defined by radius.
+%
+% The format of the MagickMedianFilterImage method is:
%
-% Deprecated, replace with:
+% MagickBooleanType MagickMedianFilterImage(MagickWand *wand,
+% const double radius)
%
-% MagickCoreTerminus();
+% A description of each parameter follows:
%
-% The format of the DestroyMagick function is:
+% o wand: the magick wand.
%
-% DestroyMagick(void)
+% o radius: the radius of the pixel neighborhood.
%
*/
-MagickExport void DestroyMagick(void)
+WandExport MagickBooleanType MagickMedianFilterImage(MagickWand *wand,
+ const double radius)
{
- MagickCoreTerminus();
+ Image
+ *median_image;
+
+ assert(wand != (MagickWand *) NULL);
+ assert(wand->signature == WandSignature);
+ if (wand->debug != MagickFalse)
+ (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
+ if (wand->images == (Image *) NULL)
+ ThrowWandException(WandError,"ContainsNoImages",wand->name);
+ median_image=MedianFilterImage(wand->images,radius,wand->exception);
+ if (median_image == (Image *) NULL)
+ return(MagickFalse);
+ ReplaceImageInList(&wand->images,median_image);
+ return(MagickTrue);
}
\f
/*
% %
% %
% %
-% D i s p a t c h I m a g e %
+% M a g i c k M i n i m u m I m a g e s %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% DispatchImage() extracts pixel data from an image and returns it to you.
-% The method returns MagickFalse on success otherwise MagickTrue if an error is
-% encountered. The data is returned as char, short int, int, ssize_t, float,
-% or double in the order specified by map.
+% MagickMinimumImages() returns the minimum intensity of an image sequence.
%
-% Suppose you want to extract the first scanline of a 640x480 image as
-% character data in red-green-blue order:
-%
-% DispatchImage(image,0,0,640,1,"RGB",CharPixel,pixels,exception);
-%
-% Deprecated, replace with:
+% The format of the MagickMinimumImages method is:
%
-% ExportImagePixels(image,x_offset,y_offset,columns,rows,map,type,pixels,
-% exception);
+% MagickWand *MagickMinimumImages(MagickWand *wand)
%
-% The format of the DispatchImage method is:
+% A description of each parameter follows:
%
-% unsigned int DispatchImage(const Image *image,const ssize_t x_offset,
-% const ssize_t y_offset,const size_t columns,
-% const size_t rows,const char *map,const StorageType type,
-% void *pixels,ExceptionInfo *exception)
+% o wand: the magick wand.
%
-% A description of each parameter follows:
+*/
+WandExport MagickWand *MagickMinimumImages(MagickWand *wand)
+{
+ Image
+ *minimum_image;
+
+ assert(wand != (MagickWand *) NULL);
+ assert(wand->signature == WandSignature);
+ if (wand->debug != MagickFalse)
+ (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
+ if (wand->images == (Image *) NULL)
+ return((MagickWand *) NULL);
+ minimum_image=EvaluateImages(wand->images,MinEvaluateOperator,
+ wand->exception);
+ if (minimum_image == (Image *) NULL)
+ return((MagickWand *) NULL);
+ return(CloneMagickWandFromImages(wand,minimum_image));
+}
+\f
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
+% M a g i c k M o d e I m a g e %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% o image: the image.
+% MagickModeImage() makes each pixel the 'predominate color' of the
+% neighborhood of the specified radius.
%
-% o x_offset, y_offset, columns, rows: These values define the perimeter
-% of a region of pixels you want to extract.
+% The format of the MagickModeImage method is:
%
-% o map: This string reflects the expected ordering of the pixel array.
-% It can be any combination or order of R = red, G = green, B = blue,
-% A = alpha, C = cyan, Y = yellow, M = magenta, K = black, or
-% I = intensity (for grayscale).
+% MagickBooleanType MagickModeImage(MagickWand *wand,
+% const double radius)
%
-% o type: Define the data type of the pixels. Float and double types are
-% normalized to [0..1] otherwise [0..QuantumRange]. Choose from these
-% types: CharPixel, ShortPixel, IntegerPixel, LongPixel, FloatPixel, or
-% DoublePixel.
+% A description of each parameter follows:
%
-% o pixels: This array of values contain the pixel components as defined by
-% map and type. You must preallocate this array where the expected
-% length varies depending on the values of width, height, map, and type.
+% o wand: the magick wand.
%
-% o exception: return any errors or warnings in this structure.
+% o radius: the radius of the pixel neighborhood.
%
*/
-MagickExport unsigned int DispatchImage(const Image *image,const ssize_t x_offset,
- const ssize_t y_offset,const size_t columns,const size_t rows,
- const char *map,const StorageType type,void *pixels,ExceptionInfo *exception)
+WandExport MagickBooleanType MagickModeImage(MagickWand *wand,
+ const double radius)
{
- unsigned int
- status;
+ Image
+ *mode_image;
- if (image->debug != MagickFalse)
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v5.5.6");
- status=ExportImagePixels(image,x_offset,y_offset,columns,rows,map,type,pixels,
- exception);
- return(status);
+ assert(wand != (MagickWand *) NULL);
+ assert(wand->signature == WandSignature);
+ if (wand->debug != MagickFalse)
+ (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
+ if (wand->images == (Image *) NULL)
+ ThrowWandException(WandError,"ContainsNoImages",wand->name);
+ mode_image=ModeImage(wand->images,radius,wand->exception);
+ if (mode_image == (Image *) NULL)
+ return(MagickFalse);
+ ReplaceImageInList(&wand->images,mode_image);
+ return(MagickTrue);
}
\f
/*
% %
% %
% %
-% E x t r a c t S u b i m a g e F r o m I m a g e %
+% M a g i c k M o s a i c I m a g e s %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% ExtractSubimageFromImageImage() extracts a region of the image that most
-% closely resembles the reference.
+% MagickMosaicImages() inlays an image sequence to form a single coherent
+% picture. It returns a wand with each image in the sequence composited at
+% the location defined by the page offset of the image.
%
-% The format of the ExtractSubimageFromImageImage method is:
+% The format of the MagickMosaicImages method is:
%
-% Image *ExtractSubimageFromImage(const Image *image,
-% const Image *reference,ExceptionInfo *exception)
+% MagickWand *MagickMosaicImages(MagickWand *wand)
%
% A description of each parameter follows:
%
-% o image: the image.
-%
-% o reference: find an area of the image that closely resembles this image.
-%
-% o exception: return any errors or warnings in this structure.
+% o wand: the magick wand.
%
*/
-
-static double GetSimilarityMetric(const Image *image,const Image *reference,
- const ssize_t x_offset,const ssize_t y_offset,
- const double similarity_threshold,ExceptionInfo *exception)
-{
- CacheView
- *image_view,
- *reference_view;
-
- double
- channels,
- normalized_similarity,
- similarity;
-
- ssize_t
- y;
-
- /*
- Compute the similarity in pixels between two images.
- */
- normalized_similarity=1.0;
- similarity=0.0;
- channels=3;
- if ((image->matte != MagickFalse) && (reference->matte != MagickFalse))
- channels++;
- if ((image->colorspace == CMYKColorspace) &&
- (reference->colorspace == CMYKColorspace))
- channels++;
- image_view=AcquireCacheView(image);
- reference_view=AcquireCacheView(reference);
- for (y=0; y < (ssize_t) reference->rows; y++)
- {
- register const IndexPacket
- *indexes,
- *reference_indexes;
-
- register const PixelPacket
- *p,
- *q;
-
- register ssize_t
- x;
-
- p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset+y,
- reference->columns,1,exception);
- q=GetCacheViewVirtualPixels(reference_view,0,y,reference->columns,1,
- exception);
- if ((p == (const PixelPacket *) NULL) || (q == (const PixelPacket *) NULL))
- continue;
- indexes=GetCacheViewVirtualIndexQueue(image_view);
- reference_indexes=GetCacheViewVirtualIndexQueue(reference_view);
- for (x=0; x < (ssize_t) reference->columns; x++)
- {
- MagickRealType
- pixel;
-
- pixel=QuantumScale*(GetRedPixelComponent(p)-(double)
- GetRedPixelComponent(q));
- similarity+=pixel*pixel;
- pixel=QuantumScale*(GetGreenPixelComponent(p)-(double)
- GetGreenPixelComponent(q));
- similarity+=pixel*pixel;
- pixel=QuantumScale*(GetBluePixelComponent(p)-(double)
- GetBluePixelComponent(q));
- similarity+=pixel*pixel;
- if ((image->matte != MagickFalse) && (reference->matte != MagickFalse))
- {
- pixel=QuantumScale*(GetOpacityPixelComponent(p)-(double)
- GetOpacityPixelComponent(q));
- similarity+=pixel*pixel;
- }
- if ((image->colorspace == CMYKColorspace) &&
- (reference->colorspace == CMYKColorspace))
- {
- pixel=QuantumScale*(GetIndexPixelComponent(indexes+x)-(double)
- GetIndexPixelComponent(reference_indexes+x));
- similarity+=pixel*pixel;
- }
- p++;
- q++;
- }
- normalized_similarity=sqrt(similarity)/reference->columns/reference->rows/
- channels;
- if (normalized_similarity > similarity_threshold)
- break;
- }
- reference_view=DestroyCacheView(reference_view);
- image_view=DestroyCacheView(image_view);
- return(normalized_similarity);
-}
-
-MagickExport Image *ExtractSubimageFromImage(Image *image,
- const Image *reference,ExceptionInfo *exception)
+WandExport MagickWand *MagickMosaicImages(MagickWand *wand)
{
- double
- similarity_threshold;
-
- RectangleInfo
- offset;
-
- ssize_t
- y;
-
- /*
- Extract reference from image.
- */
- if ((reference->columns > image->columns) || (reference->rows > image->rows))
- return((Image *) NULL);
- similarity_threshold=(double) image->columns*image->rows;
- SetGeometry(reference,&offset);
-#if defined(MAGICKCORE_OPENMP_SUPPORT)
- #pragma omp parallel for schedule(dynamic,4)
-#endif
- for (y=0; y < (ssize_t) (image->rows-reference->rows); y++)
- {
- double
- similarity;
-
- register ssize_t
- x;
+ Image
+ *mosaic_image;
- for (x=0; x < (ssize_t) (image->columns-reference->columns); x++)
- {
- similarity=GetSimilarityMetric(image,reference,x,y,similarity_threshold,
- exception);
-#if defined(MAGICKCORE_OPENMP_SUPPORT)
- #pragma omp critical (MagickCore_ExtractSubimageFromImage)
-#endif
- if (similarity < similarity_threshold)
- {
- similarity_threshold=similarity;
- offset.x=x;
- offset.y=y;
- }
- }
- }
- if (similarity_threshold > (QuantumScale*reference->fuzz/100.0))
- return((Image *) NULL);
- return(CropImage(image,&offset,exception));
+ assert(wand != (MagickWand *) NULL);
+ assert(wand->signature == WandSignature);
+ if (wand->debug != MagickFalse)
+ (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
+ if (wand->images == (Image *) NULL)
+ return((MagickWand *) NULL);
+ mosaic_image=MosaicImages(wand->images,wand->exception);
+ if (mosaic_image == (Image *) NULL)
+ return((MagickWand *) NULL);
+ return(CloneMagickWandFromImages(wand,mosaic_image));
}
\f
/*
% %
% %
% %
-% F l a t t e n I m a g e %
+% M a g i c k O p a q u e I m a g e %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% FlattenImages() Obsolete Function: Use MergeImageLayers() instead.
+% MagickOpaqueImage() changes any pixel that matches color with the color
+% defined by fill.
+%
+% The format of the MagickOpaqueImage method is:
%
-% Deprecated, replace with:
+% MagickBooleanType MagickOpaqueImage(MagickWand *wand,
+% const PixelWand *target,const PixelWand *fill,const double fuzz)
%
-% MergeImageLayers(image,FlattenLayer,exception);
+% A description of each parameter follows:
%
-% The format of the FlattenImage method is:
+% o wand: the magick wand.
%
-% Image *FlattenImage(Image *image,ExceptionInfo *exception)
+% o channel: the channel(s).
%
-% A description of each parameter follows:
+% o target: Change this target color to the fill color within the image.
%
-% o image: the image sequence.
+% o fill: the fill pixel wand.
%
-% o exception: return any errors or warnings in this structure.
+% o fuzz: By default target must match a particular pixel color
+% exactly. However, in many cases two colors may differ by a small amount.
+% The fuzz member of image defines how much tolerance is acceptable to
+% consider two colors as the same. For example, set fuzz to 10 and the
+% color red at intensities of 100 and 102 respectively are now interpreted
+% as the same color for the purposes of the floodfill.
%
*/
-MagickExport Image *FlattenImages(Image *image,ExceptionInfo *exception)
+WandExport MagickBooleanType MagickOpaqueImage(MagickWand *wand,
+ const PixelWand *target,const PixelWand *fill,const double fuzz)
{
- return(MergeImageLayers(image,FlattenLayer,exception));
+ return(MagickPaintOpaqueImage(wand,target,fill,fuzz));
}
\f
/*
% %
% %
% %
-% F o r m a t I m a g e A t t r i b u t e %
+% M a g i c k P a i n t F l o o d f i l l I m a g e %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% FormatImageAttribute() permits formatted key/value pairs to be saved as an
-% image attribute.
+% MagickPaintFloodfillImage() changes the color value of any pixel that matches
+% target and is an immediate neighbor. If the method FillToBorderMethod is
+% specified, the color value is changed for any neighbor pixel that does not
+% match the bordercolor member of image.
+%
+% The format of the MagickPaintFloodfillImage method is:
+%
+% MagickBooleanType MagickPaintFloodfillImage(MagickWand *wand,
+% const ChannelType channel,const PixelWand *fill,const double fuzz,
+% const PixelWand *bordercolor,const ssize_t x,const ssize_t y)
%
-% The format of the FormatImageAttribute method is:
+% A description of each parameter follows:
+%
+% o wand: the magick wand.
%
-% MagickBooleanType FormatImageAttribute(Image *image,const char *key,
-% const char *format,...)
+% o channel: the channel(s).
%
-% A description of each parameter follows.
+% o fill: the floodfill color pixel wand.
%
-% o image: The image.
+% o fuzz: By default target must match a particular pixel color
+% exactly. However, in many cases two colors may differ by a small amount.
+% The fuzz member of image defines how much tolerance is acceptable to
+% consider two colors as the same. For example, set fuzz to 10 and the
+% color red at intensities of 100 and 102 respectively are now interpreted
+% as the same color for the purposes of the floodfill.
%
-% o key: The attribute key.
+% o bordercolor: the border color pixel wand.
%
-% o format: A string describing the format to use to write the remaining
-% arguments.
+% o x,y: the starting location of the operation.
%
*/
-
-MagickExport MagickBooleanType FormatImageAttributeList(Image *image,
- const char *key,const char *format,va_list operands)
-{
- char
- value[MaxTextExtent];
-
- int
- n;
-
-#if defined(MAGICKCORE_HAVE_VSNPRINTF)
- n=vsnprintf(value,MaxTextExtent,format,operands);
-#else
- n=vsprintf(value,format,operands);
-#endif
- if (n < 0)
- value[MaxTextExtent-1]='\0';
- return(SetImageProperty(image,key,value));
-}
-
-MagickExport MagickBooleanType FormatImageAttribute(Image *image,
- const char *key,const char *format,...)
+WandExport MagickBooleanType MagickPaintFloodfillImage(MagickWand *wand,
+ const ChannelType channel,const PixelWand *fill,const double fuzz,
+ const PixelWand *bordercolor,const ssize_t x,const ssize_t y)
{
MagickBooleanType
status;
- va_list
- operands;
-
- va_start(operands,format);
- status=FormatImagePropertyList(image,key,format,operands);
- va_end(operands);
+ status=MagickFloodfillPaintImage(wand,channel,fill,fuzz,bordercolor,x,y,
+ MagickFalse);
return(status);
}
\f
% %
% %
% %
-% F o r m a t S t r i n g %
+% M a g i c k P a i n t O p a q u e I m a g e %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% FormatString() prints formatted output of a variable argument list.
+% MagickPaintOpaqueImage() changes any pixel that matches color with the color
+% defined by fill.
+%
+% The format of the MagickPaintOpaqueImage method is:
+%
+% MagickBooleanType MagickPaintOpaqueImage(MagickWand *wand,
+% const PixelWand *target,const PixelWand *fill,const double fuzz)
+% MagickBooleanType MagickPaintOpaqueImageChannel(MagickWand *wand,
+% const ChannelType channel,const PixelWand *target,
+% const PixelWand *fill,const double fuzz)
%
-% The format of the FormatString method is:
+% A description of each parameter follows:
+%
+% o wand: the magick wand.
%
-% void FormatString(char *string,const char *format,...)
+% o channel: the channel(s).
%
-% A description of each parameter follows.
+% o target: Change this target color to the fill color within the image.
%
-% o string: Method FormatString returns the formatted string in this
-% character buffer.
+% o fill: the fill pixel wand.
%
-% o format: A string describing the format to use to write the remaining
-% arguments.
+% o fuzz: By default target must match a particular pixel color
+% exactly. However, in many cases two colors may differ by a small amount.
+% The fuzz member of image defines how much tolerance is acceptable to
+% consider two colors as the same. For example, set fuzz to 10 and the
+% color red at intensities of 100 and 102 respectively are now interpreted
+% as the same color for the purposes of the floodfill.
%
*/
-MagickExport void FormatStringList(char *string,const char *format,
- va_list operands)
+WandExport MagickBooleanType MagickPaintOpaqueImage(MagickWand *wand,
+ const PixelWand *target,const PixelWand *fill,const double fuzz)
{
- int
- n;
-
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v5.5.7");
-#if defined(MAGICKCORE_HAVE_VSNPRINTF)
- n=vsnprintf(string,MaxTextExtent,format,operands);
-#else
- n=vsprintf(string,format,operands);
-#endif
- if (n < 0)
- string[MaxTextExtent-1]='\0';
+ return(MagickPaintOpaqueImageChannel(wand,DefaultChannels,target,fill,fuzz));
}
-MagickExport void FormatString(char *string,const char *format,...)
+WandExport MagickBooleanType MagickPaintOpaqueImageChannel(MagickWand *wand,
+ const ChannelType channel,const PixelWand *target,const PixelWand *fill,
+ const double fuzz)
{
- va_list
- operands;
+ MagickBooleanType
+ status;
- va_start(operands,format);
- (void) FormatMagickStringList(string,MaxTextExtent,format,operands);
- va_end(operands);
- return;
+ status=MagickOpaquePaintImageChannel(wand,channel,target,fill,fuzz,
+ MagickFalse);
+ return(status);
}
\f
/*
% %
% %
% %
-+ F u z z y C o l o r M a t c h %
+% M a g i c k P a i n t T r a n s p a r e n t I m a g e %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% FuzzyColorMatch() returns true if two pixels are identical in color.
+% MagickPaintTransparentImage() changes any pixel that matches color with the
+% color defined by fill.
%
-% The format of the ColorMatch method is:
+% The format of the MagickPaintTransparentImage method is:
%
-% void FuzzyColorMatch(const PixelPacket *p,const PixelPacket *q,
-% const double fuzz)
+% MagickBooleanType MagickPaintTransparentImage(MagickWand *wand,
+% const PixelWand *target,const double alpha,const double fuzz)
%
% A description of each parameter follows:
%
-% o p: Pixel p.
+% o wand: the magick wand.
%
-% o q: Pixel q.
+% o target: Change this target color to specified opacity value within
+% the image.
%
-% o distance: Define how much tolerance is acceptable to consider
-% two colors as the same.
+% o alpha: the level of transparency: 1.0 is fully opaque and 0.0 is fully
+% transparent.
+%
+% o fuzz: By default target must match a particular pixel color
+% exactly. However, in many cases two colors may differ by a small amount.
+% The fuzz member of image defines how much tolerance is acceptable to
+% consider two colors as the same. For example, set fuzz to 10 and the
+% color red at intensities of 100 and 102 respectively are now interpreted
+% as the same color for the purposes of the floodfill.
%
*/
-MagickExport unsigned int FuzzyColorMatch(const PixelPacket *p,
- const PixelPacket *q,const double fuzz)
+WandExport MagickBooleanType MagickPaintTransparentImage(MagickWand *wand,
+ const PixelWand *target,const double alpha,const double fuzz)
{
- MagickPixelPacket
- pixel;
-
- register MagickRealType
- distance;
-
- if ((fuzz == 0.0) && (GetRedPixelComponent(p) == GetRedPixelComponent(q)) &&
- (GetGreenPixelComponent(p) == GetGreenPixelComponent(q)) &&
- (GetBluePixelComponent(p) == GetBluePixelComponent(q)))
- return(MagickTrue);
- pixel.red=GetRedPixelComponent(p)-(MagickRealType) GetRedPixelComponent(q);
- distance=pixel.red*pixel.red;
- if (distance > (fuzz*fuzz))
- return(MagickFalse);
- pixel.green=GetGreenPixelComponent(p)-(MagickRealType)
- GetGreenPixelComponent(q);
- distance+=pixel.green*pixel.green;
- if (distance > (fuzz*fuzz))
- return(MagickFalse);
- pixel.blue=GetBluePixelComponent(p)-(MagickRealType) GetBluePixelComponent(q);
- distance+=pixel.blue*pixel.blue;
- if (distance > (fuzz*fuzz))
- return(MagickFalse);
- return(MagickTrue);
+ return(MagickTransparentPaintImage(wand,target,alpha,fuzz,MagickFalse));
}
\f
/*
% %
% %
% %
-+ F u z z y C o l o r C o m p a r e %
+% M a g i c k R e c o l o r I m a g e %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% FuzzyColorCompare() returns MagickTrue if the distance between two colors is
-% less than the specified distance in a linear three dimensional color space.
-% This method is used by ColorFloodFill() and other algorithms which
-% compare two colors.
+% MagickRecolorImage() apply color transformation to an image. The method
+% permits saturation changes, hue rotation, luminance to alpha, and various
+% other effects. Although variable-sized transformation matrices can be used,
+% typically one uses a 5x5 matrix for an RGBA image and a 6x6 for CMYKA
+% (or RGBA with offsets). The matrix is similar to those used by Adobe Flash
+% except offsets are in column 6 rather than 5 (in support of CMYKA images)
+% and offsets are normalized (divide Flash offset by 255).
%
-% The format of the FuzzyColorCompare method is:
+% The format of the MagickRecolorImage method is:
%
-% void FuzzyColorCompare(const Image *image,const PixelPacket *p,
-% const PixelPacket *q)
+% MagickBooleanType MagickRecolorImage(MagickWand *wand,
+% const size_t order,const double *color_matrix)
%
% A description of each parameter follows:
%
-% o image: the image.
+% o wand: the magick wand.
%
-% o p: Pixel p.
+% o order: the number of columns and rows in the color matrix.
%
-% o q: Pixel q.
+% o color_matrix: An array of doubles representing the color matrix.
%
*/
-MagickExport MagickBooleanType FuzzyColorCompare(const Image *image,
- const PixelPacket *p,const PixelPacket *q)
+WandExport MagickBooleanType MagickRecolorImage(MagickWand *wand,
+ const size_t order,const double *color_matrix)
{
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v6.2.5");
- return(IsColorSimilar(image,p,q));
+ Image
+ *transform_image;
+
+ assert(wand != (MagickWand *) NULL);
+ assert(wand->signature == WandSignature);
+ if (wand->debug != MagickFalse)
+ (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
+ if (color_matrix == (const double *) NULL)
+ return(MagickFalse);
+ if (wand->images == (Image *) NULL)
+ ThrowWandException(WandError,"ContainsNoImages",wand->name);
+ transform_image=RecolorImage(wand->images,order,color_matrix,
+ wand->exception);
+ if (transform_image == (Image *) NULL)
+ return(MagickFalse);
+ ReplaceImageInList(&wand->images,transform_image);
+ return(MagickTrue);
}
\f
/*
% %
% %
% %
-+ F u z z y O p a c i t y C o m p a r e %
+% M a g i c k R e d u c e N o i s e I m a g e %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% FuzzyOpacityCompare() returns true if the distance between two opacity
-% values is less than the specified distance in a linear color space. This
-% method is used by MatteFloodFill() and other algorithms which compare
-% two opacity values.
+% MagickReduceNoiseImage() smooths the contours of an image while still
+% preserving edge information. The algorithm works by replacing each pixel
+% with its neighbor closest in value. A neighbor is defined by radius. Use
+% a radius of 0 and ReduceNoise() selects a suitable radius for you.
%
-% Deprecated, replace with:
+% The format of the MagickReduceNoiseImage method is:
%
-% IsOpacitySimilar(image,p,q);
-%
-% The format of the FuzzyOpacityCompare method is:
-%
-% void FuzzyOpacityCompare(const Image *image,const PixelPacket *p,
-% const PixelPacket *q)
+% MagickBooleanType MagickReduceNoiseImage(MagickWand *wand,
+% const double radius)
%
% A description of each parameter follows:
%
-% o image: the image.
+% o wand: the magick wand.
%
-% o p: Pixel p.
-%
-% o q: Pixel q.
+% o radius: the radius of the pixel neighborhood.
%
*/
-MagickExport MagickBooleanType FuzzyOpacityCompare(const Image *image,
- const PixelPacket *p,const PixelPacket *q)
+WandExport MagickBooleanType MagickReduceNoiseImage(MagickWand *wand,
+ const double radius)
{
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v6.2.5");
- return(IsOpacitySimilar(image,p,q));
+ Image
+ *noise_image;
+
+ assert(wand != (MagickWand *) NULL);
+ assert(wand->signature == WandSignature);
+ if (wand->debug != MagickFalse)
+ (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
+ if (wand->images == (Image *) NULL)
+ ThrowWandException(WandError,"ContainsNoImages",wand->name);
+ noise_image=ReduceNoiseImage(wand->images,radius,wand->exception);
+ if (noise_image == (Image *) NULL)
+ return(MagickFalse);
+ ReplaceImageInList(&wand->images,noise_image);
+ return(MagickTrue);
}
\f
/*
% %
% %
% %
-% G e t C o n f i g u r e B l o b %
+% M a g i c k M a x i m u m I m a g e s %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% GetConfigureBlob() returns the specified configure file as a blob.
+% MagickMaximumImages() returns the maximum intensity of an image sequence.
%
-% The format of the GetConfigureBlob method is:
+% The format of the MagickMaximumImages method is:
%
-% void *GetConfigureBlob(const char *filename,ExceptionInfo *exception)
+% MagickWand *MagickMaximumImages(MagickWand *wand)
%
% A description of each parameter follows:
%
-% o filename: the configure file name.
-%
-% o path: return the full path information of the configure file.
-%
-% o length: This pointer to a size_t integer sets the initial length of the
-% blob. On return, it reflects the actual length of the blob.
-%
-% o exception: return any errors or warnings in this structure.
+% o wand: the magick wand.
%
*/
-MagickExport void *GetConfigureBlob(const char *filename,char *path,
- size_t *length,ExceptionInfo *exception)
+WandExport MagickWand *MagickMaximumImages(MagickWand *wand)
{
- void
- *blob;
-
- assert(filename != (const char *) NULL);
- (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",filename);
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v5.5.7");
- assert(path != (char *) NULL);
- assert(length != (size_t *) NULL);
- assert(exception != (ExceptionInfo *) NULL);
- blob=(void *) NULL;
- (void) CopyMagickString(path,filename,MaxTextExtent);
-#if defined(MAGICKCORE_INSTALLED_SUPPORT)
-#if defined(MAGICKCORE_LIBRARY_PATH)
- if (blob == (void *) NULL)
- {
- /*
- Search hard coded paths.
- */
- (void) FormatMagickString(path,MaxTextExtent,"%s%s",
- MAGICKCORE_LIBRARY_PATH,filename);
- if (IsPathAccessible(path) != MagickFalse)
- blob=FileToBlob(path,~0,length,exception);
- }
-#endif
-#if defined(MAGICKCORE_WINDOWS_SUPPORT) && !(defined(MAGICKCORE_CONFIGURE_PATH) || defined(MAGICKCORE_SHARE_PATH))
- if (blob == (void *) NULL)
- {
- char
- *key_value;
-
- /*
- Locate file via registry key.
- */
- key_value=NTRegistryKeyLookup("ConfigurePath");
- if (key_value != (char *) NULL)
- {
- (void) FormatMagickString(path,MaxTextExtent,"%s%s%s",key_value,
- DirectorySeparator,filename);
- if (IsPathAccessible(path) != MagickFalse)
- blob=FileToBlob(path,~0,length,exception);
- }
- }
-#endif
-#else
- if (blob == (void *) NULL)
- {
- char
- *home;
-
- home=GetEnvironmentValue("MAGICK_HOME");
- if (home != (char *) NULL)
- {
- /*
- Search MAGICK_HOME.
- */
-#if !defined(MAGICKCORE_POSIX_SUPPORT)
- (void) FormatMagickString(path,MaxTextExtent,"%s%s%s",home,
- DirectorySeparator,filename);
-#else
- (void) FormatMagickString(path,MaxTextExtent,"%s/lib/%s/%s",home,
- MAGICKCORE_LIBRARY_RELATIVE_PATH,filename);
-#endif
- if (IsPathAccessible(path) != MagickFalse)
- blob=FileToBlob(path,~0,length,exception);
- home=DestroyString(home);
- }
- home=GetEnvironmentValue("HOME");
- if (home == (char *) NULL)
- home=GetEnvironmentValue("USERPROFILE");
- if (home != (char *) NULL)
- {
- /*
- Search $HOME/.magick.
- */
- (void) FormatMagickString(path,MaxTextExtent,"%s%s.magick%s%s",home,
- DirectorySeparator,DirectorySeparator,filename);
- if ((IsPathAccessible(path) != MagickFalse) && (blob == (void *) NULL))
- blob=FileToBlob(path,~0,length,exception);
- home=DestroyString(home);
- }
- }
- if ((blob == (void *) NULL) && (*GetClientPath() != '\0'))
- {
-#if !defined(MAGICKCORE_POSIX_SUPPORT)
- (void) FormatMagickString(path,MaxTextExtent,"%s%s%s",GetClientPath(),
- DirectorySeparator,filename);
-#else
- char
- prefix[MaxTextExtent];
+ Image
+ *maximum_image;
- /*
- Search based on executable directory if directory is known.
- */
- (void) CopyMagickString(prefix,GetClientPath(),
- MaxTextExtent);
- ChopPathComponents(prefix,1);
- (void) FormatMagickString(path,MaxTextExtent,"%s/lib/%s/%s",prefix,
- MAGICKCORE_LIBRARY_RELATIVE_PATH,filename);
-#endif
- if (IsPathAccessible(path) != MagickFalse)
- blob=FileToBlob(path,~0,length,exception);
- }
- /*
- Search current directory.
- */
- if ((blob == (void *) NULL) && (IsPathAccessible(path) != MagickFalse))
- blob=FileToBlob(path,~0,length,exception);
-#if defined(MAGICKCORE_WINDOWS_SUPPORT)
- /*
- Search Windows registry.
- */
- if (blob == (void *) NULL)
- blob=NTResourceToBlob(filename);
-#endif
-#endif
- if (blob == (void *) NULL)
- (void) ThrowMagickException(exception,GetMagickModule(),ConfigureWarning,
- "UnableToOpenConfigureFile","`%s'",path);
- return(blob);
+ assert(wand != (MagickWand *) NULL);
+ assert(wand->signature == WandSignature);
+ if (wand->debug != MagickFalse)
+ (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
+ if (wand->images == (Image *) NULL)
+ return((MagickWand *) NULL);
+ maximum_image=EvaluateImages(wand->images,MaxEvaluateOperator,
+ wand->exception);
+ if (maximum_image == (Image *) NULL)
+ return((MagickWand *) NULL);
+ return(CloneMagickWandFromImages(wand,maximum_image));
}
\f
/*
% %
% %
% %
-% G e t C a c h e V i e w %
+% M a g i c k S e t I m a g e A t t r i b u t e %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% GetCacheView() gets pixels from the in-memory or disk pixel cache as
-% defined by the geometry parameters. A pointer to the pixels is returned if
-% the pixels are transferred, otherwise a NULL is returned.
-%
-% Deprecated, replace with:
+% MagickSetImageAttribute() associates a property with an image.
%
-% GetCacheViewAuthenticPixels(cache_view,x,y,columns,rows,
-% GetCacheViewException(cache_view));
+% The format of the MagickSetImageAttribute method is:
%
-% The format of the GetCacheView method is:
-%
-% PixelPacket *GetCacheView(CacheView *cache_view,const ssize_t x,
-% const ssize_t y,const size_t columns,const size_t rows)
+% MagickBooleanType MagickSetImageAttribute(MagickWand *wand,
+% const char *property,const char *value)
%
% A description of each parameter follows:
%
-% o cache_view: the address of a structure of type CacheView.
-%
-% o x,y,columns,rows: These values define the perimeter of a region of
-% pixels.
-%
-*/
-MagickExport PixelPacket *GetCacheView(CacheView *cache_view,const ssize_t x,
- const ssize_t y,const size_t columns,const size_t rows)
-{
- PixelPacket
- *pixels;
-
- pixels=GetCacheViewAuthenticPixels(cache_view,x,y,columns,rows,
- GetCacheViewException(cache_view));
- return(pixels);
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% G e t C a c h e V i e w I n d e x e s %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% GetCacheViewIndexes() returns the indexes associated with the specified
-% view.
-%
-% Deprecated, replace with:
-%
-% GetCacheViewAuthenticIndexQueue(cache_view);
+% o wand: the magick wand.
%
-% The format of the GetCacheViewIndexes method is:
+% o property: the property.
%
-% IndexPacket *GetCacheViewIndexes(CacheView *cache_view)
-%
-% A description of each parameter follows:
-%
-% o cache_view: the cache view.
+% o value: the value.
%
*/
-MagickExport IndexPacket *GetCacheViewIndexes(CacheView *cache_view)
+WandExport MagickBooleanType MagickSetImageAttribute(MagickWand *wand,
+ const char *property,const char *value)
{
- return(GetCacheViewAuthenticIndexQueue(cache_view));
+ return(SetImageProperty(wand->images,property,value));
}
\f
/*
% %
% %
% %
-% G e t C a c h e V i e w P i x e l s %
+% M a g i c k S e t I m a g e I n d e x %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% GetCacheViewPixels() gets pixels from the in-memory or disk pixel cache as
-% defined by the geometry parameters. A pointer to the pixels is returned if
-% the pixels are transferred, otherwise a NULL is returned.
+% MagickSetImageIndex() set the current image to the position of the list
+% specified with the index parameter.
%
-% Deprecated, replace with:
+% The format of the MagickSetImageIndex method is:
%
-% GetCacheViewAuthenticPixels(cache_view,x,y,columns,rows,
-% GetCacheViewException(cache_view));
-%
-% The format of the GetCacheViewPixels method is:
-%
-% PixelPacket *GetCacheViewPixels(CacheView *cache_view,const ssize_t x,
-% const ssize_t y,const size_t columns,const size_t rows)
+% MagickBooleanType MagickSetImageIndex(MagickWand *wand,
+% const ssize_t index)
%
% A description of each parameter follows:
%
-% o cache_view: the cache view.
+% o wand: the magick wand.
%
-% o x,y,columns,rows: These values define the perimeter of a region of
-% pixels.
+% o index: the scene number.
%
*/
-MagickExport PixelPacket *GetCacheViewPixels(CacheView *cache_view,const ssize_t x,
- const ssize_t y,const size_t columns,const size_t rows)
+WandExport MagickBooleanType MagickSetImageIndex(MagickWand *wand,
+ const ssize_t index)
{
- PixelPacket
- *pixels;
-
- pixels=GetCacheViewAuthenticPixels(cache_view,x,y,columns,rows,
- GetCacheViewException(cache_view));
- return(pixels);
+ return(MagickSetIteratorIndex(wand,index));
}
\f
/*
% %
% %
% %
-% G e t I m a g e A t t r i b u t e %
++ M a g i c k S e t I m a g e O p t i o n %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% GetImageAttribute() searches the list of image attributes and returns
-% a pointer to the attribute if it exists otherwise NULL.
+% MagickSetImageOption() associates one or options with a particular image
+% format (.e.g MagickSetImageOption(wand,"jpeg","perserve","yes").
%
-% The format of the GetImageAttribute method is:
+% The format of the MagickSetImageOption method is:
%
-% const ImageAttribute *GetImageAttribute(const Image *image,
-% const char *key)
+% MagickBooleanType MagickSetImageOption(MagickWand *wand,
+% const char *format,const char *key,const char *value)
%
% A description of each parameter follows:
%
-% o image: the image.
-%
-% o key: These character strings are the name of an image attribute to
-% return.
-%
-*/
-
-static void *DestroyAttribute(void *attribute)
-{
- register ImageAttribute
- *p;
-
- p=(ImageAttribute *) attribute;
- if (p->value != (char *) NULL)
- p->value=DestroyString(p->value);
- return(RelinquishMagickMemory(p));
-}
-
-MagickExport const ImageAttribute *GetImageAttribute(const Image *image,
- const char *key)
-{
- const char
- *value;
-
- ImageAttribute
- *attribute;
-
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v6.3.1");
- value=GetImageProperty(image,key);
- if (value == (const char *) NULL)
- return((const ImageAttribute *) NULL);
- if (image->attributes == (void *) NULL)
- ((Image *) image)->attributes=NewSplayTree(CompareSplayTreeString,
- RelinquishMagickMemory,DestroyAttribute);
- else
- {
- const ImageAttribute
- *attribute;
-
- attribute=(const ImageAttribute *) GetValueFromSplayTree((SplayTreeInfo *)
- image->attributes,key);
- if (attribute != (const ImageAttribute *) NULL)
- return(attribute);
- }
- attribute=(ImageAttribute *) AcquireMagickMemory(sizeof(*attribute));
- if (attribute == (ImageAttribute *) NULL)
- ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed");
- (void) ResetMagickMemory(attribute,0,sizeof(*attribute));
- attribute->key=ConstantString(key);
- attribute->value=ConstantString(value);
- (void) AddValueToSplayTree((SplayTreeInfo *) ((Image *) image)->attributes,
- attribute->key,attribute);
- return((const ImageAttribute *) attribute);
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% G e t I m a g e C l i p p i n g P a t h A t t r i b u t e %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% GetImageClippingPathAttribute() searches the list of image attributes and
-% returns a pointer to a clipping path if it exists otherwise NULL.
-%
-% Deprecated, replace with:
+% o wand: the magick wand.
%
-% GetImageAttribute(image,"8BIM:1999,2998");
+% o format: the image format.
%
-% The format of the GetImageClippingPathAttribute method is:
+% o key: The key.
%
-% const ImageAttribute *GetImageClippingPathAttribute(Image *image)
-%
-% A description of each parameter follows:
-%
-% o attribute: Method GetImageClippingPathAttribute returns the clipping
-% path if it exists otherwise NULL.
-%
-% o image: the image.
+% o value: The value.
%
*/
-MagickExport const ImageAttribute *GetImageClippingPathAttribute(Image *image)
+WandExport MagickBooleanType MagickSetImageOption(MagickWand *wand,
+ const char *format,const char *key,const char *value)
{
- return(GetImageAttribute(image,"8BIM:1999,2998"));
+ char
+ option[MaxTextExtent];
+
+ assert(wand != (MagickWand *) NULL);
+ assert(wand->signature == WandSignature);
+ if (wand->debug != MagickFalse)
+ (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
+ (void) FormatMagickString(option,MaxTextExtent,"%s:%s=%s",format,key,value);
+ return(DefineImageOption(wand->image_info,option));
}
\f
/*
% %
% %
% %
-% G e t I m a g e F r o m M a g i c k R e g i s t r y %
+% M a g i c k T r a n s p a r e n t I m a g e %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% GetImageFromMagickRegistry() gets an image from the registry as defined by
-% its name. If the image is not found, a NULL image is returned.
-%
-% Deprecated, replace with:
-%
-% GetImageRegistry(ImageRegistryType,name,exception);
+% MagickTransparentImage() changes any pixel that matches color with the
+% color defined by fill.
%
-% The format of the GetImageFromMagickRegistry method is:
+% The format of the MagickTransparentImage method is:
%
-% Image *GetImageFromMagickRegistry(const char *name,ssize_t *id,
-% ExceptionInfo *exception)
+% MagickBooleanType MagickTransparentImage(MagickWand *wand,
+% const PixelWand *target,const double alpha,const double fuzz)
%
% A description of each parameter follows:
%
-% o name: the name of the image to retrieve from the registry.
+% o wand: the magick wand.
%
-% o id: the registry id.
+% o target: Change this target color to specified opacity value within
+% the image.
%
-% o exception: return any errors or warnings in this structure.
+% o alpha: the level of transparency: 1.0 is fully opaque and 0.0 is fully
+% transparent.
+%
+% o fuzz: By default target must match a particular pixel color
+% exactly. However, in many cases two colors may differ by a small amount.
+% The fuzz member of image defines how much tolerance is acceptable to
+% consider two colors as the same. For example, set fuzz to 10 and the
+% color red at intensities of 100 and 102 respectively are now interpreted
+% as the same color for the purposes of the floodfill.
%
*/
-MagickExport Image *GetImageFromMagickRegistry(const char *name,ssize_t *id,
- ExceptionInfo *exception)
+WandExport MagickBooleanType MagickTransparentImage(MagickWand *wand,
+ const PixelWand *target,const double alpha,const double fuzz)
{
- *id=0L;
- return((Image *) GetImageRegistry(ImageRegistryType,name,exception));
+ return(MagickPaintTransparentImage(wand,target,alpha,fuzz));
}
\f
/*
% %
% %
% %
-% G e t M a g i c k R e g i s t r y %
+% M a g i c k R e g i o n O f I n t e r e s t I m a g e %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% GetMagickRegistry() gets a blob from the registry as defined by the id. If
-% the blob that matches the id is not found, NULL is returned.
+% MagickRegionOfInterestImage() extracts a region of the image and returns it
+% as a new wand.
%
-% The format of the GetMagickRegistry method is:
+% The format of the MagickRegionOfInterestImage method is:
%
-% const void *GetMagickRegistry(const ssize_t id,RegistryType *type,
-% size_t *length,ExceptionInfo *exception)
+% MagickWand *MagickRegionOfInterestImage(MagickWand *wand,
+% const size_t width,const size_t height,const ssize_t x,
+% const ssize_t y)
%
% A description of each parameter follows:
%
-% o id: the registry id.
+% o wand: the magick wand.
+%
+% o width: the region width.
%
-% o type: the registry type.
+% o height: the region height.
%
-% o length: the blob length in number of bytes.
+% o x: the region x offset.
%
-% o exception: return any errors or warnings in this structure.
+% o y: the region y offset.
%
*/
-MagickExport void *GetMagickRegistry(const ssize_t id,RegistryType *type,
- size_t *length,ExceptionInfo *exception)
+WandExport MagickWand *MagickRegionOfInterestImage(MagickWand *wand,
+ const size_t width,const size_t height,const ssize_t x,
+ const ssize_t y)
{
- char
- key[MaxTextExtent];
-
- void
- *blob;
-
- *type=UndefinedRegistryType;
- *length=0;
- (void) FormatMagickString(key,MaxTextExtent,"%.20g\n",(double) id);
- blob=(void *) GetImageRegistry(ImageRegistryType,key,exception);
- if (blob != (void *) NULL)
- return(blob);
- blob=(void *) GetImageRegistry(ImageInfoRegistryType,key,exception);
- if (blob != (void *) NULL)
- return(blob);
- return((void *) GetImageRegistry(UndefinedRegistryType,key,exception));
+ return(MagickGetImageRegion(wand,width,height,x,y));
}
\f
/*
% %
% %
% %
-% G e t I m a g e G e o m e t r y %
+% M a g i c k S e t I m a g e P i x e l s %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% GetImageGeometry() returns a region as defined by the geometry string with
-% respect to the image and its gravity.
+% MagickSetImagePixels() accepts pixel datand stores it in the image at the
+% location you specify. The method returns MagickFalse on success otherwise
+% MagickTrue if an error is encountered. The pixel data can be either char,
+% short int, int, ssize_t, float, or double in the order specified by map.
%
-% Deprecated, replace with:
+% Suppose your want to upload the first scanline of a 640x480 image from
+% character data in red-green-blue order:
%
-% if (size_to_fit != MagickFalse)
-% ParseRegionGeometry(image,geometry,region_info,&image->exception); else
-% ParsePageGeometry(image,geometry,region_info,&image->exception);
+% MagickSetImagePixels(wand,0,0,640,1,"RGB",CharPixel,pixels);
%
-% The format of the GetImageGeometry method is:
+% The format of the MagickSetImagePixels method is:
%
-% int GetImageGeometry(Image *image,const char *geometry,
-% const unsigned int size_to_fit,RectangeInfo *region_info)
+% MagickBooleanType MagickSetImagePixels(MagickWand *wand,
+% const ssize_t x,const ssize_t y,const size_t columns,
+% const size_t rows,const char *map,const StorageType storage,
+% const void *pixels)
%
% A description of each parameter follows:
%
-% o flags: Method GetImageGeometry returns a bitmask that indicates
-% which of the four values were located in the geometry string.
+% o wand: the magick wand.
+%
+% o x, y, columns, rows: These values define the perimeter of a region
+% of pixels you want to define.
%
-% o geometry: The geometry (e.g. 100x100+10+10).
+% o map: This string reflects the expected ordering of the pixel array.
+% It can be any combination or order of R = red, G = green, B = blue,
+% A = alpha (0 is transparent), O = opacity (0 is opaque), C = cyan,
+% Y = yellow, M = magenta, K = black, I = intensity (for grayscale),
+% P = pad.
%
-% o size_to_fit: A value other than 0 means to scale the region so it
-% fits within the specified width and height.
+% o storage: Define the data type of the pixels. Float and double types are
+% expected to be normalized [0..1] otherwise [0..QuantumRange]. Choose from
+% these types: CharPixel, ShortPixel, IntegerPixel, LongPixel, FloatPixel,
+% or DoublePixel.
%
-% o region_info: the region as defined by the geometry string with
-% respect to the image and its gravity.
+% o pixels: This array of values contain the pixel components as defined by
+% map and type. You must preallocate this array where the expected
+% length varies depending on the values of width, height, map, and type.
%
*/
-MagickExport int GetImageGeometry(Image *image,const char *geometry,
- const unsigned int size_to_fit,RectangleInfo *region_info)
+WandExport MagickBooleanType MagickSetImagePixels(MagickWand *wand,
+ const ssize_t x,const ssize_t y,const size_t columns,
+ const size_t rows,const char *map,const StorageType storage,
+ const void *pixels)
{
- if (image->debug != MagickFalse)
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v5.5.4");
- if (size_to_fit != MagickFalse)
- return((int) ParseRegionGeometry(image,geometry,region_info,&image->exception));
- return((int) ParsePageGeometry(image,geometry,region_info,&image->exception));
+ return(MagickImportImagePixels(wand,x,y,columns,rows,map,storage,pixels));
}
\f
/*
% %
% %
% %
-% G e t I m a g e L i s t %
+% M a g i c k W r i t e I m a g e B l o b %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% GetImageList() returns an image at the specified position in the list.
+% MagickWriteImageBlob() implements direct to memory image formats. It
+% returns the image as a blob and its length. Use MagickSetFormat() to
+% set the format of the returned blob (GIF, JPEG, PNG, etc.).
%
-% Deprecated, replace with:
+% Use MagickRelinquishMemory() to free the blob when you are done with it.
%
-% CloneImage(GetImageFromList(images,(ssize_t) offset),0,0,MagickTrue,
-% exception);
+% The format of the MagickWriteImageBlob method is:
%
-% The format of the GetImageList method is:
-%
-% Image *GetImageList(const Image *images,const ssize_t offset,
-% ExceptionInfo *exception)
+% unsigned char *MagickWriteImageBlob(MagickWand *wand,size_t *length)
%
% A description of each parameter follows:
%
-% o images: the image list.
-%
-% o offset: the position within the list.
+% o wand: the magick wand.
%
-% o exception: return any errors or warnings in this structure.
+% o length: the length of the blob.
%
*/
-MagickExport Image *GetImageList(const Image *images,const ssize_t offset,
- ExceptionInfo *exception)
+WandExport unsigned char *MagickWriteImageBlob(MagickWand *wand,size_t *length)
{
- Image
- *image;
-
- if (images->debug != MagickFalse)
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v5.5.2");
- image=CloneImage(GetImageFromList(images,(ssize_t) offset),0,0,MagickTrue,
- exception);
- return(image);
+ return(MagickGetImageBlob(wand,length));
}
\f
/*
% %
% %
% %
-% G e t I m a g e L i s t I n d e x %
+% N e w P i x e l V i e w %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% GetImageListIndex() returns the position in the list of the specified
-% image.
-%
-% Deprecated, replace with:
-%
-% GetImageIndexInList(images);
+% NewPixelView() returns a pixel view required for all other methods in the
+% Pixel View API.
%
-% The format of the GetImageListIndex method is:
+% The format of the NewPixelView method is:
%
-% ssize_t GetImageListIndex(const Image *images)
+% PixelView *NewPixelView(MagickWand *wand)
%
% A description of each parameter follows:
%
-% o images: the image list.
+% o wand: the wand.
%
*/
-MagickExport ssize_t GetImageListIndex(const Image *images)
+
+static PixelWand ***AcquirePixelsThreadSet(const size_t number_wands,
+ const size_t number_threads)
+{
+ PixelWand
+ ***pixel_wands;
+
+ register ssize_t
+ i;
+
+ pixel_wands=(PixelWand ***) AcquireQuantumMemory(number_threads,
+ sizeof(*pixel_wands));
+ if (pixel_wands == (PixelWand ***) NULL)
+ return((PixelWand ***) NULL);
+ (void) ResetMagickMemory(pixel_wands,0,number_threads*sizeof(*pixel_wands));
+ for (i=0; i < (ssize_t) number_threads; i++)
+ {
+ pixel_wands[i]=NewPixelWands(number_wands);
+ if (pixel_wands[i] == (PixelWand **) NULL)
+ return(DestroyPixelsThreadSet(pixel_wands,number_wands,number_threads));
+ }
+ return(pixel_wands);
+}
+
+WandExport PixelView *NewPixelView(MagickWand *wand)
{
- if (images->debug != MagickFalse)
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v5.5.2");
- return(GetImageIndexInList(images));
+ PixelView
+ *pixel_view;
+
+ assert(wand != (MagickWand *) NULL);
+ assert(wand->signature == MagickSignature);
+ pixel_view=(PixelView *) AcquireMagickMemory(sizeof(*pixel_view));
+ if (pixel_view == (PixelView *) NULL)
+ ThrowWandFatalException(ResourceLimitFatalError,"MemoryAllocationFailed",
+ GetExceptionMessage(errno));
+ (void) ResetMagickMemory(pixel_view,0,sizeof(*pixel_view));
+ pixel_view->id=AcquireWandId();
+ (void) FormatMagickString(pixel_view->name,MaxTextExtent,"%s-%.20g",
+ PixelViewId,(double) pixel_view->id);
+ pixel_view->exception=AcquireExceptionInfo();
+ pixel_view->wand=wand;
+ pixel_view->view=AcquireCacheView(pixel_view->wand->images);
+ pixel_view->region.width=wand->images->columns;
+ pixel_view->region.height=wand->images->rows;
+ pixel_view->number_threads=GetOpenMPMaximumThreads();
+ pixel_view->pixel_wands=AcquirePixelsThreadSet(pixel_view->region.width,
+ pixel_view->number_threads);
+ if (pixel_view->pixel_wands == (PixelWand ***) NULL)
+ ThrowWandFatalException(ResourceLimitFatalError,"MemoryAllocationFailed",
+ GetExceptionMessage(errno));
+ pixel_view->debug=IsEventLogging();
+ pixel_view->signature=WandSignature;
+ return(pixel_view);
}
\f
/*
% %
% %
% %
-% G e t I m a g e L i s t S i z e %
+% N e w P i x e l V i e w R e g i o n %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% GetImageListSize() returns the number of images in the list.
-%
-% Deprecated, replace with:
+% NewPixelViewRegion() returns a pixel view required for all other methods
+% in the Pixel View API.
%
-% GetImageListLength(images);
+% The format of the NewPixelViewRegion method is:
%
-% The format of the GetImageListSize method is:
-%
-% size_t GetImageListSize(const Image *images)
+% PixelView *NewPixelViewRegion(MagickWand *wand,const ssize_t x,
+% const ssize_t y,const size_t width,const size_t height)
%
% A description of each parameter follows:
%
-% o images: the image list.
+% o wand: the magick wand.
+%
+% o x,y,columns,rows: These values define the perimeter of a region of
+% pixel_wands view.
%
*/
-MagickExport size_t GetImageListSize(const Image *images)
+WandExport PixelView *NewPixelViewRegion(MagickWand *wand,const ssize_t x,
+ const ssize_t y,const size_t width,const size_t height)
{
- if (images->debug != MagickFalse)
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v5.5.2");
- return(GetImageListLength(images));
+ PixelView
+ *pixel_view;
+
+ assert(wand != (MagickWand *) NULL);
+ assert(wand->signature == MagickSignature);
+ pixel_view=(PixelView *) AcquireMagickMemory(sizeof(*pixel_view));
+ if (pixel_view == (PixelView *) NULL)
+ ThrowWandFatalException(ResourceLimitFatalError,"MemoryAllocationFailed",
+ GetExceptionMessage(errno));
+ (void) ResetMagickMemory(pixel_view,0,sizeof(*pixel_view));
+ pixel_view->id=AcquireWandId();
+ (void) FormatMagickString(pixel_view->name,MaxTextExtent,"%s-%.20g",
+ PixelViewId,(double) pixel_view->id);
+ pixel_view->exception=AcquireExceptionInfo();
+ pixel_view->view=AcquireCacheView(pixel_view->wand->images);
+ pixel_view->wand=wand;
+ pixel_view->region.width=width;
+ pixel_view->region.height=height;
+ pixel_view->region.x=x;
+ pixel_view->region.y=y;
+ pixel_view->number_threads=GetOpenMPMaximumThreads();
+ pixel_view->pixel_wands=AcquirePixelsThreadSet(pixel_view->region.width,
+ pixel_view->number_threads);
+ if (pixel_view->pixel_wands == (PixelWand ***) NULL)
+ ThrowWandFatalException(ResourceLimitFatalError,"MemoryAllocationFailed",
+ GetExceptionMessage(errno));
+ pixel_view->debug=IsEventLogging();
+ pixel_view->signature=WandSignature;
+ return(pixel_view);
}
\f
/*
% %
% %
% %
-% G e t I m a g e P i x e l s %
+% P i x e l G e t N e x t R o w %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% GetImagePixels() obtains a pixel region for read/write access. If the
-% region is successfully accessed, a pointer to a PixelPacket array
-% representing the region is returned, otherwise NULL is returned.
-%
-% The returned pointer may point to a temporary working copy of the pixels
-% or it may point to the original pixels in memory. Performance is maximized
-% if the selected region is part of one row, or one or more full rows, since
-% then there is opportunity to access the pixels in-place (without a copy)
-% if the image is in RAM, or in a memory-mapped file. The returned pointer
-% should *never* be deallocated by the user.
-%
-% Pixels accessed via the returned pointer represent a simple array of type
-% PixelPacket. If the image type is CMYK or if the storage class is
-% PseduoClass, call GetAuthenticIndexQueue() after invoking GetImagePixels()
-% to obtain the black color component or colormap indexes (of type IndexPacket)
-% corresponding to the region. Once the PixelPacket (and/or IndexPacket)
-% array has been updated, the changes must be saved back to the underlying
-% image using SyncAuthenticPixels() or they may be lost.
-%
-% Deprecated, replace with:
-%
-% GetAuthenticPixels(image,x,y,columns,rows,&image->exception);
+% PixelGetNextRow() returns the next row as an array of pixel wands from the
+% pixel iterator.
%
-% The format of the GetImagePixels() method is:
+% The format of the PixelGetNextRow method is:
%
-% PixelPacket *GetImagePixels(Image *image,const ssize_t x,const ssize_t y,
-% const size_t columns,const size_t rows)
+% PixelWand **PixelGetNextRow(PixelIterator *iterator,
+% size_t *number_wands)
%
% A description of each parameter follows:
%
-% o image: the image.
+% o iterator: the pixel iterator.
%
-% o x,y,columns,rows: These values define the perimeter of a region of
-% pixels.
+% o number_wands: the number of pixel wands.
%
*/
-MagickExport PixelPacket *GetImagePixels(Image *image,const ssize_t x,const ssize_t y,
- const size_t columns,const size_t rows)
+WandExport PixelWand **PixelGetNextRow(PixelIterator *iterator)
{
- return(GetAuthenticPixels(image,x,y,columns,rows,&image->exception));
+ size_t
+ number_wands;
+
+ return(PixelGetNextIteratorRow(iterator,&number_wands));
}
\f
/*
% %
% %
% %
-% G e t I n d e x e s %
+% P i x e l I t e r a t o r G e t E x c e p t i o n %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% GetIndexes() returns the black channel or the colormap indexes associated
-% with the last call to QueueAuthenticPixels() or GetVirtualPixels(). NULL is
-% returned if the black channel or colormap indexes are not available.
-%
-% Deprecated, replace with:
+% PixelIteratorGetException() returns the severity, reason, and description of
+% any error that occurs when using other methods in this API.
%
-% GetAuthenticIndexQueue(image);
+% The format of the PixelIteratorGetException method is:
%
-% The format of the GetIndexes() method is:
-%
-% IndexPacket *GetIndexes(const Image *image)
+% char *PixelIteratorGetException(const Pixeliterator *iterator,
+% ExceptionType *severity)
%
% A description of each parameter follows:
%
-% o indexes: GetIndexes() returns the indexes associated with the last
-% call to QueueAuthenticPixels() or GetAuthenticPixels().
+% o iterator: the pixel iterator.
%
-% o image: the image.
+% o severity: the severity of the error is returned here.
%
*/
-MagickExport IndexPacket *GetIndexes(const Image *image)
+WandExport char *PixelIteratorGetException(const PixelIterator *iterator,
+ ExceptionType *severity)
{
- return(GetAuthenticIndexQueue(image));
+ return(PixelGetIteratorException(iterator,severity));
}
\f
/*
% %
% %
% %
-+ G e t M a g i c k G e o m e t r y %
+% S e t P i x e l V i e w I t e r a t o r %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% GetMagickGeometry() is similar to GetGeometry() except the returned
-% geometry is modified as determined by the meta characters: %, !, <, >,
-% and ~.
+% SetPixelViewIterator() iterates over the pixel view in parallel and calls
+% your set method for each scanline of the view. The pixel region is
+% confined to the image canvas-- that is no negative offsets or widths or
+% heights that exceed the image dimension. The pixels are initiallly
+% undefined and any settings you make in the callback method are automagically
+% synced back to your image.
+%
+% Use this pragma:
%
-% Deprecated, replace with:
+% #pragma omp critical
%
-% ParseMetaGeometry(geometry,x,y,width,height);
+% to define a section of code in your callback set method that must be
+% executed by a single thread at a time.
%
-% The format of the GetMagickGeometry method is:
+% The format of the SetPixelViewIterator method is:
%
-% unsigned int GetMagickGeometry(const char *geometry,ssize_t *x,ssize_t *y,
-% size_t *width,size_t *height)
+% MagickBooleanType SetPixelViewIterator(PixelView *destination,
+% SetPixelViewMethod set,void *context)
%
% A description of each parameter follows:
%
-% o geometry: Specifies a character string representing the geometry
-% specification.
+% o destination: the pixel view.
%
-% o x,y: A pointer to an integer. The x and y offset as determined by
-% the geometry specification is returned here.
+% o set: the set callback method.
%
-% o width,height: A pointer to an unsigned integer. The width and height
-% as determined by the geometry specification is returned here.
+% o context: the user defined context.
%
*/
-MagickExport unsigned int GetMagickGeometry(const char *geometry,ssize_t *x,
- ssize_t *y,size_t *width,size_t *height)
+WandExport MagickBooleanType SetPixelViewIterator(PixelView *destination,
+ SetPixelViewMethod set,void *context)
{
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v5.5.3");
- return(ParseMetaGeometry(geometry,x,y,width,height));
+#define SetPixelViewTag "PixelView/Set"
+
+ ExceptionInfo
+ *exception;
+
+ Image
+ *destination_image;
+
+ MagickBooleanType
+ status;
+
+ MagickOffsetType
+ progress;
+
+ ssize_t
+ y;
+
+ assert(destination != (PixelView *) NULL);
+ assert(destination->signature == WandSignature);
+ if (set == (SetPixelViewMethod) NULL)
+ return(MagickFalse);
+ destination_image=destination->wand->images;
+ if (SetImageStorageClass(destination_image,DirectClass) == MagickFalse)
+ return(MagickFalse);
+ status=MagickTrue;
+ progress=0;
+ exception=destination->exception;
+#if defined(MAGICKCORE_OPENMP_SUPPORT)
+ #pragma omp parallel for schedule(static,1) shared(progress,status)
+#endif
+ for (y=destination->region.y; y < (ssize_t) destination->region.height; y++)
+ {
+ const int
+ id = GetOpenMPThreadId();
+
+ MagickBooleanType
+ sync;
+
+ register IndexPacket
+ *restrict indexes;
+
+ register ssize_t
+ x;
+
+ register PixelPacket
+ *restrict pixels;
+
+ if (status == MagickFalse)
+ continue;
+ pixels=GetCacheViewAuthenticPixels(destination->view,destination->region.x,
+ y,destination->region.width,1,exception);
+ if (pixels == (PixelPacket *) NULL)
+ {
+ InheritException(destination->exception,GetCacheViewException(
+ destination->view));
+ status=MagickFalse;
+ continue;
+ }
+ indexes=GetCacheViewAuthenticIndexQueue(destination->view);
+ if (set(destination,context) == MagickFalse)
+ status=MagickFalse;
+ for (x=0; x < (ssize_t) destination->region.width; x++)
+ PixelGetQuantumColor(destination->pixel_wands[id][x],pixels+x);
+ if (destination_image->colorspace == CMYKColorspace)
+ for (x=0; x < (ssize_t) destination->region.width; x++)
+ SetIndexPixelComponent(indexes+x,PixelGetBlackQuantum(
+ destination->pixel_wands[id][x]));
+ sync=SyncCacheViewAuthenticPixels(destination->view,exception);
+ if (sync == MagickFalse)
+ {
+ InheritException(destination->exception,GetCacheViewException(
+ destination->view));
+ status=MagickFalse;
+ }
+ if (destination_image->progress_monitor != (MagickProgressMonitor) NULL)
+ {
+ MagickBooleanType
+ proceed;
+
+#if defined(MAGICKCORE_OPENMP_SUPPORT)
+ #pragma omp critical (MagickWand_SetPixelViewIterator)
+#endif
+ proceed=SetImageProgress(destination_image,SetPixelViewTag,progress++,
+ destination->region.height);
+ if (proceed == MagickFalse)
+ status=MagickFalse;
+ }
+ }
+ return(status);
}
\f
/*
% %
% %
% %
-% G e t N e x t I m a g e %
+% T r a n s f e r P i x e l V i e w I t e r a t o r %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% GetNextImage() returns the next image in a list.
+% TransferPixelViewIterator() iterates over two pixel views in parallel and
+% calls your transfer method for each scanline of the view. The source pixel
+% region is not confined to the image canvas-- that is you can include
+% negative offsets or widths or heights that exceed the image dimension.
+% However, the destination pixel view is confined to the image canvas-- that
+% is no negative offsets or widths or heights that exceed the image dimension
+% are permitted.
%
-% Deprecated, replace with:
+% Use this pragma:
%
-% GetNextImageInList(images);
+% #pragma omp critical
%
-% The format of the GetNextImage method is:
-%
-% Image *GetNextImage(const Image *images)
-%
-% A description of each parameter follows:
-%
-% o images: the image list.
-%
-*/
-MagickExport Image *GetNextImage(const Image *images)
-{
- if (images->debug != MagickFalse)
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v5.5.2");
- return(GetNextImageInList(images));
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% G e t N e x t I m a g e A t t r i b u t e %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% to define a section of code in your callback transfer method that must be
+% executed by a single thread at a time.
%
-% GetNextImageAttribute() gets the next image attribute.
+% The format of the TransferPixelViewIterator method is:
%
-% Deprecated, replace with:
+% MagickBooleanType TransferPixelViewIterator(PixelView *source,
+% PixelView *destination,TransferPixelViewMethod transfer,void *context)
%
-% const char *property;
-% property=GetNextImageProperty(image);
-% if (property != (const char *) NULL)
-% GetImageAttribute(image,property);
+% A description of each parameter follows:
%
-% The format of the GetNextImageAttribute method is:
+% o source: the source pixel view.
%
-% const ImageAttribute *GetNextImageAttribute(const Image *image)
+% o destination: the destination pixel view.
%
-% A description of each parameter follows:
+% o transfer: the transfer callback method.
%
-% o image: the image.
+% o context: the user defined context.
%
*/
-MagickExport const ImageAttribute *GetNextImageAttribute(const Image *image)
+WandExport MagickBooleanType TransferPixelViewIterator(PixelView *source,
+ PixelView *destination,TransferPixelViewMethod transfer,void *context)
{
- const char
- *property;
+#define TransferPixelViewTag "PixelView/Transfer"
+
+ ExceptionInfo
+ *exception;
+
+ Image
+ *destination_image,
+ *source_image;
+
+ MagickBooleanType
+ status;
+
+ MagickOffsetType
+ progress;
+
+ ssize_t
+ y;
+
+ assert(source != (PixelView *) NULL);
+ assert(source->signature == WandSignature);
+ if (transfer == (TransferPixelViewMethod) NULL)
+ return(MagickFalse);
+ source_image=source->wand->images;
+ destination_image=destination->wand->images;
+ if (SetImageStorageClass(destination_image,DirectClass) == MagickFalse)
+ return(MagickFalse);
+ status=MagickTrue;
+ progress=0;
+ exception=destination->exception;
+#if defined(MAGICKCORE_OPENMP_SUPPORT)
+ #pragma omp parallel for schedule(static,1) shared(progress,status)
+#endif
+ for (y=source->region.y; y < (ssize_t) source->region.height; y++)
+ {
+ const int
+ id = GetOpenMPThreadId();
+
+ MagickBooleanType
+ sync;
- property=GetNextImageProperty(image);
- if (property == (const char *) NULL)
- return((const ImageAttribute *) NULL);
- return(GetImageAttribute(image,property));
+ register const IndexPacket
+ *restrict indexes;
+
+ register const PixelPacket
+ *restrict pixels;
+
+ register IndexPacket
+ *restrict destination_indexes;
+
+ register ssize_t
+ x;
+
+ register PixelPacket
+ *restrict destination_pixels;
+
+ if (status == MagickFalse)
+ continue;
+ pixels=GetCacheViewVirtualPixels(source->view,source->region.x,y,
+ source->region.width,1,source->exception);
+ if (pixels == (const PixelPacket *) NULL)
+ {
+ status=MagickFalse;
+ continue;
+ }
+ indexes=GetCacheViewVirtualIndexQueue(source->view);
+ for (x=0; x < (ssize_t) source->region.width; x++)
+ PixelSetQuantumColor(source->pixel_wands[id][x],pixels+x);
+ if (source_image->colorspace == CMYKColorspace)
+ for (x=0; x < (ssize_t) source->region.width; x++)
+ PixelSetBlackQuantum(source->pixel_wands[id][x],
+ GetIndexPixelComponent(indexes+x));
+ if (source_image->storage_class == PseudoClass)
+ for (x=0; x < (ssize_t) source->region.width; x++)
+ PixelSetIndex(source->pixel_wands[id][x],
+ GetIndexPixelComponent(indexes+x));
+ destination_pixels=GetCacheViewAuthenticPixels(destination->view,
+ destination->region.x,y,destination->region.width,1,exception);
+ if (destination_pixels == (PixelPacket *) NULL)
+ {
+ status=MagickFalse;
+ continue;
+ }
+ destination_indexes=GetCacheViewAuthenticIndexQueue(destination->view);
+ for (x=0; x < (ssize_t) destination->region.width; x++)
+ PixelSetQuantumColor(destination->pixel_wands[id][x],pixels+x);
+ if (destination_image->colorspace == CMYKColorspace)
+ for (x=0; x < (ssize_t) destination->region.width; x++)
+ PixelSetBlackQuantum(destination->pixel_wands[id][x],
+ GetIndexPixelComponent(indexes+x));
+ if (destination_image->storage_class == PseudoClass)
+ for (x=0; x < (ssize_t) destination->region.width; x++)
+ PixelSetIndex(destination->pixel_wands[id][x],
+ GetIndexPixelComponent(indexes+x));
+ if (transfer(source,destination,context) == MagickFalse)
+ status=MagickFalse;
+ for (x=0; x < (ssize_t) destination->region.width; x++)
+ PixelGetQuantumColor(destination->pixel_wands[id][x],
+ destination_pixels+x);
+ if (destination_image->colorspace == CMYKColorspace)
+ for (x=0; x < (ssize_t) destination->region.width; x++)
+ SetIndexPixelComponent(destination_indexes+x,PixelGetBlackQuantum(
+ destination->pixel_wands[id][x]));
+ sync=SyncCacheViewAuthenticPixels(destination->view,exception);
+ if (sync == MagickFalse)
+ {
+ InheritException(destination->exception,GetCacheViewException(
+ source->view));
+ status=MagickFalse;
+ }
+ if (source_image->progress_monitor != (MagickProgressMonitor) NULL)
+ {
+ MagickBooleanType
+ proceed;
+
+#if defined(MAGICKCORE_OPENMP_SUPPORT)
+ #pragma omp critical (MagickWand_TransferPixelViewIterator)
+#endif
+ proceed=SetImageProgress(source_image,TransferPixelViewTag,progress++,
+ source->region.height);
+ if (proceed == MagickFalse)
+ status=MagickFalse;
+ }
+ }
+ return(status);
}
\f
/*
% %
% %
% %
-% G e t N u m b e r S c e n e s %
+% U p d a t e P i x e l V i e w I t e r a t o r %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% GetNumberScenes() returns the number of images in the list.
+% UpdatePixelViewIterator() iterates over the pixel view in parallel and calls
+% your update method for each scanline of the view. The pixel region is
+% confined to the image canvas-- that is no negative offsets or widths or
+% heights that exceed the image dimension are permitted. Updates to pixels
+% in your callback are automagically synced back to the image.
+%
+% Use this pragma:
%
-% Deprecated, replace with:
+% #pragma omp critical
%
-% GetImageListLength(image);
+% to define a section of code in your callback update method that must be
+% executed by a single thread at a time.
%
-% The format of the GetNumberScenes method is:
+% The format of the UpdatePixelViewIterator method is:
%
-% unsigned int GetNumberScenes(const Image *images)
+% MagickBooleanType UpdatePixelViewIterator(PixelView *source,
+% UpdatePixelViewMethod update,void *context)
%
% A description of each parameter follows:
%
-% o images: the image list.
+% o source: the source pixel view.
+%
+% o update: the update callback method.
+%
+% o context: the user defined context.
%
*/
-MagickExport unsigned int GetNumberScenes(const Image *image)
+WandExport MagickBooleanType UpdatePixelViewIterator(PixelView *source,
+ UpdatePixelViewMethod update,void *context)
{
- if (image->debug != MagickFalse)
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v5.5.2");
- return((unsigned int) GetImageListLength(image));
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% G e t O n e P i x e l %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% GetOnePixel() returns a single pixel at the specified (x,y) location.
-% The image background color is returned if an error occurs.
-%
-% Deprecated, replace with:
-%
-% GetOneAuthenticPixel(image,x,y,&pixel,&image->exception);
-%
-% The format of the GetOnePixel() method is:
-%
-% PixelPacket GetOnePixel(const Image image,const ssize_t x,const ssize_t y)
-%
-% A description of each parameter follows:
-%
-% o image: the image.
-%
-% o x,y: These values define the location of the pixel to return.
-%
-*/
-MagickExport PixelPacket GetOnePixel(Image *image,const ssize_t x,const ssize_t y)
-{
- PixelPacket
- pixel;
-
- (void) GetOneAuthenticPixel(image,x,y,&pixel,&image->exception);
- return(pixel);
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% G e t P i x e l s %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% GetPixels() returns the pixels associated with the last call to
-% QueueAuthenticPixels() or GetAuthenticPixels().
-%
-% Deprecated, replace with:
-%
-% GetAuthenticPixelQueue(image);
-%
-% The format of the GetPixels() method is:
-%
-% PixelPacket *GetPixels(const Image image)
-%
-% A description of each parameter follows:
-%
-% o pixels: GetPixels() returns the pixels associated with the last call
-% to QueueAuthenticPixels() or GetAuthenticPixels().
-%
-% o image: the image.
-%
-*/
-MagickExport PixelPacket *GetPixels(const Image *image)
-{
- return(GetAuthenticPixelQueue(image));
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% G e t P r e v i o u s I m a g e %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% GetPreviousImage() returns the previous image in a list.
-%
-% Deprecated, replace with:
-%
-% GetPreviousImageInList(images));
-%
-% The format of the GetPreviousImage method is:
-%
-% Image *GetPreviousImage(const Image *images)
-%
-% A description of each parameter follows:
-%
-% o images: the image list.
-%
-*/
-MagickExport Image *GetPreviousImage(const Image *images)
-{
- if (images->debug != MagickFalse)
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v5.5.2");
- return(GetPreviousImageInList(images));
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% H S L T r a n s f o r m %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% HSLTransform() converts a (hue, saturation, lightness) to a (red, green,
-% blue) triple.
-%
-% The format of the HSLTransformImage method is:
-%
-% void HSLTransform(const double hue,const double saturation,
-% const double lightness,Quantum *red,Quantum *green,Quantum *blue)
-%
-% A description of each parameter follows:
-%
-% o hue, saturation, lightness: A double value representing a
-% component of the HSL color space.
-%
-% o red, green, blue: A pointer to a pixel component of type Quantum.
-%
-*/
-
-static inline MagickRealType HueToRGB(MagickRealType m1,MagickRealType m2,
- MagickRealType hue)
-{
- if (hue < 0.0)
- hue+=1.0;
- if (hue > 1.0)
- hue-=1.0;
- if ((6.0*hue) < 1.0)
- return(m1+6.0*(m2-m1)*hue);
- if ((2.0*hue) < 1.0)
- return(m2);
- if ((3.0*hue) < 2.0)
- return(m1+6.0*(m2-m1)*(2.0/3.0-hue));
- return(m1);
-}
-
-MagickExport void HSLTransform(const double hue,const double saturation,
- const double lightness,Quantum *red,Quantum *green,Quantum *blue)
-{
- MagickRealType
- b,
- g,
- r,
- m1,
- m2;
-
- /*
- Convert HSL to RGB colorspace.
- */
- assert(red != (Quantum *) NULL);
- assert(green != (Quantum *) NULL);
- assert(blue != (Quantum *) NULL);
- if (lightness <= 0.5)
- m2=lightness*(saturation+1.0);
- else
- m2=lightness+saturation-lightness*saturation;
- m1=2.0*lightness-m2;
- r=HueToRGB(m1,m2,hue+1.0/3.0);
- g=HueToRGB(m1,m2,hue);
- b=HueToRGB(m1,m2,hue-1.0/3.0);
- *red=ClampToQuantum((MagickRealType) QuantumRange*r);
- *green=ClampToQuantum((MagickRealType) QuantumRange*g);
- *blue=ClampToQuantum((MagickRealType) QuantumRange*b);
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% I d e n t i t y A f f i n e %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% IdentityAffine() initializes the affine transform to the identity matrix.
-%
-% The format of the IdentityAffine method is:
-%
-% IdentityAffine(AffineMatrix *affine)
-%
-% A description of each parameter follows:
-%
-% o affine: A pointer the affine transform of type AffineMatrix.
-%
-*/
-MagickExport void IdentityAffine(AffineMatrix *affine)
-{
- (void) LogMagickEvent(TraceEvent,GetMagickModule(),"...");
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v5.5.7");
- assert(affine != (AffineMatrix *) NULL);
- (void) ResetMagickMemory(affine,0,sizeof(AffineMatrix));
- affine->sx=1.0;
- affine->sy=1.0;
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% I n i t i a l i z e M a g i c k %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% InitializeMagick() initializes the ImageMagick environment.
-%
-% Deprecated, replace with:
-%
-% MagickCoreGenesis(path,MagickFalse);
-%
-% The format of the InitializeMagick function is:
-%
-% InitializeMagick(const char *path)
-%
-% A description of each parameter follows:
-%
-% o path: the execution path of the current ImageMagick client.
-%
-*/
-MagickExport void InitializeMagick(const char *path)
-{
- MagickCoreGenesis(path,MagickFalse);
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% I n t e r p o l a t e P i x e l C o l o r %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% InterpolatePixelColor() applies bi-linear or tri-linear interpolation
-% between a pixel and it's neighbors.
-%
-% The format of the InterpolatePixelColor method is:
-%
-% MagickPixelPacket InterpolatePixelColor(const Image *image,
-% CacheView *view_info,InterpolatePixelMethod method,const double x,
-% const double y,ExceptionInfo *exception)
-%
-% A description of each parameter follows:
-%
-% o image: the image.
-%
-% o image_view: the image cache view.
-%
-% o type: the type of pixel color interpolation.
-%
-% o x,y: A double representing the current (x,y) position of the pixel.
-%
-% o exception: return any errors or warnings in this structure.
-%
-*/
-
-static inline double MagickMax(const double x,const double y)
-{
- if (x > y)
- return(x);
- return(y);
-}
-
-static void BicubicInterpolate(const MagickPixelPacket *pixels,const double dx,
- MagickPixelPacket *pixel)
-{
- MagickRealType
- dx2,
- p,
- q,
- r,
- s;
-
- dx2=dx*dx;
- p=(pixels[3].red-pixels[2].red)-(pixels[0].red-pixels[1].red);
- q=(pixels[0].red-pixels[1].red)-p;
- r=pixels[2].red-pixels[0].red;
- s=pixels[1].red;
- pixel->red=(dx*dx2*p)+(dx2*q)+(dx*r)+s;
- p=(pixels[3].green-pixels[2].green)-(pixels[0].green-pixels[1].green);
- q=(pixels[0].green-pixels[1].green)-p;
- r=pixels[2].green-pixels[0].green;
- s=pixels[1].green;
- pixel->green=(dx*dx2*p)+(dx2*q)+(dx*r)+s;
- p=(pixels[3].blue-pixels[2].blue)-(pixels[0].blue-pixels[1].blue);
- q=(pixels[0].blue-pixels[1].blue)-p;
- r=pixels[2].blue-pixels[0].blue;
- s=pixels[1].blue;
- pixel->blue=(dx*dx2*p)+(dx2*q)+(dx*r)+s;
- p=(pixels[3].opacity-pixels[2].opacity)-(pixels[0].opacity-pixels[1].opacity);
- q=(pixels[0].opacity-pixels[1].opacity)-p;
- r=pixels[2].opacity-pixels[0].opacity;
- s=pixels[1].opacity;
- pixel->opacity=(dx*dx2*p)+(dx2*q)+(dx*r)+s;
- if (pixel->colorspace == CMYKColorspace)
- {
- p=(pixels[3].index-pixels[2].index)-(pixels[0].index-pixels[1].index);
- q=(pixels[0].index-pixels[1].index)-p;
- r=pixels[2].index-pixels[0].index;
- s=pixels[1].index;
- pixel->index=(dx*dx2*p)+(dx2*q)+(dx*r)+s;
- }
-}
-
-static inline MagickRealType CubicWeightingFunction(const MagickRealType x)
-{
- MagickRealType
- alpha,
- gamma;
-
- alpha=MagickMax(x+2.0,0.0);
- gamma=1.0*alpha*alpha*alpha;
- alpha=MagickMax(x+1.0,0.0);
- gamma-=4.0*alpha*alpha*alpha;
- alpha=MagickMax(x+0.0,0.0);
- gamma+=6.0*alpha*alpha*alpha;
- alpha=MagickMax(x-1.0,0.0);
- gamma-=4.0*alpha*alpha*alpha;
- return(gamma/6.0);
-}
-
-static inline double MeshInterpolate(const PointInfo *delta,const double p,
- const double x,const double y)
-{
- return(delta->x*x+delta->y*y+(1.0-delta->x-delta->y)*p);
-}
-
-static inline ssize_t NearestNeighbor(MagickRealType x)
-{
- if (x >= 0.0)
- return((ssize_t) (x+0.5));
- return((ssize_t) (x-0.5));
-}
-
-MagickExport MagickPixelPacket InterpolatePixelColor(const Image *image,
- CacheView *image_view,const InterpolatePixelMethod method,const double x,
- const double y,ExceptionInfo *exception)
-{
- MagickPixelPacket
- pixel;
-
- register const IndexPacket
- *indexes;
-
- register const PixelPacket
- *p;
-
- register ssize_t
- i;
-
- assert(image != (Image *) NULL);
- assert(image->signature == MagickSignature);
- assert(image_view != (CacheView *) NULL);
- GetMagickPixelPacket(image,&pixel);
- switch (method)
- {
- case AverageInterpolatePixel:
- {
- MagickPixelPacket
- pixels[16];
-
- MagickRealType
- alpha[16],
- gamma;
-
- p=GetCacheViewVirtualPixels(image_view,(ssize_t) floor(x)-1,(ssize_t)
- floor(y)-1,4,4,exception);
- if (p == (const PixelPacket *) NULL)
- break;
- indexes=GetCacheViewVirtualIndexQueue(image_view);
- for (i=0; i < 16L; i++)
- {
- GetMagickPixelPacket(image,pixels+i);
- SetMagickPixelPacket(image,p,indexes+i,pixels+i);
- alpha[i]=1.0;
- if (image->matte != MagickFalse)
- {
- alpha[i]=QuantumScale*((MagickRealType) GetAlphaPixelComponent(p));
- pixels[i].red*=alpha[i];
- pixels[i].green*=alpha[i];
- pixels[i].blue*=alpha[i];
- if (image->colorspace == CMYKColorspace)
- pixels[i].index*=alpha[i];
- }
- gamma=alpha[i];
- gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
- pixel.red+=gamma*0.0625*pixels[i].red;
- pixel.green+=gamma*0.0625*pixels[i].green;
- pixel.blue+=gamma*0.0625*pixels[i].blue;
- pixel.opacity+=0.0625*pixels[i].opacity;
- if (image->colorspace == CMYKColorspace)
- pixel.index+=gamma*0.0625*pixels[i].index;
- p++;
- }
- break;
- }
- case BicubicInterpolatePixel:
- {
- MagickPixelPacket
- pixels[16],
- u[4];
-
- MagickRealType
- alpha[16];
-
- PointInfo
- delta;
-
- p=GetCacheViewVirtualPixels(image_view,(ssize_t) floor(x)-1,(ssize_t)
- floor(y)-1,4,4,exception);
- if (p == (const PixelPacket *) NULL)
- break;
- indexes=GetCacheViewVirtualIndexQueue(image_view);
- for (i=0; i < 16L; i++)
- {
- GetMagickPixelPacket(image,pixels+i);
- SetMagickPixelPacket(image,p,indexes+i,pixels+i);
- alpha[i]=1.0;
- if (image->matte != MagickFalse)
- {
- alpha[i]=QuantumScale*((MagickRealType) GetAlphaPixelComponent(p));
- pixels[i].red*=alpha[i];
- pixels[i].green*=alpha[i];
- pixels[i].blue*=alpha[i];
- if (image->colorspace == CMYKColorspace)
- pixels[i].index*=alpha[i];
- }
- p++;
- }
- delta.x=x-floor(x);
- for (i=0; i < 4L; i++)
- BicubicInterpolate(pixels+4*i,delta.x,u+i);
- delta.y=y-floor(y);
- BicubicInterpolate(u,delta.y,&pixel);
- break;
- }
- case BilinearInterpolatePixel:
- default:
- {
- MagickPixelPacket
- pixels[16];
-
- MagickRealType
- alpha[16],
- gamma;
-
- PointInfo
- delta;
-
- p=GetCacheViewVirtualPixels(image_view,(ssize_t) floor(x),(ssize_t)
- floor(y),2,2,exception);
- if (p == (const PixelPacket *) NULL)
- break;
- indexes=GetCacheViewVirtualIndexQueue(image_view);
- for (i=0; i < 4L; i++)
- {
- GetMagickPixelPacket(image,pixels+i);
- SetMagickPixelPacket(image,p,indexes+i,pixels+i);
- alpha[i]=1.0;
- if (image->matte != MagickFalse)
- {
- alpha[i]=QuantumScale*((MagickRealType) GetAlphaPixelComponent(p));
- pixels[i].red*=alpha[i];
- pixels[i].green*=alpha[i];
- pixels[i].blue*=alpha[i];
- if (image->colorspace == CMYKColorspace)
- pixels[i].index*=alpha[i];
- }
- p++;
- }
- delta.x=x-floor(x);
- delta.y=y-floor(y);
- gamma=(((1.0-delta.y)*((1.0-delta.x)*alpha[0]+delta.x*alpha[1])+delta.y*
- ((1.0-delta.x)*alpha[2]+delta.x*alpha[3])));
- gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
- pixel.red=gamma*((1.0-delta.y)*((1.0-delta.x)*pixels[0].red+delta.x*
- pixels[1].red)+delta.y*((1.0-delta.x)*pixels[2].red+delta.x*
- pixels[3].red));
- pixel.green=gamma*((1.0-delta.y)*((1.0-delta.x)*pixels[0].green+delta.x*
- pixels[1].green)+delta.y*((1.0-delta.x)*pixels[2].green+
- delta.x*pixels[3].green));
- pixel.blue=gamma*((1.0-delta.y)*((1.0-delta.x)*pixels[0].blue+delta.x*
- pixels[1].blue)+delta.y*((1.0-delta.x)*pixels[2].blue+delta.x*
- pixels[3].blue));
- pixel.opacity=((1.0-delta.y)*((1.0-delta.x)*pixels[0].opacity+delta.x*
- pixels[1].opacity)+delta.y*((1.0-delta.x)*pixels[2].opacity+delta.x*
- pixels[3].opacity));
- if (image->colorspace == CMYKColorspace)
- pixel.index=gamma*((1.0-delta.y)*((1.0-delta.x)*pixels[0].index+delta.x*
- pixels[1].index)+delta.y*((1.0-delta.x)*pixels[2].index+delta.x*
- pixels[3].index));
- break;
- }
- case FilterInterpolatePixel:
- {
- Image
- *excerpt_image,
- *filter_image;
-
- MagickPixelPacket
- pixels[1];
-
- RectangleInfo
- geometry;
-
- geometry.width=4L;
- geometry.height=4L;
- geometry.x=(ssize_t) floor(x)-1L;
- geometry.y=(ssize_t) floor(y)-1L;
- excerpt_image=ExcerptImage(image,&geometry,exception);
- if (excerpt_image == (Image *) NULL)
- break;
- filter_image=ResizeImage(excerpt_image,1,1,image->filter,image->blur,
- exception);
- excerpt_image=DestroyImage(excerpt_image);
- if (filter_image == (Image *) NULL)
- break;
- p=GetVirtualPixels(filter_image,0,0,1,1,exception);
- if (p == (const PixelPacket *) NULL)
- {
- filter_image=DestroyImage(filter_image);
- break;
- }
- indexes=GetVirtualIndexQueue(filter_image);
- GetMagickPixelPacket(image,pixels);
- SetMagickPixelPacket(image,p,indexes,&pixel);
- filter_image=DestroyImage(filter_image);
- break;
- }
- case IntegerInterpolatePixel:
- {
- MagickPixelPacket
- pixels[1];
-
- p=GetCacheViewVirtualPixels(image_view,(ssize_t) floor(x),(ssize_t)
- floor(y),1,1,exception);
- if (p == (const PixelPacket *) NULL)
- break;
- indexes=GetCacheViewVirtualIndexQueue(image_view);
- GetMagickPixelPacket(image,pixels);
- SetMagickPixelPacket(image,p,indexes,&pixel);
- break;
- }
- case MeshInterpolatePixel:
- {
- MagickPixelPacket
- pixels[4];
-
- MagickRealType
- alpha[4],
- gamma;
-
- PointInfo
- delta,
- luminance;
-
- p=GetCacheViewVirtualPixels(image_view,(ssize_t) floor(x),(ssize_t)
- floor(y),2,2,exception);
- if (p == (const PixelPacket *) NULL)
- break;
- indexes=GetCacheViewVirtualIndexQueue(image_view);
- for (i=0; i < 4L; i++)
- {
- GetMagickPixelPacket(image,pixels+i);
- SetMagickPixelPacket(image,p,indexes+i,pixels+i);
- alpha[i]=1.0;
- if (image->matte != MagickFalse)
- {
- alpha[i]=QuantumScale*((MagickRealType) GetAlphaPixelComponent(p));
- pixels[i].red*=alpha[i];
- pixels[i].green*=alpha[i];
- pixels[i].blue*=alpha[i];
- if (image->colorspace == CMYKColorspace)
- pixels[i].index*=alpha[i];
- }
- p++;
- }
- delta.x=x-floor(x);
- delta.y=y-floor(y);
- luminance.x=MagickPixelLuminance(pixels+0)-MagickPixelLuminance(pixels+3);
- luminance.y=MagickPixelLuminance(pixels+1)-MagickPixelLuminance(pixels+2);
- if (fabs(luminance.x) < fabs(luminance.y))
- {
- /*
- Diagonal 0-3 NW-SE.
- */
- if (delta.x <= delta.y)
- {
- /*
- Bottom-left triangle (pixel:2, diagonal: 0-3).
- */
- delta.y=1.0-delta.y;
- gamma=MeshInterpolate(&delta,alpha[2],alpha[3],alpha[0]);
- gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
- pixel.red=gamma*MeshInterpolate(&delta,pixels[2].red,
- pixels[3].red,pixels[0].red);
- pixel.green=gamma*MeshInterpolate(&delta,pixels[2].green,
- pixels[3].green,pixels[0].green);
- pixel.blue=gamma*MeshInterpolate(&delta,pixels[2].blue,
- pixels[3].blue,pixels[0].blue);
- pixel.opacity=gamma*MeshInterpolate(&delta,pixels[2].opacity,
- pixels[3].opacity,pixels[0].opacity);
- if (image->colorspace == CMYKColorspace)
- pixel.index=gamma*MeshInterpolate(&delta,pixels[2].index,
- pixels[3].index,pixels[0].index);
- }
- else
- {
- /*
- Top-right triangle (pixel:1, diagonal: 0-3).
- */
- delta.x=1.0-delta.x;
- gamma=MeshInterpolate(&delta,alpha[1],alpha[0],alpha[3]);
- gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
- pixel.red=gamma*MeshInterpolate(&delta,pixels[1].red,
- pixels[0].red,pixels[3].red);
- pixel.green=gamma*MeshInterpolate(&delta,pixels[1].green,
- pixels[0].green,pixels[3].green);
- pixel.blue=gamma*MeshInterpolate(&delta,pixels[1].blue,
- pixels[0].blue,pixels[3].blue);
- pixel.opacity=gamma*MeshInterpolate(&delta,pixels[1].opacity,
- pixels[0].opacity,pixels[3].opacity);
- if (image->colorspace == CMYKColorspace)
- pixel.index=gamma*MeshInterpolate(&delta,pixels[1].index,
- pixels[0].index,pixels[3].index);
- }
- }
- else
- {
- /*
- Diagonal 1-2 NE-SW.
- */
- if (delta.x <= (1.0-delta.y))
- {
- /*
- Top-left triangle (pixel 0, diagonal: 1-2).
- */
- gamma=MeshInterpolate(&delta,alpha[0],alpha[1],alpha[2]);
- gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
- pixel.red=gamma*MeshInterpolate(&delta,pixels[0].red,
- pixels[1].red,pixels[2].red);
- pixel.green=gamma*MeshInterpolate(&delta,pixels[0].green,
- pixels[1].green,pixels[2].green);
- pixel.blue=gamma*MeshInterpolate(&delta,pixels[0].blue,
- pixels[1].blue,pixels[2].blue);
- pixel.opacity=gamma*MeshInterpolate(&delta,pixels[0].opacity,
- pixels[1].opacity,pixels[2].opacity);
- if (image->colorspace == CMYKColorspace)
- pixel.index=gamma*MeshInterpolate(&delta,pixels[0].index,
- pixels[1].index,pixels[2].index);
- }
- else
- {
- /*
- Bottom-right triangle (pixel: 3, diagonal: 1-2).
- */
- delta.x=1.0-delta.x;
- delta.y=1.0-delta.y;
- gamma=MeshInterpolate(&delta,alpha[3],alpha[2],alpha[1]);
- gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
- pixel.red=gamma*MeshInterpolate(&delta,pixels[3].red,
- pixels[2].red,pixels[1].red);
- pixel.green=gamma*MeshInterpolate(&delta,pixels[3].green,
- pixels[2].green,pixels[1].green);
- pixel.blue=gamma*MeshInterpolate(&delta,pixels[3].blue,
- pixels[2].blue,pixels[1].blue);
- pixel.opacity=gamma*MeshInterpolate(&delta,pixels[3].opacity,
- pixels[2].opacity,pixels[1].opacity);
- if (image->colorspace == CMYKColorspace)
- pixel.index=gamma*MeshInterpolate(&delta,pixels[3].index,
- pixels[2].index,pixels[1].index);
- }
- }
- break;
- }
- case NearestNeighborInterpolatePixel:
- {
- MagickPixelPacket
- pixels[1];
-
- p=GetCacheViewVirtualPixels(image_view,NearestNeighbor(x),
- NearestNeighbor(y),1,1,exception);
- if (p == (const PixelPacket *) NULL)
- break;
- indexes=GetCacheViewVirtualIndexQueue(image_view);
- GetMagickPixelPacket(image,pixels);
- SetMagickPixelPacket(image,p,indexes,&pixel);
- break;
- }
- case SplineInterpolatePixel:
- {
- MagickPixelPacket
- pixels[16];
-
- MagickRealType
- alpha[16],
- dx,
- dy,
- gamma;
-
- PointInfo
- delta;
-
- ssize_t
- j,
- n;
-
- p=GetCacheViewVirtualPixels(image_view,(ssize_t) floor(x)-1,(ssize_t)
- floor(y)-1,4,4,exception);
- if (p == (const PixelPacket *) NULL)
- break;
- indexes=GetCacheViewVirtualIndexQueue(image_view);
- n=0;
- delta.x=x-floor(x);
- delta.y=y-floor(y);
- for (i=(-1); i < 3L; i++)
- {
- dy=CubicWeightingFunction((MagickRealType) i-delta.y);
- for (j=(-1); j < 3L; j++)
- {
- GetMagickPixelPacket(image,pixels+n);
- SetMagickPixelPacket(image,p,indexes+n,pixels+n);
- alpha[n]=1.0;
- if (image->matte != MagickFalse)
- {
- alpha[n]=QuantumScale*((MagickRealType)
- GetAlphaPixelComponent(p));
- pixels[n].red*=alpha[n];
- pixels[n].green*=alpha[n];
- pixels[n].blue*=alpha[n];
- if (image->colorspace == CMYKColorspace)
- pixels[n].index*=alpha[n];
- }
- dx=CubicWeightingFunction(delta.x-(MagickRealType) j);
- gamma=alpha[n];
- gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
- pixel.red+=gamma*dx*dy*pixels[n].red;
- pixel.green+=gamma*dx*dy*pixels[n].green;
- pixel.blue+=gamma*dx*dy*pixels[n].blue;
- if (image->matte != MagickFalse)
- pixel.opacity+=dx*dy*pixels[n].opacity;
- if (image->colorspace == CMYKColorspace)
- pixel.index+=gamma*dx*dy*pixels[n].index;
- n++;
- p++;
- }
- }
- break;
- }
- }
- return(pixel);
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% I n t e r p r e t I m a g e A t t r i b u t e s %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% InterpretImageAttributes() replaces any embedded formatting characters with
-% the appropriate image attribute and returns the translated text.
-%
-% Deprecated, replace with:
-%
-% InterpretImageProperties(image_info,image,embed_text);
-%
-% The format of the InterpretImageAttributes method is:
-%
-% char *InterpretImageAttributes(const ImageInfo *image_info,Image *image,
-% const char *embed_text)
-%
-% A description of each parameter follows:
-%
-% o image_info: the image info.
-%
-% o image: the image.
-%
-% o embed_text: the address of a character string containing the embedded
-% formatting characters.
-%
-*/
-MagickExport char *InterpretImageAttributes(const ImageInfo *image_info,
- Image *image,const char *embed_text)
-{
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v6.3.1");
- return(InterpretImageProperties(image_info,image,embed_text));
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-+ I s S u b i m a g e %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% IsSubimage() returns MagickTrue if the geometry is a valid subimage
-% specification (e.g. [1], [1-9], [1,7,4]).
-%
-% The format of the IsSubimage method is:
-%
-% unsigned int IsSubimage(const char *geometry,const unsigned int pedantic)
-%
-% A description of each parameter follows:
-%
-% o geometry: This string is the geometry specification.
-%
-% o pedantic: A value other than 0 invokes a more restrictive set of
-% conditions for a valid specification (e.g. [1], [1-4], [4-1]).
-%
-*/
-MagickExport unsigned int IsSubimage(const char *geometry,
- const unsigned int pedantic)
-{
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v5.5.7");
- if (geometry == (const char *) NULL)
- return(MagickFalse);
- if ((strchr(geometry,'x') != (char *) NULL) ||
- (strchr(geometry,'X') != (char *) NULL))
- return(MagickFalse);
- if ((pedantic != MagickFalse) && (strchr(geometry,',') != (char *) NULL))
- return(MagickFalse);
- return(MagickTrue);
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% L e v e l I m a g e C o l o r s %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% LevelImageColor() will map the given color to "black" and "white"
-% values, limearly spreading out the colors, and level values on a channel by
-% channel bases, as per LevelImage(). The given colors allows you to specify
-% different level ranges for each of the color channels separately.
-%
-% If the boolean 'invert' is set true the image values will modifyed in the
-% reverse direction. That is any existing "black" and "white" colors in the
-% image will become the color values given, with all other values compressed
-% appropriatally. This effectivally maps a greyscale gradient into the given
-% color gradient.
-%
-% Deprecated, replace with:
-%
-% LevelColorsImageChannel(image,channel,black_color,white_color,invert);
-%
-% The format of the LevelImageColors method is:
-%
-% MagickBooleanType LevelImageColors(Image *image,const ChannelType channel,
-% const MagickPixelPacket *black_color,const MagickPixelPacket *white_color,
-% const MagickBooleanType invert)
-%
-% A description of each parameter follows:
-%
-% o image: the image.
-%
-% o channel: the channel.
-%
-% o black_color: The color to map black to/from
-%
-% o white_point: The color to map white to/from
-%
-% o invert: if true map the colors (levelize), rather than from (level)
-%
-*/
-MagickBooleanType LevelImageColors(Image *image,const ChannelType channel,
- const MagickPixelPacket *black_color,const MagickPixelPacket *white_color,
- const MagickBooleanType invert)
-{
- return(LevelColorsImageChannel(image,channel,black_color,white_color,invert));
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% L i b e r a t e M e m o r y %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% LiberateMemory() frees memory that has already been allocated, and NULL's
-% the pointer to it.
-%
-% The format of the LiberateMemory method is:
-%
-% void LiberateMemory(void **memory)
-%
-% A description of each parameter follows:
-%
-% o memory: A pointer to a block of memory to free for reuse.
-%
-*/
-MagickExport void LiberateMemory(void **memory)
-{
- assert(memory != (void **) NULL);
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v5.5.7");
- if (*memory == (void *) NULL)
- return;
- free(*memory);
- *memory=(void *) NULL;
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% L i b e r a t e S e m a p h o r e I n f o %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% LiberateSemaphoreInfo() relinquishes a semaphore.
-%
-% Deprecated, replace with:
-%
-% UnlockSemaphoreInfo(*semaphore_info);
-%
-% The format of the LiberateSemaphoreInfo method is:
-%
-% LiberateSemaphoreInfo(void **semaphore_info)
-%
-% A description of each parameter follows:
-%
-% o semaphore_info: Specifies a pointer to an SemaphoreInfo structure.
-%
-*/
-MagickExport void LiberateSemaphoreInfo(SemaphoreInfo **semaphore_info)
-{
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v5.5.7");
- UnlockSemaphoreInfo(*semaphore_info);
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% M a g i c k I n c a r n a t e %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% MagickIncarnate() initializes the ImageMagick environment.
-%
-% Deprecated, replace with:
-%
-% MagickCoreGenesis(path,MagickFalse);
-%
-% The format of the MagickIncarnate function is:
-%
-% MagickIncarnate(const char *path)
-%
-% A description of each parameter follows:
-%
-% o path: the execution path of the current ImageMagick client.
-%
-*/
-
-MagickExport void MagickIncarnate(const char *path)
-{
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v5.5.1");
- MagickCoreGenesis(path,MagickFalse);
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% M a g i c k M o n i t o r %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% MagickMonitor() calls the monitor handler method with a text string that
-% describes the task and a measure of completion. The method returns
-% MagickTrue on success otherwise MagickFalse if an error is encountered, e.g.
-% if there was a user interrupt.
-%
-% The format of the MagickMonitor method is:
-%
-% MagickBooleanType MagickMonitor(const char *text,
-% const MagickOffsetType offset,const MagickSizeType span,
-% void *client_data)
-%
-% A description of each parameter follows:
-%
-% o offset: the position relative to the span parameter which represents
-% how much progress has been made toward completing a task.
-%
-% o span: the span relative to completing a task.
-%
-% o client_data: the client data.
-%
-*/
-MagickExport MagickBooleanType MagickMonitor(const char *text,
- const MagickOffsetType offset,const MagickSizeType span,
- void *magick_unused(client_data))
-{
- ExceptionInfo
- *exception;
-
- MagickBooleanType
- status;
-
- assert(text != (const char *) NULL);
- (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",text);
- ProcessPendingEvents(text);
- status=MagickTrue;
- exception=AcquireExceptionInfo();
- if (monitor_handler != (MonitorHandler) NULL)
- status=(*monitor_handler)(text,offset,span,exception);
- exception=DestroyExceptionInfo(exception);
- return(status);
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% M a p I m a g e %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% MapImage() replaces the colors of an image with the closest color from a
-% reference image.
-%
-% Deprecated, replace with:
-%
-% QuantizeInfo quantize_info;
-% GetQuantizeInfo(&quantize_info);
-% quantize_info.dither=dither;
-% RemapImage(&quantize_info,image,map_image);
-%
-% The format of the MapImage method is:
-%
-% MagickBooleanType MapImage(Image *image,const Image *map_image,
-% const MagickBooleanType dither)
-%
-% A description of each parameter follows:
-%
-% o image: Specifies a pointer to an Image structure.
-%
-% o map_image: the image. Reduce image to a set of colors represented by
-% this image.
-%
-% o dither: Set this integer value to something other than zero to
-% dither the mapped image.
-%
-*/
-MagickExport MagickBooleanType MapImage(Image *image,const Image *map_image,
- const MagickBooleanType dither)
-{
- QuantizeInfo
- quantize_info;
-
- /*
- Initialize color cube.
- */
- assert(image != (Image *) NULL);
- assert(image->signature == MagickSignature);
- if (image->debug != MagickFalse)
- (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
- assert(map_image != (Image *) NULL);
- assert(map_image->signature == MagickSignature);
- GetQuantizeInfo(&quantize_info);
- quantize_info.dither=dither;
- return(RemapImage(&quantize_info,image,map_image));
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% M a p I m a g e s %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% MapImages() replaces the colors of a sequence of images with the closest
-% color from a reference image.
-%
-% Deprecated, replace with:
-%
-% QuantizeInfo quantize_info;
-% GetQuantizeInfo(&quantize_info);
-% quantize_info.dither=dither;
-% RemapImages(&quantize_info,images,map_image);
-%
-% The format of the MapImage method is:
-%
-% MagickBooleanType MapImages(Image *images,Image *map_image,
-% const MagickBooleanType dither)
-%
-% A description of each parameter follows:
-%
-% o image: Specifies a pointer to a set of Image structures.
-%
-% o map_image: the image. Reduce image to a set of colors represented by
-% this image.
-%
-% o dither: Set this integer value to something other than zero to
-% dither the quantized image.
-%
-*/
-MagickExport MagickBooleanType MapImages(Image *images,const Image *map_image,
- const MagickBooleanType dither)
-{
- QuantizeInfo
- quantize_info;
-
- assert(images != (Image *) NULL);
- assert(images->signature == MagickSignature);
- if (images->debug != MagickFalse)
- (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",images->filename);
- GetQuantizeInfo(&quantize_info);
- quantize_info.dither=dither;
- return(RemapImages(&quantize_info,images,map_image));
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% M a t t e F l o o d f i l l I m a g e %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% MatteFloodfill() changes the transparency value of any pixel that matches
-% target and is an immediate neighbor. If the method FillToBorderMethod
-% is specified, the transparency value is changed for any neighbor pixel
-% that does not match the bordercolor member of image.
-%
-% By default target must match a particular pixel transparency exactly.
-% However, in many cases two transparency values may differ by a
-% small amount. The fuzz member of image defines how much tolerance is
-% acceptable to consider two transparency values as the same. For example,
-% set fuzz to 10 and the opacity values of 100 and 102 respectively are
-% now interpreted as the same value for the purposes of the floodfill.
-%
-% The format of the MatteFloodfillImage method is:
-%
-% MagickBooleanType MatteFloodfillImage(Image *image,
-% const PixelPacket target,const Quantum opacity,const ssize_t x_offset,
-% const ssize_t y_offset,const PaintMethod method)
-%
-% A description of each parameter follows:
-%
-% o image: the image.
-%
-% o target: the RGB value of the target color.
-%
-% o opacity: the level of transparency: 0 is fully opaque and QuantumRange is
-% fully transparent.
-%
-% o x,y: the starting location of the operation.
-%
-% o method: Choose either FloodfillMethod or FillToBorderMethod.
-%
-*/
-MagickExport MagickBooleanType MatteFloodfillImage(Image *image,
- const PixelPacket target,const Quantum opacity,const ssize_t x_offset,
- const ssize_t y_offset,const PaintMethod method)
-{
- Image
- *floodplane_image;
-
- MagickBooleanType
- skip;
-
- register SegmentInfo
- *s;
-
- SegmentInfo
- *segment_stack;
-
- ssize_t
- offset,
- start,
- x,
- x1,
- x2,
- y;
-
- /*
- Check boundary conditions.
- */
- assert(image != (Image *) NULL);
- assert(image->signature == MagickSignature);
- if (image->debug != MagickFalse)
- (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
- if ((x_offset < 0) || (x_offset >= (ssize_t) image->columns))
- return(MagickFalse);
- if ((y_offset < 0) || (y_offset >= (ssize_t) image->rows))
- return(MagickFalse);
- if (SetImageStorageClass(image,DirectClass) == MagickFalse)
- return(MagickFalse);
- if (image->matte == MagickFalse)
- (void) SetImageAlphaChannel(image,OpaqueAlphaChannel);
- floodplane_image=CloneImage(image,image->columns,image->rows,MagickTrue,
- &image->exception);
- if (floodplane_image == (Image *) NULL)
- return(MagickFalse);
- (void) SetImageAlphaChannel(floodplane_image,OpaqueAlphaChannel);
- /*
- Set floodfill color.
- */
- segment_stack=(SegmentInfo *) AcquireQuantumMemory(MaxStacksize,
- sizeof(*segment_stack));
- if (segment_stack == (SegmentInfo *) NULL)
- {
- floodplane_image=DestroyImage(floodplane_image);
- ThrowBinaryException(ResourceLimitError,"MemoryAllocationFailed",
- image->filename);
- }
- /*
- Push initial segment on stack.
- */
- x=x_offset;
- y=y_offset;
- start=0;
- s=segment_stack;
- PushSegmentStack(y,x,x,1);
- PushSegmentStack(y+1,x,x,-1);
- while (s > segment_stack)
- {
- register const PixelPacket
- *restrict p;
-
- register ssize_t
- x;
-
- register PixelPacket
- *restrict q;
-
- /*
- Pop segment off stack.
- */
- s--;
- x1=(ssize_t) s->x1;
- x2=(ssize_t) s->x2;
- offset=(ssize_t) s->y2;
- y=(ssize_t) s->y1+offset;
- /*
- Recolor neighboring pixels.
- */
- p=GetVirtualPixels(image,0,y,(size_t) (x1+1),1,&image->exception);
- q=GetAuthenticPixels(floodplane_image,0,y,(size_t) (x1+1),1,
- &image->exception);
- if ((p == (const PixelPacket *) NULL) || (q == (PixelPacket *) NULL))
- break;
- p+=x1;
- q+=x1;
- for (x=x1; x >= 0; x--)
- {
- if (q->opacity == (Quantum) TransparentOpacity)
- break;
- if (method == FloodfillMethod)
- {
- if (IsColorSimilar(image,p,&target) == MagickFalse)
- break;
- }
- else
- if (IsColorSimilar(image,p,&target) != MagickFalse)
- break;
- q->opacity=(Quantum) TransparentOpacity;
- q--;
- p--;
- }
- if (SyncAuthenticPixels(floodplane_image,&image->exception) == MagickFalse)
- break;
- skip=x >= x1 ? MagickTrue : MagickFalse;
- if (skip == MagickFalse)
- {
- start=x+1;
- if (start < x1)
- PushSegmentStack(y,start,x1-1,-offset);
- x=x1+1;
- }
- do
- {
- if (skip == MagickFalse)
- {
- if (x < (ssize_t) image->columns)
- {
- p=GetVirtualPixels(image,x,y,image->columns-x,1,
- &image->exception);
- q=GetAuthenticPixels(floodplane_image,x,y,image->columns-x,1,
- &image->exception);
- if ((p == (const PixelPacket *) NULL) ||
- (q == (PixelPacket *) NULL))
- break;
- for ( ; x < (ssize_t) image->columns; x++)
- {
- if (q->opacity == (Quantum) TransparentOpacity)
- break;
- if (method == FloodfillMethod)
- {
- if (IsColorSimilar(image,p,&target) == MagickFalse)
- break;
- }
- else
- if (IsColorSimilar(image,p,&target) != MagickFalse)
- break;
- q->opacity=(Quantum) TransparentOpacity;
- q++;
- p++;
- }
- if (SyncAuthenticPixels(floodplane_image,&image->exception) == MagickFalse)
- break;
- }
- PushSegmentStack(y,start,x-1,offset);
- if (x > (x2+1))
- PushSegmentStack(y,x2+1,x-1,-offset);
- }
- skip=MagickFalse;
- x++;
- if (x <= x2)
- {
- p=GetVirtualPixels(image,x,y,(size_t) (x2-x+1),1,
- &image->exception);
- q=GetAuthenticPixels(floodplane_image,x,y,(size_t) (x2-x+1),1,
- &image->exception);
- if ((p == (const PixelPacket *) NULL) || (q == (PixelPacket *) NULL))
- break;
- for ( ; x <= x2; x++)
- {
- if (q->opacity == (Quantum) TransparentOpacity)
- break;
- if (method == FloodfillMethod)
- {
- if (IsColorSimilar(image,p,&target) != MagickFalse)
- break;
- }
- else
- if (IsColorSimilar(image,p,&target) == MagickFalse)
- break;
- p++;
- q++;
- }
- }
- start=x;
- } while (x <= x2);
- }
- for (y=0; y < (ssize_t) image->rows; y++)
- {
- register const PixelPacket
- *restrict p;
-
- register ssize_t
- x;
-
- register PixelPacket
- *restrict q;
-
- /*
- Tile fill color onto floodplane.
- */
- p=GetVirtualPixels(floodplane_image,0,y,image->columns,1,
- &image->exception);
- q=GetAuthenticPixels(image,0,y,image->columns,1,&image->exception);
- if ((p == (const PixelPacket *) NULL) || (q == (PixelPacket *) NULL))
- break;
- for (x=0; x < (ssize_t) image->columns; x++)
- {
- if (GetOpacityPixelComponent(p) != OpaqueOpacity)
- q->opacity=opacity;
- p++;
- q++;
- }
- if (SyncAuthenticPixels(image,&image->exception) == MagickFalse)
- break;
- }
- segment_stack=(SegmentInfo *) RelinquishMagickMemory(segment_stack);
- floodplane_image=DestroyImage(floodplane_image);
- return(y == (ssize_t) image->rows ? MagickTrue : MagickFalse);
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% M a x i m u m I m a g e s %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% MaximumImages() returns the maximum intensity of an image sequence.
-%
-% Deprecated, replace with:
-%
-% EvaluateImages(images,MinEvaluateOperator,exception);
-%
-% The format of the MaxImages method is:
-%
-% Image *MaximumImages(Image *images,ExceptionInfo *exception)
-%
-% A description of each parameter follows:
-%
-% o images: the image sequence.
-%
-% o exception: return any errors or warnings in this structure.
-%
-*/
-MagickExport Image *MaximumImages(const Image *images,ExceptionInfo *exception)
-{
- return(EvaluateImages(images,MinEvaluateOperator,exception));
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% M i n i m u m I m a g e s %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% MinimumImages() returns the minimum intensity of an image sequence.
-%
-% Deprecated, replace with:
-%
-% EvaluateImages(images,MinEvaluateOperator,exception);
-%
-% The format of the MinimumImages method is:
-%
-% Image *MinimumImages(Image *images,ExceptionInfo *exception)
-%
-% A description of each parameter follows:
-%
-% o images: the image sequence.
-%
-% o exception: return any errors or warnings in this structure.
-%
-*/
-MagickExport Image *MinimumImages(const Image *images,ExceptionInfo *exception)
-{
- return(EvaluateImages(images,MinEvaluateOperator,exception));
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% M e d i a n F i l t e r I m a g e %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% MedianFilterImage() applies a digital filter that improves the quality
-% of a noisy image. Each pixel is replaced by the median in a set of
-% neighboring pixels as defined by radius.
-%
-% The algorithm was contributed by Mike Edmonds and implements an insertion
-% sort for selecting median color-channel values. For more on this algorithm
-% see "Skip Lists: A probabilistic Alternative to Balanced Trees" by William
-% Pugh in the June 1990 of Communications of the ACM.
-%
-% The format of the MedianFilterImage method is:
-%
-% Image *MedianFilterImage(const Image *image,const double radius,
-% ExceptionInfo *exception)
-%
-% A description of each parameter follows:
-%
-% o image: the image.
-%
-% o radius: the radius of the pixel neighborhood.
-%
-% o exception: return any errors or warnings in this structure.
-%
-*/
-MagickExport Image *MedianFilterImage(const Image *image,const double radius,
- ExceptionInfo *exception)
-{
- Image
- *median_image;
-
- median_image=StatisticImage(image,MedianStatistic,(size_t) radius,(size_t)
- radius,exception);
- return(median_image);
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% M o d e I m a g e %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% ModeImage() makes each pixel the 'predominate color' of the neighborhood
-% of the specified radius.
-%
-% The format of the ModeImage method is:
-%
-% Image *ModeImage(const Image *image,const double radius,
-% ExceptionInfo *exception)
-%
-% A description of each parameter follows:
-%
-% o image: the image.
-%
-% o radius: the radius of the pixel neighborhood.
-%
-% o exception: return any errors or warnings in this structure.
-%
-*/
-MagickExport Image *ModeImage(const Image *image,const double radius,
- ExceptionInfo *exception)
-{
- Image
- *mode_image;
-
- mode_image=StatisticImage(image,ModeStatistic,(size_t) radius,(size_t) radius,
- exception);
- return(mode_image);
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% M o s a i c I m a g e s %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% MosaicImages() Obsolete Function: Use MergeImageLayers() instead.
-%
-% Deprecated, replace with:
-%
-% MergeImageLayers(image,MosaicLayer,exception);
-%
-% The format of the MosaicImage method is:
-%
-% Image *MosaicImages(const Image *image,ExceptionInfo *exception)
-%
-% A description of each parameter follows:
-%
-% o image: the image list to be composited together
-%
-% o exception: return any errors or warnings in this structure.
-%
-*/
-MagickExport Image *MosaicImages(Image *image,ExceptionInfo *exception)
-{
- return(MergeImageLayers(image,MosaicLayer,exception));
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% O p a q u e I m a g e %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% OpaqueImage() changes any pixel that matches color with the color
-% defined by fill.
-%
-% By default color must match a particular pixel color exactly. However,
-% in many cases two colors may differ by a small amount. Fuzz defines
-% how much tolerance is acceptable to consider two colors as the same.
-% For example, set fuzz to 10 and the color red at intensities of 100 and
-% 102 respectively are now interpreted as the same color.
-%
-% The format of the OpaqueImage method is:
-%
-% MagickBooleanType OpaqueImage(Image *image,
-% const PixelPacket *target,const PixelPacket fill)
-%
-% A description of each parameter follows:
-%
-% o image: the image.
-%
-% o target: the RGB value of the target color.
-%
-% o fill: the replacement color.
-%
-*/
-MagickExport MagickBooleanType OpaqueImage(Image *image,
- const PixelPacket target,const PixelPacket fill)
-{
-#define OpaqueImageTag "Opaque/Image"
-
- MagickBooleanType
- proceed;
-
- register ssize_t
- i;
-
- ssize_t
- y;
-
- /*
- Make image color opaque.
- */
- assert(image != (Image *) NULL);
- assert(image->signature == MagickSignature);
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v6.1.0");
- if (image->debug != MagickFalse)
- (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
- switch (image->storage_class)
- {
- case DirectClass:
- default:
- {
- /*
- Make DirectClass image opaque.
- */
- for (y=0; y < (ssize_t) image->rows; y++)
- {
- register ssize_t
- x;
-
- register PixelPacket
- *restrict q;
-
- q=GetAuthenticPixels(image,0,y,image->columns,1,&image->exception);
- if (q == (PixelPacket *) NULL)
- break;
- for (x=0; x < (ssize_t) image->columns; x++)
- {
- if (IsColorSimilar(image,q,&target) != MagickFalse)
- *q=fill;
- q++;
- }
- if (SyncAuthenticPixels(image,&image->exception) == MagickFalse)
- break;
- proceed=SetImageProgress(image,OpaqueImageTag,(MagickOffsetType) y,
- image->rows);
- if (proceed == MagickFalse)
- break;
- }
- break;
- }
- case PseudoClass:
- {
- /*
- Make PseudoClass image opaque.
- */
- for (i=0; i < (ssize_t) image->colors; i++)
- {
- if (IsColorSimilar(image,&image->colormap[i],&target) != MagickFalse)
- image->colormap[i]=fill;
- }
- if (fill.opacity != OpaqueOpacity)
- {
- for (y=0; y < (ssize_t) image->rows; y++)
- {
- register ssize_t
- x;
-
- register PixelPacket
- *restrict q;
-
- q=GetAuthenticPixels(image,0,y,image->columns,1,&image->exception);
- if (q == (PixelPacket *) NULL)
- break;
- for (x=0; x < (ssize_t) image->columns; x++)
- {
- if (IsColorSimilar(image,q,&target) != MagickFalse)
- q->opacity=fill.opacity;
- q++;
- }
- if (SyncAuthenticPixels(image,&image->exception) == MagickFalse)
- break;
- }
- }
- (void) SyncImage(image);
- break;
- }
- }
- if (fill.opacity != OpaqueOpacity)
- image->matte=MagickTrue;
- return(MagickTrue);
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% O p e n C a c h e V i e w %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% OpenCacheView() opens a view into the pixel cache, using the
-% VirtualPixelMethod that is defined within the given image itself.
-%
-% Deprecated, replace with:
-%
-% AcquireCacheView(image);
-%
-% The format of the OpenCacheView method is:
-%
-% CacheView *OpenCacheView(const Image *image)
-%
-% A description of each parameter follows:
-%
-% o image: the image.
-%
-*/
-MagickExport CacheView *OpenCacheView(const Image *image)
-{
- return(AcquireCacheView(image));
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% P a i n t F l o o d f i l l I m a g e %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% PaintFloodfill() changes the color value of any pixel that matches
-% target and is an immediate neighbor. If the method FillToBorderMethod is
-% specified, the color value is changed for any neighbor pixel that does not
-% match the bordercolor member of image.
-%
-% By default target must match a particular pixel color exactly.
-% However, in many cases two colors may differ by a small amount. The
-% fuzz member of image defines how much tolerance is acceptable to
-% consider two colors as the same. For example, set fuzz to 10 and the
-% color red at intensities of 100 and 102 respectively are now
-% interpreted as the same color for the purposes of the floodfill.
-%
-% Deprecated, replace with:
-%
-% FloodfillPaintImage(image,channel,draw_info,target,x,y,
-% method == FloodfillMethod ? MagickFalse : MagickTrue);
-%
-% The format of the PaintFloodfillImage method is:
-%
-% MagickBooleanType PaintFloodfillImage(Image *image,
-% const ChannelType channel,const MagickPixelPacket target,const ssize_t x,
-% const ssize_t y,const DrawInfo *draw_info,const PaintMethod method)
-%
-% A description of each parameter follows:
-%
-% o image: the image.
-%
-% o channel: the channel(s).
-%
-% o target: the RGB value of the target color.
-%
-% o x,y: the starting location of the operation.
-%
-% o draw_info: the draw info.
-%
-% o method: Choose either FloodfillMethod or FillToBorderMethod.
-%
-*/
-MagickExport MagickBooleanType PaintFloodfillImage(Image *image,
- const ChannelType channel,const MagickPixelPacket *target,const ssize_t x,
- const ssize_t y,const DrawInfo *draw_info,const PaintMethod method)
-{
- MagickBooleanType
- status;
-
- status=FloodfillPaintImage(image,channel,draw_info,target,x,y,
- method == FloodfillMethod ? MagickFalse : MagickTrue);
- return(status);
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% P a i n t O p a q u e I m a g e %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% PaintOpaqueImage() changes any pixel that matches color with the color
-% defined by fill.
-%
-% By default color must match a particular pixel color exactly. However,
-% in many cases two colors may differ by a small amount. Fuzz defines
-% how much tolerance is acceptable to consider two colors as the same.
-% For example, set fuzz to 10 and the color red at intensities of 100 and
-% 102 respectively are now interpreted as the same color.
-%
-% Deprecated, replace with:
-%
-% OpaquePaintImageChannel(image,DefaultChannels,target,fill,MagickFalse);
-% OpaquePaintImageChannel(image,channel,target,fill,MagickFalse);
-%
-% The format of the PaintOpaqueImage method is:
-%
-% MagickBooleanType PaintOpaqueImage(Image *image,
-% const PixelPacket *target,const PixelPacket *fill)
-% MagickBooleanType PaintOpaqueImageChannel(Image *image,
-% const ChannelType channel,const PixelPacket *target,
-% const PixelPacket *fill)
-%
-% A description of each parameter follows:
-%
-% o image: the image.
-%
-% o channel: the channel(s).
-%
-% o target: the RGB value of the target color.
-%
-% o fill: the replacement color.
-%
-*/
-
-MagickExport MagickBooleanType PaintOpaqueImage(Image *image,
- const MagickPixelPacket *target,const MagickPixelPacket *fill)
-{
- MagickBooleanType
- status;
-
- status=OpaquePaintImageChannel(image,DefaultChannels,target,fill,MagickFalse);
- return(status);
-}
-
-MagickExport MagickBooleanType PaintOpaqueImageChannel(Image *image,
- const ChannelType channel,const MagickPixelPacket *target,
- const MagickPixelPacket *fill)
-{
- return(OpaquePaintImageChannel(image,channel,target,fill,MagickFalse));
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% P a i n t T r a n s p a r e n t I m a g e %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% PaintTransparentImage() changes the opacity value associated with any pixel
-% that matches color to the value defined by opacity.
-%
-% By default color must match a particular pixel color exactly. However,
-% in many cases two colors may differ by a small amount. Fuzz defines
-% how much tolerance is acceptable to consider two colors as the same.
-% For example, set fuzz to 10 and the color red at intensities of 100 and
-% 102 respectively are now interpreted as the same color.
-%
-% Deprecated, replace with:
-%
-% TransparentPaintImage(image,target,opacity,MagickFalse);
-%
-% The format of the PaintTransparentImage method is:
-%
-% MagickBooleanType PaintTransparentImage(Image *image,
-% const MagickPixelPacket *target,const Quantum opacity)
-%
-% A description of each parameter follows:
-%
-% o image: the image.
-%
-% o target: the RGB value of the target color.
-%
-% o opacity: the replacement opacity value.
-%
-*/
-MagickExport MagickBooleanType PaintTransparentImage(Image *image,
- const MagickPixelPacket *target,const Quantum opacity)
-{
- return(TransparentPaintImage(image,target,opacity,MagickFalse));
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-+ P a r s e I m a g e G e o m e t r y %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% ParseImageGeometry() is similar to GetGeometry() except the returned
-% geometry is modified as determined by the meta characters: %, !, <,
-% and >.
-%
-% Deprecated, replace with:
-%
-% ParseMetaGeometry(geometry,x,y,width,height);
-%
-% The format of the ParseImageGeometry method is:
-%
-% int ParseImageGeometry(char *geometry,ssize_t *x,ssize_t *y,
-% size_t *width,size_t *height)
-%
-% A description of each parameter follows:
-%
-% o flags: Method ParseImageGeometry returns a bitmask that indicates
-% which of the four values were located in the geometry string.
-%
-% o image_geometry: Specifies a character string representing the geometry
-% specification.
-%
-% o x,y: A pointer to an integer. The x and y offset as determined by
-% the geometry specification is returned here.
-%
-% o width,height: A pointer to an unsigned integer. The width and height
-% as determined by the geometry specification is returned here.
-%
-*/
-MagickExport int ParseImageGeometry(const char *geometry,ssize_t *x,ssize_t *y,
- size_t *width,size_t *height)
-{
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v5.5.1");
- return((int) ParseMetaGeometry(geometry,x,y,width,height));
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% P a r s e S i z e G e o m e t r y %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% ParseSizeGeometry() returns a region as defined by the geometry string with
-% respect to the image dimensions and aspect ratio.
-%
-% Deprecated, replace with:
-%
-% ParseMetaGeometry(geometry,®ion_info->x,®ion_info->y,
-% ®ion_info->width,®ion_info->height);
-%
-% The format of the ParseSizeGeometry method is:
-%
-% MagickStatusType ParseSizeGeometry(const Image *image,
-% const char *geometry,RectangeInfo *region_info)
-%
-% A description of each parameter follows:
-%
-% o geometry: The geometry (e.g. 100x100+10+10).
-%
-% o region_info: the region as defined by the geometry string.
-%
-*/
-MagickExport MagickStatusType ParseSizeGeometry(const Image *image,
- const char *geometry,RectangleInfo *region_info)
-{
- MagickStatusType
- flags;
-
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v6.4.7");
- SetGeometry(image,region_info);
- flags=ParseMetaGeometry(geometry,®ion_info->x,®ion_info->y,
- ®ion_info->width,®ion_info->height);
- return(flags);
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% P o p I m a g e L i s t %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% PopImageList() removes the last image in the list.
-%
-% Deprecated, replace with:
-%
-% RemoveLastImageFromList(images);
-%
-% The format of the PopImageList method is:
-%
-% Image *PopImageList(Image **images)
-%
-% A description of each parameter follows:
-%
-% o images: the image list.
-%
-*/
-MagickExport Image *PopImageList(Image **images)
-{
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v5.5.2");
- return(RemoveLastImageFromList(images));
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% P o p I m a g e P i x e l s %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% PopImagePixels() transfers one or more pixel components from the image pixel
-% cache to a user supplied buffer. The pixels are returned in network byte
-% order. MagickTrue is returned if the pixels are successfully transferred,
-% otherwise MagickFalse.
-%
-% The format of the PopImagePixels method is:
-%
-% size_t PopImagePixels(Image *,const QuantumType quantum,
-% unsigned char *destination)
-%
-% A description of each parameter follows:
-%
-% o image: the image.
-%
-% o quantum: Declare which pixel components to transfer (RGB, RGBA, etc).
-%
-% o destination: The components are transferred to this buffer.
-%
-*/
-MagickExport size_t PopImagePixels(Image *image,const QuantumType quantum,
- unsigned char *destination)
-{
- QuantumInfo
- *quantum_info;
-
- size_t
- length;
-
- quantum_info=AcquireQuantumInfo((const ImageInfo *) NULL,image);
- if (quantum_info == (QuantumInfo *) NULL)
- return(0);
- length=ExportQuantumPixels(image,(const CacheView *) NULL,quantum_info,
- quantum,destination,&image->exception);
- quantum_info=DestroyQuantumInfo(quantum_info);
- return(length);
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% P o s t s c r i p t G e o m e t r y %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% PostscriptGeometry() replaces any page mneumonic with the equivalent size in
-% picas.
-%
-% Deprecated, replace with:
-%
-% GetPageGeometry(page);
-%
-% The format of the PostscriptGeometry method is:
-%
-% char *PostscriptGeometry(const char *page)
-%
-% A description of each parameter follows.
-%
-% o page: Specifies a pointer to an array of characters.
-% The string is either a Postscript page name (e.g. A4) or a postscript
-% page geometry (e.g. 612x792+36+36).
-%
-*/
-MagickExport char *PostscriptGeometry(const char *page)
-{
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v5.5.1");
- return(GetPageGeometry(page));
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% P u s h I m a g e L i s t %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% PushImageList() adds an image to the end of the list.
-%
-% Deprecated, replace with:
-%
-% AppendImageToList(images,CloneImageList(image,exception));
-%
-% The format of the PushImageList method is:
-%
-% unsigned int PushImageList(Image *images,const Image *image,
-% ExceptionInfo *exception)
-%
-% A description of each parameter follows:
-%
-% o images: the image list.
-%
-% o image: the image.
-%
-% o exception: return any errors or warnings in this structure.
-%
-*/
-MagickExport unsigned int PushImageList(Image **images,const Image *image,
- ExceptionInfo *exception)
-{
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v5.5.2");
- AppendImageToList(images,CloneImageList(image,exception));
- return(MagickTrue);
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% P u s h I m a g e P i x e l s %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% PushImagePixels() transfers one or more pixel components from a user
-% supplied buffer into the image pixel cache of an image. The pixels are
-% expected in network byte order. It returns MagickTrue if the pixels are
-% successfully transferred, otherwise MagickFalse.
-%
-% The format of the PushImagePixels method is:
-%
-% size_t PushImagePixels(Image *image,const QuantumType quantum,
-% const unsigned char *source)
-%
-% A description of each parameter follows:
-%
-% o image: the image.
-%
-% o quantum: Declare which pixel components to transfer (red, green, blue,
-% opacity, RGB, or RGBA).
-%
-% o source: The pixel components are transferred from this buffer.
-%
-*/
-MagickExport size_t PushImagePixels(Image *image,const QuantumType quantum,
- const unsigned char *source)
-{
- QuantumInfo
- *quantum_info;
-
- size_t
- length;
-
- quantum_info=AcquireQuantumInfo((const ImageInfo *) NULL,image);
- if (quantum_info == (QuantumInfo *) NULL)
- return(0);
- length=ImportQuantumPixels(image,(CacheView *) NULL,quantum_info,quantum,
- source,&image->exception);
- quantum_info=DestroyQuantumInfo(quantum_info);
- return(length);
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% Q u a n t i z a t i o n E r r o r %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% QuantizationError() measures the difference between the original and
-% quantized images. This difference is the total quantization error. The
-% error is computed by summing over all pixels in an image the distance
-% squared in RGB space between each reference pixel value and its quantized
-% value. These values are computed:
-%
-% o mean_error_per_pixel: This value is the mean error for any single
-% pixel in the image.
-%
-% o normalized_mean_square_error: This value is the normalized mean
-% quantization error for any single pixel in the image. This distance
-% measure is normalized to a range between 0 and 1. It is independent
-% of the range of red, green, and blue values in the image.
-%
-% o normalized_maximum_square_error: Thsi value is the normalized
-% maximum quantization error for any single pixel in the image. This
-% distance measure is normalized to a range between 0 and 1. It is
-% independent of the range of red, green, and blue values in your image.
-%
-% Deprecated, replace with:
-%
-% GetImageQuantizeError(image);
-%
-% The format of the QuantizationError method is:
-%
-% unsigned int QuantizationError(Image *image)
-%
-% A description of each parameter follows.
-%
-% o image: Specifies a pointer to an Image structure; returned from
-% ReadImage.
-%
-*/
-MagickExport unsigned int QuantizationError(Image *image)
-{
- if (image->debug != MagickFalse)
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v5.5.3");
- return(GetImageQuantizeError(image));
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% R a n d o m C h a n n e l T h r e s h o l d I m a g e %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% RandomChannelThresholdImage() changes the value of individual pixels based
-% on the intensity of each pixel compared to a random threshold. The result
-% is a low-contrast, two color image.
-%
-% The format of the RandomChannelThresholdImage method is:
-%
-% unsigned int RandomChannelThresholdImage(Image *image,
-% const char *channel, const char *thresholds,
-% ExceptionInfo *exception)
-%
-% A description of each parameter follows:
-%
-% o image: the image.
-%
-% o channel: the channel or channels to be thresholded.
-%
-% o thresholds: a geometry string containing LOWxHIGH thresholds.
-% If the string contains 2x2, 3x3, or 4x4, then an ordered
-% dither of order 2, 3, or 4 will be performed instead.
-%
-% o exception: return any errors or warnings in this structure.
-%
-*/
-MagickExport unsigned int RandomChannelThresholdImage(Image *image,const char
- *channel,const char *thresholds,ExceptionInfo *exception)
-{
-#define RandomChannelThresholdImageText " RandomChannelThreshold image... "
-
- double
- lower_threshold,
- upper_threshold;
-
- RandomInfo
- *random_info;
-
- ssize_t
- count,
- y;
-
- static MagickRealType
- o2[4]={0.2f, 0.6f, 0.8f, 0.4f},
- o3[9]={0.1f, 0.6f, 0.3f, 0.7f, 0.5f, 0.8f, 0.4f, 0.9f, 0.2f},
- o4[16]={0.1f, 0.7f, 1.1f, 0.3f, 1.0f, 0.5f, 1.5f, 0.8f, 1.4f, 1.6f, 0.6f,
- 1.2f, 0.4f, 0.9f, 1.3f, 0.2f},
- threshold=128;
-
- size_t
- order;
-
- /*
- Threshold image.
- */
- assert(image != (Image *) NULL);
- assert(image->signature == MagickSignature);
- if (image->debug != MagickFalse)
- (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
- assert(exception != (ExceptionInfo *) NULL);
- assert(exception->signature == MagickSignature);
- if (image->debug != MagickFalse)
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v5.5.7");
- if (thresholds == (const char *) NULL)
- return(MagickTrue);
- if (LocaleCompare(thresholds,"2x2") == 0)
- order=2;
- else
- if (LocaleCompare(thresholds,"3x3") == 0)
- order=3;
- else
- if (LocaleCompare(thresholds,"4x4") == 0)
- order=4;
- else
- {
- order=1;
- lower_threshold=0;
- upper_threshold=0;
- count=(ssize_t) sscanf(thresholds,"%lf[/x%%]%lf",&lower_threshold,
- &upper_threshold);
- if (strchr(thresholds,'%') != (char *) NULL)
- {
- upper_threshold*=(.01*QuantumRange);
- lower_threshold*=(.01*QuantumRange);
- }
- if (count == 1)
- upper_threshold=(MagickRealType) QuantumRange-lower_threshold;
- }
- if (image->debug != MagickFalse)
- (void) LogMagickEvent(TransformEvent,GetMagickModule(),
- " RandomChannelThresholdImage: channel type=%s",channel);
- if (image->debug != MagickFalse)
- (void) LogMagickEvent(TransformEvent,GetMagickModule(),
- " Thresholds: %s (%fx%f)",thresholds,lower_threshold,upper_threshold);
- if (LocaleCompare(channel,"all") == 0 ||
- LocaleCompare(channel,"intensity") == 0)
- if (AcquireImageColormap(image,2) == MagickFalse)
- ThrowBinaryException(ResourceLimitError,"MemoryAllocationFailed",
- image->filename);
- random_info=AcquireRandomInfo();
- for (y=0; y < (ssize_t) image->rows; y++)
- {
- register ssize_t
- x;
-
- register IndexPacket
- index,
- *restrict indexes;
-
- register PixelPacket
- *restrict q;
-
- q=GetAuthenticPixels(image,0,y,image->columns,1,exception);
- if (q == (PixelPacket *) NULL)
- break;
- if (LocaleCompare(channel,"all") == 0 ||
- LocaleCompare(channel,"intensity") == 0)
- {
- indexes=GetAuthenticIndexQueue(image);
- for (x=0; x < (ssize_t) image->columns; x++)
- {
- MagickRealType
- intensity;
-
- intensity=(MagickRealType) PixelIntensityToQuantum(q);
- if (order == 1)
- {
- if (intensity < lower_threshold)
- threshold=lower_threshold;
- else if (intensity > upper_threshold)
- threshold=upper_threshold;
- else
- threshold=(MagickRealType) (QuantumRange*
- GetPseudoRandomValue(random_info));
- }
- else if (order == 2)
- threshold=(MagickRealType) QuantumRange*o2[(x%2)+2*(y%2)];
- else if (order == 3)
- threshold=(MagickRealType) QuantumRange*o3[(x%3)+3*(y%3)];
- else if (order == 4)
- threshold=(MagickRealType) QuantumRange*o4[(x%4)+4*(y%4)];
- index=(IndexPacket) (intensity <= threshold ? 0 : 1);
- SetIndexPixelComponent(indexes+x,index);
- SetRedPixelComponent(q,image->colormap[(ssize_t) index].red);
- SetGreenPixelComponent(q,image->colormap[(ssize_t) index].green);
- SetBluePixelComponent(q,image->colormap[(ssize_t) index].blue);
- q++;
- }
- }
- if (LocaleCompare(channel,"opacity") == 0 ||
- LocaleCompare(channel,"all") == 0 ||
- LocaleCompare(channel,"matte") == 0)
- {
- if (image->matte != MagickFalse)
- for (x=0; x < (ssize_t) image->columns; x++)
- {
- if (order == 1)
- {
- if ((MagickRealType) q->opacity < lower_threshold)
- threshold=lower_threshold;
- else if ((MagickRealType) q->opacity > upper_threshold)
- threshold=upper_threshold;
- else
- threshold=(MagickRealType) (QuantumRange*
- GetPseudoRandomValue(random_info));
- }
- else if (order == 2)
- threshold=(MagickRealType) QuantumRange*o2[(x%2)+2*(y%2)];
- else if (order == 3)
- threshold=(MagickRealType) QuantumRange*o3[(x%3)+3*(y%3)];
- else if (order == 4)
- threshold=(MagickRealType) QuantumRange*o4[(x%4)+4*(y%4)]/1.7;
- SetOpacityPixelComponent(q,(MagickRealType) q->opacity <=
- threshold ? 0 : QuantumRange);
- q++;
- }
- }
- else
- {
- /* To Do: red, green, blue, cyan, magenta, yellow, black */
- if (LocaleCompare(channel,"intensity") != 0)
- ThrowBinaryException(OptionError,"UnrecognizedChannelType",
- image->filename);
- }
- if (SyncAuthenticPixels(image,exception) == MagickFalse)
- break;
- }
- random_info=DestroyRandomInfo(random_info);
- return(MagickTrue);
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% R e a c q u i r e M e m o r y %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% ReacquireMemory() changes the size of the memory and returns a pointer to
-% the (possibly moved) block. The contents will be unchanged up to the
-% lesser of the new and old sizes.
-%
-% The format of the ReacquireMemory method is:
-%
-% void ReacquireMemory(void **memory,const size_t size)
-%
-% A description of each parameter follows:
-%
-% o memory: A pointer to a memory allocation. On return the pointer
-% may change but the contents of the original allocation will not.
-%
-% o size: the new size of the allocated memory.
-%
-*/
-MagickExport void ReacquireMemory(void **memory,const size_t size)
-{
- void
- *allocation;
-
- assert(memory != (void **) NULL);
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v5.5.7");
- if (*memory == (void *) NULL)
- {
- *memory=AcquireMagickMemory(size);
- return;
- }
- allocation=realloc(*memory,size);
- if (allocation == (void *) NULL)
- *memory=RelinquishMagickMemory(*memory);
- *memory=allocation;
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% R e c o l o r I m a g e %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% RecolorImage() apply color transformation to an image. The method permits
-% saturation changes, hue rotation, luminance to alpha, and various other
-% effects. Although variable-sized transformation matrices can be used,
-% typically one uses a 5x5 matrix for an RGBA image and a 6x6 for CMYKA
-% (or RGBA with offsets). The matrix is similar to those used by Adobe Flash
-% except offsets are in column 6 rather than 5 (in support of CMYKA images)
-% and offsets are normalized (divide Flash offset by 255).
-%
-% The format of the RecolorImage method is:
-%
-% Image *RecolorImage(const Image *image,const size_t order,
-% const double *color_matrix,ExceptionInfo *exception)
-%
-% A description of each parameter follows:
-%
-% o image: the image.
-%
-% o order: the number of columns and rows in the recolor matrix.
-%
-% o color_matrix: An array of double representing the recolor matrix.
-%
-% o exception: return any errors or warnings in this structure.
-%
-*/
-MagickExport Image *RecolorImage(const Image *image,const size_t order,
- const double *color_matrix,ExceptionInfo *exception)
-{
- KernelInfo
- *kernel_info;
-
- Image
- *recolor_image;
-
- kernel_info=AcquireKernelInfo("1");
- if (kernel_info == (KernelInfo *) NULL)
- return((Image *) NULL);
- kernel_info->width=order;
- kernel_info->height=order;
- kernel_info->values=(double *) color_matrix;
- recolor_image=ColorMatrixImage(image,kernel_info,exception);
- kernel_info->values=(double *) NULL;
- kernel_info=DestroyKernelInfo(kernel_info);
- return(recolor_image);
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% R e d u c e N o i s e I m a g e %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% ReduceNoiseImage() smooths the contours of an image while still preserving
-% edge information. The algorithm works by replacing each pixel with its
-% neighbor closest in value. A neighbor is defined by radius. Use a radius
-% of 0 and ReduceNoise() selects a suitable radius for you.
-%
-% The format of the ReduceNoiseImage method is:
-%
-% Image *ReduceNoiseImage(const Image *image,const double radius,
-% ExceptionInfo *exception)
-%
-% A description of each parameter follows:
-%
-% o image: the image.
-%
-% o radius: the radius of the pixel neighborhood.
-%
-% o exception: return any errors or warnings in this structure.
-%
-*/
-MagickExport Image *ReduceNoiseImage(const Image *image,const double radius,
- ExceptionInfo *exception)
-{
- Image
- *reduce_image;
-
- reduce_image=StatisticImage(image,NonpeakStatistic,(size_t) radius,(size_t)
- radius,exception);
- return(reduce_image);
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% R e s e t I m a g e A t t r i b u t e I t e r a t o r %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% ResetImageAttributeIterator() resets the image attributes iterator. Use it
-% in conjunction with GetNextImageAttribute() to iterate over all the values
-% associated with an image.
-%
-% Deprecated, replace with:
-%
-% ResetImagePropertyIterator(image);
-%
-% The format of the ResetImageAttributeIterator method is:
-%
-% ResetImageAttributeIterator(const ImageInfo *image)
-%
-% A description of each parameter follows:
-%
-% o image: the image.
-%
-*/
-MagickExport void ResetImageAttributeIterator(const Image *image)
-{
- ResetImagePropertyIterator(image);
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% S e t C a c h e V i e w P i x e l s %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% SetCacheViewPixels() gets pixels from the in-memory or disk pixel cache as
-% defined by the geometry parameters. A pointer to the pixels is returned
-% if the pixels are transferred, otherwise a NULL is returned.
-%
-% Deprecated, replace with:
-%
-% QueueCacheViewAuthenticPixels(cache_view,x,y,columns,rows,
-% GetCacheViewException(cache_view));
-%
-% The format of the SetCacheViewPixels method is:
-%
-% PixelPacket *SetCacheViewPixels(CacheView *cache_view,const ssize_t x,
-% const ssize_t y,const size_t columns,const size_t rows)
-%
-% A description of each parameter follows:
-%
-% o cache_view: the cache view.
-%
-% o x,y,columns,rows: These values define the perimeter of a region of
-% pixels.
-%
-*/
-MagickExport PixelPacket *SetCacheViewPixels(CacheView *cache_view,const ssize_t x,
- const ssize_t y,const size_t columns,const size_t rows)
-{
- PixelPacket
- *pixels;
-
- pixels=QueueCacheViewAuthenticPixels(cache_view,x,y,columns,rows,
- GetCacheViewException(cache_view));
- return(pixels);
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-+ S e t C a c h e T h e s h o l d %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% SetCacheThreshold() sets the amount of free memory allocated for the pixel
-% cache. Once this threshold is exceeded, all subsequent pixels cache
-% operations are to/from disk.
-%
-% The format of the SetCacheThreshold() method is:
-%
-% void SetCacheThreshold(const size_t threshold)
-%
-% A description of each parameter follows:
-%
-% o threshold: the number of megabytes of memory available to the pixel
-% cache.
-%
-*/
-MagickExport void SetCacheThreshold(const size_t size)
-{
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v5.5.1");
- (void) SetMagickResourceLimit(MemoryResource,size*1024*1024);
- (void) SetMagickResourceLimit(MapResource,2*size*1024*1024);
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% S e t E x c e p t i o n I n f o %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% SetExceptionInfo() sets the exception severity.
-%
-% The format of the SetExceptionInfo method is:
-%
-% MagickBooleanType SetExceptionInfo(ExceptionInfo *exception,
-% ExceptionType severity)
-%
-% A description of each parameter follows:
-%
-% o exception: the exception info.
-%
-% o severity: the exception severity.
-%
-*/
-MagickExport MagickBooleanType SetExceptionInfo(ExceptionInfo *exception,
- ExceptionType severity)
-{
- assert(exception != (ExceptionInfo *) NULL);
- ClearMagickException(exception);
- exception->severity=severity;
- return(MagickTrue);
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% S e t I m a g e %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% SetImage() sets the red, green, and blue components of each pixel to
-% the image background color and the opacity component to the specified
-% level of transparency. The background color is defined by the
-% background_color member of the image.
-%
-% The format of the SetImage method is:
-%
-% void SetImage(Image *image,const Quantum opacity)
-%
-% A description of each parameter follows:
-%
-% o image: the image.
-%
-% o opacity: Set each pixel to this level of transparency.
-%
-*/
-MagickExport void SetImage(Image *image,const Quantum opacity)
-{
- PixelPacket
- background_color;
-
- ssize_t
- y;
-
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v6.2.0");
- assert(image != (Image *) NULL);
- if (image->debug != MagickFalse)
- (void) LogMagickEvent(TraceEvent,GetMagickModule(),"...");
- assert(image->signature == MagickSignature);
- background_color=image->background_color;
- if (opacity != OpaqueOpacity)
- background_color.opacity=opacity;
- if (background_color.opacity != OpaqueOpacity)
- {
- (void) SetImageStorageClass(image,DirectClass);
- image->matte=MagickTrue;
- }
- if ((image->storage_class == PseudoClass) ||
- (image->colorspace == CMYKColorspace))
- {
- /*
- Set colormapped or CMYK image.
- */
- for (y=0; y < (ssize_t) image->rows; y++)
- {
- register IndexPacket
- *restrict indexes;
-
- register ssize_t
- x;
-
- register PixelPacket
- *restrict q;
-
- q=QueueAuthenticPixels(image,0,y,image->columns,1,&image->exception);
- if (q == (PixelPacket *) NULL)
- break;
- for (x=0; x < (ssize_t) image->columns; x++)
- *q++=background_color;
- indexes=GetAuthenticIndexQueue(image);
- for (x=0; x < (ssize_t) image->columns; x++)
- SetIndexPixelComponent(indexes+x,0);
- if (SyncAuthenticPixels(image,&image->exception) == MagickFalse)
- break;
- }
- return;
- }
- /*
- Set DirectClass image.
- */
- for (y=0; y < (ssize_t) image->rows; y++)
- {
- register ssize_t
- x;
-
- register PixelPacket
- *restrict q;
-
- q=QueueAuthenticPixels(image,0,y,image->columns,1,&image->exception);
- if (q == (PixelPacket *) NULL)
- break;
- for (x=0; x < (ssize_t) image->columns; x++)
- *q++=background_color;
- if (SyncAuthenticPixels(image,&image->exception) == MagickFalse)
- break;
- }
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% S e t I m a g e A t t r i b u t e %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% SetImageAttribute() searches the list of image attributes and replaces the
-% attribute value. If it is not found in the list, the attribute name
-% and value is added to the list.
-%
-% Deprecated, replace with:
-%
-% SetImageProperty(image,key,value);
-%
-% The format of the SetImageAttribute method is:
-%
-% MagickBooleanType SetImageAttribute(Image *image,const char *key,
-% const char *value)
-%
-% A description of each parameter follows:
-%
-% o image: the image.
-%
-% o key: the key.
-%
-% o value: the value.
-%
-*/
-MagickExport MagickBooleanType SetImageAttribute(Image *image,const char *key,
- const char *value)
-{
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v6.3.1");
- return(SetImageProperty(image,key,value));
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% S e t I m a g e L i s t %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% SetImageList() inserts an image into the list at the specified position.
-%
-% The format of the SetImageList method is:
-%
-% unsigned int SetImageList(Image *images,const Image *image,
-% const ssize_t offset,ExceptionInfo *exception)
-%
-% A description of each parameter follows:
-%
-% o images: the image list.
-%
-% o image: the image.
-%
-% o offset: the position within the list.
-%
-% o exception: return any errors or warnings in this structure.
-%
-*/
-MagickExport unsigned int SetImageList(Image **images,const Image *image,
- const ssize_t offset,ExceptionInfo *exception)
-{
- Image
- *clone;
-
- register ssize_t
- i;
-
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v5.5.2");
- clone=CloneImageList(image,exception);
- while (GetPreviousImageInList(*images) != (Image *) NULL)
- (*images)=GetPreviousImageInList(*images);
- for (i=0; i < offset; i++)
- {
- if (GetNextImageInList(*images) == (Image *) NULL)
- return(MagickFalse);
- (*images)=GetNextImageInList(*images);
- }
- InsertImageInList(images,clone);
- return(MagickTrue);
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% S e t I m a g e P i x e l s %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% SetImagePixels() queues a mutable pixel region.
-% If the region is successfully intialized a pointer to a PixelPacket
-% array representing the region is returned, otherwise NULL is returned.
-% The returned pointer may point to a temporary working buffer for the
-% pixels or it may point to the final location of the pixels in memory.
-%
-% Write-only access means that any existing pixel values corresponding to
-% the region are ignored. This useful while the initial image is being
-% created from scratch, or if the existing pixel values are to be
-% completely replaced without need to refer to their pre-existing values.
-% The application is free to read and write the pixel buffer returned by
-% SetImagePixels() any way it pleases. SetImagePixels() does not initialize
-% the pixel array values. Initializing pixel array values is the
-% application's responsibility.
-%
-% Performance is maximized if the selected region is part of one row, or
-% one or more full rows, since then there is opportunity to access the
-% pixels in-place (without a copy) if the image is in RAM, or in a
-% memory-mapped file. The returned pointer should *never* be deallocated
-% by the user.
-%
-% Pixels accessed via the returned pointer represent a simple array of type
-% PixelPacket. If the image type is CMYK or the storage class is PseudoClass,
-% call GetAuthenticIndexQueue() after invoking GetAuthenticPixels() to obtain
-% the black color component or the colormap indexes (of type IndexPacket)
-% corresponding to the region. Once the PixelPacket (and/or IndexPacket)
-% array has been updated, the changes must be saved back to the underlying
-% image using SyncAuthenticPixels() or they may be lost.
-%
-% Deprecated, replace with:
-%
-% QueueAuthenticPixels(image,x,y,columns,rows,&image->exception);
-%
-% The format of the SetImagePixels() method is:
-%
-% PixelPacket *SetImagePixels(Image *image,const ssize_t x,const ssize_t y,
-% const size_t columns,const size_t rows)
-%
-% A description of each parameter follows:
-%
-% o pixels: SetImagePixels returns a pointer to the pixels if they are
-% transferred, otherwise a NULL is returned.
-%
-% o image: the image.
-%
-% o x,y,columns,rows: These values define the perimeter of a region of
-% pixels.
-%
-*/
-MagickExport PixelPacket *SetImagePixels(Image *image,const ssize_t x,const ssize_t y,
- const size_t columns,const size_t rows)
-{
- return(QueueAuthenticPixels(image,x,y,columns,rows,&image->exception));
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% S e t M a g i c k R e g i s t r y %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% SetMagickRegistry() sets a blob into the registry and returns a unique ID.
-% If an error occurs, -1 is returned.
-%
-% The format of the SetMagickRegistry method is:
-%
-% ssize_t SetMagickRegistry(const RegistryType type,const void *blob,
-% const size_t length,ExceptionInfo *exception)
-%
-% A description of each parameter follows:
-%
-% o type: the registry type.
-%
-% o blob: the address of a Binary Large OBject.
-%
-% o length: For a registry type of ImageRegistryType use sizeof(Image)
-% otherise the blob length in number of bytes.
-%
-% o exception: return any errors or warnings in this structure.
-%
-*/
-MagickExport ssize_t SetMagickRegistry(const RegistryType type,const void *blob,
- const size_t magick_unused(length),ExceptionInfo *exception)
-{
- char
- key[MaxTextExtent];
-
- MagickBooleanType
- status;
-
- static ssize_t
- id = 0;
-
- (void) FormatMagickString(key,MaxTextExtent,"%.20g\n",(double) id);
- status=SetImageRegistry(type,key,blob,exception);
- if (status == MagickFalse)
- return(-1);
- return(id++);
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% S e t M o n i t o r H a n d l e r %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% SetMonitorHandler() sets the monitor handler to the specified method
-% and returns the previous monitor handler.
-%
-% The format of the SetMonitorHandler method is:
-%
-% MonitorHandler SetMonitorHandler(MonitorHandler handler)
-%
-% A description of each parameter follows:
-%
-% o handler: Specifies a pointer to a method to handle monitors.
-%
-*/
-
-MagickExport MonitorHandler GetMonitorHandler(void)
-{
- return(monitor_handler);
-}
-
-MagickExport MonitorHandler SetMonitorHandler(MonitorHandler handler)
-{
- MonitorHandler
- previous_handler;
-
- previous_handler=monitor_handler;
- monitor_handler=handler;
- return(previous_handler);
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% S h i f t I m a g e L i s t %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% ShiftImageList() removes an image from the beginning of the list.
-%
-% Deprecated, replace with:
-%
-% RemoveFirstImageFromList(images);
-%
-% The format of the ShiftImageList method is:
-%
-% Image *ShiftImageList(Image **images)
-%
-% A description of each parameter follows:
-%
-% o images: the image list.
-%
-*/
-MagickExport Image *ShiftImageList(Image **images)
-{
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v5.5.2");
- return(RemoveFirstImageFromList(images));
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-+ S i z e B l o b %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% SizeBlob() returns the current length of the image file or blob.
-%
-% Deprecated, replace with:
-%
-% GetBlobSize(image);
-%
-% The format of the SizeBlob method is:
-%
-% off_t SizeBlob(Image *image)
-%
-% A description of each parameter follows:
-%
-% o size: Method SizeBlob returns the current length of the image file
-% or blob.
-%
-% o image: the image.
-%
-*/
-MagickExport MagickOffsetType SizeBlob(Image *image)
-{
- if (image->debug != MagickFalse)
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v5.4.3");
- return((MagickOffsetType) GetBlobSize(image));
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% S p l i c e I m a g e L i s t %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% SpliceImageList() removes the images designated by offset and length from
-% the list and replaces them with the specified list.
-%
-% The format of the SpliceImageList method is:
-%
-% Image *SpliceImageList(Image *images,const ssize_t offset,
-% const size_t length,const Image *splices,
-% ExceptionInfo *exception)
-%
-% A description of each parameter follows:
-%
-% o images: the image list.
-%
-% o offset: the position within the list.
-%
-% o length: the length of the image list to remove.
-%
-% o splice: Replace the removed image list with this list.
-%
-% o exception: return any errors or warnings in this structure.
-%
-*/
-MagickExport Image *SpliceImageList(Image *images,const ssize_t offset,
- const size_t length,const Image *splices,ExceptionInfo *exception)
-{
- Image
- *clone;
-
- register ssize_t
- i;
-
- if (images->debug != MagickFalse)
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v5.5.2");
- clone=CloneImageList(splices,exception);
- while (GetPreviousImageInList(images) != (Image *) NULL)
- images=GetPreviousImageInList(images);
- for (i=0; i < offset; i++)
- {
- if (GetNextImageInList(images) == (Image *) NULL)
- return((Image *) NULL);
- images=GetNextImageInList(images);
- }
- (void) SpliceImageIntoList(&images,length,clone);
- return(images);
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% S t r i p %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% Strip() strips any whitespace or quotes from the beginning and end of a
-% string of characters.
-%
-% The format of the Strip method is:
-%
-% void Strip(char *message)
-%
-% A description of each parameter follows:
-%
-% o message: Specifies an array of characters.
-%
-*/
-MagickExport void Strip(char *message)
-{
- register char
- *p,
- *q;
-
- assert(message != (char *) NULL);
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v5.5.7");
- if (*message == '\0')
- return;
- if (strlen(message) == 1)
- return;
- p=message;
- while (isspace((int) ((unsigned char) *p)) != 0)
- p++;
- if ((*p == '\'') || (*p == '"'))
- p++;
- q=message+strlen(message)-1;
- while ((isspace((int) ((unsigned char) *q)) != 0) && (q > p))
- q--;
- if (q > p)
- if ((*q == '\'') || (*q == '"'))
- q--;
- (void) CopyMagickMemory(message,p,(size_t) (q-p+1));
- message[q-p+1]='\0';
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% S y n c C a c h e V i e w %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% SyncCacheView() saves the cache view pixels to the in-memory or disk
-% cache. It returns MagickTrue if the pixel region is synced, otherwise
-% MagickFalse.
-%
-% Deprecated, replace with:
-%
-% SyncCacheViewAuthenticPixels(cache_view,GetCacheViewException(cache_view));
-%
-% The format of the SyncCacheView method is:
-%
-% MagickBooleanType SyncCacheView(CacheView *cache_view)
-%
-% A description of each parameter follows:
-%
-% o cache_view: the cache view.
-%
-*/
-MagickExport MagickBooleanType SyncCacheView(CacheView *cache_view)
-{
- MagickBooleanType
- status;
-
- status=SyncCacheViewAuthenticPixels(cache_view,
- GetCacheViewException(cache_view));
- return(status);
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% S y n c C a c h e V i e w P i x e l s %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% SyncCacheViewPixels() saves the cache view pixels to the in-memory
-% or disk cache. It returns MagickTrue if the pixel region is flushed,
-% otherwise MagickFalse.
-%
-% Deprecated, replace with:
-%
-% SyncCacheViewAuthenticPixels(cache_view,GetCacheViewException(cache_view));
-%
-% The format of the SyncCacheViewPixels method is:
-%
-% MagickBooleanType SyncCacheViewPixels(CacheView *cache_view)
-%
-% A description of each parameter follows:
-%
-% o cache_view: the cache view.
-%
-% o exception: return any errors or warnings in this structure.
-%
-*/
-MagickExport MagickBooleanType SyncCacheViewPixels(CacheView *cache_view)
-{
- MagickBooleanType
- status;
-
- status=SyncCacheViewAuthenticPixels(cache_view,
- GetCacheViewException(cache_view));
- return(status);
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% S y n c I m a g e P i x e l s %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% SyncImagePixels() saves the image pixels to the in-memory or disk cache.
-% The method returns MagickTrue if the pixel region is synced, otherwise
-% MagickFalse.
-%
-% Deprecated, replace with:
-%
-% SyncAuthenticPixels(image,&image->exception);
-%
-% The format of the SyncImagePixels() method is:
-%
-% MagickBooleanType SyncImagePixels(Image *image)
-%
-% A description of each parameter follows:
-%
-% o image: the image.
-%
-*/
-MagickExport MagickBooleanType SyncImagePixels(Image *image)
-{
- return(SyncAuthenticPixels(image,&image->exception));
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% T e m p o r a r y F i l e n a m e %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% TemporaryFilename() replaces the contents of path by a unique path name.
-%
-% The format of the TemporaryFilename method is:
-%
-% void TemporaryFilename(char *path)
-%
-% A description of each parameter follows.
-%
-% o path: Specifies a pointer to an array of characters. The unique path
-% name is returned in this array.
-%
-*/
-MagickExport void TemporaryFilename(char *path)
-{
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v5.5.6");
- (void) AcquireUniqueFilename(path);
- (void) RelinquishUniqueFileResource(path);
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% T h r e s h o l d I m a g e %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% ThresholdImage() changes the value of individual pixels based on
-% the intensity of each pixel compared to threshold. The result is a
-% high-contrast, two color image.
-%
-% The format of the ThresholdImage method is:
-%
-% unsigned int ThresholdImage(Image *image,const double threshold)
-%
-% A description of each parameter follows:
-%
-% o image: the image.
-%
-% o threshold: Define the threshold value
-%
-*/
-MagickExport unsigned int ThresholdImage(Image *image,const double threshold)
-{
-#define ThresholdImageTag "Threshold/Image"
-
- IndexPacket
- index;
-
- ssize_t
- y;
-
- /*
- Threshold image.
- */
- assert(image != (Image *) NULL);
- assert(image->signature == MagickSignature);
- if (image->debug != MagickFalse)
- (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
- if (image->debug != MagickFalse)
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v5.5.7");
- if (!AcquireImageColormap(image,2))
- ThrowBinaryException(ResourceLimitError,"MemoryAllocationFailed",
- "UnableToThresholdImage");
- for (y=0; y < (ssize_t) image->rows; y++)
- {
- register IndexPacket
- *restrict indexes;
-
- register ssize_t
- x;
+#define UpdatePixelViewTag "PixelView/Update"
- register PixelPacket
- *restrict q;
-
- q=GetAuthenticPixels(image,0,y,image->columns,1,&image->exception);
- if (q == (PixelPacket *) NULL)
- break;
- indexes=GetAuthenticIndexQueue(image);
- for (x=0; x < (ssize_t) image->columns; x++)
- {
- index=(IndexPacket) ((MagickRealType) PixelIntensityToQuantum(q) <=
- threshold ? 0 : 1);
- SetIndexPixelComponent(indexes+x,index);
- SetRedPixelComponent(q,image->colormap[(ssize_t) index].red);
- SetGreenPixelComponent(q,image->colormap[(ssize_t) index].green);
- SetBluePixelComponent(q,image->colormap[(ssize_t) index].blue);
- q++;
- }
- if (!SyncAuthenticPixels(image,&image->exception))
- break;
- }
- return(MagickTrue);
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% T h r e s h o l d I m a g e C h a n n e l %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% ThresholdImageChannel() changes the value of individual pixels based on
-% the intensity of each pixel channel. The result is a high-contrast image.
-%
-% The format of the ThresholdImageChannel method is:
-%
-% unsigned int ThresholdImageChannel(Image *image,const char *threshold)
-%
-% A description of each parameter follows:
-%
-% o image: the image.
-%
-% o threshold: define the threshold values.
-%
-*/
-MagickExport unsigned int ThresholdImageChannel(Image *image,
- const char *threshold)
-{
-#define ThresholdImageTag "Threshold/Image"
+ ExceptionInfo
+ *exception;
- MagickPixelPacket
- pixel;
+ Image
+ *source_image;
- GeometryInfo
- geometry_info;
+ MagickBooleanType
+ status;
- IndexPacket
- index;
+ MagickOffsetType
+ progress;
ssize_t
y;
- unsigned int
- flags;
-
- /*
- Threshold image.
- */
- assert(image != (Image *) NULL);
- assert(image->signature == MagickSignature);
- if (image->debug != MagickFalse)
- (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
- if (threshold == (const char *) NULL)
- return(MagickTrue);
- if (SetImageStorageClass(image,DirectClass) == MagickFalse)
+ assert(source != (PixelView *) NULL);
+ assert(source->signature == WandSignature);
+ if (update == (UpdatePixelViewMethod) NULL)
return(MagickFalse);
- flags=ParseGeometry(threshold,&geometry_info);
- pixel.red=geometry_info.rho;
- if (flags & SigmaValue)
- pixel.green=geometry_info.sigma;
- else
- pixel.green=pixel.red;
- if (flags & XiValue)
- pixel.blue=geometry_info.xi;
- else
- pixel.blue=pixel.red;
- if (flags & PsiValue)
- pixel.opacity=geometry_info.psi;
- else
- pixel.opacity=(MagickRealType) OpaqueOpacity;
- if (flags & PercentValue)
- {
- pixel.red*=QuantumRange/100.0f;
- pixel.green*=QuantumRange/100.0f;
- pixel.blue*=QuantumRange/100.0f;
- pixel.opacity*=QuantumRange/100.0f;
- }
- if (!(flags & SigmaValue))
- {
- if (!AcquireImageColormap(image,2))
- ThrowBinaryException(ResourceLimitError,"MemoryAllocationFailed",
- "UnableToThresholdImage");
- if (pixel.red == 0)
- (void) GetImageDynamicThreshold(image,2.0,2.0,&pixel,&image->exception);
- }
- for (y=0; y < (ssize_t) image->rows; y++)
+ source_image=source->wand->images;
+ if (SetImageStorageClass(source_image,DirectClass) == MagickFalse)
+ return(MagickFalse);
+ status=MagickTrue;
+ progress=0;
+ exception=source->exception;
+#if defined(MAGICKCORE_OPENMP_SUPPORT)
+ #pragma omp parallel for schedule(static,1) shared(progress,status)
+#endif
+ for (y=source->region.y; y < (ssize_t) source->region.height; y++)
{
+ const int
+ id = GetOpenMPThreadId();
+
register IndexPacket
*restrict indexes;
x;
register PixelPacket
- *restrict q;
+ *restrict pixels;
- q=GetAuthenticPixels(image,0,y,image->columns,1,&image->exception);
- if (q == (PixelPacket *) NULL)
- break;
- indexes=GetAuthenticIndexQueue(image);
- if (IsMagickGray(&pixel) != MagickFalse)
- for (x=0; x < (ssize_t) image->columns; x++)
+ if (status == MagickFalse)
+ continue;
+ pixels=GetCacheViewAuthenticPixels(source->view,source->region.x,y,
+ source->region.width,1,exception);
+ if (pixels == (PixelPacket *) NULL)
{
- index=(IndexPacket) ((MagickRealType)
- PixelIntensityToQuantum(q) <= pixel.red ? 0 : 1);
- SetIndexPixelComponent(indexes+x,index);
- SetRedPixelComponent(q,image->colormap[(ssize_t) index].red);
- SetGreenPixelComponent(q,image->colormap[(ssize_t) index].green);
- SetBluePixelComponent(q,image->colormap[(ssize_t) index].blue);
- q++;
+ InheritException(source->exception,GetCacheViewException(
+ source->view));
+ status=MagickFalse;
+ continue;
}
- else
- for (x=0; x < (ssize_t) image->columns; x++)
+ indexes=GetCacheViewAuthenticIndexQueue(source->view);
+ for (x=0; x < (ssize_t) source->region.width; x++)
+ PixelSetQuantumColor(source->pixel_wands[id][x],pixels+x);
+ if (source_image->colorspace == CMYKColorspace)
+ for (x=0; x < (ssize_t) source->region.width; x++)
+ PixelSetBlackQuantum(source->pixel_wands[id][x],
+ GetIndexPixelComponent(indexes+x));
+ if (update(source,context) == MagickFalse)
+ status=MagickFalse;
+ for (x=0; x < (ssize_t) source->region.width; x++)
+ PixelGetQuantumColor(source->pixel_wands[id][x],pixels+x);
+ if (source_image->colorspace == CMYKColorspace)
+ for (x=0; x < (ssize_t) source->region.width; x++)
+ SetIndexPixelComponent(indexes+x,PixelGetBlackQuantum(
+ source->pixel_wands[id][x]));
+ if (SyncCacheViewAuthenticPixels(source->view,exception) == MagickFalse)
{
- SetRedPixelComponent(q,q->red <= pixel.red ? 0 : QuantumRange);
- SetGreenPixelComponent(q,q->green <= pixel.green ? 0 : QuantumRange);
- SetBluePixelComponent(q,q->blue <= pixel.blue ? 0 : QuantumRange);
- SetOpacityPixelComponent(q,q->opacity <= pixel.opacity ? 0 :
- QuantumRange);
- q++;
+ InheritException(source->exception,GetCacheViewException(source->view));
+ status=MagickFalse;
}
- if (!SyncAuthenticPixels(image,&image->exception))
- break;
- }
- return(MagickTrue);
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-+ T r a n s f o r m C o l o r s p a c e %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% TransformColorspace() converts the image to a specified colorspace.
-% If the image is already in the requested colorspace, no work is performed.
-% Note that the current colorspace is stored in the image colorspace member.
-% The transformation matrices are not necessarily the standard ones: the
-% weights are rescaled to normalize the range of the transformed values to
-% be [0..QuantumRange].
-%
-% Deprecated, replace with:
-%
-% TransformImageColorspace(image,colorspace);
-%
-% The format of the TransformColorspace method is:
-%
-% unsigned int (void) TransformColorspace(Image *image,
-% const ColorspaceType colorspace)
-%
-% A description of each parameter follows:
-%
-% o image: the image to transform
-%
-% o colorspace: the desired colorspace.
-%
-*/
-MagickExport unsigned int TransformColorspace(Image *image,
- const ColorspaceType colorspace)
-{
- assert(image != (Image *) NULL);
- assert(image->signature == MagickSignature);
- if (image->debug != MagickFalse)
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v5.5.6");
- return(TransformImageColorspace(image,colorspace));
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% T r a n s f o r m H S L %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% TransformHSL() converts a (red, green, blue) to a (hue, saturation,
-% lightness) triple.
-%
-% The format of the TransformHSL method is:
-%
-% void TransformHSL(const Quantum red,const Quantum green,
-% const Quantum blue,double *hue,double *saturation,double *lightness)
-%
-% A description of each parameter follows:
-%
-% o red, green, blue: A Quantum value representing the red, green, and
-% blue component of a pixel..
-%
-% o hue, saturation, lightness: A pointer to a double value representing a
-% component of the HSL color space.
-%
-*/
-
-static inline double MagickMin(const double x,const double y)
-{
- if (x < y)
- return(x);
- return(y);
-}
-
-MagickExport void TransformHSL(const Quantum red,const Quantum green,
- const Quantum blue,double *hue,double *saturation,double *lightness)
-{
- MagickRealType
- b,
- delta,
- g,
- max,
- min,
- r;
-
- /*
- Convert RGB to HSL colorspace.
- */
- assert(hue != (double *) NULL);
- assert(saturation != (double *) NULL);
- assert(lightness != (double *) NULL);
- r=QuantumScale*red;
- g=QuantumScale*green;
- b=QuantumScale*blue;
- max=MagickMax(r,MagickMax(g,b));
- min=MagickMin(r,MagickMin(g,b));
- *hue=0.0;
- *saturation=0.0;
- *lightness=(double) ((min+max)/2.0);
- delta=max-min;
- if (delta == 0.0)
- return;
- *saturation=(double) (delta/((*lightness < 0.5) ? (min+max) :
- (2.0-max-min)));
- if (r == max)
- *hue=(double) (g == min ? 5.0+(max-b)/delta : 1.0-(max-g)/delta);
- else
- if (g == max)
- *hue=(double) (b == min ? 1.0+(max-r)/delta : 3.0-(max-b)/delta);
- else
- *hue=(double) (r == min ? 3.0+(max-g)/delta : 5.0-(max-r)/delta);
- *hue/=6.0;
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% T r a n s l a t e T e x t %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% TranslateText() replaces any embedded formatting characters with the
-% appropriate image attribute and returns the translated text.
-%
-% Deprecated, replace with:
-%
-% InterpretImageProperties(image_info,image,embed_text);
-%
-% The format of the TranslateText method is:
-%
-% char *TranslateText(const ImageInfo *image_info,Image *image,
-% const char *embed_text)
-%
-% A description of each parameter follows:
-%
-% o image_info: the image info.
-%
-% o image: the image.
-%
-% o embed_text: the address of a character string containing the embedded
-% formatting characters.
-%
-*/
-MagickExport char *TranslateText(const ImageInfo *image_info,Image *image,
- const char *embed_text)
-{
- assert(image != (Image *) NULL);
- assert(image->signature == MagickSignature);
- if (image->debug != MagickFalse)
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v6.2.6");
- return(InterpretImageProperties(image_info,image,embed_text));
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% T r a n s p a r e n t I m a g e %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% TransparentImage() changes the opacity value associated with any pixel
-% that matches color to the value defined by opacity.
-%
-% By default color must match a particular pixel color exactly. However,
-% in many cases two colors may differ by a small amount. Fuzz defines
-% how much tolerance is acceptable to consider two colors as the same.
-% For example, set fuzz to 10 and the color red at intensities of 100 and
-% 102 respectively are now interpreted as the same color.
-%
-% The format of the TransparentImage method is:
-%
-% MagickBooleanType TransparentImage(Image *image,
-% const PixelPacket target,const Quantum opacity)
-%
-% A description of each parameter follows:
-%
-% o image: the image.
-%
-% o target: the RGB value of the target color.
-%
-% o opacity: the replacement opacity value.
-%
-*/
-MagickExport MagickBooleanType TransparentImage(Image *image,
- const PixelPacket target,const Quantum opacity)
-{
-#define TransparentImageTag "Transparent/Image"
-
- MagickBooleanType
- proceed;
-
- ssize_t
- y;
-
- /*
- Make image color transparent.
- */
- assert(image != (Image *) NULL);
- assert(image->signature == MagickSignature);
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v6.1.0");
- if (image->debug != MagickFalse)
- (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
- if (image->matte == MagickFalse)
- (void) SetImageAlphaChannel(image,OpaqueAlphaChannel);
- for (y=0; y < (ssize_t) image->rows; y++)
- {
- register ssize_t
- x;
-
- register PixelPacket
- *restrict q;
+ if (source_image->progress_monitor != (MagickProgressMonitor) NULL)
+ {
+ MagickBooleanType
+ proceed;
- q=GetAuthenticPixels(image,0,y,image->columns,1,&image->exception);
- if (q == (PixelPacket *) NULL)
- break;
- for (x=0; x < (ssize_t) image->columns; x++)
- {
- if (IsColorSimilar(image,q,&target) != MagickFalse)
- q->opacity=opacity;
- q++;
- }
- if (SyncAuthenticPixels(image,&image->exception) == MagickFalse)
- break;
- proceed=SetImageProgress(image,TransparentImageTag,(MagickOffsetType) y,
- image->rows);
- if (proceed == MagickFalse)
- break;
+#if defined(MAGICKCORE_OPENMP_SUPPORT)
+ #pragma omp critical (MagickWand_UpdatePixelViewIterator)
+#endif
+ proceed=SetImageProgress(source_image,UpdatePixelViewTag,progress++,
+ source->region.height);
+ if (proceed == MagickFalse)
+ status=MagickFalse;
+ }
}
- return(MagickTrue);
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% U n s h i f t I m a g e L i s t %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% UnshiftImageList() adds the image to the beginning of the list.
-%
-% Deprecated, replace with:
-%
-% PrependImageToList(images,CloneImageList(image,exception));
-%
-% The format of the UnshiftImageList method is:
-%
-% unsigned int UnshiftImageList(Image *images,const Image *image,
-% ExceptionInfo *exception)
-%
-% A description of each parameter follows:
-%
-% o images: the image list.
-%
-% o image: the image.
-%
-% o exception: return any errors or warnings in this structure.
-%
-*/
-MagickExport unsigned int UnshiftImageList(Image **images,const Image *image,
- ExceptionInfo *exception)
-{
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v5.5.2");
- PrependImageToList(images,CloneImageList(image,exception));
- return(MagickTrue);
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-+ V a l i d a t e C o l o r m a p I n d e x %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% ValidateColormapIndex() validates the colormap index. If the index does
-% not range from 0 to the number of colors in the colormap an exception
-% issued and 0 is returned.
-%
-% Deprecated, replace with:
-%
-% ConstrainColormapIndex(image,index);
-%
-% The format of the ValidateColormapIndex method is:
-%
-% IndexPacket ValidateColormapIndex(Image *image,const unsigned int index)
-%
-% A description of each parameter follows:
-%
-% o index: Method ValidateColormapIndex returns colormap index if it is
-% valid other an exception issued and 0 is returned.
-%
-% o image: the image.
-%
-% o index: This integer is the colormap index.
-%
-*/
-MagickExport IndexPacket ValidateColormapIndex(Image *image,
- const size_t index)
-{
- if (image->debug != MagickFalse)
- (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v5.4.4");
- return(ConstrainColormapIndex(image,index));
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% Z o o m I m a g e %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% ZoomImage() creates a new image that is a scaled size of an existing one.
-% It allocates the memory necessary for the new Image structure and returns a
-% pointer to the new image. The Point filter gives fast pixel replication,
-% Triangle is equivalent to bi-linear interpolation, and Mitchel giver slower,
-% very high-quality results. See Graphic Gems III for details on this
-% algorithm.
-%
-% The filter member of the Image structure specifies which image filter to
-% use. Blur specifies the blur factor where > 1 is blurry, < 1 is sharp.
-%
-% The format of the ZoomImage method is:
-%
-% Image *ZoomImage(const Image *image,const size_t columns,
-% const size_t rows,ExceptionInfo *exception)
-%
-% A description of each parameter follows:
-%
-% o image: the image.
-%
-% o columns: An integer that specifies the number of columns in the zoom
-% image.
-%
-% o rows: An integer that specifies the number of rows in the scaled
-% image.
-%
-% o exception: return any errors or warnings in this structure.
-%
-*/
-MagickExport Image *ZoomImage(const Image *image,const size_t columns,
- const size_t rows,ExceptionInfo *exception)
-{
- Image
- *zoom_image;
-
- assert(image != (const Image *) NULL);
- assert(image->signature == MagickSignature);
- if (image->debug != MagickFalse)
- (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
- assert(exception != (ExceptionInfo *) NULL);
- assert(exception->signature == MagickSignature);
- zoom_image=ResizeImage(image,columns,rows,image->filter,image->blur,
- exception);
- return(zoom_image);
+ return(status);
}
#endif
<a title="Sponsor: Web Hosting Ratings" href="http://webhostingrating.com">Web Hosting Ratings</a><!-- 201110010720 -->
</div>
<div class="sponsor">
- <a title="Sponsor: Notebook Reparatur Berlin" href="http://www.notebook-reparaturen-berlin.de">Notebook Reparatur Berlin</a><!-- 2011060100025 gabi.schulze-->
+ <a title="Sponsor: Autoteile Online Shop" href="http://www.autoteile-carparts.de">Autoteile Online Shop</a><!-- 2011070100030 autoteile-Carparts-->
</div>
</div>
</div>
<div class="main">\r
\r
<h1>Module deprecate Methods</h1>
-<p class="navigation-index">[<a href="#AcquireCacheViewIndexes">AcquireCacheViewIndexes</a> • <a href="#AcquireCacheViewPixels">AcquireCacheViewPixels</a> • <a href="#AcquireImagePixels">AcquireImagePixels</a> • <a href="#AcquireIndexes">AcquireIndexes</a> • <a href="#AcquireMemory">AcquireMemory</a> • <a href="#AcquireOneCacheViewPixel">AcquireOneCacheViewPixel</a> • <a href="#AcquireOneCacheViewVirtualPixel">AcquireOneCacheViewVirtualPixel</a> • <a href="#AcquireOneMagickPixel">AcquireOneMagickPixel</a> • <a href="#AcquireOnePixel">AcquireOnePixel</a> • <a href="#AcquireOneVirtualPixel">AcquireOneVirtualPixel</a> • <a href="#AcquirePixels">AcquirePixels</a> • <a href="#AffinityImage">AffinityImage</a> • <a href="#AffinityImages">AffinityImages</a> • <a href="#AllocateImage">AllocateImage</a> • <a href="#AllocateImageColormap">AllocateImageColormap</a> • <a href="#AllocateNextImage">AllocateNextImage</a> • <a href="#AllocateString">AllocateString</a> • <a href="#AverageImages">AverageImages</a> • <a href="#ChannelThresholdImage">ChannelThresholdImage</a> • <a href="#ClipPathImage">ClipPathImage</a> • <a href="#CloneImageAttributes">CloneImageAttributes</a> • <a href="#CloneMemory">CloneMemory</a> • <a href="#CloseCacheView">CloseCacheView</a> • <a href="#ColorFloodfill">ColorFloodfill</a> • <a href="#DeleteImageAttribute">DeleteImageAttribute</a> • <a href="#DeleteImageList">DeleteImageList</a> • <a href="#DeleteMagickRegistry">DeleteMagickRegistry</a> • <a href="#DescribeImage">DescribeImage</a> • <a href="#DestroyImageAttributes">DestroyImageAttributes</a> • <a href="#DestroyImages">DestroyImages</a> • <a href="#DestroyMagick">DestroyMagick</a> • <a href="#DispatchImage">DispatchImage</a> • <a href="#ExtractSubimageFromImageImage">ExtractSubimageFromImageImage</a> • <a href="#FlattenImages">FlattenImages</a> • <a href="#FormatImageAttribute">FormatImageAttribute</a> • <a href="#FormatString">FormatString</a> • <a href="#GetConfigureBlob">GetConfigureBlob</a> • <a href="#GetCacheView">GetCacheView</a> • <a href="#GetCacheViewIndexes">GetCacheViewIndexes</a> • <a href="#GetCacheViewPixels">GetCacheViewPixels</a> • <a href="#GetImageAttribute">GetImageAttribute</a> • <a href="#GetImageClippingPathAttribute">GetImageClippingPathAttribute</a> • <a href="#GetImageFromMagickRegistry">GetImageFromMagickRegistry</a> • <a href="#GetMagickRegistry">GetMagickRegistry</a> • <a href="#GetImageGeometry">GetImageGeometry</a> • <a href="#GetImageList">GetImageList</a> • <a href="#GetImageListIndex">GetImageListIndex</a> • <a href="#GetImageListSize">GetImageListSize</a> • <a href="#GetImagePixels">GetImagePixels</a> • <a href="#GetIndexes">GetIndexes</a> • <a href="#GetNextImage">GetNextImage</a> • <a href="#GetNextImageAttribute">GetNextImageAttribute</a> • <a href="#GetNumberScenes">GetNumberScenes</a> • <a href="#GetOnePixel">GetOnePixel</a> • <a href="#GetPixels">GetPixels</a> • <a href="#GetPreviousImage">GetPreviousImage</a> • <a href="#HSLTransform">HSLTransform</a> • <a href="#IdentityAffine">IdentityAffine</a> • <a href="#InitializeMagick">InitializeMagick</a> • <a href="#InterpolatePixelColor">InterpolatePixelColor</a> • <a href="#InterpretImageAttributes">InterpretImageAttributes</a> • <a href="#LevelImageColor">LevelImageColor</a> • <a href="#LiberateMemory">LiberateMemory</a> • <a href="#LiberateSemaphoreInfo">LiberateSemaphoreInfo</a> • <a href="#MagickIncarnate">MagickIncarnate</a> • <a href="#MagickMonitor">MagickMonitor</a> • <a href="#MapImage">MapImage</a> • <a href="#MapImages">MapImages</a> • <a href="#MatteFloodfill">MatteFloodfill</a> • <a href="#MaximumImages">MaximumImages</a> • <a href="#MinimumImages">MinimumImages</a> • <a href="#MedianFilterImage">MedianFilterImage</a> • <a href="#ModeImage">ModeImage</a> • <a href="#MosaicImages">MosaicImages</a> • <a href="#OpaqueImage">OpaqueImage</a> • <a href="#OpenCacheView">OpenCacheView</a> • <a href="#PaintFloodfill">PaintFloodfill</a> • <a href="#PaintOpaqueImage">PaintOpaqueImage</a> • <a href="#PaintTransparentImage">PaintTransparentImage</a> • <a href="#ParseSizeGeometry">ParseSizeGeometry</a> • <a href="#PopImageList">PopImageList</a> • <a href="#PopImagePixels">PopImagePixels</a> • <a href="#PostscriptGeometry">PostscriptGeometry</a> • <a href="#PushImageList">PushImageList</a> • <a href="#PushImagePixels">PushImagePixels</a> • <a href="#QuantizationError">QuantizationError</a> • <a href="#RandomChannelThresholdImage">RandomChannelThresholdImage</a> • <a href="#ReacquireMemory">ReacquireMemory</a> • <a href="#RecolorImage">RecolorImage</a> • <a href="#ReduceNoiseImage">ReduceNoiseImage</a> • <a href="#ResetImageAttributeIterator">ResetImageAttributeIterator</a> • <a href="#SetCacheViewPixels">SetCacheViewPixels</a> • <a href="#SetExceptionInfo">SetExceptionInfo</a> • <a href="#SetImage">SetImage</a> • <a href="#SetImageAttribute">SetImageAttribute</a> • <a href="#SetImageList">SetImageList</a> • <a href="#SetImagePixels">SetImagePixels</a> • <a href="#SetMagickRegistry">SetMagickRegistry</a> • <a href="#SetMonitorHandler">SetMonitorHandler</a> • <a href="#ShiftImageList">ShiftImageList</a> • <a href="#SpliceImageList">SpliceImageList</a> • <a href="#Strip">Strip</a> • <a href="#SyncCacheView">SyncCacheView</a> • <a href="#SyncCacheViewPixels">SyncCacheViewPixels</a> • <a href="#SyncImagePixels">SyncImagePixels</a> • <a href="#TemporaryFilename">TemporaryFilename</a> • <a href="#ThresholdImage">ThresholdImage</a> • <a href="#ThresholdImageChannel">ThresholdImageChannel</a> • <a href="#TransformHSL">TransformHSL</a> • <a href="#TranslateText">TranslateText</a> • <a href="#TransparentImage">TransparentImage</a> • <a href="#UnshiftImageList">UnshiftImageList</a> • <a href="#ZoomImage">ZoomImage</a>]</p>
+<p class="navigation-index">[<a href="#MagickAverageImages">MagickAverageImages</a> • <a href="#ClonePixelView">ClonePixelView</a> • <a href="#DestroyPixelView">DestroyPixelView</a> • <a href="#DuplexTransferPixelViewIterator">DuplexTransferPixelViewIterator</a> • <a href="#GetPixelViewException">GetPixelViewException</a> • <a href="#GetPixelViewHeight">GetPixelViewHeight</a> • <a href="#GetPixelViewIterator">GetPixelViewIterator</a> • <a href="#GetPixelViewPixels">GetPixelViewPixels</a> • <a href="#GetPixelViewWand">GetPixelViewWand</a> • <a href="#GetPixelViewWidth">GetPixelViewWidth</a> • <a href="#GetPixelViewX">GetPixelViewX</a> • <a href="#GetPixelViewY">GetPixelViewY</a> • <a href="#IsPixelView">IsPixelView</a> • <a href="#MagickClipPathImage">MagickClipPathImage</a> • <a href="#DrawGetFillAlpha">DrawGetFillAlpha</a> • <a href="#DrawGetStrokeAlpha">DrawGetStrokeAlpha</a> • <a href="#DrawPeekGraphicWand">DrawPeekGraphicWand</a> • <a href="#DrawPopGraphicContext">DrawPopGraphicContext</a> • <a href="#DrawPushGraphicContext">DrawPushGraphicContext</a> • <a href="#DrawSetFillAlpha">DrawSetFillAlpha</a> • <a href="#DrawSetStrokeAlpha">DrawSetStrokeAlpha</a> • <a href="#MagickColorFloodfillImage">MagickColorFloodfillImage</a> • <a href="#MagickDescribeImage">MagickDescribeImage</a> • <a href="#MagickFlattenImages">MagickFlattenImages</a> • <a href="#MagickGetImageAttribute">MagickGetImageAttribute</a> • <a href="#MagickGetImageMatte">MagickGetImageMatte</a> • <a href="#MagickGetImagePixels">MagickGetImagePixels</a> • <a href="#MagickGetImageSize">MagickGetImageSize</a> • <a href="#MagickMapImage">MagickMapImage</a> • <a href="#MagickMatteFloodfillImage">MagickMatteFloodfillImage</a> • <a href="#MagickMedianFilterImage">MagickMedianFilterImage</a> • <a href="#MagickMinimumImages">MagickMinimumImages</a> • <a href="#MagickModeImage">MagickModeImage</a> • <a href="#MagickMosaicImages">MagickMosaicImages</a> • <a href="#MagickOpaqueImage">MagickOpaqueImage</a> • <a href="#MagickPaintFloodfillImage">MagickPaintFloodfillImage</a> • <a href="#MagickPaintOpaqueImage">MagickPaintOpaqueImage</a> • <a href="#MagickPaintTransparentImage">MagickPaintTransparentImage</a> • <a href="#MagickRecolorImage">MagickRecolorImage</a> • <a href="#MagickReduceNoiseImage">MagickReduceNoiseImage</a> • <a href="#MagickMaximumImages">MagickMaximumImages</a> • <a href="#MagickSetImageAttribute">MagickSetImageAttribute</a> • <a href="#MagickSetImageIndex">MagickSetImageIndex</a> • <a href="#MagickTransparentImage">MagickTransparentImage</a> • <a href="#MagickRegionOfInterestImage">MagickRegionOfInterestImage</a> • <a href="#MagickSetImagePixels">MagickSetImagePixels</a> • <a href="#MagickWriteImageBlob">MagickWriteImageBlob</a> • <a href="#NewPixelView">NewPixelView</a> • <a href="#NewPixelViewRegion">NewPixelViewRegion</a> • <a href="#PixelGetNextRow">PixelGetNextRow</a> • <a href="#PixelIteratorGetException">PixelIteratorGetException</a> • <a href="#SetPixelViewIterator">SetPixelViewIterator</a> • <a href="#TransferPixelViewIterator">TransferPixelViewIterator</a> • <a href="#UpdatePixelViewIterator">UpdatePixelViewIterator</a>]</p>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="AcquireCacheViewIndexes">AcquireCacheViewIndexes</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="MagickAverageImages">MagickAverageImages</a></h2>
<div class="doc-section">
-<p>AcquireCacheViewIndexes() returns the indexes associated with the specified view.</p>
+<p>MagickAverageImages() average a set of images.</p>
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- GetCacheViewVirtualIndexQueue(cache_view);
-</pre>
-
-<p>The format of the AcquireCacheViewIndexes method is:</p>
-
-<pre class="code">
- const IndexPacket *AcquireCacheViewIndexes(const CacheView *cache_view)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>cache_view</h5>
-<p>the cache view.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="AcquireCacheViewPixels">AcquireCacheViewPixels</a></h2>
-<div class="doc-section">
-
-<p>AcquireCacheViewPixels() gets pixels from the in-memory or disk pixel cache as defined by the geometry parameters. A pointer to the pixels is returned if the pixels are transferred, otherwise a NULL is returned.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- GetCacheViewVirtualPixels(cache_view,x,y,columns,rows,exception);
-</pre>
-
-<p>The format of the AcquireCacheViewPixels method is:</p>
-
-<pre class="code">
- const PixelPacket *AcquireCacheViewPixels(const CacheView *cache_view,
- const ssize_t x,const ssize_t y,const size_t columns,
- const size_t rows,ExceptionInfo *exception)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>cache_view</h5>
-<p>the cache view.</p>
-
-<h5>x,y,columns,rows</h5>
-<p>These values define the perimeter of a region of pixels.</p>
-
-<h5>exception</h5>
-<p>return any errors or warnings in this structure.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="AcquireImagePixels">AcquireImagePixels</a></h2>
-<div class="doc-section">
-
-<p>AcquireImagePixels() returns an immutable pixel region. If the region is successfully accessed, a pointer to it is returned, otherwise NULL is returned. The returned pointer may point to a temporary working copy of the pixels or it may point to the original pixels in memory. Performance is maximized if the selected region is part of one row, or one or more full rows, since there is opportunity to access the pixels in-place (without a copy) if the image is in RAM, or in a memory-mapped file. The returned pointer should *never* be deallocated by the user.</p>
-
-<p>Pixels accessed via the returned pointer represent a simple array of type PixelPacket. If the image type is CMYK or the storage class is PseudoClass, call GetAuthenticIndexQueue() after invoking GetAuthenticPixels() to access the black color component or to obtain the colormap indexes (of type IndexPacket) corresponding to the region.</p>
-
-<p>If you plan to modify the pixels, use GetAuthenticPixels() instead.</p>
-
-<p>Note, the AcquireImagePixels() and GetAuthenticPixels() methods are not thread-safe. In a threaded environment, use GetCacheViewVirtualPixels() or GetCacheViewAuthenticPixels() instead.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- GetVirtualPixels(image,x,y,columns,rows,exception);
-</pre>
-
-<p>The format of the AcquireImagePixels() method is:</p>
-
-<pre class="code">
- const PixelPacket *AcquireImagePixels(const Image *image,const ssize_t x,
- const ssize_t y,const size_t columns,const size_t rows,
- ExceptionInfo *exception)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>image</h5>
-<p>the image.</p>
-
-<h5>x,y,columns,rows</h5>
-<p>These values define the perimeter of a region of pixels.</p>
-
-<h5>exception</h5>
-<p>return any errors or warnings in this structure.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="AcquireIndexes">AcquireIndexes</a></h2>
-<div class="doc-section">
-
-<p>AcquireIndexes() returns the black channel or the colormap indexes associated with the last call to QueueAuthenticPixels() or GetVirtualPixels(). NULL is returned if the black channel or colormap indexes are not available.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- GetVirtualIndexQueue(image);
-</pre>
-
-<p>The format of the AcquireIndexes() method is:</p>
-
-<pre class="code">
- const IndexPacket *AcquireIndexes(const Image *image)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>indexes</h5>
-<p>AcquireIndexes() returns the indexes associated with the last call to QueueAuthenticPixels() or GetVirtualPixels().</p>
-
-<h5>image</h5>
-<p>the image.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="AcquireMemory">AcquireMemory</a></h2>
-<div class="doc-section">
-
-<p>AcquireMemory() returns a pointer to a block of memory at least size bytes suitably aligned for any use.</p>
-
-<p>The format of the AcquireMemory method is:</p>
-
-<pre class="code">
- void *AcquireMemory(const size_t size)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>size</h5>
-<p>the size of the memory in bytes to allocate.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="AcquireOneCacheViewPixel">AcquireOneCacheViewPixel</a></h2>
-<div class="doc-section">
-
-<p>AcquireOneCacheViewPixel() returns a single pixel at the specified (x,y) location. The image background color is returned if an error occurs. If you plan to modify the pixel, use GetOneCacheViewAuthenticPixel() instead.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- GetOneCacheViewVirtualPixel(cache_view,x,y,pixel,exception);
-</pre>
-
-<p>The format of the AcquireOneCacheViewPixel method is:</p>
-
-<pre class="code">
- MagickBooleanType AcquireOneCacheViewPixel(const CacheView *cache_view,
- const ssize_t x,const ssize_t y,PixelPacket *pixel,ExceptionInfo *exception)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>cache_view</h5>
-<p>the cache view.</p>
-
-<h5>x,y</h5>
-<p>These values define the offset of the pixel.</p>
-
-<h5>pixel</h5>
-<p>return a pixel at the specified (x,y) location.</p>
-
-<h5>exception</h5>
-<p>return any errors or warnings in this structure.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="AcquireOneCacheViewVirtualPixel">AcquireOneCacheViewVirtualPixel</a></h2>
-<div class="doc-section">
-
-<p>AcquireOneCacheViewVirtualPixel() returns a single pixel at the specified (x,y) location. The image background color is returned if an error occurs. If you plan to modify the pixel, use GetOneCacheViewAuthenticPixel() instead.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- GetOneCacheViewVirtualMethodPixel(cache_view,virtual_pixel_method,
- x,y,pixel,exception);
-</pre>
-
-<p>The format of the AcquireOneCacheViewPixel method is:</p>
+<p>The format of the MagickAverageImages method is:</p>
<pre class="code">
- MagickBooleanType AcquireOneCacheViewVirtualPixel(
- const CacheView *cache_view,
- const VirtualPixelMethod virtual_pixel_method,const ssize_t x,
- const ssize_t y,PixelPacket *pixel,ExceptionInfo *exception)
+ MagickWand *MagickAverageImages(MagickWand *wand)
</pre>
<p>A description of each parameter follows:</p>
-<h5>cache_view</h5>
-<p>the cache view.</p>
-
-<h5>virtual_pixel_method</h5>
-<p>the virtual pixel method.</p>
-
-<h5>x,y</h5>
-<p>These values define the offset of the pixel.</p>
-
-<h5>pixel</h5>
-<p>return a pixel at the specified (x,y) location.</p>
-
-<h5>exception</h5>
-<p>return any errors or warnings in this structure.</p>
+<h5>wand</h5>
+<p>the magick wand.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="AcquireOneMagickPixel">AcquireOneMagickPixel</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="ClonePixelView">ClonePixelView</a></h2>
<div class="doc-section">
-<p>AcquireOneMagickPixel() returns a single pixel at the specified (x,y) location. The image background color is returned if an error occurs. If you plan to modify the pixel, use GetOnePixel() instead.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- MagickPixelPacket pixel;
- GetOneVirtualMagickPixel(image,x,y,&pixel,exception);
-</pre>
+<p>ClonePixelView() makes a copy of the specified pixel view.</p>
-<p>The format of the AcquireOneMagickPixel() method is:</p>
+<p>The format of the ClonePixelView method is:</p>
<pre class="code">
- MagickPixelPacket AcquireOneMagickPixel(const Image image,const ssize_t x,
- const ssize_t y,ExceptionInfo exception)
+ PixelView *ClonePixelView(const PixelView *pixel_view)
</pre>
<p>A description of each parameter follows:</p>
-<h5>image</h5>
-<p>the image.</p>
-
-<h5>x,y</h5>
-<p>These values define the location of the pixel to return.</p>
-
-<h5>exception</h5>
-<p>return any errors or warnings in this structure.</p>
+<h5>pixel_view</h5>
+<p>the pixel view.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="AcquireOnePixel">AcquireOnePixel</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="DestroyPixelView">DestroyPixelView</a></h2>
<div class="doc-section">
-<p>AcquireOnePixel() returns a single pixel at the specified (x,y) location. The image background color is returned if an error occurs. If you plan to modify the pixel, use GetOnePixel() instead.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- PixelPacket pixel;
- GetOneVirtualPixel(image,x,y,&pixel,exception);
-</pre>
+<p>DestroyPixelView() deallocates memory associated with a pixel view.</p>
-<p>The format of the AcquireOnePixel() method is:</p>
+<p>The format of the DestroyPixelView method is:</p>
<pre class="code">
- PixelPacket AcquireOnePixel(const Image image,const ssize_t x,
- const ssize_t y,ExceptionInfo exception)
+ PixelView *DestroyPixelView(PixelView *pixel_view,
+ const size_t number_wands,const size_t number_threads)
</pre>
<p>A description of each parameter follows:</p>
-<h5>image</h5>
-<p>the image.</p>
+<h5>pixel_view</h5>
+<p>the pixel view.</p>
-<h5>x,y</h5>
-<p>These values define the location of the pixel to return.</p>
+<h5>number_wand</h5>
+<p>the number of pixel wands.</p>
-<h5>exception</h5>
-<p>return any errors or warnings in this structure.</p>
+<h5>number_threads</h5>
+<p>number of threads.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="AcquireOneVirtualPixel">AcquireOneVirtualPixel</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="DuplexTransferPixelViewIterator">DuplexTransferPixelViewIterator</a></h2>
<div class="doc-section">
-<p>AcquireOneVirtualPixel() returns a single pixel at the specified (x,y) location as defined by specified pixel method. The image background color is returned if an error occurs. If you plan to modify the pixel, use GetOnePixel() instead.</p>
+<p>DuplexTransferPixelViewIterator() iterates over three pixel views in parallel and calls your transfer method for each scanline of the view. The source and duplex pixel region is not confined to the image canvas-- that is you can include negative offsets or widths or heights that exceed the image dimension. However, the destination pixel view is confined to the image canvas-- that is no negative offsets or widths or heights that exceed the image dimension are permitted.</p>
-<p>Deprecated, replace with:</p>
+<p>Use this pragma:</p>
<pre class="text">
- PixelPacket pixel;
- GetOneVirtualMethodPixel(image,virtual_pixel_method,x,y,&pixel,exception);
-</pre>
-
-<p>The format of the AcquireOneVirtualPixel() method is:</p>
-
-<pre class="code">
- PixelPacket AcquireOneVirtualPixel(const Image image,
- const VirtualPixelMethod virtual_pixel_method,const ssize_t x,
- const ssize_t y,ExceptionInfo exception)
+ #pragma omp critical
</pre>
-<p>A description of each parameter follows:</p>
-
-<h5>virtual_pixel_method</h5>
-<p>the virtual pixel method.</p>
+<p>to define a section of code in your callback transfer method that must be executed by a single thread at a time.</p>
-<h5>image</h5>
-<p>the image.</p>
-
-<h5>x,y</h5>
-<p>These values define the location of the pixel to return.</p>
-
-<h5>exception</h5>
-<p>return any errors or warnings in this structure.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="AcquirePixels">AcquirePixels</a></h2>
-<div class="doc-section">
-
-<p>AcquirePixels() returns the pixels associated with the last call to QueueAuthenticPixels() or GetVirtualPixels().</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- GetVirtualPixelQueue(image);
-</pre>
-
-<p>The format of the AcquirePixels() method is:</p>
+<p>The format of the DuplexTransferPixelViewIterator method is:</p>
<pre class="code">
- const PixelPacket *AcquirePixels(const Image image)
+ MagickBooleanType DuplexTransferPixelViewIterator(PixelView *source,
+ PixelView *duplex,PixelView *destination,
+ DuplexTransferPixelViewMethod transfer,void *context)
</pre>
<p>A description of each parameter follows:</p>
-<h5>image</h5>
-<p>the image.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="AffinityImage">AffinityImage</a></h2>
-<div class="doc-section">
-
-<p>AffinityImage() replaces the colors of an image with the closest color from a reference image.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- RemapImage(quantize_info,image,affinity_image);
-</pre>
-
-<p>The format of the AffinityImage method is:</p>
-
-<pre class="code">
- MagickBooleanType AffinityImage(const QuantizeInfo *quantize_info,
- Image *image,const Image *affinity_image)
-</pre>
+<h5>source</h5>
+<p>the source pixel view.</p>
-<p>A description of each parameter follows:</p>
+<h5>duplex</h5>
+<p>the duplex pixel view.</p>
-<h5>quantize_info</h5>
-<p>Specifies a pointer to an QuantizeInfo structure.</p>
+<h5>destination</h5>
+<p>the destination pixel view.</p>
-<h5>image</h5>
-<p>the image.</p>
+<h5>transfer</h5>
+<p>the transfer callback method.</p>
-<h5>affinity_image</h5>
-<p>the reference image.</p>
+<h5>context</h5>
+<p>the user defined context.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="AffinityImages">AffinityImages</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="GetPixelViewException">GetPixelViewException</a></h2>
<div class="doc-section">
-<p>AffinityImages() replaces the colors of a sequence of images with the closest color from a reference image.</p>
-
-<p>Deprecated, replace with:</p>
+<p>GetPixelViewException() returns the severity, reason, and description of any error that occurs when utilizing a pixel view.</p>
-<pre class="text">
- RemapImages(quantize_info,images,affinity_image);
-</pre>
-
-<p>The format of the AffinityImage method is:</p>
+<p>The format of the GetPixelViewException method is:</p>
<pre class="code">
- MagickBooleanType AffinityImages(const QuantizeInfo *quantize_info,
- Image *images,Image *affinity_image)
+ char *GetPixelViewException(const PixelWand *pixel_view,
+ ExceptionType *severity)
</pre>
<p>A description of each parameter follows:</p>
-<h5>quantize_info</h5>
-<p>Specifies a pointer to an QuantizeInfo structure.</p>
-
-<h5>images</h5>
-<p>the image sequence.</p>
+<h5>pixel_view</h5>
+<p>the pixel pixel_view.</p>
-<h5>affinity_image</h5>
-<p>the reference image.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="AllocateImage">AllocateImage</a></h2>
-<div class="doc-section">
-
-<p>AllocateImage() returns a pointer to an image structure initialized to default values.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- AcquireImage(image_info);
-</pre>
-
-<p>The format of the AllocateImage method is:</p>
-
-<pre class="code">
- Image *AllocateImage(const ImageInfo *image_info)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>image_info</h5>
-<p>Many of the image default values are set from this structure. For example, filename, compression, depth, background color, and others.</p>
+<h5>severity</h5>
+<p>the severity of the error is returned here.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="AllocateImageColormap">AllocateImageColormap</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="GetPixelViewHeight">GetPixelViewHeight</a></h2>
<div class="doc-section">
-<p>AllocateImageColormap() allocates an image colormap and initializes it to a linear gray colorspace. If the image already has a colormap, it is replaced. AllocateImageColormap() returns MagickTrue if successful, otherwise MagickFalse if there is not enough memory.</p>
+<p>GetPixelViewHeight() returns the pixel view height.</p>
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- AcquireImageColormap(image,colors);
-</pre>
-
-<p>The format of the AllocateImageColormap method is:</p>
+<p>The format of the GetPixelViewHeight method is:</p>
<pre class="code">
- MagickBooleanType AllocateImageColormap(Image *image,
- const size_t colors)
+ size_t GetPixelViewHeight(const PixelView *pixel_view)
</pre>
<p>A description of each parameter follows:</p>
-<h5>image</h5>
-<p>the image.</p>
-
-<h5>colors</h5>
-<p>the number of colors in the image colormap.</p>
+<h5>pixel_view</h5>
+<p>the pixel view.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="AllocateNextImage">AllocateNextImage</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="GetPixelViewIterator">GetPixelViewIterator</a></h2>
<div class="doc-section">
-<p>AllocateNextImage() initializes the next image in a sequence to default values. The next member of image points to the newly allocated image. If there is a memory shortage, next is assigned NULL.</p>
+<p>GetPixelViewIterator() iterates over the pixel view in parallel and calls your get method for each scanline of the view. The pixel region is not confined to the image canvas-- that is you can include negative offsets or widths or heights that exceed the image dimension. Any updates to the pixels in your callback are ignored.</p>
-<p>Deprecated, replace with:</p>
+<p>Use this pragma:</p>
<pre class="text">
- AcquireNextImage(image_info,image);
-</pre>
-
-<p>The format of the AllocateNextImage method is:</p>
-
-<pre class="code">
- void AllocateNextImage(const ImageInfo *image_info,Image *image)
+ #pragma omp critical
</pre>
-<p>A description of each parameter follows:</p>
-
-<h5>image_info</h5>
-<p>Many of the image default values are set from this structure. For example, filename, compression, depth, background color, and others.</p>
-
-<h5>image</h5>
-<p>the image.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="AllocateString">AllocateString</a></h2>
-<div class="doc-section">
-
-<p>AllocateString() allocates memory for a string and copies the source string to that memory location (and returns it).</p>
+<p>to define a section of code in your callback get method that must be executed by a single thread at a time.</p>
-<p>The format of the AllocateString method is:</p>
+<p>The format of the GetPixelViewIterator method is:</p>
<pre class="code">
- char *AllocateString(const char *source)
+ MagickBooleanType GetPixelViewIterator(PixelView *source,
+ GetPixelViewMethod get,void *context)
</pre>
<p>A description of each parameter follows:</p>
<h5>source</h5>
-<p>A character string.</p>
+<p>the source pixel view.</p>
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="AverageImages">AverageImages</a></h2>
-<div class="doc-section">
-
-<p>AverageImages() takes a set of images and averages them together. Each image in the set must have the same width and height. AverageImages() returns a single image with each corresponding pixel component of each image averaged. On failure, a NULL image is returned and exception describes the reason for the failure.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- EvaluateImages(images,MeanEvaluateOperator,exception);
-</pre>
-
-<p>The format of the AverageImages method is:</p>
-
-<pre class="code">
- Image *AverageImages(Image *images,ExceptionInfo *exception)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>image</h5>
-<p>the image sequence.</p>
-
-<h5>exception</h5>
-<p>return any errors or warnings in this structure.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="ChannelThresholdImage">ChannelThresholdImage</a></h2>
-<div class="doc-section">
-
-<p>ChannelThresholdImage() changes the value of individual pixels based on the intensity of each pixel channel. The result is a high-contrast image.</p>
-
-<p>The format of the ChannelThresholdImage method is:</p>
-
-<pre class="code">
- unsigned int ChannelThresholdImage(Image *image,const char *level)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>image</h5>
-<p>the image.</p>
-
-<h5>level</h5>
-<p>define the threshold values.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="ClipPathImage">ClipPathImage</a></h2>
-<div class="doc-section">
-
-<p>ClipPathImage() sets the image clip mask based any clipping path information if it exists.</p>
-
-<p>Deprecated, replace with:</p>
+<h5>get</h5>
+<p>the get callback method.</p>
-<pre class="text">
- ClipImagePath(image,pathname,inside);
-</pre>
-
-<p>The format of the ClipImage method is:</p>
-
-<pre class="code">
- MagickBooleanType ClipPathImage(Image *image,const char *pathname,
- const MagickBooleanType inside)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>image</h5>
-<p>the image.</p>
-
-<h5>pathname</h5>
-<p>name of clipping path resource. If name is preceded by #, use clipping path numbered by name.</p>
-
-<h5>inside</h5>
-<p>if non-zero, later operations take effect inside clipping path. Otherwise later operations take effect outside clipping path.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="CloneImageAttributes">CloneImageAttributes</a></h2>
-<div class="doc-section">
-
-<p>CloneImageAttributes() clones one or more image attributes.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- CloneImageProperties(image,clone_image);
-</pre>
-
-<p>The format of the CloneImageAttributes method is:</p>
-
-<pre class="code">
- MagickBooleanType CloneImageAttributes(Image *image,
- const Image *clone_image)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>image</h5>
-<p>the image.</p>
-
-<h5>clone_image</h5>
-<p>the clone image.</p>
+<h5>context</h5>
+<p>the user defined context.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="CloneMemory">CloneMemory</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="GetPixelViewPixels">GetPixelViewPixels</a></h2>
<div class="doc-section">
-<p>CloneMemory() copies size bytes from memory area source to the destination. Copying between objects that overlap will take place correctly. It returns destination.</p>
-
-<p>The format of the CloneMemory method is:</p>
-
-<pre class="code">
- void *CloneMemory(void *destination,const void *source,
- const size_t size)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>destination</h5>
-<p>the destination.</p>
-
-<h5>source</h5>
-<p>the source.</p>
-
-<h5>size</h5>
-<p>the size of the memory in bytes to allocate.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="CloseCacheView">CloseCacheView</a></h2>
-<div class="doc-section">
-
-<p>CloseCacheView() closes the specified view returned by a previous call to OpenCacheView().</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- DestroyCacheView(view_info);
-</pre>
-
-<p>The format of the CloseCacheView method is:</p>
-
-<pre class="code">
- CacheView *CloseCacheView(CacheView *view_info)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>view_info</h5>
-<p>the address of a structure of type CacheView.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="ColorFloodfill">ColorFloodfill</a></h2>
-<div class="doc-section">
-
-<p>ColorFloodfill() changes the color value of any pixel that matches target and is an immediate neighbor. If the method FillToBorderMethod is specified, the color value is changed for any neighbor pixel that does not match the bordercolor member of image.</p>
-
-<p>By default target must match a particular pixel color exactly. However, in many cases two colors may differ by a small amount. The fuzz member of image defines how much tolerance is acceptable to consider two colors as the same. For example, set fuzz to 10 and the color red at intensities of 100 and 102 respectively are now interpreted as the same color for the purposes of the floodfill.</p>
-
-<p>The format of the ColorFloodfillImage method is:</p>
-
-<pre class="code">
- MagickBooleanType ColorFloodfillImage(Image *image,
- const DrawInfo *draw_info,const PixelPacket target,
- const ssize_t x_offset,const ssize_t y_offset,const PaintMethod method)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>image</h5>
-<p>the image.</p>
-
-<h5>draw_info</h5>
-<p>the draw info.</p>
-
-<h5>target</h5>
-<p>the RGB value of the target color.</p>
-
-<h5>x,y</h5>
-<p>the starting location of the operation.</p>
-
-<h5>method</h5>
-<p>Choose either FloodfillMethod or FillToBorderMethod.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="DeleteImageAttribute">DeleteImageAttribute</a></h2>
-<div class="doc-section">
-
-<p>DeleteImageAttribute() deletes an attribute from the image.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- DeleteImageProperty(image,key);
-</pre>
-
-<p>The format of the DeleteImageAttribute method is:</p>
-
-<pre class="code">
- MagickBooleanType DeleteImageAttribute(Image *image,const char *key)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>image</h5>
-<p>the image info.</p>
-
-<h5>key</h5>
-<p>the image key.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="DeleteImageList">DeleteImageList</a></h2>
-<div class="doc-section">
-
-<p>DeleteImageList() deletes an image at the specified position in the list.</p>
-
-<p>The format of the DeleteImageList method is:</p>
-
-<pre class="code">
- unsigned int DeleteImageList(Image *images,const ssize_t offset)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>images</h5>
-<p>the image list.</p>
-
-<h5>offset</h5>
-<p>the position within the list.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="DeleteMagickRegistry">DeleteMagickRegistry</a></h2>
-<div class="doc-section">
-
-<p>DeleteMagickRegistry() deletes an entry in the registry as defined by the id. It returns MagickTrue if the entry is deleted otherwise MagickFalse if no entry is found in the registry that matches the id.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- char key[MaxTextExtent];
- FormatMagickString(key,MaxTextExtent,"ld\n",id);
- DeleteImageRegistry(key);
-</pre>
-
-<p>The format of the DeleteMagickRegistry method is:</p>
-
-<pre class="code">
- MagickBooleanType DeleteMagickRegistry(const ssize_t id)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>id</h5>
-<p>the registry id.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="DescribeImage">DescribeImage</a></h2>
-<div class="doc-section">
-
-<p>DescribeImage() describes an image by printing its attributes to the file. Attributes include the image width, height, size, and others.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- IdentifyImage(image,file,verbose);
-</pre>
-
-<p>The format of the DescribeImage method is:</p>
-
-<pre class="code">
- MagickBooleanType DescribeImage(Image *image,FILE *file,
- const MagickBooleanType verbose)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>image</h5>
-<p>the image.</p>
-
-<h5>file</h5>
-<p>the file, typically stdout.</p>
-
-<h5>verbose</h5>
-<p>A value other than zero prints more detailed information about the image.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="DestroyImageAttributes">DestroyImageAttributes</a></h2>
-<div class="doc-section">
-
-<p>DestroyImageAttributes() deallocates memory associated with the image attribute list.</p>
-
-<p>The format of the DestroyImageAttributes method is:</p>
-
-<pre class="code">
- DestroyImageAttributes(Image *image)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>image</h5>
-<p>the image.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="DestroyImages">DestroyImages</a></h2>
-<div class="doc-section">
-
-<p>DestroyImages() destroys an image list.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- DestroyImageList(image);
-</pre>
-
-<p>The format of the DestroyImages method is:</p>
-
-<pre class="code">
- void DestroyImages(Image *image)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>image</h5>
-<p>the image sequence.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="DestroyMagick">DestroyMagick</a></h2>
-<div class="doc-section">
-
-<p>DestroyMagick() destroys the ImageMagick environment.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- MagickCoreTerminus();
-</pre>
-
-<p>The format of the DestroyMagick function is:</p>
-
-<pre class="text">
- DestroyMagick(void)
-</pre>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="DispatchImage">DispatchImage</a></h2>
-<div class="doc-section">
-
-<p>DispatchImage() extracts pixel data from an image and returns it to you. The method returns MagickFalse on success otherwise MagickTrue if an error is encountered. The data is returned as char, short int, int, ssize_t, float, or double in the order specified by map.</p>
-
-<p>Suppose you want to extract the first scanline of a 640x480 image as character data in red-green-blue order:</p>
-
-<pre class="text">
- DispatchImage(image,0,0,640,1,"RGB",CharPixel,pixels,exception);
-</pre>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- ExportImagePixels(image,x_offset,y_offset,columns,rows,map,type,pixels,
- exception);
-</pre>
-
-<p>The format of the DispatchImage method is:</p>
-
-<pre class="code">
- unsigned int DispatchImage(const Image *image,const ssize_t x_offset,
- const ssize_t y_offset,const size_t columns,
- const size_t rows,const char *map,const StorageType type,
- void *pixels,ExceptionInfo *exception)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>image</h5>
-<p>the image.</p>
-
-<h5>x_offset, y_offset, columns, rows</h5>
-<p>These values define the perimeter of a region of pixels you want to extract.</p>
-
-<h5>map</h5>
-<p>This string reflects the expected ordering of the pixel array. It can be any combination or order of R = red, G = green, B = blue, A = alpha, C = cyan, Y = yellow, M = magenta, K = black, or I = intensity (for grayscale).</p>
-
-<h5>type</h5>
-<p>Define the data type of the pixels. Float and double types are normalized to [0..1] otherwise [0..QuantumRange]. Choose from these types: CharPixel, ShortPixel, IntegerPixel, LongPixel, FloatPixel, or DoublePixel.</p>
-
-<h5>pixels</h5>
-<p>This array of values contain the pixel components as defined by map and type. You must preallocate this array where the expected length varies depending on the values of width, height, map, and type.</p>
-
-<h5>exception</h5>
-<p>return any errors or warnings in this structure.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="ExtractSubimageFromImageImage">ExtractSubimageFromImageImage</a></h2>
-<div class="doc-section">
-
-<p>ExtractSubimageFromImageImage() extracts a region of the image that most closely resembles the reference.</p>
-
-<p>The format of the ExtractSubimageFromImageImage method is:</p>
-
-<pre class="code">
- Image *ExtractSubimageFromImage(const Image *image,
- const Image *reference,ExceptionInfo *exception)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>image</h5>
-<p>the image.</p>
-
-<h5>reference</h5>
-<p>find an area of the image that closely resembles this image.</p>
-
-<h5>exception</h5>
-<p>return any errors or warnings in this structure.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="FlattenImages">FlattenImages</a></h2>
-<div class="doc-section">
-
-<p>FlattenImages() Obsolete Function: Use MergeImageLayers() instead.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- MergeImageLayers(image,FlattenLayer,exception);
-</pre>
-
-<p>The format of the FlattenImage method is:</p>
-
-<pre class="code">
- Image *FlattenImage(Image *image,ExceptionInfo *exception)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>image</h5>
-<p>the image sequence.</p>
-
-<h5>exception</h5>
-<p>return any errors or warnings in this structure.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="FormatImageAttribute">FormatImageAttribute</a></h2>
-<div class="doc-section">
-
-<p>FormatImageAttribute() permits formatted key/value pairs to be saved as an image attribute.</p>
-
-<p>The format of the FormatImageAttribute method is:</p>
-
-<pre class="code">
- MagickBooleanType FormatImageAttribute(Image *image,const char *key,
- const char *format,...)
-</pre>
-
-<p>A description of each parameter follows.</p>
-
-<h5> image</h5>
-<p>The image.</p>
-
-<h5> key</h5>
-<p>The attribute key.</p>
-
-<h5> format</h5>
-<p>A string describing the format to use to write the remaining arguments.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="FormatString">FormatString</a></h2>
-<div class="doc-section">
-
-<p>FormatString() prints formatted output of a variable argument list.</p>
-
-<p>The format of the FormatString method is:</p>
-
-<pre class="code">
- void FormatString(char *string,const char *format,...)
-</pre>
-
-<p>A description of each parameter follows.</p>
-
-<h5> string</h5>
-<p>Method FormatString returns the formatted string in this character buffer.</p>
-
-<h5> format</h5>
-<p>A string describing the format to use to write the remaining arguments.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="GetConfigureBlob">GetConfigureBlob</a></h2>
-<div class="doc-section">
-
-<p>GetConfigureBlob() returns the specified configure file as a blob.</p>
-
-<p>The format of the GetConfigureBlob method is:</p>
-
-<pre class="code">
- void *GetConfigureBlob(const char *filename,ExceptionInfo *exception)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>filename</h5>
-<p>the configure file name.</p>
-
-<h5>path</h5>
-<p>return the full path information of the configure file.</p>
-
-<h5>length</h5>
-<p>This pointer to a size_t integer sets the initial length of the blob. On return, it reflects the actual length of the blob.</p>
-
-<h5>exception</h5>
-<p>return any errors or warnings in this structure.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="GetCacheView">GetCacheView</a></h2>
-<div class="doc-section">
-
-<p>GetCacheView() gets pixels from the in-memory or disk pixel cache as defined by the geometry parameters. A pointer to the pixels is returned if the pixels are transferred, otherwise a NULL is returned.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- GetCacheViewAuthenticPixels(cache_view,x,y,columns,rows,
- GetCacheViewException(cache_view));
-</pre>
-
-<p>The format of the GetCacheView method is:</p>
-
-<pre class="code">
- PixelPacket *GetCacheView(CacheView *cache_view,const ssize_t x,
- const ssize_t y,const size_t columns,const size_t rows)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>cache_view</h5>
-<p>the address of a structure of type CacheView.</p>
-
-<h5>x,y,columns,rows</h5>
-<p>These values define the perimeter of a region of pixels.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="GetCacheViewIndexes">GetCacheViewIndexes</a></h2>
-<div class="doc-section">
-
-<p>GetCacheViewIndexes() returns the indexes associated with the specified view.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- GetCacheViewAuthenticIndexQueue(cache_view);
-</pre>
-
-<p>The format of the GetCacheViewIndexes method is:</p>
-
-<pre class="code">
- IndexPacket *GetCacheViewIndexes(CacheView *cache_view)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>cache_view</h5>
-<p>the cache view.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="GetCacheViewPixels">GetCacheViewPixels</a></h2>
-<div class="doc-section">
-
-<p>GetCacheViewPixels() gets pixels from the in-memory or disk pixel cache as defined by the geometry parameters. A pointer to the pixels is returned if the pixels are transferred, otherwise a NULL is returned.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- GetCacheViewAuthenticPixels(cache_view,x,y,columns,rows,
- GetCacheViewException(cache_view));
-</pre>
-
-<p>The format of the GetCacheViewPixels method is:</p>
-
-<pre class="code">
- PixelPacket *GetCacheViewPixels(CacheView *cache_view,const ssize_t x,
- const ssize_t y,const size_t columns,const size_t rows)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>cache_view</h5>
-<p>the cache view.</p>
-
-<h5>x,y,columns,rows</h5>
-<p>These values define the perimeter of a region of pixels.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="GetImageAttribute">GetImageAttribute</a></h2>
-<div class="doc-section">
-
-<p>GetImageAttribute() searches the list of image attributes and returns a pointer to the attribute if it exists otherwise NULL.</p>
-
-<p>The format of the GetImageAttribute method is:</p>
-
-<pre class="code">
- const ImageAttribute *GetImageAttribute(const Image *image,
- const char *key)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>image</h5>
-<p>the image.</p>
-
-<h5>key</h5>
-<p>These character strings are the name of an image attribute to return.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="GetImageClippingPathAttribute">GetImageClippingPathAttribute</a></h2>
-<div class="doc-section">
-
-<p>GetImageClippingPathAttribute() searches the list of image attributes and returns a pointer to a clipping path if it exists otherwise NULL.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- GetImageAttribute(image,"8BIM:1999,2998");
-</pre>
-
-<p>The format of the GetImageClippingPathAttribute method is:</p>
-
-<pre class="code">
- const ImageAttribute *GetImageClippingPathAttribute(Image *image)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>attribute</h5>
-<p>Method GetImageClippingPathAttribute returns the clipping path if it exists otherwise NULL.</p>
-
-<h5>image</h5>
-<p>the image.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="GetImageFromMagickRegistry">GetImageFromMagickRegistry</a></h2>
-<div class="doc-section">
-
-<p>GetImageFromMagickRegistry() gets an image from the registry as defined by its name. If the image is not found, a NULL image is returned.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- GetImageRegistry(ImageRegistryType,name,exception);
-</pre>
-
-<p>The format of the GetImageFromMagickRegistry method is:</p>
-
-<pre class="code">
- Image *GetImageFromMagickRegistry(const char *name,ssize_t *id,
- ExceptionInfo *exception)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>name</h5>
-<p>the name of the image to retrieve from the registry.</p>
-
-<h5>id</h5>
-<p>the registry id.</p>
-
-<h5>exception</h5>
-<p>return any errors or warnings in this structure.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="GetMagickRegistry">GetMagickRegistry</a></h2>
-<div class="doc-section">
-
-<p>GetMagickRegistry() gets a blob from the registry as defined by the id. If the blob that matches the id is not found, NULL is returned.</p>
-
-<p>The format of the GetMagickRegistry method is:</p>
-
-<pre class="code">
- const void *GetMagickRegistry(const ssize_t id,RegistryType *type,
- size_t *length,ExceptionInfo *exception)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>id</h5>
-<p>the registry id.</p>
-
-<h5>type</h5>
-<p>the registry type.</p>
-
-<h5>length</h5>
-<p>the blob length in number of bytes.</p>
-
-<h5>exception</h5>
-<p>return any errors or warnings in this structure.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="GetImageGeometry">GetImageGeometry</a></h2>
-<div class="doc-section">
-
-<p>GetImageGeometry() returns a region as defined by the geometry string with respect to the image and its gravity.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- if (size_to_fit != MagickFalse)
- ParseRegionGeometry(image,geometry,region_info,&image->exception); else
- ParsePageGeometry(image,geometry,region_info,&image->exception);
-</pre>
-
-<p>The format of the GetImageGeometry method is:</p>
-
-<pre class="code">
- int GetImageGeometry(Image *image,const char *geometry,
- const unsigned int size_to_fit,RectangeInfo *region_info)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>flags</h5>
-<p>Method GetImageGeometry returns a bitmask that indicates which of the four values were located in the geometry string.</p>
-
-<h5>geometry</h5>
-<p>The geometry (e.g. 100x100+10+10).</p>
-
-<h5>size_to_fit</h5>
-<p>A value other than 0 means to scale the region so it fits within the specified width and height.</p>
-
-<h5>region_info</h5>
-<p>the region as defined by the geometry string with respect to the image and its gravity.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="GetImageList">GetImageList</a></h2>
-<div class="doc-section">
-
-<p>GetImageList() returns an image at the specified position in the list.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- CloneImage(GetImageFromList(images,(ssize_t) offset),0,0,MagickTrue,
- exception);
-</pre>
-
-<p>The format of the GetImageList method is:</p>
-
-<pre class="code">
- Image *GetImageList(const Image *images,const ssize_t offset,
- ExceptionInfo *exception)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>images</h5>
-<p>the image list.</p>
-
-<h5>offset</h5>
-<p>the position within the list.</p>
-
-<h5>exception</h5>
-<p>return any errors or warnings in this structure.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="GetImageListIndex">GetImageListIndex</a></h2>
-<div class="doc-section">
-
-<p>GetImageListIndex() returns the position in the list of the specified image.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- GetImageIndexInList(images);
-</pre>
-
-<p>The format of the GetImageListIndex method is:</p>
-
-<pre class="code">
- ssize_t GetImageListIndex(const Image *images)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>images</h5>
-<p>the image list.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="GetImageListSize">GetImageListSize</a></h2>
-<div class="doc-section">
-
-<p>GetImageListSize() returns the number of images in the list.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- GetImageListLength(images);
-</pre>
-
-<p>The format of the GetImageListSize method is:</p>
-
-<pre class="code">
- size_t GetImageListSize(const Image *images)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>images</h5>
-<p>the image list.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="GetImagePixels">GetImagePixels</a></h2>
-<div class="doc-section">
-
-<p>GetImagePixels() obtains a pixel region for read/write access. If the region is successfully accessed, a pointer to a PixelPacket array representing the region is returned, otherwise NULL is returned.</p>
-
-<p>The returned pointer may point to a temporary working copy of the pixels or it may point to the original pixels in memory. Performance is maximized if the selected region is part of one row, or one or more full rows, since then there is opportunity to access the pixels in-place (without a copy) if the image is in RAM, or in a memory-mapped file. The returned pointer should *never* be deallocated by the user.</p>
-
-<p>Pixels accessed via the returned pointer represent a simple array of type PixelPacket. If the image type is CMYK or if the storage class is PseduoClass, call GetAuthenticIndexQueue() after invoking GetImagePixels() to obtain the black color component or colormap indexes (of type IndexPacket) corresponding to the region. Once the PixelPacket (and/or IndexPacket) array has been updated, the changes must be saved back to the underlying image using SyncAuthenticPixels() or they may be lost.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- GetAuthenticPixels(image,x,y,columns,rows,&image->exception);
-</pre>
-
-<p>The format of the GetImagePixels() method is:</p>
-
-<pre class="code">
- PixelPacket *GetImagePixels(Image *image,const ssize_t x,const ssize_t y,
- const size_t columns,const size_t rows)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>image</h5>
-<p>the image.</p>
-
-<h5>x,y,columns,rows</h5>
-<p>These values define the perimeter of a region of pixels.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="GetIndexes">GetIndexes</a></h2>
-<div class="doc-section">
-
-<p>GetIndexes() returns the black channel or the colormap indexes associated with the last call to QueueAuthenticPixels() or GetVirtualPixels(). NULL is returned if the black channel or colormap indexes are not available.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- GetAuthenticIndexQueue(image);
-</pre>
-
-<p>The format of the GetIndexes() method is:</p>
-
-<pre class="code">
- IndexPacket *GetIndexes(const Image *image)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>indexes</h5>
-<p>GetIndexes() returns the indexes associated with the last call to QueueAuthenticPixels() or GetAuthenticPixels().</p>
-
-<h5>image</h5>
-<p>the image.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="GetNextImage">GetNextImage</a></h2>
-<div class="doc-section">
-
-<p>GetNextImage() returns the next image in a list.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- GetNextImageInList(images);
-</pre>
-
-<p>The format of the GetNextImage method is:</p>
-
-<pre class="code">
- Image *GetNextImage(const Image *images)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>images</h5>
-<p>the image list.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="GetNextImageAttribute">GetNextImageAttribute</a></h2>
-<div class="doc-section">
-
-<p>GetNextImageAttribute() gets the next image attribute.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- const char *property;
- property=GetNextImageProperty(image);
- if (property != (const char *) NULL)
- GetImageAttribute(image,property);
-</pre>
-
-<p>The format of the GetNextImageAttribute method is:</p>
-
-<pre class="code">
- const ImageAttribute *GetNextImageAttribute(const Image *image)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>image</h5>
-<p>the image.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="GetNumberScenes">GetNumberScenes</a></h2>
-<div class="doc-section">
-
-<p>GetNumberScenes() returns the number of images in the list.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- GetImageListLength(image);
-</pre>
-
-<p>The format of the GetNumberScenes method is:</p>
-
-<pre class="code">
- unsigned int GetNumberScenes(const Image *images)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>images</h5>
-<p>the image list.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="GetOnePixel">GetOnePixel</a></h2>
-<div class="doc-section">
-
-<p>GetOnePixel() returns a single pixel at the specified (x,y) location. The image background color is returned if an error occurs.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- GetOneAuthenticPixel(image,x,y,&pixel,&image->exception);
-</pre>
-
-<p>The format of the GetOnePixel() method is:</p>
-
-<pre class="code">
- PixelPacket GetOnePixel(const Image image,const ssize_t x,const ssize_t y)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>image</h5>
-<p>the image.</p>
-
-<h5>x,y</h5>
-<p>These values define the location of the pixel to return.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="GetPixels">GetPixels</a></h2>
-<div class="doc-section">
-
-<p>GetPixels() returns the pixels associated with the last call to QueueAuthenticPixels() or GetAuthenticPixels().</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- GetAuthenticPixelQueue(image);
-</pre>
-
-<p>The format of the GetPixels() method is:</p>
-
-<pre class="code">
- PixelPacket *GetPixels(const Image image)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>pixels</h5>
-<p>GetPixels() returns the pixels associated with the last call to QueueAuthenticPixels() or GetAuthenticPixels().</p>
-
-<h5>image</h5>
-<p>the image.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="GetPreviousImage">GetPreviousImage</a></h2>
-<div class="doc-section">
-
-<p>GetPreviousImage() returns the previous image in a list.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- GetPreviousImageInList(images));
-</pre>
-
-<p>The format of the GetPreviousImage method is:</p>
-
-<pre class="code">
- Image *GetPreviousImage(const Image *images)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>images</h5>
-<p>the image list.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="HSLTransform">HSLTransform</a></h2>
-<div class="doc-section">
-
-<p>HSLTransform() converts a (hue, saturation, lightness) to a (red, green, blue) triple.</p>
-
-<p>The format of the HSLTransformImage method is:</p>
-
-<pre class="code">
- void HSLTransform(const double hue,const double saturation,
- const double lightness,Quantum *red,Quantum *green,Quantum *blue)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>hue, saturation, lightness</h5>
-<p>A double value representing a component of the HSL color space.</p>
-
-<h5>red, green, blue</h5>
-<p>A pointer to a pixel component of type Quantum.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="IdentityAffine">IdentityAffine</a></h2>
-<div class="doc-section">
-
-<p>IdentityAffine() initializes the affine transform to the identity matrix.</p>
-
-<p>The format of the IdentityAffine method is:</p>
-
-<pre class="code">
- IdentityAffine(AffineMatrix *affine)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>affine</h5>
-<p>A pointer the affine transform of type AffineMatrix.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="InitializeMagick">InitializeMagick</a></h2>
-<div class="doc-section">
-
-<p>InitializeMagick() initializes the ImageMagick environment.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- MagickCoreGenesis(path,MagickFalse);
-</pre>
-
-<p>The format of the InitializeMagick function is:</p>
-
-<pre class="text">
- InitializeMagick(const char *path)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>path</h5>
-<p>the execution path of the current ImageMagick client.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="InterpolatePixelColor">InterpolatePixelColor</a></h2>
-<div class="doc-section">
-
-<p>InterpolatePixelColor() applies bi-linear or tri-linear interpolation between a pixel and it's neighbors.</p>
-
-<p>The format of the InterpolatePixelColor method is:</p>
-
-<pre class="code">
- MagickPixelPacket InterpolatePixelColor(const Image *image,
- CacheView *view_info,InterpolatePixelMethod method,const double x,
- const double y,ExceptionInfo *exception)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>image</h5>
-<p>the image.</p>
-
-<h5>image_view</h5>
-<p>the image cache view.</p>
-
-<h5>type</h5>
-<p>the type of pixel color interpolation.</p>
-
-<h5>x,y</h5>
-<p>A double representing the current (x,y) position of the pixel.</p>
-
-<h5>exception</h5>
-<p>return any errors or warnings in this structure.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="InterpretImageAttributes">InterpretImageAttributes</a></h2>
-<div class="doc-section">
-
-<p>InterpretImageAttributes() replaces any embedded formatting characters with the appropriate image attribute and returns the translated text.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- InterpretImageProperties(image_info,image,embed_text);
-</pre>
-
-<p>The format of the InterpretImageAttributes method is:</p>
-
-<pre class="code">
- char *InterpretImageAttributes(const ImageInfo *image_info,Image *image,
- const char *embed_text)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>image_info</h5>
-<p>the image info.</p>
-
-<h5>image</h5>
-<p>the image.</p>
-
-<h5>embed_text</h5>
-<p>the address of a character string containing the embedded formatting characters.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="LevelImageColor">LevelImageColor</a></h2>
-<div class="doc-section">
-
-<p>LevelImageColor() will map the given color to "black" and "white" values, limearly spreading out the colors, and level values on a channel by channel bases, as per LevelImage(). The given colors allows you to specify different level ranges for each of the color channels separately.</p>
-
-<p>If the boolean 'invert' is set true the image values will modifyed in the reverse direction. That is any existing "black" and "white" colors in the image will become the color values given, with all other values compressed appropriatally. This effectivally maps a greyscale gradient into the given color gradient.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- LevelColorsImageChannel(image,channel,black_color,white_color,invert);
-</pre>
-
-<p>The format of the LevelImageColors method is:</p>
-
-<pre class="code">
- MagickBooleanType LevelImageColors(Image *image,const ChannelType channel,
- const MagickPixelPacket *black_color,const MagickPixelPacket *white_color,
- const MagickBooleanType invert)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>image</h5>
-<p>the image.</p>
-
-<h5>channel</h5>
-<p>the channel.</p>
-
-<h5>black_color</h5>
-<p>The color to map black to/from</p>
-
-<h5>white_point</h5>
-<p>The color to map white to/from</p>
-
-<h5>invert</h5>
-<p>if true map the colors (levelize), rather than from (level)</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="LiberateMemory">LiberateMemory</a></h2>
-<div class="doc-section">
-
-<p>LiberateMemory() frees memory that has already been allocated, and NULL's the pointer to it.</p>
-
-<p>The format of the LiberateMemory method is:</p>
-
-<pre class="code">
- void LiberateMemory(void **memory)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>memory</h5>
-<p>A pointer to a block of memory to free for reuse.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="LiberateSemaphoreInfo">LiberateSemaphoreInfo</a></h2>
-<div class="doc-section">
-
-<p>LiberateSemaphoreInfo() relinquishes a semaphore.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- UnlockSemaphoreInfo(*semaphore_info);
-</pre>
-
-<p>The format of the LiberateSemaphoreInfo method is:</p>
-
-<pre class="code">
- LiberateSemaphoreInfo(void **semaphore_info)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>semaphore_info</h5>
-<p>Specifies a pointer to an SemaphoreInfo structure.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="MagickIncarnate">MagickIncarnate</a></h2>
-<div class="doc-section">
-
-<p>MagickIncarnate() initializes the ImageMagick environment.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- MagickCoreGenesis(path,MagickFalse);
-</pre>
-
-<p>The format of the MagickIncarnate function is:</p>
-
-<pre class="text">
- MagickIncarnate(const char *path)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>path</h5>
-<p>the execution path of the current ImageMagick client.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="MagickMonitor">MagickMonitor</a></h2>
-<div class="doc-section">
-
-<p>MagickMonitor() calls the monitor handler method with a text string that describes the task and a measure of completion. The method returns MagickTrue on success otherwise MagickFalse if an error is encountered, e.g. if there was a user interrupt.</p>
-
-<p>The format of the MagickMonitor method is:</p>
-
-<pre class="code">
- MagickBooleanType MagickMonitor(const char *text,
- const MagickOffsetType offset,const MagickSizeType span,
- void *client_data)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>offset</h5>
-<p>the position relative to the span parameter which represents how much progress has been made toward completing a task.</p>
-
-<h5>span</h5>
-<p>the span relative to completing a task.</p>
-
-<h5>client_data</h5>
-<p>the client data.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="MapImage">MapImage</a></h2>
-<div class="doc-section">
-
-<p>MapImage() replaces the colors of an image with the closest color from a reference image.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- QuantizeInfo quantize_info;
- GetQuantizeInfo(&quantize_info);
- quantize_info.dither=dither;
- RemapImage(&quantize_info,image,map_image);
-</pre>
-
-<p>The format of the MapImage method is:</p>
-
-<pre class="code">
- MagickBooleanType MapImage(Image *image,const Image *map_image,
- const MagickBooleanType dither)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>image</h5>
-<p>Specifies a pointer to an Image structure.</p>
-
-<h5>map_image</h5>
-<p>the image. Reduce image to a set of colors represented by this image.</p>
-
-<h5>dither</h5>
-<p>Set this integer value to something other than zero to dither the mapped image.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="MapImages">MapImages</a></h2>
-<div class="doc-section">
-
-<p>MapImages() replaces the colors of a sequence of images with the closest color from a reference image.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- QuantizeInfo quantize_info;
- GetQuantizeInfo(&quantize_info);
- quantize_info.dither=dither;
- RemapImages(&quantize_info,images,map_image);
-</pre>
-
-<p>The format of the MapImage method is:</p>
-
-<pre class="code">
- MagickBooleanType MapImages(Image *images,Image *map_image,
- const MagickBooleanType dither)
-</pre>
-
-<p>A description of each parameter follows:</p>
-
-<h5>image</h5>
-<p>Specifies a pointer to a set of Image structures.</p>
-
-<h5>map_image</h5>
-<p>the image. Reduce image to a set of colors represented by this image.</p>
-
-<h5>dither</h5>
-<p>Set this integer value to something other than zero to dither the quantized image.</p>
-
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="MatteFloodfill">MatteFloodfill</a></h2>
-<div class="doc-section">
-
-<p>MatteFloodfill() changes the transparency value of any pixel that matches target and is an immediate neighbor. If the method FillToBorderMethod is specified, the transparency value is changed for any neighbor pixel that does not match the bordercolor member of image.</p>
-
-<p>By default target must match a particular pixel transparency exactly. However, in many cases two transparency values may differ by a small amount. The fuzz member of image defines how much tolerance is acceptable to consider two transparency values as the same. For example, set fuzz to 10 and the opacity values of 100 and 102 respectively are now interpreted as the same value for the purposes of the floodfill.</p>
+<p>GetPixelViewPixels() returns the pixel view pixel_wands.</p>
-<p>The format of the MatteFloodfillImage method is:</p>
+<p>The format of the GetPixelViewPixels method is:</p>
<pre class="code">
- MagickBooleanType MatteFloodfillImage(Image *image,
- const PixelPacket target,const Quantum opacity,const ssize_t x_offset,
- const ssize_t y_offset,const PaintMethod method)
+ PixelWand *GetPixelViewPixels(const PixelView *pixel_view)
</pre>
<p>A description of each parameter follows:</p>
-<h5>image</h5>
-<p>the image.</p>
-
-<h5>target</h5>
-<p>the RGB value of the target color.</p>
-
-<h5>opacity</h5>
-<p>the level of transparency: 0 is fully opaque and QuantumRange is fully transparent.</p>
-
-<h5>x,y</h5>
-<p>the starting location of the operation.</p>
-
-<h5>method</h5>
-<p>Choose either FloodfillMethod or FillToBorderMethod.</p>
+<h5>pixel_view</h5>
+<p>the pixel view.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="MaximumImages">MaximumImages</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="GetPixelViewWand">GetPixelViewWand</a></h2>
<div class="doc-section">
-<p>MaximumImages() returns the maximum intensity of an image sequence.</p>
-
-<p>Deprecated, replace with:</p>
+<p>GetPixelViewWand() returns the magick wand associated with the pixel view.</p>
-<pre class="text">
- EvaluateImages(images,MinEvaluateOperator,exception);
-</pre>
-
-<p>The format of the MaxImages method is:</p>
+<p>The format of the GetPixelViewWand method is:</p>
<pre class="code">
- Image *MaximumImages(Image *images,ExceptionInfo *exception)
+ MagickWand *GetPixelViewWand(const PixelView *pixel_view)
</pre>
<p>A description of each parameter follows:</p>
-<h5>images</h5>
-<p>the image sequence.</p>
-
-<h5>exception</h5>
-<p>return any errors or warnings in this structure.</p>
+<h5>pixel_view</h5>
+<p>the pixel view.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="MinimumImages">MinimumImages</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="GetPixelViewWidth">GetPixelViewWidth</a></h2>
<div class="doc-section">
-<p>MinimumImages() returns the minimum intensity of an image sequence.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- EvaluateImages(images,MinEvaluateOperator,exception);
-</pre>
+<p>GetPixelViewWidth() returns the pixel view width.</p>
-<p>The format of the MinimumImages method is:</p>
+<p>The format of the GetPixelViewWidth method is:</p>
<pre class="code">
- Image *MinimumImages(Image *images,ExceptionInfo *exception)
+ size_t GetPixelViewWidth(const PixelView *pixel_view)
</pre>
<p>A description of each parameter follows:</p>
-<h5>images</h5>
-<p>the image sequence.</p>
-
-<h5>exception</h5>
-<p>return any errors or warnings in this structure.</p>
+<h5>pixel_view</h5>
+<p>the pixel view.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="MedianFilterImage">MedianFilterImage</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="GetPixelViewX">GetPixelViewX</a></h2>
<div class="doc-section">
-<p>MedianFilterImage() applies a digital filter that improves the quality of a noisy image. Each pixel is replaced by the median in a set of neighboring pixels as defined by radius.</p>
-
-<p>The algorithm was contributed by Mike Edmonds and implements an insertion sort for selecting median color-channel values. For more on this algorithm see "Skip Lists: A probabilistic Alternative to Balanced Trees" by William Pugh in the June 1990 of Communications of the ACM.</p>
+<p>GetPixelViewX() returns the pixel view x offset.</p>
-<p>The format of the MedianFilterImage method is:</p>
+<p>The format of the GetPixelViewX method is:</p>
<pre class="code">
- Image *MedianFilterImage(const Image *image,const double radius,
- ExceptionInfo *exception)
+ ssize_t GetPixelViewX(const PixelView *pixel_view)
</pre>
<p>A description of each parameter follows:</p>
-<h5>image</h5>
-<p>the image.</p>
-
-<h5>radius</h5>
-<p>the radius of the pixel neighborhood.</p>
-
-<h5>exception</h5>
-<p>return any errors or warnings in this structure.</p>
+<h5>pixel_view</h5>
+<p>the pixel view.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="ModeImage">ModeImage</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="GetPixelViewY">GetPixelViewY</a></h2>
<div class="doc-section">
-<p>ModeImage() makes each pixel the 'predominate color' of the neighborhood of the specified radius.</p>
+<p>GetPixelViewY() returns the pixel view y offset.</p>
-<p>The format of the ModeImage method is:</p>
+<p>The format of the GetPixelViewY method is:</p>
<pre class="code">
- Image *ModeImage(const Image *image,const double radius,
- ExceptionInfo *exception)
+ ssize_t GetPixelViewY(const PixelView *pixel_view)
</pre>
<p>A description of each parameter follows:</p>
-<h5>image</h5>
-<p>the image.</p>
-
-<h5>radius</h5>
-<p>the radius of the pixel neighborhood.</p>
-
-<h5>exception</h5>
-<p>return any errors or warnings in this structure.</p>
+<h5>pixel_view</h5>
+<p>the pixel view.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="MosaicImages">MosaicImages</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="IsPixelView">IsPixelView</a></h2>
<div class="doc-section">
-<p>MosaicImages() Obsolete Function: Use MergeImageLayers() instead.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- MergeImageLayers(image,MosaicLayer,exception);
-</pre>
+<p>IsPixelView() returns MagickTrue if the the parameter is verified as a pixel view container.</p>
-<p>The format of the MosaicImage method is:</p>
+<p>The format of the IsPixelView method is:</p>
<pre class="code">
- Image *MosaicImages(const Image *image,ExceptionInfo *exception)
+ MagickBooleanType IsPixelView(const PixelView *pixel_view)
</pre>
<p>A description of each parameter follows:</p>
-<h5>image</h5>
-<p>the image list to be composited together</p>
-
-<h5>exception</h5>
-<p>return any errors or warnings in this structure.</p>
+<h5>pixel_view</h5>
+<p>the pixel view.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="OpaqueImage">OpaqueImage</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="MagickClipPathImage">MagickClipPathImage</a></h2>
<div class="doc-section">
-<p>OpaqueImage() changes any pixel that matches color with the color defined by fill.</p>
-
-<p>By default color must match a particular pixel color exactly. However, in many cases two colors may differ by a small amount. Fuzz defines how much tolerance is acceptable to consider two colors as the same. For example, set fuzz to 10 and the color red at intensities of 100 and 102 respectively are now interpreted as the same color.</p>
+<p>MagickClipPathImage() clips along the named paths from the 8BIM profile, if present. Later operations take effect inside the path. Id may be a number if preceded with #, to work on a numbered path, e.g., "#1" to use the first path.</p>
-<p>The format of the OpaqueImage method is:</p>
+<p>The format of the MagickClipPathImage method is:</p>
<pre class="code">
- MagickBooleanType OpaqueImage(Image *image,
- const PixelPacket *target,const PixelPacket fill)
+ MagickBooleanType MagickClipPathImage(MagickWand *wand,
+ const char *pathname,const MagickBooleanType inside)
</pre>
<p>A description of each parameter follows:</p>
-<h5>image</h5>
-<p>the image.</p>
+<h5>wand</h5>
+<p>the magick wand.</p>
-<h5>target</h5>
-<p>the RGB value of the target color.</p>
+<h5>pathname</h5>
+<p>name of clipping path resource. If name is preceded by #, use clipping path numbered by name.</p>
-<h5>fill</h5>
-<p>the replacement color.</p>
+<h5>inside</h5>
+<p>if non-zero, later operations take effect inside clipping path. Otherwise later operations take effect outside clipping path.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="OpenCacheView">OpenCacheView</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="DrawGetFillAlpha">DrawGetFillAlpha</a></h2>
<div class="doc-section">
-<p>OpenCacheView() opens a view into the pixel cache, using the VirtualPixelMethod that is defined within the given image itself.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- AcquireCacheView(image);
-</pre>
+<p>DrawGetFillAlpha() returns the alpha used when drawing using the fill color or fill texture. Fully opaque is 1.0.</p>
-<p>The format of the OpenCacheView method is:</p>
+<p>The format of the DrawGetFillAlpha method is:</p>
<pre class="code">
- CacheView *OpenCacheView(const Image *image)
+ double DrawGetFillAlpha(const DrawingWand *wand)
</pre>
<p>A description of each parameter follows:</p>
-<h5>image</h5>
-<p>the image.</p>
+<h5>wand</h5>
+<p>the drawing wand.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="PaintFloodfill">PaintFloodfill</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="DrawGetStrokeAlpha">DrawGetStrokeAlpha</a></h2>
<div class="doc-section">
-<p>PaintFloodfill() changes the color value of any pixel that matches target and is an immediate neighbor. If the method FillToBorderMethod is specified, the color value is changed for any neighbor pixel that does not match the bordercolor member of image.</p>
-
-<p>By default target must match a particular pixel color exactly. However, in many cases two colors may differ by a small amount. The fuzz member of image defines how much tolerance is acceptable to consider two colors as the same. For example, set fuzz to 10 and the color red at intensities of 100 and 102 respectively are now interpreted as the same color for the purposes of the floodfill.</p>
-
-<p>Deprecated, replace with:</p>
+<p>DrawGetStrokeAlpha() returns the alpha of stroked object outlines.</p>
-<pre class="text">
- FloodfillPaintImage(image,channel,draw_info,target,x,y,
- method == FloodfillMethod ? MagickFalse : MagickTrue);
-</pre>
-
-<p>The format of the PaintFloodfillImage method is:</p>
+<p>The format of the DrawGetStrokeAlpha method is:</p>
<pre class="code">
- MagickBooleanType PaintFloodfillImage(Image *image,
- const ChannelType channel,const MagickPixelPacket target,const ssize_t x,
- const ssize_t y,const DrawInfo *draw_info,const PaintMethod method)
+ double DrawGetStrokeAlpha(const DrawingWand *wand)
</pre>
<p>A description of each parameter follows:</p>
-<h5>image</h5>
-<p>the image.</p>
+<h5>wand</h5>
+<p>the drawing wand. </p>
+ </div>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="DrawPeekGraphicWand">DrawPeekGraphicWand</a></h2>
+<div class="doc-section">
-<h5>channel</h5>
-<p>the channel(s).</p>
+<p>DrawPeekGraphicWand() returns the current drawing wand.</p>
-<h5>target</h5>
-<p>the RGB value of the target color.</p>
+<p>The format of the PeekDrawingWand method is:</p>
-<h5>x,y</h5>
-<p>the starting location of the operation.</p>
+<pre class="code">
+ DrawInfo *DrawPeekGraphicWand(const DrawingWand *wand)
+</pre>
-<h5>draw_info</h5>
-<p>the draw info.</p>
+<p>A description of each parameter follows:</p>
-<h5>method</h5>
-<p>Choose either FloodfillMethod or FillToBorderMethod.</p>
+<h5>wand</h5>
+<p>the drawing wand.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="PaintOpaqueImage">PaintOpaqueImage</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="DrawPopGraphicContext">DrawPopGraphicContext</a></h2>
<div class="doc-section">
-<p>PaintOpaqueImage() changes any pixel that matches color with the color defined by fill.</p>
-
-<p>By default color must match a particular pixel color exactly. However, in many cases two colors may differ by a small amount. Fuzz defines how much tolerance is acceptable to consider two colors as the same. For example, set fuzz to 10 and the color red at intensities of 100 and 102 respectively are now interpreted as the same color.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- OpaquePaintImageChannel(image,DefaultChannels,target,fill,MagickFalse);
- OpaquePaintImageChannel(image,channel,target,fill,MagickFalse);
-</pre>
+<p>DrawPopGraphicContext() destroys the current drawing wand and returns to the previously pushed drawing wand. Multiple drawing wands may exist. It is an error to attempt to pop more drawing wands than have been pushed, and it is proper form to pop all drawing wands which have been pushed.</p>
-<p>The format of the PaintOpaqueImage method is:</p>
+<p>The format of the DrawPopGraphicContext method is:</p>
<pre class="code">
- MagickBooleanType PaintOpaqueImage(Image *image,
- const PixelPacket *target,const PixelPacket *fill)
- MagickBooleanType PaintOpaqueImageChannel(Image *image,
- const ChannelType channel,const PixelPacket *target,
- const PixelPacket *fill)
+ MagickBooleanType DrawPopGraphicContext(DrawingWand *wand)
</pre>
<p>A description of each parameter follows:</p>
-<h5>image</h5>
-<p>the image.</p>
-
-<h5>channel</h5>
-<p>the channel(s).</p>
-
-<h5>target</h5>
-<p>the RGB value of the target color.</p>
-
-<h5>fill</h5>
-<p>the replacement color.</p>
+<h5>wand</h5>
+<p>the drawing wand.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="PaintTransparentImage">PaintTransparentImage</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="DrawPushGraphicContext">DrawPushGraphicContext</a></h2>
<div class="doc-section">
-<p>PaintTransparentImage() changes the opacity value associated with any pixel that matches color to the value defined by opacity.</p>
-
-<p>By default color must match a particular pixel color exactly. However, in many cases two colors may differ by a small amount. Fuzz defines how much tolerance is acceptable to consider two colors as the same. For example, set fuzz to 10 and the color red at intensities of 100 and 102 respectively are now interpreted as the same color.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- TransparentPaintImage(image,target,opacity,MagickFalse);
-</pre>
+<p>DrawPushGraphicContext() clones the current drawing wand to create a new drawing wand. The original drawing wand(s) may be returned to by invoking PopDrawingWand(). The drawing wands are stored on a drawing wand stack. For every Pop there must have already been an equivalent Push.</p>
-<p>The format of the PaintTransparentImage method is:</p>
+<p>The format of the DrawPushGraphicContext method is:</p>
<pre class="code">
- MagickBooleanType PaintTransparentImage(Image *image,
- const MagickPixelPacket *target,const Quantum opacity)
+ MagickBooleanType DrawPushGraphicContext(DrawingWand *wand)
</pre>
<p>A description of each parameter follows:</p>
-<h5>image</h5>
-<p>the image.</p>
-
-<h5>target</h5>
-<p>the RGB value of the target color.</p>
-
-<h5>opacity</h5>
-<p>the replacement opacity value.</p>
+<h5>wand</h5>
+<p>the drawing wand.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="ParseSizeGeometry">ParseSizeGeometry</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="DrawSetFillAlpha">DrawSetFillAlpha</a></h2>
<div class="doc-section">
-<p>ParseSizeGeometry() returns a region as defined by the geometry string with respect to the image dimensions and aspect ratio.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- ParseMetaGeometry(geometry,®ion_info->x,®ion_info->y,
- ®ion_info->width,®ion_info->height);
-</pre>
+<p>DrawSetFillAlpha() sets the alpha to use when drawing using the fill color or fill texture. Fully opaque is 1.0.</p>
-<p>The format of the ParseSizeGeometry method is:</p>
+<p>The format of the DrawSetFillAlpha method is:</p>
<pre class="code">
- MagickStatusType ParseSizeGeometry(const Image *image,
- const char *geometry,RectangeInfo *region_info)
+ void DrawSetFillAlpha(DrawingWand *wand,const double fill_alpha)
</pre>
<p>A description of each parameter follows:</p>
-<h5>geometry</h5>
-<p>The geometry (e.g. 100x100+10+10).</p>
+<h5>wand</h5>
+<p>the drawing wand.</p>
-<h5>region_info</h5>
-<p>the region as defined by the geometry string.</p>
+<h5>fill_alpha</h5>
+<p>fill alpha</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="PopImageList">PopImageList</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="DrawSetStrokeAlpha">DrawSetStrokeAlpha</a></h2>
<div class="doc-section">
-<p>PopImageList() removes the last image in the list.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- RemoveLastImageFromList(images);
-</pre>
+<p>DrawSetStrokeAlpha() specifies the alpha of stroked object outlines.</p>
-<p>The format of the PopImageList method is:</p>
+<p>The format of the DrawSetStrokeAlpha method is:</p>
<pre class="code">
- Image *PopImageList(Image **images)
+ void DrawSetStrokeAlpha(DrawingWand *wand,const double stroke_alpha)
</pre>
<p>A description of each parameter follows:</p>
-<h5>images</h5>
-<p>the image list.</p>
+<h5>wand</h5>
+<p>the drawing wand.</p>
+
+<h5>stroke_alpha</h5>
+<p>stroke alpha. The value 1.0 is opaque.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="PopImagePixels">PopImagePixels</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="MagickColorFloodfillImage">MagickColorFloodfillImage</a></h2>
<div class="doc-section">
-<p>PopImagePixels() transfers one or more pixel components from the image pixel cache to a user supplied buffer. The pixels are returned in network byte order. MagickTrue is returned if the pixels are successfully transferred, otherwise MagickFalse.</p>
+<p>MagickColorFloodfillImage() changes the color value of any pixel that matches target and is an immediate neighbor. If the method FillToBorderMethod is specified, the color value is changed for any neighbor pixel that does not match the bordercolor member of image.</p>
-<p>The format of the PopImagePixels method is:</p>
+<p>The format of the MagickColorFloodfillImage method is:</p>
<pre class="code">
- size_t PopImagePixels(Image *,const QuantumType quantum,
- unsigned char *destination)
+ MagickBooleanType MagickColorFloodfillImage(MagickWand *wand,
+ const PixelWand *fill,const double fuzz,const PixelWand *bordercolor,
+ const ssize_t x,const ssize_t y)
</pre>
<p>A description of each parameter follows:</p>
-<h5>image</h5>
-<p>the image.</p>
+<h5>wand</h5>
+<p>the magick wand.</p>
-<h5>quantum</h5>
-<p>Declare which pixel components to transfer (RGB, RGBA, etc).</p>
+<h5>fill</h5>
+<p>the floodfill color pixel wand.</p>
-<h5>destination</h5>
-<p>The components are transferred to this buffer.</p>
+<h5>fuzz</h5>
+<p>By default target must match a particular pixel color exactly. However, in many cases two colors may differ by a small amount. The fuzz member of image defines how much tolerance is acceptable to consider two colors as the same. For example, set fuzz to 10 and the color red at intensities of 100 and 102 respectively are now interpreted as the same color for the purposes of the floodfill.</p>
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="PostscriptGeometry">PostscriptGeometry</a></h2>
-<div class="doc-section">
+<h5>bordercolor</h5>
+<p>the border color pixel wand.</p>
-<p>PostscriptGeometry() replaces any page mneumonic with the equivalent size in picas.</p>
+<h5>x,y</h5>
+<p>the starting location of the operation.</p>
-<p>Deprecated, replace with:</p>
+ </div>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="MagickDescribeImage">MagickDescribeImage</a></h2>
+<div class="doc-section">
-<pre class="text">
- GetPageGeometry(page);
-</pre>
+<p>MagickDescribeImage() identifies an image by printing its attributes to the file. Attributes include the image width, height, size, and others.</p>
-<p>The format of the PostscriptGeometry method is:</p>
+<p>The format of the MagickDescribeImage method is:</p>
<pre class="code">
- char *PostscriptGeometry(const char *page)
+ const char *MagickDescribeImage(MagickWand *wand)
</pre>
-<p>A description of each parameter follows.</p>
+<p>A description of each parameter follows:</p>
-<h5> page</h5>
-<p>Specifies a pointer to an array of characters. The string is either a Postscript page name (e.g. A4) or a postscript page geometry (e.g. 612x792+36+36).</p>
+<h5>wand</h5>
+<p>the magick wand.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="PushImageList">PushImageList</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="MagickFlattenImages">MagickFlattenImages</a></h2>
<div class="doc-section">
-<p>PushImageList() adds an image to the end of the list.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- AppendImageToList(images,CloneImageList(image,exception));
-</pre>
+<p>MagickFlattenImages() merges a sequence of images. This useful for combining Photoshop layers into a single image.</p>
-<p>The format of the PushImageList method is:</p>
+<p>The format of the MagickFlattenImages method is:</p>
<pre class="code">
- unsigned int PushImageList(Image *images,const Image *image,
- ExceptionInfo *exception)
+ MagickWand *MagickFlattenImages(MagickWand *wand)
</pre>
<p>A description of each parameter follows:</p>
-<h5>images</h5>
-<p>the image list.</p>
-
-<h5>image</h5>
-<p>the image.</p>
-
-<h5>exception</h5>
-<p>return any errors or warnings in this structure.</p>
+<h5>wand</h5>
+<p>the magick wand.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="PushImagePixels">PushImagePixels</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="MagickGetImageAttribute">MagickGetImageAttribute</a></h2>
<div class="doc-section">
-<p>PushImagePixels() transfers one or more pixel components from a user supplied buffer into the image pixel cache of an image. The pixels are expected in network byte order. It returns MagickTrue if the pixels are successfully transferred, otherwise MagickFalse.</p>
+<p>MagickGetImageAttribute() returns a value associated with the specified property. Use MagickRelinquishMemory() to free the value when you are finished with it.</p>
-<p>The format of the PushImagePixels method is:</p>
+<p>The format of the MagickGetImageAttribute method is:</p>
<pre class="code">
- size_t PushImagePixels(Image *image,const QuantumType quantum,
- const unsigned char *source)
+ char *MagickGetImageAttribute(MagickWand *wand,const char *property)
</pre>
<p>A description of each parameter follows:</p>
-<h5>image</h5>
-<p>the image.</p>
-
-<h5>quantum</h5>
-<p>Declare which pixel components to transfer (red, green, blue, opacity, RGB, or RGBA).</p>
+<h5>wand</h5>
+<p>the magick wand.</p>
-<h5>source</h5>
-<p>The pixel components are transferred from this buffer.</p>
+<h5>property</h5>
+<p>the property.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="QuantizationError">QuantizationError</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="MagickGetImageMatte">MagickGetImageMatte</a></h2>
<div class="doc-section">
-<p>QuantizationError() measures the difference between the original and quantized images. This difference is the total quantization error. The error is computed by summing over all pixels in an image the distance squared in RGB space between each reference pixel value and its quantized value. These values are computed:</p>
+<p>MagickGetImageMatte() returns MagickTrue if the image has a matte channel otherwise MagickFalse.</p>
-<pre class="text">
- o mean_error_per_pixel: This value is the mean error for any single
- pixel in the image.
+<p>The format of the MagickGetImageMatte method is:</p>
+
+<pre class="code">
+ size_t MagickGetImageMatte(MagickWand *wand)
</pre>
-<h5>normalized_mean_square_error</h5>
-<p>This value is the normalized mean quantization error for any single pixel in the image. This distance measure is normalized to a range between 0 and 1. It is independent of the range of red, green, and blue values in the image.</p>
+<p>A description of each parameter follows:</p>
+
+<h5>wand</h5>
+<p>the magick wand.</p>
+
+ </div>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="MagickGetImagePixels">MagickGetImagePixels</a></h2>
+<div class="doc-section">
-<h5>normalized_maximum_square_error</h5>
-<p>Thsi value is the normalized maximum quantization error for any single pixel in the image. This distance measure is normalized to a range between 0 and 1. It is independent of the range of red, green, and blue values in your image.</p>
+<p>MagickGetImagePixels() extracts pixel data from an image and returns it to you. The method returns MagickTrue on success otherwise MagickFalse if an error is encountered. The data is returned as char, short int, int, ssize_t, float, or double in the order specified by map.</p>
-<p>Deprecated, replace with:</p>
+<p>Suppose you want to extract the first scanline of a 640x480 image as character data in red-green-blue order:</p>
<pre class="text">
- GetImageQuantizeError(image);
+ MagickGetImagePixels(wand,0,0,640,1,"RGB",CharPixel,pixels);
</pre>
-<p>The format of the QuantizationError method is:</p>
+<p>The format of the MagickGetImagePixels method is:</p>
<pre class="code">
- unsigned int QuantizationError(Image *image)
+ MagickBooleanType MagickGetImagePixels(MagickWand *wand,
+ const ssize_t x,const ssize_t y,const size_t columns,
+ const size_t rows,const char *map,const StorageType storage,
+ void *pixels)
</pre>
-<p>A description of each parameter follows.</p>
+<p>A description of each parameter follows:</p>
+
+<h5>wand</h5>
+<p>the magick wand.</p>
+
+<h5>x, y, columns, rows</h5>
+<p>These values define the perimeter of a region of pixels you want to extract.</p>
+
+<h5>map</h5>
+<p>This string reflects the expected ordering of the pixel array. It can be any combination or order of R = red, G = green, B = blue, A = alpha (0 is transparent), O = opacity (0 is opaque), C = cyan, Y = yellow, M = magenta, K = black, I = intensity (for grayscale), P = pad.</p>
+
+<h5>storage</h5>
+<p>Define the data type of the pixels. Float and double types are expected to be normalized [0..1] otherwise [0..QuantumRange]. Choose from these types: CharPixel, DoublePixel, FloatPixel, IntegerPixel, LongPixel, QuantumPixel, or ShortPixel.</p>
-<h5>image</h5>
-<p>Specifies a pointer to an Image structure; returned from ReadImage.</p>
+<h5>pixels</h5>
+<p>This array of values contain the pixel components as defined by map and type. You must preallocate this array where the expected length varies depending on the values of width, height, map, and type.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="RandomChannelThresholdImage">RandomChannelThresholdImage</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="MagickGetImageSize">MagickGetImageSize</a></h2>
<div class="doc-section">
-<p>RandomChannelThresholdImage() changes the value of individual pixels based on the intensity of each pixel compared to a random threshold. The result is a low-contrast, two color image.</p>
+<p>MagickGetImageSize() returns the image length in bytes.</p>
-<p>The format of the RandomChannelThresholdImage method is:</p>
+<p>The format of the MagickGetImageSize method is:</p>
<pre class="code">
- unsigned int RandomChannelThresholdImage(Image *image,
- const char *channel, const char *thresholds,
- ExceptionInfo *exception)
+ MagickBooleanType MagickGetImageSize(MagickWand *wand,
+ MagickSizeType *length)
</pre>
<p>A description of each parameter follows:</p>
-<h5>image</h5>
-<p>the image.</p>
+<h5>wand</h5>
+<p>the magick wand.</p>
-<h5>channel</h5>
-<p>the channel or channels to be thresholded.</p>
-
-<h5>thresholds</h5>
-<p>a geometry string containing LOWxHIGH thresholds. If the string contains 2x2, 3x3, or 4x4, then an ordered dither of order 2, 3, or 4 will be performed instead.</p>
-
-<h5>exception</h5>
-<p>return any errors or warnings in this structure.</p>
+<h5>length</h5>
+<p>the image length in bytes.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="ReacquireMemory">ReacquireMemory</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="MagickMapImage">MagickMapImage</a></h2>
<div class="doc-section">
-<p>ReacquireMemory() changes the size of the memory and returns a pointer to the (possibly moved) block. The contents will be unchanged up to the lesser of the new and old sizes.</p>
+<p>MagickMapImage() replaces the colors of an image with the closest color from a reference image.</p>
-<p>The format of the ReacquireMemory method is:</p>
+<p>The format of the MagickMapImage method is:</p>
<pre class="code">
- void ReacquireMemory(void **memory,const size_t size)
+ MagickBooleanType MagickMapImage(MagickWand *wand,
+ const MagickWand *map_wand,const MagickBooleanType dither)
</pre>
<p>A description of each parameter follows:</p>
-<h5>memory</h5>
-<p>A pointer to a memory allocation. On return the pointer may change but the contents of the original allocation will not.</p>
+<h5>wand</h5>
+<p>the magick wand.</p>
-<h5>size</h5>
-<p>the new size of the allocated memory.</p>
+<h5>map</h5>
+<p>the map wand.</p>
+
+<h5>dither</h5>
+<p>Set this integer value to something other than zero to dither the mapped image.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="RecolorImage">RecolorImage</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="MagickMatteFloodfillImage">MagickMatteFloodfillImage</a></h2>
<div class="doc-section">
-<p>RecolorImage() apply color transformation to an image. The method permits saturation changes, hue rotation, luminance to alpha, and various other effects. Although variable-sized transformation matrices can be used, typically one uses a 5x5 matrix for an RGBA image and a 6x6 for CMYKA (or RGBA with offsets). The matrix is similar to those used by Adobe Flash except offsets are in column 6 rather than 5 (in support of CMYKA images) and offsets are normalized (divide Flash offset by 255).</p>
+<p>MagickMatteFloodfillImage() changes the transparency value of any pixel that matches target and is an immediate neighbor. If the method FillToBorderMethod is specified, the transparency value is changed for any neighbor pixel that does not match the bordercolor member of image.</p>
-<p>The format of the RecolorImage method is:</p>
+<p>The format of the MagickMatteFloodfillImage method is:</p>
<pre class="code">
- Image *RecolorImage(const Image *image,const size_t order,
- const double *color_matrix,ExceptionInfo *exception)
+ MagickBooleanType MagickMatteFloodfillImage(MagickWand *wand,
+ const double alpha,const double fuzz,const PixelWand *bordercolor,
+ const ssize_t x,const ssize_t y)
</pre>
<p>A description of each parameter follows:</p>
-<h5>image</h5>
-<p>the image.</p>
+<h5>wand</h5>
+<p>the magick wand.</p>
-<h5>order</h5>
-<p>the number of columns and rows in the recolor matrix.</p>
+<h5>alpha</h5>
+<p>the level of transparency: 1.0 is fully opaque and 0.0 is fully transparent.</p>
-<h5>color_matrix</h5>
-<p>An array of double representing the recolor matrix.</p>
+<h5>fuzz</h5>
+<p>By default target must match a particular pixel color exactly. However, in many cases two colors may differ by a small amount. The fuzz member of image defines how much tolerance is acceptable to consider two colors as the same. For example, set fuzz to 10 and the color red at intensities of 100 and 102 respectively are now interpreted as the same color for the purposes of the floodfill.</p>
-<h5>exception</h5>
-<p>return any errors or warnings in this structure.</p>
+<h5>bordercolor</h5>
+<p>the border color pixel wand.</p>
+
+<h5>x,y</h5>
+<p>the starting location of the operation.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="ReduceNoiseImage">ReduceNoiseImage</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="MagickMedianFilterImage">MagickMedianFilterImage</a></h2>
<div class="doc-section">
-<p>ReduceNoiseImage() smooths the contours of an image while still preserving edge information. The algorithm works by replacing each pixel with its neighbor closest in value. A neighbor is defined by radius. Use a radius of 0 and ReduceNoise() selects a suitable radius for you.</p>
+<p>MagickMedianFilterImage() applies a digital filter that improves the quality of a noisy image. Each pixel is replaced by the median in a set of neighboring pixels as defined by radius.</p>
-<p>The format of the ReduceNoiseImage method is:</p>
+<p>The format of the MagickMedianFilterImage method is:</p>
<pre class="code">
- Image *ReduceNoiseImage(const Image *image,const double radius,
- ExceptionInfo *exception)
+ MagickBooleanType MagickMedianFilterImage(MagickWand *wand,
+ const double radius)
</pre>
<p>A description of each parameter follows:</p>
-<h5>image</h5>
-<p>the image.</p>
+<h5>wand</h5>
+<p>the magick wand.</p>
<h5>radius</h5>
<p>the radius of the pixel neighborhood.</p>
-<h5>exception</h5>
-<p>return any errors or warnings in this structure.</p>
-
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="ResetImageAttributeIterator">ResetImageAttributeIterator</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="MagickMinimumImages">MagickMinimumImages</a></h2>
<div class="doc-section">
-<p>ResetImageAttributeIterator() resets the image attributes iterator. Use it in conjunction with GetNextImageAttribute() to iterate over all the values associated with an image.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- ResetImagePropertyIterator(image);
-</pre>
+<p>MagickMinimumImages() returns the minimum intensity of an image sequence.</p>
-<p>The format of the ResetImageAttributeIterator method is:</p>
+<p>The format of the MagickMinimumImages method is:</p>
<pre class="code">
- ResetImageAttributeIterator(const ImageInfo *image)
+ MagickWand *MagickMinimumImages(MagickWand *wand)
</pre>
<p>A description of each parameter follows:</p>
-<h5>image</h5>
-<p>the image.</p>
+<h5>wand</h5>
+<p>the magick wand.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="SetCacheViewPixels">SetCacheViewPixels</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="MagickModeImage">MagickModeImage</a></h2>
<div class="doc-section">
-<p>SetCacheViewPixels() gets pixels from the in-memory or disk pixel cache as defined by the geometry parameters. A pointer to the pixels is returned if the pixels are transferred, otherwise a NULL is returned.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- QueueCacheViewAuthenticPixels(cache_view,x,y,columns,rows,
- GetCacheViewException(cache_view));
-</pre>
+<p>MagickModeImage() makes each pixel the 'predominate color' of the neighborhood of the specified radius.</p>
-<p>The format of the SetCacheViewPixels method is:</p>
+<p>The format of the MagickModeImage method is:</p>
<pre class="code">
- PixelPacket *SetCacheViewPixels(CacheView *cache_view,const ssize_t x,
- const ssize_t y,const size_t columns,const size_t rows)
+ MagickBooleanType MagickModeImage(MagickWand *wand,
+ const double radius)
</pre>
<p>A description of each parameter follows:</p>
-<h5>cache_view</h5>
-<p>the cache view.</p>
+<h5>wand</h5>
+<p>the magick wand.</p>
-<h5>x,y,columns,rows</h5>
-<p>These values define the perimeter of a region of pixels.</p>
+<h5>radius</h5>
+<p>the radius of the pixel neighborhood.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="SetExceptionInfo">SetExceptionInfo</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="MagickMosaicImages">MagickMosaicImages</a></h2>
<div class="doc-section">
-<p>SetExceptionInfo() sets the exception severity.</p>
+<p>MagickMosaicImages() inlays an image sequence to form a single coherent picture. It returns a wand with each image in the sequence composited at the location defined by the page offset of the image.</p>
-<p>The format of the SetExceptionInfo method is:</p>
+<p>The format of the MagickMosaicImages method is:</p>
<pre class="code">
- MagickBooleanType SetExceptionInfo(ExceptionInfo *exception,
- ExceptionType severity)
+ MagickWand *MagickMosaicImages(MagickWand *wand)
</pre>
<p>A description of each parameter follows:</p>
-<h5>exception</h5>
-<p>the exception info.</p>
-
-<h5>severity</h5>
-<p>the exception severity.</p>
+<h5>wand</h5>
+<p>the magick wand.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="SetImage">SetImage</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="MagickOpaqueImage">MagickOpaqueImage</a></h2>
<div class="doc-section">
-<p>SetImage() sets the red, green, and blue components of each pixel to the image background color and the opacity component to the specified level of transparency. The background color is defined by the background_color member of the image.</p>
+<p>MagickOpaqueImage() changes any pixel that matches color with the color defined by fill.</p>
-<p>The format of the SetImage method is:</p>
+<p>The format of the MagickOpaqueImage method is:</p>
<pre class="code">
- void SetImage(Image *image,const Quantum opacity)
+ MagickBooleanType MagickOpaqueImage(MagickWand *wand,
+ const PixelWand *target,const PixelWand *fill,const double fuzz)
</pre>
<p>A description of each parameter follows:</p>
-<h5>image</h5>
-<p>the image.</p>
+<h5>wand</h5>
+<p>the magick wand.</p>
-<h5>opacity</h5>
-<p>Set each pixel to this level of transparency.</p>
+<h5>channel</h5>
+<p>the channel(s).</p>
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="SetImageAttribute">SetImageAttribute</a></h2>
-<div class="doc-section">
+<h5>target</h5>
+<p>Change this target color to the fill color within the image.</p>
-<p>SetImageAttribute() searches the list of image attributes and replaces the attribute value. If it is not found in the list, the attribute name and value is added to the list.</p>
+<h5>fill</h5>
+<p>the fill pixel wand.</p>
-<p>Deprecated, replace with:</p>
+<h5>fuzz</h5>
+<p>By default target must match a particular pixel color exactly. However, in many cases two colors may differ by a small amount. The fuzz member of image defines how much tolerance is acceptable to consider two colors as the same. For example, set fuzz to 10 and the color red at intensities of 100 and 102 respectively are now interpreted as the same color for the purposes of the floodfill.</p>
-<pre class="text">
- SetImageProperty(image,key,value);
-</pre>
+ </div>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="MagickPaintFloodfillImage">MagickPaintFloodfillImage</a></h2>
+<div class="doc-section">
+
+<p>MagickPaintFloodfillImage() changes the color value of any pixel that matches target and is an immediate neighbor. If the method FillToBorderMethod is specified, the color value is changed for any neighbor pixel that does not match the bordercolor member of image.</p>
-<p>The format of the SetImageAttribute method is:</p>
+<p>The format of the MagickPaintFloodfillImage method is:</p>
<pre class="code">
- MagickBooleanType SetImageAttribute(Image *image,const char *key,
- const char *value)
+ MagickBooleanType MagickPaintFloodfillImage(MagickWand *wand,
+ const ChannelType channel,const PixelWand *fill,const double fuzz,
+ const PixelWand *bordercolor,const ssize_t x,const ssize_t y)
</pre>
<p>A description of each parameter follows:</p>
-<h5>image</h5>
-<p>the image.</p>
+<h5>wand</h5>
+<p>the magick wand.</p>
+
+<h5>channel</h5>
+<p>the channel(s).</p>
-<h5>key</h5>
-<p>the key.</p>
+<h5>fill</h5>
+<p>the floodfill color pixel wand.</p>
-<h5>value</h5>
-<p>the value.</p>
+<h5>fuzz</h5>
+<p>By default target must match a particular pixel color exactly. However, in many cases two colors may differ by a small amount. The fuzz member of image defines how much tolerance is acceptable to consider two colors as the same. For example, set fuzz to 10 and the color red at intensities of 100 and 102 respectively are now interpreted as the same color for the purposes of the floodfill.</p>
+
+<h5>bordercolor</h5>
+<p>the border color pixel wand.</p>
+
+<h5>x,y</h5>
+<p>the starting location of the operation.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="SetImageList">SetImageList</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="MagickPaintOpaqueImage">MagickPaintOpaqueImage</a></h2>
<div class="doc-section">
-<p>SetImageList() inserts an image into the list at the specified position.</p>
+<p>MagickPaintOpaqueImage() changes any pixel that matches color with the color defined by fill.</p>
-<p>The format of the SetImageList method is:</p>
+<p>The format of the MagickPaintOpaqueImage method is:</p>
<pre class="code">
- unsigned int SetImageList(Image *images,const Image *image,
- const ssize_t offset,ExceptionInfo *exception)
+ MagickBooleanType MagickPaintOpaqueImage(MagickWand *wand,
+ const PixelWand *target,const PixelWand *fill,const double fuzz)
+ MagickBooleanType MagickPaintOpaqueImageChannel(MagickWand *wand,
+ const ChannelType channel,const PixelWand *target,
+ const PixelWand *fill,const double fuzz)
</pre>
<p>A description of each parameter follows:</p>
-<h5>images</h5>
-<p>the image list.</p>
+<h5>wand</h5>
+<p>the magick wand.</p>
-<h5>image</h5>
-<p>the image.</p>
+<h5>channel</h5>
+<p>the channel(s).</p>
+
+<h5>target</h5>
+<p>Change this target color to the fill color within the image.</p>
-<h5>offset</h5>
-<p>the position within the list.</p>
+<h5>fill</h5>
+<p>the fill pixel wand.</p>
-<h5>exception</h5>
-<p>return any errors or warnings in this structure.</p>
+<h5>fuzz</h5>
+<p>By default target must match a particular pixel color exactly. However, in many cases two colors may differ by a small amount. The fuzz member of image defines how much tolerance is acceptable to consider two colors as the same. For example, set fuzz to 10 and the color red at intensities of 100 and 102 respectively are now interpreted as the same color for the purposes of the floodfill.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="SetImagePixels">SetImagePixels</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="MagickPaintTransparentImage">MagickPaintTransparentImage</a></h2>
<div class="doc-section">
-<p>SetImagePixels() queues a mutable pixel region. If the region is successfully intialized a pointer to a PixelPacket array representing the region is returned, otherwise NULL is returned. The returned pointer may point to a temporary working buffer for the pixels or it may point to the final location of the pixels in memory.</p>
-
-<p>Write-only access means that any existing pixel values corresponding to the region are ignored. This useful while the initial image is being created from scratch, or if the existing pixel values are to be completely replaced without need to refer to their pre-existing values. The application is free to read and write the pixel buffer returned by SetImagePixels() any way it pleases. SetImagePixels() does not initialize the pixel array values. Initializing pixel array values is the application's responsibility.</p>
-
-<p>Performance is maximized if the selected region is part of one row, or one or more full rows, since then there is opportunity to access the pixels in-place (without a copy) if the image is in RAM, or in a memory-mapped file. The returned pointer should *never* be deallocated by the user.</p>
-
-<p>Pixels accessed via the returned pointer represent a simple array of type PixelPacket. If the image type is CMYK or the storage class is PseudoClass, call GetAuthenticIndexQueue() after invoking GetAuthenticPixels() to obtain the black color component or the colormap indexes (of type IndexPacket) corresponding to the region. Once the PixelPacket (and/or IndexPacket) array has been updated, the changes must be saved back to the underlying image using SyncAuthenticPixels() or they may be lost.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- QueueAuthenticPixels(image,x,y,columns,rows,&image->exception);
-</pre>
+<p>MagickPaintTransparentImage() changes any pixel that matches color with the color defined by fill.</p>
-<p>The format of the SetImagePixels() method is:</p>
+<p>The format of the MagickPaintTransparentImage method is:</p>
<pre class="code">
- PixelPacket *SetImagePixels(Image *image,const ssize_t x,const ssize_t y,
- const size_t columns,const size_t rows)
+ MagickBooleanType MagickPaintTransparentImage(MagickWand *wand,
+ const PixelWand *target,const double alpha,const double fuzz)
</pre>
<p>A description of each parameter follows:</p>
-<h5>pixels</h5>
-<p>SetImagePixels returns a pointer to the pixels if they are transferred, otherwise a NULL is returned.</p>
+<h5>wand</h5>
+<p>the magick wand.</p>
+
+<h5>target</h5>
+<p>Change this target color to specified opacity value within the image.</p>
-<h5>image</h5>
-<p>the image.</p>
+<h5>alpha</h5>
+<p>the level of transparency: 1.0 is fully opaque and 0.0 is fully transparent.</p>
-<h5>x,y,columns,rows</h5>
-<p>These values define the perimeter of a region of pixels.</p>
+<h5>fuzz</h5>
+<p>By default target must match a particular pixel color exactly. However, in many cases two colors may differ by a small amount. The fuzz member of image defines how much tolerance is acceptable to consider two colors as the same. For example, set fuzz to 10 and the color red at intensities of 100 and 102 respectively are now interpreted as the same color for the purposes of the floodfill.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="SetMagickRegistry">SetMagickRegistry</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="MagickRecolorImage">MagickRecolorImage</a></h2>
<div class="doc-section">
-<p>SetMagickRegistry() sets a blob into the registry and returns a unique ID. If an error occurs, -1 is returned.</p>
+<p>MagickRecolorImage() apply color transformation to an image. The method permits saturation changes, hue rotation, luminance to alpha, and various other effects. Although variable-sized transformation matrices can be used, typically one uses a 5x5 matrix for an RGBA image and a 6x6 for CMYKA (or RGBA with offsets). The matrix is similar to those used by Adobe Flash except offsets are in column 6 rather than 5 (in support of CMYKA images) and offsets are normalized (divide Flash offset by 255).</p>
-<p>The format of the SetMagickRegistry method is:</p>
+<p>The format of the MagickRecolorImage method is:</p>
<pre class="code">
- ssize_t SetMagickRegistry(const RegistryType type,const void *blob,
- const size_t length,ExceptionInfo *exception)
+ MagickBooleanType MagickRecolorImage(MagickWand *wand,
+ const size_t order,const double *color_matrix)
</pre>
<p>A description of each parameter follows:</p>
-<h5>type</h5>
-<p>the registry type.</p>
+<h5>wand</h5>
+<p>the magick wand.</p>
-<h5>blob</h5>
-<p>the address of a Binary Large OBject.</p>
-
-<h5>length</h5>
-<p>For a registry type of ImageRegistryType use sizeof(Image) otherise the blob length in number of bytes.</p>
+<h5>order</h5>
+<p>the number of columns and rows in the color matrix.</p>
-<h5>exception</h5>
-<p>return any errors or warnings in this structure.</p>
+<h5>color_matrix</h5>
+<p>An array of doubles representing the color matrix.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="SetMonitorHandler">SetMonitorHandler</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="MagickReduceNoiseImage">MagickReduceNoiseImage</a></h2>
<div class="doc-section">
-<p>SetMonitorHandler() sets the monitor handler to the specified method and returns the previous monitor handler.</p>
+<p>MagickReduceNoiseImage() smooths the contours of an image while still preserving edge information. The algorithm works by replacing each pixel with its neighbor closest in value. A neighbor is defined by radius. Use a radius of 0 and ReduceNoise() selects a suitable radius for you.</p>
-<p>The format of the SetMonitorHandler method is:</p>
+<p>The format of the MagickReduceNoiseImage method is:</p>
<pre class="code">
- MonitorHandler SetMonitorHandler(MonitorHandler handler)
+ MagickBooleanType MagickReduceNoiseImage(MagickWand *wand,
+ const double radius)
</pre>
<p>A description of each parameter follows:</p>
-<h5>handler</h5>
-<p>Specifies a pointer to a method to handle monitors.</p>
+<h5>wand</h5>
+<p>the magick wand.</p>
+
+<h5>radius</h5>
+<p>the radius of the pixel neighborhood.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="ShiftImageList">ShiftImageList</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="MagickMaximumImages">MagickMaximumImages</a></h2>
<div class="doc-section">
-<p>ShiftImageList() removes an image from the beginning of the list.</p>
-
-<p>Deprecated, replace with:</p>
+<p>MagickMaximumImages() returns the maximum intensity of an image sequence.</p>
-<pre class="text">
- RemoveFirstImageFromList(images);
-</pre>
-
-<p>The format of the ShiftImageList method is:</p>
+<p>The format of the MagickMaximumImages method is:</p>
<pre class="code">
- Image *ShiftImageList(Image **images)
+ MagickWand *MagickMaximumImages(MagickWand *wand)
</pre>
<p>A description of each parameter follows:</p>
-<h5>images</h5>
-<p>the image list.</p>
+<h5>wand</h5>
+<p>the magick wand.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="SpliceImageList">SpliceImageList</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="MagickSetImageAttribute">MagickSetImageAttribute</a></h2>
<div class="doc-section">
-<p>SpliceImageList() removes the images designated by offset and length from the list and replaces them with the specified list.</p>
+<p>MagickSetImageAttribute() associates a property with an image.</p>
-<p>The format of the SpliceImageList method is:</p>
+<p>The format of the MagickSetImageAttribute method is:</p>
<pre class="code">
- Image *SpliceImageList(Image *images,const ssize_t offset,
- const size_t length,const Image *splices,
- ExceptionInfo *exception)
+ MagickBooleanType MagickSetImageAttribute(MagickWand *wand,
+ const char *property,const char *value)
</pre>
<p>A description of each parameter follows:</p>
-<h5>images</h5>
-<p>the image list.</p>
-
-<h5>offset</h5>
-<p>the position within the list.</p>
+<h5>wand</h5>
+<p>the magick wand.</p>
-<h5>length</h5>
-<p>the length of the image list to remove.</p>
-
-<h5>splice</h5>
-<p>Replace the removed image list with this list.</p>
+<h5>property</h5>
+<p>the property.</p>
-<h5>exception</h5>
-<p>return any errors or warnings in this structure.</p>
+<h5>value</h5>
+<p>the value.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="Strip">Strip</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="MagickSetImageIndex">MagickSetImageIndex</a></h2>
<div class="doc-section">
-<p>Strip() strips any whitespace or quotes from the beginning and end of a string of characters.</p>
+<p>MagickSetImageIndex() set the current image to the position of the list specified with the index parameter.</p>
-<p>The format of the Strip method is:</p>
+<p>The format of the MagickSetImageIndex method is:</p>
<pre class="code">
- void Strip(char *message)
+ MagickBooleanType MagickSetImageIndex(MagickWand *wand,
+ const ssize_t index)
</pre>
<p>A description of each parameter follows:</p>
-<h5>message</h5>
-<p>Specifies an array of characters.</p>
+<h5>wand</h5>
+<p>the magick wand.</p>
+
+<h5>index</h5>
+<p>the scene number.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="SyncCacheView">SyncCacheView</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="MagickTransparentImage">MagickTransparentImage</a></h2>
<div class="doc-section">
-<p>SyncCacheView() saves the cache view pixels to the in-memory or disk cache. It returns MagickTrue if the pixel region is synced, otherwise MagickFalse.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- SyncCacheViewAuthenticPixels(cache_view,GetCacheViewException(cache_view));
-</pre>
+<p>MagickTransparentImage() changes any pixel that matches color with the color defined by fill.</p>
-<p>The format of the SyncCacheView method is:</p>
+<p>The format of the MagickTransparentImage method is:</p>
<pre class="code">
- MagickBooleanType SyncCacheView(CacheView *cache_view)
+ MagickBooleanType MagickTransparentImage(MagickWand *wand,
+ const PixelWand *target,const double alpha,const double fuzz)
</pre>
<p>A description of each parameter follows:</p>
-<h5>cache_view</h5>
-<p>the cache view.</p>
+<h5>wand</h5>
+<p>the magick wand.</p>
- </div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="SyncCacheViewPixels">SyncCacheViewPixels</a></h2>
-<div class="doc-section">
+<h5>target</h5>
+<p>Change this target color to specified opacity value within the image.</p>
-<p>SyncCacheViewPixels() saves the cache view pixels to the in-memory or disk cache. It returns MagickTrue if the pixel region is flushed, otherwise MagickFalse.</p>
+<h5>alpha</h5>
+<p>the level of transparency: 1.0 is fully opaque and 0.0 is fully transparent.</p>
-<p>Deprecated, replace with:</p>
+<h5>fuzz</h5>
+<p>By default target must match a particular pixel color exactly. However, in many cases two colors may differ by a small amount. The fuzz member of image defines how much tolerance is acceptable to consider two colors as the same. For example, set fuzz to 10 and the color red at intensities of 100 and 102 respectively are now interpreted as the same color for the purposes of the floodfill.</p>
-<pre class="text">
- SyncCacheViewAuthenticPixels(cache_view,GetCacheViewException(cache_view));
-</pre>
+ </div>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="MagickRegionOfInterestImage">MagickRegionOfInterestImage</a></h2>
+<div class="doc-section">
-<p>The format of the SyncCacheViewPixels method is:</p>
+<p>MagickRegionOfInterestImage() extracts a region of the image and returns it as a new wand.</p>
+
+<p>The format of the MagickRegionOfInterestImage method is:</p>
<pre class="code">
- MagickBooleanType SyncCacheViewPixels(CacheView *cache_view)
+ MagickWand *MagickRegionOfInterestImage(MagickWand *wand,
+ const size_t width,const size_t height,const ssize_t x,
+ const ssize_t y)
</pre>
<p>A description of each parameter follows:</p>
-<h5>cache_view</h5>
-<p>the cache view.</p>
+<h5>wand</h5>
+<p>the magick wand.</p>
+
+<h5>width</h5>
+<p>the region width.</p>
+
+<h5>height</h5>
+<p>the region height.</p>
+
+<h5>x</h5>
+<p>the region x offset.</p>
-<h5>exception</h5>
-<p>return any errors or warnings in this structure.</p>
+<h5>y</h5>
+<p>the region y offset.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="SyncImagePixels">SyncImagePixels</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="MagickSetImagePixels">MagickSetImagePixels</a></h2>
<div class="doc-section">
-<p>SyncImagePixels() saves the image pixels to the in-memory or disk cache. The method returns MagickTrue if the pixel region is synced, otherwise MagickFalse.</p>
+<p>MagickSetImagePixels() accepts pixel datand stores it in the image at the location you specify. The method returns MagickFalse on success otherwise MagickTrue if an error is encountered. The pixel data can be either char, short int, int, ssize_t, float, or double in the order specified by map.</p>
-<p>Deprecated, replace with:</p>
+<p>Suppose your want to upload the first scanline of a 640x480 image from character data in red-green-blue order:</p>
<pre class="text">
- SyncAuthenticPixels(image,&image->exception);
+ MagickSetImagePixels(wand,0,0,640,1,"RGB",CharPixel,pixels);
</pre>
-<p>The format of the SyncImagePixels() method is:</p>
+<p>The format of the MagickSetImagePixels method is:</p>
<pre class="code">
- MagickBooleanType SyncImagePixels(Image *image)
+ MagickBooleanType MagickSetImagePixels(MagickWand *wand,
+ const ssize_t x,const ssize_t y,const size_t columns,
+ const size_t rows,const char *map,const StorageType storage,
+ const void *pixels)
</pre>
<p>A description of each parameter follows:</p>
-<h5>image</h5>
-<p>the image.</p>
+<h5>wand</h5>
+<p>the magick wand.</p>
+
+<h5>x, y, columns, rows</h5>
+<p>These values define the perimeter of a region of pixels you want to define.</p>
+
+<h5>map</h5>
+<p>This string reflects the expected ordering of the pixel array. It can be any combination or order of R = red, G = green, B = blue, A = alpha (0 is transparent), O = opacity (0 is opaque), C = cyan, Y = yellow, M = magenta, K = black, I = intensity (for grayscale), P = pad.</p>
+
+<h5>storage</h5>
+<p>Define the data type of the pixels. Float and double types are expected to be normalized [0..1] otherwise [0..QuantumRange]. Choose from these types: CharPixel, ShortPixel, IntegerPixel, LongPixel, FloatPixel, or DoublePixel.</p>
+
+<h5>pixels</h5>
+<p>This array of values contain the pixel components as defined by map and type. You must preallocate this array where the expected length varies depending on the values of width, height, map, and type.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="TemporaryFilename">TemporaryFilename</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="MagickWriteImageBlob">MagickWriteImageBlob</a></h2>
<div class="doc-section">
-<p>TemporaryFilename() replaces the contents of path by a unique path name.</p>
+<p>MagickWriteImageBlob() implements direct to memory image formats. It returns the image as a blob and its length. Use MagickSetFormat() to set the format of the returned blob (GIF, JPEG, PNG, etc.).</p>
-<p>The format of the TemporaryFilename method is:</p>
+<p>Use MagickRelinquishMemory() to free the blob when you are done with it.</p>
+
+<p>The format of the MagickWriteImageBlob method is:</p>
<pre class="code">
- void TemporaryFilename(char *path)
+ unsigned char *MagickWriteImageBlob(MagickWand *wand,size_t *length)
</pre>
-<p>A description of each parameter follows.</p>
+<p>A description of each parameter follows:</p>
+
+<h5>wand</h5>
+<p>the magick wand.</p>
-<h5> path</h5>
-<p>Specifies a pointer to an array of characters. The unique path name is returned in this array.</p>
+<h5>length</h5>
+<p>the length of the blob.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="ThresholdImage">ThresholdImage</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="NewPixelView">NewPixelView</a></h2>
<div class="doc-section">
-<p>ThresholdImage() changes the value of individual pixels based on the intensity of each pixel compared to threshold. The result is a high-contrast, two color image.</p>
+<p>NewPixelView() returns a pixel view required for all other methods in the Pixel View API.</p>
-<p>The format of the ThresholdImage method is:</p>
+<p>The format of the NewPixelView method is:</p>
<pre class="code">
- unsigned int ThresholdImage(Image *image,const double threshold)
+ PixelView *NewPixelView(MagickWand *wand)
</pre>
<p>A description of each parameter follows:</p>
-<h5>image</h5>
-<p>the image.</p>
-
-<h5>threshold</h5>
-<p>Define the threshold value</p>
+<h5>wand</h5>
+<p>the wand.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="ThresholdImageChannel">ThresholdImageChannel</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="NewPixelViewRegion">NewPixelViewRegion</a></h2>
<div class="doc-section">
-<p>ThresholdImageChannel() changes the value of individual pixels based on the intensity of each pixel channel. The result is a high-contrast image.</p>
+<p>NewPixelViewRegion() returns a pixel view required for all other methods in the Pixel View API.</p>
-<p>The format of the ThresholdImageChannel method is:</p>
+<p>The format of the NewPixelViewRegion method is:</p>
<pre class="code">
- unsigned int ThresholdImageChannel(Image *image,const char *threshold)
+ PixelView *NewPixelViewRegion(MagickWand *wand,const ssize_t x,
+ const ssize_t y,const size_t width,const size_t height)
</pre>
<p>A description of each parameter follows:</p>
-<h5>image</h5>
-<p>the image.</p>
+<h5>wand</h5>
+<p>the magick wand.</p>
-<h5>threshold</h5>
-<p>define the threshold values.</p>
+<h5>x,y,columns,rows</h5>
+<p>These values define the perimeter of a region of pixel_wands view.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="TransformHSL">TransformHSL</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="PixelGetNextRow">PixelGetNextRow</a></h2>
<div class="doc-section">
-<p>TransformHSL() converts a (red, green, blue) to a (hue, saturation, lightness) triple.</p>
+<p>PixelGetNextRow() returns the next row as an array of pixel wands from the pixel iterator.</p>
-<p>The format of the TransformHSL method is:</p>
+<p>The format of the PixelGetNextRow method is:</p>
<pre class="code">
- void TransformHSL(const Quantum red,const Quantum green,
- const Quantum blue,double *hue,double *saturation,double *lightness)
+ PixelWand **PixelGetNextRow(PixelIterator *iterator,
+ size_t *number_wands)
</pre>
<p>A description of each parameter follows:</p>
-<h5>red, green, blue</h5>
-<p>A Quantum value representing the red, green, and blue component of a pixel..</p>
+<h5>iterator</h5>
+<p>the pixel iterator.</p>
-<h5>hue, saturation, lightness</h5>
-<p>A pointer to a double value representing a component of the HSL color space.</p>
+<h5>number_wands</h5>
+<p>the number of pixel wands.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="TranslateText">TranslateText</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="PixelIteratorGetException">PixelIteratorGetException</a></h2>
<div class="doc-section">
-<p>TranslateText() replaces any embedded formatting characters with the appropriate image attribute and returns the translated text.</p>
-
-<p>Deprecated, replace with:</p>
-
-<pre class="text">
- InterpretImageProperties(image_info,image,embed_text);
-</pre>
+<p>PixelIteratorGetException() returns the severity, reason, and description of any error that occurs when using other methods in this API.</p>
-<p>The format of the TranslateText method is:</p>
+<p>The format of the PixelIteratorGetException method is:</p>
<pre class="code">
- char *TranslateText(const ImageInfo *image_info,Image *image,
- const char *embed_text)
+ char *PixelIteratorGetException(const Pixeliterator *iterator,
+ ExceptionType *severity)
</pre>
<p>A description of each parameter follows:</p>
-<h5>image_info</h5>
-<p>the image info.</p>
+<h5>iterator</h5>
+<p>the pixel iterator.</p>
-<h5>image</h5>
-<p>the image.</p>
-
-<h5>embed_text</h5>
-<p>the address of a character string containing the embedded formatting characters.</p>
+<h5>severity</h5>
+<p>the severity of the error is returned here.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="TransparentImage">TransparentImage</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="SetPixelViewIterator">SetPixelViewIterator</a></h2>
<div class="doc-section">
-<p>TransparentImage() changes the opacity value associated with any pixel that matches color to the value defined by opacity.</p>
+<p>SetPixelViewIterator() iterates over the pixel view in parallel and calls your set method for each scanline of the view. The pixel region is confined to the image canvas-- that is no negative offsets or widths or heights that exceed the image dimension. The pixels are initiallly undefined and any settings you make in the callback method are automagically synced back to your image.</p>
-<p>By default color must match a particular pixel color exactly. However, in many cases two colors may differ by a small amount. Fuzz defines how much tolerance is acceptable to consider two colors as the same. For example, set fuzz to 10 and the color red at intensities of 100 and 102 respectively are now interpreted as the same color.</p>
+<p>Use this pragma:</p>
-<p>The format of the TransparentImage method is:</p>
+<pre class="text">
+ #pragma omp critical
+</pre>
+
+<p>to define a section of code in your callback set method that must be executed by a single thread at a time.</p>
+
+<p>The format of the SetPixelViewIterator method is:</p>
<pre class="code">
- MagickBooleanType TransparentImage(Image *image,
- const PixelPacket target,const Quantum opacity)
+ MagickBooleanType SetPixelViewIterator(PixelView *destination,
+ SetPixelViewMethod set,void *context)
</pre>
<p>A description of each parameter follows:</p>
-<h5>image</h5>
-<p>the image.</p>
+<h5>destination</h5>
+<p>the pixel view.</p>
-<h5>target</h5>
-<p>the RGB value of the target color.</p>
+<h5>set</h5>
+<p>the set callback method.</p>
-<h5>opacity</h5>
-<p>the replacement opacity value.</p>
+<h5>context</h5>
+<p>the user defined context.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="UnshiftImageList">UnshiftImageList</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="TransferPixelViewIterator">TransferPixelViewIterator</a></h2>
<div class="doc-section">
-<p>UnshiftImageList() adds the image to the beginning of the list.</p>
+<p>TransferPixelViewIterator() iterates over two pixel views in parallel and calls your transfer method for each scanline of the view. The source pixel region is not confined to the image canvas-- that is you can include negative offsets or widths or heights that exceed the image dimension. However, the destination pixel view is confined to the image canvas-- that is no negative offsets or widths or heights that exceed the image dimension are permitted.</p>
-<p>Deprecated, replace with:</p>
+<p>Use this pragma:</p>
<pre class="text">
- PrependImageToList(images,CloneImageList(image,exception));
+ #pragma omp critical
</pre>
-<p>The format of the UnshiftImageList method is:</p>
+<p>to define a section of code in your callback transfer method that must be executed by a single thread at a time.</p>
+
+<p>The format of the TransferPixelViewIterator method is:</p>
<pre class="code">
- unsigned int UnshiftImageList(Image *images,const Image *image,
- ExceptionInfo *exception)
+ MagickBooleanType TransferPixelViewIterator(PixelView *source,
+ PixelView *destination,TransferPixelViewMethod transfer,void *context)
</pre>
<p>A description of each parameter follows:</p>
-<h5>images</h5>
-<p>the image list.</p>
+<h5>source</h5>
+<p>the source pixel view.</p>
+
+<h5>destination</h5>
+<p>the destination pixel view.</p>
-<h5>image</h5>
-<p>the image.</p>
+<h5>transfer</h5>
+<p>the transfer callback method.</p>
-<h5>exception</h5>
-<p>return any errors or warnings in this structure.</p>
+<h5>context</h5>
+<p>the user defined context.</p>
</div>
-<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="ZoomImage">ZoomImage</a></h2>
+<h2><a href="http://www.imagemagick.org/api/MagickCore/deprecate_8c.html" id="UpdatePixelViewIterator">UpdatePixelViewIterator</a></h2>
<div class="doc-section">
-<p>ZoomImage() creates a new image that is a scaled size of an existing one. It allocates the memory necessary for the new Image structure and returns a pointer to the new image. The Point filter gives fast pixel replication, Triangle is equivalent to bi-linear interpolation, and Mitchel giver slower, very high-quality results. See Graphic Gems III for details on this algorithm.</p>
+<p>UpdatePixelViewIterator() iterates over the pixel view in parallel and calls your update method for each scanline of the view. The pixel region is confined to the image canvas-- that is no negative offsets or widths or heights that exceed the image dimension are permitted. Updates to pixels in your callback are automagically synced back to the image.</p>
+
+<p>Use this pragma:</p>
+
+<pre class="text">
+ #pragma omp critical
+</pre>
-<p>The filter member of the Image structure specifies which image filter to use. Blur specifies the blur factor where > 1 is blurry, < 1 is sharp.</p>
+<p>to define a section of code in your callback update method that must be executed by a single thread at a time.</p>
-<p>The format of the ZoomImage method is:</p>
+<p>The format of the UpdatePixelViewIterator method is:</p>
<pre class="code">
- Image *ZoomImage(const Image *image,const size_t columns,
- const size_t rows,ExceptionInfo *exception)
+ MagickBooleanType UpdatePixelViewIterator(PixelView *source,
+ UpdatePixelViewMethod update,void *context)
</pre>
<p>A description of each parameter follows:</p>
-<h5>image</h5>
-<p>the image.</p>
-
-<h5>columns</h5>
-<p>An integer that specifies the number of columns in the zoom image.</p>
+<h5>source</h5>
+<p>the source pixel view.</p>
-<h5>rows</h5>
-<p>An integer that specifies the number of rows in the scaled image.</p>
+<h5>update</h5>
+<p>the update callback method.</p>
-<h5>exception</h5>
-<p>return any errors or warnings in this structure.</p>
+<h5>context</h5>
+<p>the user defined context.</p>
</div>
\r