From acc048888a55306d4d40f866563c11fa148af415 Mon Sep 17 00:00:00 2001
From: cristy
Date: Wed, 4 May 2011 23:03:43 +0000
Subject: [PATCH]
---
ImageMagick.spec | 2 +-
config/configure.xml | 2 +-
index.html | 2 +-
libtool | 2 +-
magick/deprecate.c | 7612 ++++++------------------
magick/pixel.h | 4 +-
magick/version.h | 2 +-
version.sh | 2 +-
www/ImageMagickObject.html | 2 +-
www/advanced-unix-installation.html | 8 +-
www/advanced-windows-installation.html | 4 +-
www/animate.html | 2 +-
www/api.html | 2 +-
www/api/animate.html | 2 +-
www/api/annotate.html | 2 +-
www/api/attribute.html | 2 +-
www/api/blob.html | 2 +-
www/api/cache-view.html | 2 +-
www/api/cipher.html | 2 +-
www/api/color.html | 2 +-
www/api/colormap.html | 2 +-
www/api/compare.html | 2 +-
www/api/composite.html | 2 +-
www/api/constitute.html | 2 +-
www/api/decorate.html | 2 +-
www/api/deprecate.html | 2920 ++-------
www/api/display.html | 2 +-
www/api/distort.html | 2 +-
www/api/draw.html | 2 +-
www/api/drawing-wand.html | 10 +-
www/api/enhance.html | 2 +-
www/api/exception.html | 2 +-
www/api/feature.html | 2 +-
www/api/fourier.html | 2 +-
www/api/fx.html | 2 +-
www/api/histogram.html | 2 +-
www/api/image-view.html | 2 +-
www/api/image.html | 2 +-
www/api/layer.html | 2 +-
www/api/magick-deprecate.html | 2 +-
www/api/magick-image.html | 2 +-
www/api/magick-property.html | 2 +-
www/api/magick-wand.html | 2 +-
www/api/magick.html | 2 +-
www/api/memory.html | 2 +-
www/api/module.html | 2 +-
www/api/mogrify.html | 4 +-
www/api/montage.html | 2 +-
www/api/morphology.html | 2 +-
www/api/pixel-iterator.html | 2 +-
www/api/pixel-wand.html | 2 +-
www/api/profile.html | 2 +-
www/api/property.html | 2 +-
www/api/registry.html | 2 +-
www/api/resize.html | 2 +-
www/api/resource.html | 2 +-
www/api/segment.html | 2 +-
www/api/shear.html | 2 +-
www/api/signature.html | 2 +-
www/api/stream.html | 2 +-
www/api/transform.html | 2 +-
www/api/version.html | 2 +-
www/api/wand-view.html | 2 +-
www/architecture.html | 24 +-
www/binary-releases.html | 54 +-
www/changelog.html | 8 +-
www/cipher.html | 2 +-
www/color.html | 2 +-
www/command-line-options.html | 100 +-
www/command-line-processing.html | 2 +-
www/command-line-tools.html | 2 +-
www/compare.html | 2 +-
www/compose.html | 2 +-
www/composite.html | 2 +-
www/conjure.html | 2 +-
www/contact.html | 2 +-
www/convert.html | 2 +-
www/display.html | 2 +-
www/download.html | 4 +-
www/escape.html | 2 +-
www/examples.html | 2 +-
www/exception.html | 2 +-
www/export.html | 2 +-
www/formats.html | 2 +-
www/fx.html | 2 +-
www/high-dynamic-range.html | 2 +-
www/identify.html | 4 +-
www/import.html | 2 +-
www/index.html | 2 +-
www/jp2.html | 2 +-
www/links.html | 2 +-
www/magick++.html | 2 +-
www/magick-core.html | 18 +-
www/magick-vector-graphics.html | 2 +-
www/magick-wand.html | 2 +-
www/miff.html | 2 +-
www/mogrify.html | 2 +-
www/montage.html | 2 +-
www/motion-picture.html | 2 +-
www/perl-magick.html | 2 +-
www/quantize.html | 2 +-
www/resources.html | 2 +-
www/sitemap.html | 2 +-
www/source/analyze.c | 3 +-
www/source/mgk.c | 6 +-
www/sponsors.html | 4 +-
www/stream.html | 2 +-
www/subversion.html | 2 +-
108 files changed, 2642 insertions(+), 8327 deletions(-)
diff --git a/ImageMagick.spec b/ImageMagick.spec
index 9241b690e..3d9a29ef7 100644
--- a/ImageMagick.spec
+++ b/ImageMagick.spec
@@ -1,5 +1,5 @@
%global VERSION 6.6.9
-%global Patchlevel 8
+%global Patchlevel 9
Name: ImageMagick
Version: %{VERSION}
diff --git a/config/configure.xml b/config/configure.xml
index dc84eb8a0..50fbe300a 100644
--- a/config/configure.xml
+++ b/config/configure.xml
@@ -9,7 +9,7 @@
-
+
diff --git a/index.html b/index.html
index 852840b76..f7eb43813 100644
--- a/index.html
+++ b/index.html
@@ -209,7 +209,7 @@
The ImageMagick development process ensures a stable API and ABI. Before each ImageMagick release, we perform a comprehensive security assessment that includes memory and thread error detection to prevent security vulnerabilities.
-The current release is ImageMagick 6.6.9-7.
+The current release is ImageMagick 6.6.9-8.
diff --git a/libtool b/libtool
index fcf481b9d..5f96c0c75 100755
--- a/libtool
+++ b/libtool
@@ -1,7 +1,7 @@
#! /bin/sh
# libtool - Provide generalized library-building support services.
-# Generated automatically by config.status (ImageMagick) 6.6.9-8
+# Generated automatically by config.status (ImageMagick) 6.6.9-9
# Libtool was configured on host magick.imagemagick.org:
# NOTE: Changes made to this file will be lost: look at ltmain.sh.
#
diff --git a/magick/deprecate.c b/magick/deprecate.c
index a2c5569fc..25f118992 100644
--- a/magick/deprecate.c
+++ b/magick/deprecate.c
@@ -10,7 +10,7 @@
% DDDD EEEEE P R R EEEEE CCCC A A T EEEEE %
% %
% %
-% MagickCore Deprecated Methods %
+% MagickWand Deprecated Methods %
% %
% Software Design %
% John Cristy %
@@ -40,93 +40,131 @@
/*
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"
+
+/*
+ Define declarations.
+*/
+#define PixelViewId "PixelView"
+#define ThrowWandException(severity,tag,context) \
+{ \
+ (void) ThrowMagickException(wand->exception,GetMagickModule(),severity, \
+ tag,"`%s'",context); \
+ return(MagickFalse); \
+}
-#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;
+};
+
+#if !defined(MAGICKCORE_EXCLUDE_DEPRECATED)
/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% %
% %
-% 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));
}
/*
@@ -134,41 +172,56 @@ MagickExport const IndexPacket *AcquireCacheViewIndexes(
% %
% %
% %
-% 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);
}
/*
@@ -176,57 +229,55 @@ MagickExport const PixelPacket *AcquireCacheViewPixels(
% %
% %
% %
-% 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);
}
/*
@@ -234,36 +285,197 @@ MagickExport const PixelPacket *AcquireImagePixels(const Image *image,
% %
% %
% %
-% 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);
}
/*
@@ -271,33 +483,58 @@ MagickExport const IndexPacket *AcquireIndexes(const Image *image)
% %
% %
% %
-% 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);
}
/*
@@ -305,41 +542,28 @@ MagickExport void *AcquireMemory(const size_t size)
% %
% %
% %
-% 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);
}
/*
@@ -347,50 +571,116 @@ MagickExport MagickBooleanType AcquireOneCacheViewPixel(
% %
% %
% %
-% 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);
}
@@ -399,43 +689,31 @@ MagickExport MagickBooleanType AcquireOneCacheViewVirtualPixel(
% %
% %
% %
-% 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]);
}
/*
@@ -443,43 +721,28 @@ MagickExport MagickPixelPacket AcquireOneMagickPixel(const Image *image,
% %
% %
% %
-% 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);
}
/*
@@ -487,49 +750,28 @@ MagickExport PixelPacket AcquireOnePixel(const Image *image,const ssize_t x,
% %
% %
% %
-% 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);
}
/*
@@ -537,31 +779,28 @@ MagickExport PixelPacket AcquireOneVirtualPixel(const Image *image,
% %
% %
% %
-% 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);
}
/*
@@ -569,37 +808,28 @@ MagickExport const PixelPacket *AcquirePixels(const Image *image)
% %
% %
% %
-% 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);
}
/*
@@ -607,37 +837,37 @@ MagickExport MagickBooleanType AffinityImage(const QuantizeInfo *quantize_info,
% %
% %
% %
-% 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);
}
/*
@@ -645,71 +875,64 @@ MagickExport MagickBooleanType AffinityImages(const QuantizeInfo *quantize_info,
% %
% %
% %
-% 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));
}
-
/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% %
% %
-% 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));
}
/*
@@ -717,36 +940,25 @@ MagickExport MagickBooleanType AllocateImageColormap(Image *image,
% %
% %
% %
-% 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));
}
/*
@@ -754,42 +966,26 @@ MagickExport void AllocateNextImage(const ImageInfo *image_info,Image *image)
% %
% %
% %
-% 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));
}
/*
@@ -797,36 +993,29 @@ MagickExport char *AllocateString(const char *source)
% %
% %
% %
-% 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);
}
/*
@@ -834,35 +1023,29 @@ MagickExport Image *AverageImages(const Image *images,ExceptionInfo *exception)
% %
% %
% %
-% 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);
}
/*
@@ -870,58 +1053,29 @@ MagickExport unsigned int ChannelImage(Image *image,const ChannelType channel)
% %
% %
% %
-% 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);
}
/*
@@ -929,39 +1083,28 @@ MagickExport unsigned int ChannelThresholdImage(Image *image,const char *level)
% %
% %
% %
-% 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);
}
/*
@@ -969,34 +1112,73 @@ MagickExport MagickBooleanType ClipPathImage(Image *image,const char *pathname,
% %
% %
% %
-% 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);
}
/*
@@ -1004,57 +1186,27 @@ MagickExport MagickBooleanType CloneImageAttributes(Image *image,
% %
% %
% %
-% 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));
}
/*
@@ -1062,31 +1214,39 @@ MagickExport void *CloneMemory(void *destination,const void *source,
% %
% %
% %
-% 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));
}
/*
@@ -1094,287 +1254,30 @@ MagickExport CacheView *CloseCacheView(CacheView *view_info)
% %
% %
% %
-% 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));
}
/*
@@ -1382,33 +1285,26 @@ MagickExport MagickBooleanType ColorFloodfillImage(Image *image,
% %
% %
% %
-% 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));
}
/*
@@ -1416,42 +1312,46 @@ MagickExport MagickBooleanType DeleteImageAttribute(Image *image,
% %
% %
% %
-% 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);
}
/*
@@ -1459,38 +1359,42 @@ MagickExport unsigned int DeleteImageList(Image *images,const ssize_t offset)
% %
% %
% %
-% 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);
}
/*
@@ -1498,22 +1402,33 @@ MagickExport MagickBooleanType DeleteMagickRegistry(const ssize_t id)
% %
% %
% %
-+ 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);
}
/*
@@ -1521,26 +1436,58 @@ MagickExport void DestroyConstitute(void)
% %
% %
% %
-+ 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));
}
/*
@@ -1548,38 +1495,35 @@ MagickExport void DestroyMagickRegistry(void)
% %
% %
% %
-% 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));
}
/*
@@ -1587,33 +1531,46 @@ MagickExport MagickBooleanType DescribeImage(Image *image,FILE *file,
% %
% %
% %
-% 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);
}
/*
@@ -1621,34 +1578,74 @@ MagickExport void DestroyImageAttributes(Image *image)
% %
% %
% %
-% 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);
}
/*
@@ -1656,26 +1653,45 @@ MagickExport void DestroyImages(Image *image)
% %
% %
% %
-% 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);
}
/*
@@ -1683,70 +1699,84 @@ MagickExport void DestroyMagick(void)
% %
% %
% %
-% 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));
+}
+
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
+% 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);
}
/*
@@ -1754,168 +1784,40 @@ MagickExport unsigned int DispatchImage(const Image *image,const ssize_t x_offse
% %
% %
% %
-% 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));
}
/*
@@ -1923,32 +1825,42 @@ MagickExport Image *ExtractSubimageFromImage(Image *image,
% %
% %
% %
-% 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));
}
/*
@@ -1956,62 +1868,52 @@ MagickExport Image *FlattenImages(Image *image,ExceptionInfo *exception)
% %
% %
% %
-% 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);
}
@@ -2020,53 +1922,58 @@ MagickExport MagickBooleanType FormatImageAttribute(Image *image,
% %
% %
% %
-% 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);
}
/*
@@ -2074,56 +1981,42 @@ MagickExport void FormatString(char *string,const char *format,...)
% %
% %
% %
-+ 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));
}
/*
@@ -2131,36 +2024,54 @@ MagickExport unsigned int FuzzyColorMatch(const PixelPacket *p,
% %
% %
% %
-+ 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);
}
/*
@@ -2168,40 +2079,46 @@ MagickExport MagickBooleanType FuzzyColorCompare(const Image *image,
% %
% %
% %
-+ 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);
}
/*
@@ -2209,152 +2126,39 @@ MagickExport MagickBooleanType FuzzyOpacityCompare(const Image *image,
% %
% %
% %
-% 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));
}
/*
@@ -2362,75 +2166,32 @@ MagickExport void *GetConfigureBlob(const char *filename,char *path,
% %
% %
% %
-% 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);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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));
}
/*
@@ -2438,43 +2199,31 @@ MagickExport IndexPacket *GetCacheViewIndexes(CacheView *cache_view)
% %
% %
% %
-% 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));
}
/*
@@ -2482,110 +2231,43 @@ MagickExport PixelPacket *GetCacheViewPixels(CacheView *cache_view,const ssize_t
% %
% %
% %
-% 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);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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));
}
/*
@@ -2593,38 +2275,42 @@ MagickExport const ImageAttribute *GetImageClippingPathAttribute(Image *image)
% %
% %
% %
-% 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));
}
/*
@@ -2632,50 +2318,39 @@ MagickExport Image *GetImageFromMagickRegistry(const char *name,ssize_t *id,
% %
% %
% %
-% 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));
}
/*
@@ -2683,48 +2358,58 @@ MagickExport void *GetMagickRegistry(const ssize_t id,RegistryType *type,
% %
% %
% %
-% 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));
}
/*
@@ -2732,44 +2417,32 @@ MagickExport int GetImageGeometry(Image *image,const char *geometry,
% %
% %
% %
-% 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));
}
/*
@@ -2777,33 +2450,77 @@ MagickExport Image *GetImageList(const Image *images,const ssize_t offset,
% %
% %
% %
-% 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);
}
/*
@@ -2811,32 +2528,60 @@ MagickExport ssize_t GetImageListIndex(const Image *images)
% %
% %
% %
-% 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);
}
/*
@@ -2844,52 +2589,33 @@ MagickExport size_t GetImageListSize(const Image *images)
% %
% %
% %
-% 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));
}
/*
@@ -2897,35 +2623,31 @@ MagickExport PixelPacket *GetImagePixels(Image *image,const ssize_t x,const ssiz
% %
% %
% %
-% 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));
}
/*
@@ -2933,42 +2655,132 @@ MagickExport IndexPacket *GetIndexes(const Image *image)
% %
% %
% %
-+ 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);
}
/*
@@ -2976,72 +2788,170 @@ MagickExport unsigned int GetMagickGeometry(const char *geometry,ssize_t *x,
% %
% %
% %
-% 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));
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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);
}
/*
@@ -3049,3627 +2959,77 @@ MagickExport const ImageAttribute *GetNextImageAttribute(const Image *image)
% %
% %
% %
-% 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));
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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));
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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));
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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;
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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));
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-+ 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);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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));
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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;
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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));
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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));
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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));
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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));
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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));
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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));
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% 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));
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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));
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-+ 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));
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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));
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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));
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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));
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% 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);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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;
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-+ 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);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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;
- }
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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));
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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));
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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++);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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));
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-+ 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));
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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';
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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));
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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;
@@ -6677,417 +3037,53 @@ MagickExport unsigned int ThresholdImageChannel(Image *image,
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);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-+ 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));
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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;
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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));
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-+ 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));
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% 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
diff --git a/magick/pixel.h b/magick/pixel.h
index 3e6da4f4a..ebc40dc50 100644
--- a/magick/pixel.h
+++ b/magick/pixel.h
@@ -31,7 +31,7 @@ extern "C" {
#define ClampIndexPixelComponent(indexes) ClampToQuantum(*(indexes))
#define ClampOpacityPixelComponent(pixel) ClampToQuantum((pixel)->opacity)
#define GetAlphaPixelComponent(pixel) (QuantumRange-(pixel)->opacity)
-#define GetBlackPixelComponent(index) (*(index))
+#define GetBlackPixelComponent(indexes) (*(indexes))
#define GetBluePixelComponent(pixel) ((pixel)->blue)
#define GetCbPixelComponent(pixel) ((pixel)->green)
#define GetCrPixelComponent(pixel) ((pixel)->blue)
@@ -47,7 +47,7 @@ extern "C" {
#define GetYellowPixelComponent(pixel) ((pixel)->blue)
#define SetAlphaPixelComponent(pixel,value) \
((pixel)->opacity=(Quantum) (QuantumRange-(value)))
-#define SetBlackPixelComponent(index,value) (*(index)=(Quantum) (value))
+#define SetBlackPixelComponent(indexes,value) (*(indexes)=(Quantum) (value))
#define SetBluePixelComponent(pixel,value) ((pixel)->blue=(Quantum) (value))
#define SetCbPixelComponent(pixel,value) ((pixel)->green=(Quantum) (value))
#define SetCrPixelComponent(pixel,value) ((pixel)->blue=(Quantum) (value))
diff --git a/magick/version.h b/magick/version.h
index 6e3fde1cd..b9dd79217 100644
--- a/magick/version.h
+++ b/magick/version.h
@@ -31,7 +31,7 @@ extern "C" {
#define MagickLibVersion 0x669
#define MagickLibVersionText "6.6.9"
#define MagickLibVersionNumber 4,0,1
-#define MagickLibAddendum "-8"
+#define MagickLibAddendum "-9"
#define MagickLibInterface 4
#define MagickLibMinInterface 4
#define MagickReleaseDate "2011-05-04"
diff --git a/version.sh b/version.sh
index 6e6f7cc81..90216a4f8 100644
--- a/version.sh
+++ b/version.sh
@@ -12,7 +12,7 @@ PACKAGE_NAME='ImageMagick'
# PACKAGE_NAME (e.g. "1.0.0").
PACKAGE_VERSION='6.6.9'
PACKAGE_LIB_VERSION="0x669"
-PACKAGE_RELEASE="8"
+PACKAGE_RELEASE="9"
PACKAGE_LIB_VERSION_NUMBER="6,6,9,${PACKAGE_RELEASE}"
PACKAGE_RELEASE_DATE=`date +%F`
PACKAGE_STRING="$PACKAGE_NAME $PACKAGE_VERSION"
diff --git a/www/ImageMagickObject.html b/www/ImageMagickObject.html
index 722940de0..c473b6e74 100644
--- a/www/ImageMagickObject.html
+++ b/www/ImageMagickObject.html
@@ -185,7 +185,7 @@
Web Hosting Ratings
diff --git a/www/advanced-unix-installation.html b/www/advanced-unix-installation.html
index 6b136e4c9..9b56a182d 100644
--- a/www/advanced-unix-installation.html
+++ b/www/advanced-unix-installation.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
@@ -221,7 +221,7 @@
The configure script looks at your environment and decides what it can cobble together to get ImageMagick compiled and installed on your system. This includes finding a compiler, where your compiler header files are located (e.g. stdlib.h), and if any delegate libraries are available for ImageMagick to use (e.g. JPEG, PNG, TIFF, etc.). If you are willing to accept configure's default options, and build from within the source directory, you can simply type:
- $magick> cd ImageMagick-6.6.9-7 $magick> ./configure
+ $magick> cd ImageMagick-6.6.9-8 $magick> ./configure
Watch the configure script output to verify that it finds everything that
you think it should. Pay particular attention to the last lines of the script output. For example, here is a recent report from our system:
@@ -573,7 +573,7 @@ Options used to compile and link:
Download the ImageMagick source distribution and verify the distribution against its message digest.
Unpack and change into the top-level ImageMagick directory:
-
$magick> tar xvfz ImageMagick-6.6.9-7.tar.gz $magick> cd ImageMagick-6.6.9-7
Configure ImageMagick:
+
$magick> tar xvfz ImageMagick-6.6.9-8.tar.gz $magick> cd ImageMagick-6.6.9-8
Configure ImageMagick:
$magick> ./configure --prefix=/opt --with-quantum-depth=16 \
--disable-dependency-tracking --with-x=yes \
--x-includes=/usr/X11R6/include --x-libraries=/usr/X11R6/lib/ \
@@ -593,7 +593,7 @@ Options used to compile and link:
Although you can download and install delegate libraries yourself, many are already available in the GnuWin32 distribution. Download and install whichever delegate libraries you require such as JPEG, PNG, TIFF, etc. Make sure you specify the development headers when you install a package. Next type,
- $magick> tar jxvf ImageMagick-6.6.9-?.tar.bz2 $magick> cd ImageMagick-6.6.9-7 $magick> export CPPFLAGS="-Ic:/Progra~1/GnuWin32/include" $magick> export LDFLAGS="-Lc:/Progra~1/GnuWin32/lib" $magick> ./configure --without-perl $magick> make $magick> sudo make install
+ $magick> tar jxvf ImageMagick-6.6.9-?.tar.bz2 $magick> cd ImageMagick-6.6.9-8 $magick> export CPPFLAGS="-Ic:/Progra~1/GnuWin32/include" $magick> export LDFLAGS="-Lc:/Progra~1/GnuWin32/lib" $magick> ./configure --without-perl $magick> make $magick> sudo make install
Dealing with Unexpected Problems
diff --git a/www/advanced-windows-installation.html b/www/advanced-windows-installation.html
index 7ad53daeb..67d8eb3ea 100644
--- a/www/advanced-windows-installation.html
+++ b/www/advanced-windows-installation.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
@@ -473,7 +473,7 @@
- Double-click on
- VisualMagick/bin/ImageMagick-6.6.9-7-Q16-windows-dll.exe
+ VisualMagick/bin/ImageMagick-6.6.9-8-Q16-windows-dll.exe
to launch the ImageMagick binary distribution.
- Complete the installer screens to install ImageMagick on your system.
diff --git a/www/animate.html b/www/animate.html
index 12f598485..3876ed28c 100644
--- a/www/animate.html
+++ b/www/animate.html
@@ -185,7 +185,7 @@
Web Hosting Ratings
diff --git a/www/api.html b/www/api.html
index 36d2521a2..4c33b75db 100644
--- a/www/api.html
+++ b/www/api.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/animate.html b/www/api/animate.html
index 8e88eccbd..f515d6586 100644
--- a/www/api/animate.html
+++ b/www/api/animate.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/annotate.html b/www/api/annotate.html
index d48d0d961..2b1de0b52 100644
--- a/www/api/annotate.html
+++ b/www/api/annotate.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/attribute.html b/www/api/attribute.html
index 32cea932c..27bc03313 100644
--- a/www/api/attribute.html
+++ b/www/api/attribute.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/blob.html b/www/api/blob.html
index 966ce54a4..b38a4d652 100644
--- a/www/api/blob.html
+++ b/www/api/blob.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/cache-view.html b/www/api/cache-view.html
index 371e62533..d4e1dcfeb 100644
--- a/www/api/cache-view.html
+++ b/www/api/cache-view.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/cipher.html b/www/api/cipher.html
index c27c0c232..6cec81e29 100644
--- a/www/api/cipher.html
+++ b/www/api/cipher.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/color.html b/www/api/color.html
index df36cbd9c..03360b8c0 100644
--- a/www/api/color.html
+++ b/www/api/color.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/colormap.html b/www/api/colormap.html
index 63d884fa7..d2b52bf9a 100644
--- a/www/api/colormap.html
+++ b/www/api/colormap.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/compare.html b/www/api/compare.html
index 2fcdab644..16c7a90ef 100644
--- a/www/api/compare.html
+++ b/www/api/compare.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/composite.html b/www/api/composite.html
index 711721c1a..c7ae34ae0 100644
--- a/www/api/composite.html
+++ b/www/api/composite.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/constitute.html b/www/api/constitute.html
index 07f8f2ac9..8b222a400 100644
--- a/www/api/constitute.html
+++ b/www/api/constitute.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/decorate.html b/www/api/decorate.html
index 0a3a535aa..cc916a9a2 100644
--- a/www/api/decorate.html
+++ b/www/api/decorate.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/deprecate.html b/www/api/deprecate.html
index 07d8058e3..f80dba778 100644
--- a/www/api/deprecate.html
+++ b/www/api/deprecate.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
@@ -197,2983 +197,1243 @@
Module deprecate Methods
-
[AcquireCacheViewIndexes • AcquireCacheViewPixels • AcquireImagePixels • AcquireIndexes • AcquireMemory • AcquireOneCacheViewPixel • AcquireOneCacheViewVirtualPixel • AcquireOneMagickPixel • AcquireOnePixel • AcquireOneVirtualPixel • AcquirePixels • AffinityImage • AffinityImages • AllocateImage • AllocateImageColormap • AllocateNextImage • AllocateString • AverageImages • ChannelThresholdImage • ClipPathImage • CloneImageAttributes • CloneMemory • CloseCacheView • ColorFloodfill • DeleteImageAttribute • DeleteImageList • DeleteMagickRegistry • DescribeImage • DestroyImageAttributes • DestroyImages • DestroyMagick • DispatchImage • ExtractSubimageFromImageImage • FlattenImages • FormatImageAttribute • FormatString • GetConfigureBlob • GetCacheView • GetCacheViewIndexes • GetCacheViewPixels • GetImageAttribute • GetImageClippingPathAttribute • GetImageFromMagickRegistry • GetMagickRegistry • GetImageGeometry • GetImageList • GetImageListIndex • GetImageListSize • GetImagePixels • GetIndexes • GetNextImage • GetNextImageAttribute • GetNumberScenes • GetOnePixel • GetPixels • GetPreviousImage • HSLTransform • IdentityAffine • InitializeMagick • InterpolatePixelColor • InterpretImageAttributes • LevelImageColor • LiberateMemory • LiberateSemaphoreInfo • MagickIncarnate • MagickMonitor • MapImage • MapImages • MatteFloodfill • MaximumImages • MinimumImages • MedianFilterImage • ModeImage • MosaicImages • OpaqueImage • OpenCacheView • PaintFloodfill • PaintOpaqueImage • PaintTransparentImage • ParseSizeGeometry • PopImageList • PopImagePixels • PostscriptGeometry • PushImageList • PushImagePixels • QuantizationError • RandomChannelThresholdImage • ReacquireMemory • RecolorImage • ReduceNoiseImage • ResetImageAttributeIterator • SetCacheViewPixels • SetExceptionInfo • SetImage • SetImageAttribute • SetImageList • SetImagePixels • SetMagickRegistry • SetMonitorHandler • ShiftImageList • SpliceImageList • Strip • SyncCacheView • SyncCacheViewPixels • SyncImagePixels • TemporaryFilename • ThresholdImage • ThresholdImageChannel • TransformHSL • TranslateText • TransparentImage • UnshiftImageList • ZoomImage]
+
[MagickAverageImages • ClonePixelView • DestroyPixelView • DuplexTransferPixelViewIterator • GetPixelViewException • GetPixelViewHeight • GetPixelViewIterator • GetPixelViewPixels • GetPixelViewWand • GetPixelViewWidth • GetPixelViewX • GetPixelViewY • IsPixelView • MagickClipPathImage • DrawGetFillAlpha • DrawGetStrokeAlpha • DrawPeekGraphicWand • DrawPopGraphicContext • DrawPushGraphicContext • DrawSetFillAlpha • DrawSetStrokeAlpha • MagickColorFloodfillImage • MagickDescribeImage • MagickFlattenImages • MagickGetImageAttribute • MagickGetImageMatte • MagickGetImagePixels • MagickGetImageSize • MagickMapImage • MagickMatteFloodfillImage • MagickMedianFilterImage • MagickMinimumImages • MagickModeImage • MagickMosaicImages • MagickOpaqueImage • MagickPaintFloodfillImage • MagickPaintOpaqueImage • MagickPaintTransparentImage • MagickRecolorImage • MagickReduceNoiseImage • MagickMaximumImages • MagickSetImageAttribute • MagickSetImageIndex • MagickTransparentImage • MagickRegionOfInterestImage • MagickSetImagePixels • MagickWriteImageBlob • NewPixelView • NewPixelViewRegion • PixelGetNextRow • PixelIteratorGetException • SetPixelViewIterator • TransferPixelViewIterator • UpdatePixelViewIterator]
-
+
-
AcquireCacheViewIndexes() returns the indexes associated with the specified view.
+
MagickAverageImages() average a set of images.
-
Deprecated, replace with:
-
-
- GetCacheViewVirtualIndexQueue(cache_view);
-
-
-
The format of the AcquireCacheViewIndexes method is:
-
-
- const IndexPacket *AcquireCacheViewIndexes(const CacheView *cache_view)
-
-
-
A description of each parameter follows:
-
-
cache_view
-
the cache view.
-
-
-
-
-
-
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.
-
-
Deprecated, replace with:
-
-
- 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)
-
-
-
A description of each parameter follows:
-
-
cache_view
-
the cache view.
-
-
x,y,columns,rows
-
These values define the perimeter of a region of pixels.
-
-
exception
-
return any errors or warnings in this structure.
-
-
-
-
-
-
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.
-
-
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.
-
-
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)
-
-
-
A description of each parameter follows:
-
-
image
-
the image.
-
-
x,y,columns,rows
-
These values define the perimeter of a region of pixels.
-
-
exception
-
return any errors or warnings in this structure.
-
-
-
-
-
-
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.
-
-
Deprecated, replace with:
-
-
- GetVirtualIndexQueue(image);
-
-
-
The format of the AcquireIndexes() method is:
-
-
- const IndexPacket *AcquireIndexes(const Image *image)
-
-
-
A description of each parameter follows:
-
-
indexes
-
AcquireIndexes() returns the indexes associated with the last call to QueueAuthenticPixels() or GetVirtualPixels().
-
-
image
-
the image.
-
-
-
-
-
-
AcquireMemory() returns a pointer to a block of memory at least size bytes suitably aligned for any use.
-
-
The format of the AcquireMemory method is:
-
-
- void *AcquireMemory(const size_t size)
-
-
-
A description of each parameter follows:
-
-
size
-
the size of the memory in bytes to allocate.
-
-
-
-
-
-
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:
-
-
- GetOneCacheViewVirtualPixel(cache_view,x,y,pixel,exception);
-
-
-
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)
-
-
-
A description of each parameter follows:
-
-
cache_view
-
the cache view.
-
-
x,y
-
These values define the offset of the pixel.
-
-
pixel
-
return a pixel at the specified (x,y) location.
-
-
exception
-
return any errors or warnings in this structure.
-
-
-
-
-
-
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.
-
-
Deprecated, replace with:
-
-
- GetOneCacheViewVirtualMethodPixel(cache_view,virtual_pixel_method,
- x,y,pixel,exception);
-
-
-
The format of the AcquireOneCacheViewPixel method is:
+
The format of the MagickAverageImages method is:
- 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)
A description of each parameter follows:
-
cache_view
-
the cache view.
-
-
virtual_pixel_method
-
the virtual pixel method.
-
-
x,y
-
These values define the offset of the pixel.
-
-
pixel
-
return a pixel at the specified (x,y) location.
-
-
exception
-
return any errors or warnings in this structure.
+
wand
+
the magick wand.
-
+
-
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:
-
-
- MagickPixelPacket pixel;
- GetOneVirtualMagickPixel(image,x,y,&pixel,exception);
-
+
ClonePixelView() makes a copy of the specified pixel view.
-
The format of the AcquireOneMagickPixel() method is:
+
The format of the ClonePixelView method is:
- MagickPixelPacket AcquireOneMagickPixel(const Image image,const ssize_t x,
- const ssize_t y,ExceptionInfo exception)
+ PixelView *ClonePixelView(const PixelView *pixel_view)
A description of each parameter follows:
-
image
-
the image.
-
-
x,y
-
These values define the location of the pixel to return.
-
-
exception
-
return any errors or warnings in this structure.
+
pixel_view
+
the pixel view.
-
+
-
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:
-
-
- PixelPacket pixel;
- GetOneVirtualPixel(image,x,y,&pixel,exception);
-
+
DestroyPixelView() deallocates memory associated with a pixel view.
-
The format of the AcquireOnePixel() method is:
+
The format of the DestroyPixelView method is:
- 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)
A description of each parameter follows:
-
image
-
the image.
+
pixel_view
+
the pixel view.
-
x,y
-
These values define the location of the pixel to return.
+
number_wand
+
the number of pixel wands.
-
exception
-
return any errors or warnings in this structure.
+
number_threads
+
number of threads.
-
+
-
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.
+
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:
- PixelPacket pixel;
- GetOneVirtualMethodPixel(image,virtual_pixel_method,x,y,&pixel,exception);
-
-
-
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)
+ #pragma omp critical
-
A description of each parameter follows:
-
-
virtual_pixel_method
-
the virtual pixel method.
+
to define a section of code in your callback transfer method that must be executed by a single thread at a time.
-
image
-
the image.
-
-
x,y
-
These values define the location of the pixel to return.
-
-
exception
-
return any errors or warnings in this structure.
-
-
-
-
-
-
AcquirePixels() returns the pixels associated with the last call to QueueAuthenticPixels() or GetVirtualPixels().
-
-
Deprecated, replace with:
-
-
- GetVirtualPixelQueue(image);
-
-
-
The format of the AcquirePixels() method is:
+
The format of the DuplexTransferPixelViewIterator method is:
- const PixelPacket *AcquirePixels(const Image image)
+ MagickBooleanType DuplexTransferPixelViewIterator(PixelView *source,
+ PixelView *duplex,PixelView *destination,
+ DuplexTransferPixelViewMethod transfer,void *context)
A description of each parameter follows:
-
image
-
the image.
-
-
-
-
-
-
AffinityImage() replaces the colors of an image with the closest color from a reference image.
-
-
Deprecated, replace with:
-
-
- 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)
-
+
source
+
the source pixel view.
-
A description of each parameter follows:
+
duplex
+
the duplex pixel view.
-
quantize_info
-
Specifies a pointer to an QuantizeInfo structure.
+
destination
+
the destination pixel view.
-
image
-
the image.
+
transfer
+
the transfer callback method.
-
affinity_image
-
the reference image.
+
context
+
the user defined context.
-
+
-
AffinityImages() replaces the colors of a sequence of images with the closest color from a reference image.
-
-
Deprecated, replace with:
+
GetPixelViewException() returns the severity, reason, and description of any error that occurs when utilizing a pixel view.
-
- RemapImages(quantize_info,images,affinity_image);
-
-
-
The format of the AffinityImage method is:
+
The format of the GetPixelViewException method is:
- MagickBooleanType AffinityImages(const QuantizeInfo *quantize_info,
- Image *images,Image *affinity_image)
+ char *GetPixelViewException(const PixelWand *pixel_view,
+ ExceptionType *severity)
A description of each parameter follows:
-
quantize_info
-
Specifies a pointer to an QuantizeInfo structure.
-
-
images
-
the image sequence.
+
pixel_view
+
the pixel pixel_view.
-
affinity_image
-
the reference image.
-
-
-
-
-
-
AllocateImage() returns a pointer to an image structure initialized to default values.
-
-
Deprecated, replace with:
-
-
- AcquireImage(image_info);
-
-
-
The format of the AllocateImage method is:
-
-
- Image *AllocateImage(const ImageInfo *image_info)
-
-
-
A description of each parameter follows:
-
-
image_info
-
Many of the image default values are set from this structure. For example, filename, compression, depth, background color, and others.
+
severity
+
the severity of the error is returned here.
-
+
-
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.
+
GetPixelViewHeight() returns the pixel view height.
-
Deprecated, replace with:
-
-
- AcquireImageColormap(image,colors);
-
-
-
The format of the AllocateImageColormap method is:
+
The format of the GetPixelViewHeight method is:
- MagickBooleanType AllocateImageColormap(Image *image,
- const size_t colors)
+ size_t GetPixelViewHeight(const PixelView *pixel_view)
A description of each parameter follows:
-
image
-
the image.
-
-
colors
-
the number of colors in the image colormap.
+
pixel_view
+
the pixel view.
-
+
-
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.
+
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:
- AcquireNextImage(image_info,image);
-
-
-
The format of the AllocateNextImage method is:
-
-
- void AllocateNextImage(const ImageInfo *image_info,Image *image)
+ #pragma omp critical
-
A description of each parameter follows:
-
-
image_info
-
Many of the image default values are set from this structure. For example, filename, compression, depth, background color, and others.
-
-
image
-
the image.
-
-
-
-
-
-
AllocateString() allocates memory for a string and copies the source string to that memory location (and returns it).
+
to define a section of code in your callback get method that must be executed by a single thread at a time.
-
The format of the AllocateString method is:
+
The format of the GetPixelViewIterator method is:
- char *AllocateString(const char *source)
+ MagickBooleanType GetPixelViewIterator(PixelView *source,
+ GetPixelViewMethod get,void *context)
A description of each parameter follows:
source
-
A character string.
+
the source pixel view.
-
-
-
-
-
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);
-
-
-
The format of the AverageImages method is:
-
-
- Image *AverageImages(Image *images,ExceptionInfo *exception)
-
-
-
A description of each parameter follows:
-
-
image
-
the image sequence.
-
-
exception
-
return any errors or warnings in this structure.
-
-
-
-
-
-
ChannelThresholdImage() 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 ChannelThresholdImage method is:
-
-
- unsigned int ChannelThresholdImage(Image *image,const char *level)
-
-
-
A description of each parameter follows:
-
-
image
-
the image.
-
-
level
-
define the threshold values.
-
-
-
-
-
-
ClipPathImage() sets the image clip mask based any clipping path information if it exists.
-
-
Deprecated, replace with:
+
get
+
the get callback method.
-
- ClipImagePath(image,pathname,inside);
-
-
-
The format of the ClipImage method is:
-
-
- MagickBooleanType ClipPathImage(Image *image,const char *pathname,
- const MagickBooleanType inside)
-
-
-
A description of each parameter follows:
-
-
image
-
the image.
-
-
pathname
-
name of clipping path resource. If name is preceded by #, use clipping path numbered by name.
-
-
inside
-
if non-zero, later operations take effect inside clipping path. Otherwise later operations take effect outside clipping path.
-
-
-
-
-
-
CloneImageAttributes() clones one or more image attributes.
-
-
Deprecated, replace with:
-
-
- CloneImageProperties(image,clone_image);
-
-
-
The format of the CloneImageAttributes method is:
-
-
- MagickBooleanType CloneImageAttributes(Image *image,
- const Image *clone_image)
-
-
-
A description of each parameter follows:
-
-
image
-
the image.
-
-
clone_image
-
the clone image.
+
context
+
the user defined context.
-
+
-
CloneMemory() copies size bytes from memory area source to the destination. Copying between objects that overlap will take place correctly. It returns destination.
-
-
The format of the CloneMemory method is:
-
-
- void *CloneMemory(void *destination,const void *source,
- const size_t size)
-
-
-
A description of each parameter follows:
-
-
destination
-
the destination.
-
-
source
-
the source.
-
-
size
-
the size of the memory in bytes to allocate.
-
-
-
-
-
-
CloseCacheView() closes the specified view returned by a previous call to OpenCacheView().
-
-
Deprecated, replace with:
-
-
- DestroyCacheView(view_info);
-
-
-
The format of the CloseCacheView method is:
-
-
- CacheView *CloseCacheView(CacheView *view_info)
-
-
-
A description of each parameter follows:
-
-
view_info
-
the address of a structure of type CacheView.
-
-
-
-
-
-
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.
-
-
The format of the ColorFloodfillImage 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)
-
-
-
A description of each parameter follows:
-
-
image
-
the image.
-
-
draw_info
-
the draw info.
-
-
target
-
the RGB value of the target color.
-
-
x,y
-
the starting location of the operation.
-
-
method
-
Choose either FloodfillMethod or FillToBorderMethod.
-
-
-
-
-
-
DeleteImageAttribute() deletes an attribute from the image.
-
-
Deprecated, replace with:
-
-
- DeleteImageProperty(image,key);
-
-
-
The format of the DeleteImageAttribute method is:
-
-
- MagickBooleanType DeleteImageAttribute(Image *image,const char *key)
-
-
-
A description of each parameter follows:
-
-
image
-
the image info.
-
-
key
-
the image key.
-
-
-
-
-
-
DeleteImageList() deletes an image at the specified position in the list.
-
-
The format of the DeleteImageList method is:
-
-
- unsigned int DeleteImageList(Image *images,const ssize_t offset)
-
-
-
A description of each parameter follows:
-
-
images
-
the image list.
-
-
offset
-
the position within the list.
-
-
-
-
-
-
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.
-
-
Deprecated, replace with:
-
-
- char key[MaxTextExtent];
- FormatMagickString(key,MaxTextExtent,"ld\n",id);
- DeleteImageRegistry(key);
-
-
-
The format of the DeleteMagickRegistry method is:
-
-
- MagickBooleanType DeleteMagickRegistry(const ssize_t id)
-
-
-
A description of each parameter follows:
-
-
id
-
the registry id.
-
-
-
-
-
-
DescribeImage() describes an image by printing its attributes to the file. Attributes include the image width, height, size, and others.
-
-
Deprecated, replace with:
-
-
- IdentifyImage(image,file,verbose);
-
-
-
The format of the DescribeImage method is:
-
-
- MagickBooleanType DescribeImage(Image *image,FILE *file,
- const MagickBooleanType verbose)
-
-
-
A description of each parameter follows:
-
-
image
-
the image.
-
-
file
-
the file, typically stdout.
-
-
verbose
-
A value other than zero prints more detailed information about the image.
-
-
-
-
-
-
DestroyImageAttributes() deallocates memory associated with the image attribute list.
-
-
The format of the DestroyImageAttributes method is:
-
-
- DestroyImageAttributes(Image *image)
-
-
-
A description of each parameter follows:
-
-
image
-
the image.
-
-
-
-
-
-
DestroyImages() destroys an image list.
-
-
Deprecated, replace with:
-
-
- DestroyImageList(image);
-
-
-
The format of the DestroyImages method is:
-
-
- void DestroyImages(Image *image)
-
-
-
A description of each parameter follows:
-
-
image
-
the image sequence.
-
-
-
-
-
-
DestroyMagick() destroys the ImageMagick environment.
-
-
Deprecated, replace with:
-
-
- MagickCoreTerminus();
-
-
-
The format of the DestroyMagick function is:
-
-
- DestroyMagick(void)
-
-
-
-
-
-
-
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.
-
-
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:
-
-
- ExportImagePixels(image,x_offset,y_offset,columns,rows,map,type,pixels,
- exception);
-
-
-
The format of the DispatchImage method is:
-
-
- 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)
-
-
-
A description of each parameter follows:
-
-
image
-
the image.
-
-
x_offset, y_offset, columns, rows
-
These values define the perimeter of a region of pixels you want to extract.
-
-
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).
-
-
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.
-
-
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.
-
-
exception
-
return any errors or warnings in this structure.
-
-
-
-
-
-
ExtractSubimageFromImageImage() extracts a region of the image that most closely resembles the reference.
-
-
The format of the ExtractSubimageFromImageImage method is:
-
-
- Image *ExtractSubimageFromImage(const Image *image,
- const Image *reference,ExceptionInfo *exception)
-
-
-
A description of each parameter follows:
-
-
image
-
the image.
-
-
reference
-
find an area of the image that closely resembles this image.
-
-
exception
-
return any errors or warnings in this structure.
-
-
-
-
-
-
FlattenImages() Obsolete Function: Use MergeImageLayers() instead.
-
-
Deprecated, replace with:
-
-
- MergeImageLayers(image,FlattenLayer,exception);
-
-
-
The format of the FlattenImage method is:
-
-
- Image *FlattenImage(Image *image,ExceptionInfo *exception)
-
-
-
A description of each parameter follows:
-
-
image
-
the image sequence.
-
-
exception
-
return any errors or warnings in this structure.
-
-
-
-
-
-
FormatImageAttribute() permits formatted key/value pairs to be saved as an image attribute.
-
-
The format of the FormatImageAttribute method is:
-
-
- MagickBooleanType FormatImageAttribute(Image *image,const char *key,
- const char *format,...)
-
-
-
A description of each parameter follows.
-
-
image
-
The image.
-
-
key
-
The attribute key.
-
-
format
-
A string describing the format to use to write the remaining arguments.
-
-
-
-
-
-
FormatString() prints formatted output of a variable argument list.
-
-
The format of the FormatString method is:
-
-
- void FormatString(char *string,const char *format,...)
-
-
-
A description of each parameter follows.
-
-
string
-
Method FormatString returns the formatted string in this character buffer.
-
-
format
-
A string describing the format to use to write the remaining arguments.
-
-
-
-
-
-
GetConfigureBlob() returns the specified configure file as a blob.
-
-
The format of the GetConfigureBlob method is:
-
-
- void *GetConfigureBlob(const char *filename,ExceptionInfo *exception)
-
-
-
A description of each parameter follows:
-
-
filename
-
the configure file name.
-
-
path
-
return the full path information of the configure file.
-
-
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.
-
-
exception
-
return any errors or warnings in this structure.
-
-
-
-
-
-
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:
-
-
- GetCacheViewAuthenticPixels(cache_view,x,y,columns,rows,
- GetCacheViewException(cache_view));
-
-
-
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)
-
-
-
A description of each parameter follows:
-
-
cache_view
-
the address of a structure of type CacheView.
-
-
x,y,columns,rows
-
These values define the perimeter of a region of pixels.
-
-
-
-
-
-
GetCacheViewIndexes() returns the indexes associated with the specified view.
-
-
Deprecated, replace with:
-
-
- GetCacheViewAuthenticIndexQueue(cache_view);
-
-
-
The format of the GetCacheViewIndexes method is:
-
-
- IndexPacket *GetCacheViewIndexes(CacheView *cache_view)
-
-
-
A description of each parameter follows:
-
-
cache_view
-
the cache view.
-
-
-
-
-
-
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.
-
-
Deprecated, replace with:
-
-
- 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)
-
-
-
A description of each parameter follows:
-
-
cache_view
-
the cache view.
-
-
x,y,columns,rows
-
These values define the perimeter of a region of pixels.
-
-
-
-
-
-
GetImageAttribute() searches the list of image attributes and returns a pointer to the attribute if it exists otherwise NULL.
-
-
The format of the GetImageAttribute method is:
-
-
- const ImageAttribute *GetImageAttribute(const Image *image,
- const char *key)
-
-
-
A description of each parameter follows:
-
-
image
-
the image.
-
-
key
-
These character strings are the name of an image attribute to return.
-
-
-
-
-
-
GetImageClippingPathAttribute() searches the list of image attributes and returns a pointer to a clipping path if it exists otherwise NULL.
-
-
Deprecated, replace with:
-
-
- GetImageAttribute(image,"8BIM:1999,2998");
-
-
-
The format of the GetImageClippingPathAttribute method is:
-
-
- const ImageAttribute *GetImageClippingPathAttribute(Image *image)
-
-
-
A description of each parameter follows:
-
-
attribute
-
Method GetImageClippingPathAttribute returns the clipping path if it exists otherwise NULL.
-
-
image
-
the image.
-
-
-
-
-
-
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);
-
-
-
The format of the GetImageFromMagickRegistry method is:
-
-
- Image *GetImageFromMagickRegistry(const char *name,ssize_t *id,
- ExceptionInfo *exception)
-
-
-
A description of each parameter follows:
-
-
name
-
the name of the image to retrieve from the registry.
-
-
id
-
the registry id.
-
-
exception
-
return any errors or warnings in this structure.
-
-
-
-
-
-
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.
-
-
The format of the GetMagickRegistry method is:
-
-
- const void *GetMagickRegistry(const ssize_t id,RegistryType *type,
- size_t *length,ExceptionInfo *exception)
-
-
-
A description of each parameter follows:
-
-
id
-
the registry id.
-
-
type
-
the registry type.
-
-
length
-
the blob length in number of bytes.
-
-
exception
-
return any errors or warnings in this structure.
-
-
-
-
-
-
GetImageGeometry() returns a region as defined by the geometry string with respect to the image and its gravity.
-
-
Deprecated, replace with:
-
-
- if (size_to_fit != MagickFalse)
- ParseRegionGeometry(image,geometry,region_info,&image->exception); else
- ParsePageGeometry(image,geometry,region_info,&image->exception);
-
-
-
The format of the GetImageGeometry method is:
-
-
- int GetImageGeometry(Image *image,const char *geometry,
- const unsigned int size_to_fit,RectangeInfo *region_info)
-
-
-
A description of each parameter follows:
-
-
flags
-
Method GetImageGeometry returns a bitmask that indicates which of the four values were located in the geometry string.
-
-
geometry
-
The geometry (e.g. 100x100+10+10).
-
-
size_to_fit
-
A value other than 0 means to scale the region so it fits within the specified width and height.
-
-
region_info
-
the region as defined by the geometry string with respect to the image and its gravity.
-
-
-
-
-
-
GetImageList() returns an image at the specified position in the list.
-
-
Deprecated, replace with:
-
-
- CloneImage(GetImageFromList(images,(ssize_t) offset),0,0,MagickTrue,
- exception);
-
-
-
The format of the GetImageList method is:
-
-
- Image *GetImageList(const Image *images,const ssize_t offset,
- ExceptionInfo *exception)
-
-
-
A description of each parameter follows:
-
-
images
-
the image list.
-
-
offset
-
the position within the list.
-
-
exception
-
return any errors or warnings in this structure.
-
-
-
-
-
-
GetImageListIndex() returns the position in the list of the specified image.
-
-
Deprecated, replace with:
-
-
- GetImageIndexInList(images);
-
-
-
The format of the GetImageListIndex method is:
-
-
- ssize_t GetImageListIndex(const Image *images)
-
-
-
A description of each parameter follows:
-
-
images
-
the image list.
-
-
-
-
-
-
GetImageListSize() returns the number of images in the list.
-
-
Deprecated, replace with:
-
-
- GetImageListLength(images);
-
-
-
The format of the GetImageListSize method is:
-
-
- size_t GetImageListSize(const Image *images)
-
-
-
A description of each parameter follows:
-
-
images
-
the image list.
-
-
-
-
-
-
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);
-
-
-
The format of the GetImagePixels() method is:
-
-
- PixelPacket *GetImagePixels(Image *image,const ssize_t x,const ssize_t y,
- const size_t columns,const size_t rows)
-
-
-
A description of each parameter follows:
-
-
image
-
the image.
-
-
x,y,columns,rows
-
These values define the perimeter of a region of pixels.
-
-
-
-
-
-
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:
-
-
- GetAuthenticIndexQueue(image);
-
-
-
The format of the GetIndexes() method is:
-
-
- IndexPacket *GetIndexes(const Image *image)
-
-
-
A description of each parameter follows:
-
-
indexes
-
GetIndexes() returns the indexes associated with the last call to QueueAuthenticPixels() or GetAuthenticPixels().
-
-
image
-
the image.
-
-
-
-
-
-
GetNextImage() returns the next image in a list.
-
-
Deprecated, replace with:
-
-
- GetNextImageInList(images);
-
-
-
The format of the GetNextImage method is:
-
-
- Image *GetNextImage(const Image *images)
-
-
-
A description of each parameter follows:
-
-
images
-
the image list.
-
-
-
-
-
-
GetNextImageAttribute() gets the next image attribute.
-
-
Deprecated, replace with:
-
-
- const char *property;
- property=GetNextImageProperty(image);
- if (property != (const char *) NULL)
- GetImageAttribute(image,property);
-
-
-
The format of the GetNextImageAttribute method is:
-
-
- const ImageAttribute *GetNextImageAttribute(const Image *image)
-
-
-
A description of each parameter follows:
-
-
image
-
the image.
-
-
-
-
-
-
GetNumberScenes() returns the number of images in the list.
-
-
Deprecated, replace with:
-
-
- GetImageListLength(image);
-
-
-
The format of the GetNumberScenes method is:
-
-
- unsigned int GetNumberScenes(const Image *images)
-
-
-
A description of each parameter follows:
-
-
images
-
the image list.
-
-
-
-
-
-
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:
-
-
image
-
the image.
-
-
x,y
-
These values define the location of the pixel to return.
-
-
-
-
-
-
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:
-
-
pixels
-
GetPixels() returns the pixels associated with the last call to QueueAuthenticPixels() or GetAuthenticPixels().
-
-
image
-
the image.
-
-
-
-
-
-
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:
-
-
images
-
the image list.
-
-
-
-
-
-
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:
-
-
hue, saturation, lightness
-
A double value representing a component of the HSL color space.
-
-
red, green, blue
-
A pointer to a pixel component of type Quantum.
-
-
-
-
-
-
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:
-
-
affine
-
A pointer the affine transform of type AffineMatrix.
-
-
-
-
-
-
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:
-
-
path
-
the execution path of the current ImageMagick client.
-
-
-
-
-
-
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:
-
-
image
-
the image.
-
-
image_view
-
the image cache view.
-
-
type
-
the type of pixel color interpolation.
-
-
x,y
-
A double representing the current (x,y) position of the pixel.
-
-
exception
-
return any errors or warnings in this structure.
-
-
-
-
-
-
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:
-
-
image_info
-
the image info.
-
-
image
-
the image.
-
-
embed_text
-
the address of a character string containing the embedded formatting characters.
-
-
-
-
-
-
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:
-
-
image
-
the image.
-
-
channel
-
the channel.
-
-
black_color
-
The color to map black to/from
-
-
white_point
-
The color to map white to/from
-
-
invert
-
if true map the colors (levelize), rather than from (level)
-
-
-
-
-
-
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:
-
-
memory
-
A pointer to a block of memory to free for reuse.
-
-
-
-
-
-
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:
-
-
semaphore_info
-
Specifies a pointer to an SemaphoreInfo structure.
-
-
-
-
-
-
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:
-
-
path
-
the execution path of the current ImageMagick client.
-
-
-
-
-
-
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:
-
-
offset
-
the position relative to the span parameter which represents how much progress has been made toward completing a task.
-
-
span
-
the span relative to completing a task.
-
-
client_data
-
the client data.
-
-
-
-
-
-
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:
-
-
image
-
Specifies a pointer to an Image structure.
-
-
map_image
-
the image. Reduce image to a set of colors represented by this image.
-
-
dither
-
Set this integer value to something other than zero to dither the mapped image.
-
-
-
-
-
-
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:
-
-
image
-
Specifies a pointer to a set of Image structures.
-
-
map_image
-
the image. Reduce image to a set of colors represented by this image.
-
-
dither
-
Set this integer value to something other than zero to dither the quantized image.
-
-
-
-
-
-
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.
+
GetPixelViewPixels() returns the pixel view pixel_wands.
-
The format of the MatteFloodfillImage method is:
+
The format of the GetPixelViewPixels 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)
+ PixelWand *GetPixelViewPixels(const PixelView *pixel_view)
A description of each parameter follows:
-
image
-
the image.
-
-
target
-
the RGB value of the target color.
-
-
opacity
-
the level of transparency: 0 is fully opaque and QuantumRange is fully transparent.
-
-
x,y
-
the starting location of the operation.
-
-
method
-
Choose either FloodfillMethod or FillToBorderMethod.
+
pixel_view
+
the pixel view.
-
+
-
MaximumImages() returns the maximum intensity of an image sequence.
-
-
Deprecated, replace with:
+
GetPixelViewWand() returns the magick wand associated with the pixel view.
-
- EvaluateImages(images,MinEvaluateOperator,exception);
-
-
-
The format of the MaxImages method is:
+
The format of the GetPixelViewWand method is:
- Image *MaximumImages(Image *images,ExceptionInfo *exception)
+ MagickWand *GetPixelViewWand(const PixelView *pixel_view)
A description of each parameter follows:
-
images
-
the image sequence.
-
-
exception
-
return any errors or warnings in this structure.
+
pixel_view
+
the pixel view.
-
+
-
MinimumImages() returns the minimum intensity of an image sequence.
-
-
Deprecated, replace with:
-
-
- EvaluateImages(images,MinEvaluateOperator,exception);
-
+
GetPixelViewWidth() returns the pixel view width.
-
The format of the MinimumImages method is:
+
The format of the GetPixelViewWidth method is:
- Image *MinimumImages(Image *images,ExceptionInfo *exception)
+ size_t GetPixelViewWidth(const PixelView *pixel_view)
A description of each parameter follows:
-
images
-
the image sequence.
-
-
exception
-
return any errors or warnings in this structure.
+
pixel_view
+
the pixel view.
-
+
-
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.
+
GetPixelViewX() returns the pixel view x offset.
-
The format of the MedianFilterImage method is:
+
The format of the GetPixelViewX method is:
- Image *MedianFilterImage(const Image *image,const double radius,
- ExceptionInfo *exception)
+ ssize_t GetPixelViewX(const PixelView *pixel_view)
A description of each parameter follows:
-
image
-
the image.
-
-
radius
-
the radius of the pixel neighborhood.
-
-
exception
-
return any errors or warnings in this structure.
+
pixel_view
+
the pixel view.
-
+
-
ModeImage() makes each pixel the 'predominate color' of the neighborhood of the specified radius.
+
GetPixelViewY() returns the pixel view y offset.
-
The format of the ModeImage method is:
+
The format of the GetPixelViewY method is:
- Image *ModeImage(const Image *image,const double radius,
- ExceptionInfo *exception)
+ ssize_t GetPixelViewY(const PixelView *pixel_view)
A description of each parameter follows:
-
image
-
the image.
-
-
radius
-
the radius of the pixel neighborhood.
-
-
exception
-
return any errors or warnings in this structure.
+
pixel_view
+
the pixel view.
-
+
-
MosaicImages() Obsolete Function: Use MergeImageLayers() instead.
-
-
Deprecated, replace with:
-
-
- MergeImageLayers(image,MosaicLayer,exception);
-
+
IsPixelView() returns MagickTrue if the the parameter is verified as a pixel view container.
-
The format of the MosaicImage method is:
+
The format of the IsPixelView method is:
- Image *MosaicImages(const Image *image,ExceptionInfo *exception)
+ MagickBooleanType IsPixelView(const PixelView *pixel_view)
A description of each parameter follows:
-
image
-
the image list to be composited together
-
-
exception
-
return any errors or warnings in this structure.
+
pixel_view
+
the pixel view.
-
+
-
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.
+
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.
-
The format of the OpaqueImage method is:
+
The format of the MagickClipPathImage method is:
- MagickBooleanType OpaqueImage(Image *image,
- const PixelPacket *target,const PixelPacket fill)
+ MagickBooleanType MagickClipPathImage(MagickWand *wand,
+ const char *pathname,const MagickBooleanType inside)
A description of each parameter follows:
-
image
-
the image.
+
wand
+
the magick wand.
-
target
-
the RGB value of the target color.
+
pathname
+
name of clipping path resource. If name is preceded by #, use clipping path numbered by name.
-
fill
-
the replacement color.
+
inside
+
if non-zero, later operations take effect inside clipping path. Otherwise later operations take effect outside clipping path.
-
+
-
OpenCacheView() opens a view into the pixel cache, using the VirtualPixelMethod that is defined within the given image itself.
-
-
Deprecated, replace with:
-
-
- AcquireCacheView(image);
-
+
DrawGetFillAlpha() returns the alpha used when drawing using the fill color or fill texture. Fully opaque is 1.0.
-
The format of the OpenCacheView method is:
+
The format of the DrawGetFillAlpha method is:
- CacheView *OpenCacheView(const Image *image)
+ double DrawGetFillAlpha(const DrawingWand *wand)
A description of each parameter follows:
-
image
-
the image.
+
wand
+
the drawing wand.
-
+
-
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:
+
DrawGetStrokeAlpha() returns the alpha of stroked object outlines.
-
- FloodfillPaintImage(image,channel,draw_info,target,x,y,
- method == FloodfillMethod ? MagickFalse : MagickTrue);
-
-
-
The format of the PaintFloodfillImage method is:
+
The format of the DrawGetStrokeAlpha 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)
+ double DrawGetStrokeAlpha(const DrawingWand *wand)
A description of each parameter follows:
-
image
-
the image.
+
wand
+
the drawing wand.
+
+
+
-
channel
-
the channel(s).
+
DrawPeekGraphicWand() returns the current drawing wand.
-
target
-
the RGB value of the target color.
+
The format of the PeekDrawingWand method is:
-
x,y
-
the starting location of the operation.
+
+ DrawInfo *DrawPeekGraphicWand(const DrawingWand *wand)
+
-
draw_info
-
the draw info.
+
A description of each parameter follows:
-
method
-
Choose either FloodfillMethod or FillToBorderMethod.
+
wand
+
the drawing wand.
-
+
-
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);
-
+
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 PaintOpaqueImage method is:
+
The format of the DrawPopGraphicContext 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)
+ MagickBooleanType DrawPopGraphicContext(DrawingWand *wand)
A description of each parameter follows:
-
image
-
the image.
-
-
channel
-
the channel(s).
-
-
target
-
the RGB value of the target color.
-
-
fill
-
the replacement color.
+
wand
+
the drawing wand.
-
+
-
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);
-
+
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.
-
The format of the PaintTransparentImage method is:
+
The format of the DrawPushGraphicContext method is:
- MagickBooleanType PaintTransparentImage(Image *image,
- const MagickPixelPacket *target,const Quantum opacity)
+ MagickBooleanType DrawPushGraphicContext(DrawingWand *wand)
A description of each parameter follows:
-
image
-
the image.
-
-
target
-
the RGB value of the target color.
-
-
opacity
-
the replacement opacity value.
+
wand
+
the drawing wand.
-
+
-
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);
-
+
DrawSetFillAlpha() sets the alpha to use when drawing using the fill color or fill texture. Fully opaque is 1.0.
-
The format of the ParseSizeGeometry method is:
+
The format of the DrawSetFillAlpha method is:
- MagickStatusType ParseSizeGeometry(const Image *image,
- const char *geometry,RectangeInfo *region_info)
+ void DrawSetFillAlpha(DrawingWand *wand,const double fill_alpha)
A description of each parameter follows:
-
geometry
-
The geometry (e.g. 100x100+10+10).
+
wand
+
the drawing wand.
-
region_info
-
the region as defined by the geometry string.
+
fill_alpha
+
fill alpha
-
+
-
PopImageList() removes the last image in the list.
-
-
Deprecated, replace with:
-
-
- RemoveLastImageFromList(images);
-
+
DrawSetStrokeAlpha() specifies the alpha of stroked object outlines.
-
The format of the PopImageList method is:
+
The format of the DrawSetStrokeAlpha method is:
- Image *PopImageList(Image **images)
+ void DrawSetStrokeAlpha(DrawingWand *wand,const double stroke_alpha)
A description of each parameter follows:
-
images
-
the image list.
+
wand
+
the drawing wand.
+
+
stroke_alpha
+
stroke alpha. The value 1.0 is opaque.
-
+
-
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.
+
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 PopImagePixels method is:
+
The format of the MagickColorFloodfillImage method is:
- 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)
A description of each parameter follows:
-
image
-
the image.
+
wand
+
the magick wand.
-
quantum
-
Declare which pixel components to transfer (RGB, RGBA, etc).
+
fill
+
the floodfill color pixel wand.
-
destination
-
The components are transferred to this buffer.
+
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.
-
-
-
+
bordercolor
+
the border color pixel wand.
-
PostscriptGeometry() replaces any page mneumonic with the equivalent size in picas.
+
x,y
+
the starting location of the operation.
-
Deprecated, replace with:
+
+
+
-
- GetPageGeometry(page);
-
+
MagickDescribeImage() identifies an image by printing its attributes to the file. Attributes include the image width, height, size, and others.
-
The format of the PostscriptGeometry method is:
+
The format of the MagickDescribeImage method is:
- char *PostscriptGeometry(const char *page)
+ const char *MagickDescribeImage(MagickWand *wand)
-
A description of each parameter follows.
+
A description of each parameter follows:
-
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).
+
wand
+
the magick wand.
-
+
-
PushImageList() adds an image to the end of the list.
-
-
Deprecated, replace with:
-
-
- AppendImageToList(images,CloneImageList(image,exception));
-
+
MagickFlattenImages() merges a sequence of images. This useful for combining Photoshop layers into a single image.
-
The format of the PushImageList method is:
+
The format of the MagickFlattenImages method is:
- unsigned int PushImageList(Image *images,const Image *image,
- ExceptionInfo *exception)
+ MagickWand *MagickFlattenImages(MagickWand *wand)
A description of each parameter follows:
-
images
-
the image list.
-
-
image
-
the image.
-
-
exception
-
return any errors or warnings in this structure.
+
wand
+
the magick wand.
-
+
-
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.
+
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 PushImagePixels method is:
+
The format of the MagickGetImageAttribute method is:
- size_t PushImagePixels(Image *image,const QuantumType quantum,
- const unsigned char *source)
+ char *MagickGetImageAttribute(MagickWand *wand,const char *property)
A description of each parameter follows:
-
image
-
the image.
-
-
quantum
-
Declare which pixel components to transfer (red, green, blue, opacity, RGB, or RGBA).
+
wand
+
the magick wand.
-
source
-
The pixel components are transferred from this buffer.
+
property
+
the property.
-
+
-
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:
+
MagickGetImageMatte() returns MagickTrue if the image has a matte channel otherwise MagickFalse.
-
- o mean_error_per_pixel: This value is the mean error for any single
- pixel in the image.
+The format of the MagickGetImageMatte method is:
+
+
+ size_t MagickGetImageMatte(MagickWand *wand)
-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.
+A description of each parameter follows:
+
+wand
+the magick wand.
+
+
+
+
-
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.
+
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.
-
Deprecated, replace with:
+
Suppose you want to extract the first scanline of a 640x480 image as character data in red-green-blue order:
- GetImageQuantizeError(image);
+ MagickGetImagePixels(wand,0,0,640,1,"RGB",CharPixel,pixels);
-
The format of the QuantizationError method is:
+
The format of the MagickGetImagePixels method is:
- 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)
-
A description of each parameter follows.
+
A description of each parameter follows:
+
+
wand
+
the magick wand.
+
+
x, y, columns, rows
+
These values define the perimeter of a region of pixels you want to extract.
+
+
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.
+
+
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.
-
image
-
Specifies a pointer to an Image structure; returned from ReadImage.
+
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.
-
+
-
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.
+
MagickGetImageSize() returns the image length in bytes.
-
The format of the RandomChannelThresholdImage method is:
+
The format of the MagickGetImageSize method is:
- unsigned int RandomChannelThresholdImage(Image *image,
- const char *channel, const char *thresholds,
- ExceptionInfo *exception)
+ MagickBooleanType MagickGetImageSize(MagickWand *wand,
+ MagickSizeType *length)
A description of each parameter follows:
-
image
-
the image.
+
wand
+
the magick wand.
-
channel
-
the channel or channels to be thresholded.
-
-
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.
-
-
exception
-
return any errors or warnings in this structure.
+
length
+
the image length in bytes.
-
+
-
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.
+
MagickMapImage() replaces the colors of an image with the closest color from a reference image.
-
The format of the ReacquireMemory method is:
+
The format of the MagickMapImage method is:
- void ReacquireMemory(void **memory,const size_t size)
+ MagickBooleanType MagickMapImage(MagickWand *wand,
+ const MagickWand *map_wand,const MagickBooleanType dither)
A description of each parameter follows:
-
memory
-
A pointer to a memory allocation. On return the pointer may change but the contents of the original allocation will not.
+
wand
+
the magick wand.
-
size
-
the new size of the allocated memory.
+
map
+
the map wand.
+
+
dither
+
Set this integer value to something other than zero to dither the mapped image.
-
+
-
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).
+
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.
-
The format of the RecolorImage method is:
+
The format of the MagickMatteFloodfillImage method is:
- 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)
A description of each parameter follows:
-
image
-
the image.
+
wand
+
the magick wand.
-
order
-
the number of columns and rows in the recolor matrix.
+
alpha
+
the level of transparency: 1.0 is fully opaque and 0.0 is fully transparent.
-
color_matrix
-
An array of double representing the recolor matrix.
+
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.
-
exception
-
return any errors or warnings in this structure.
+
bordercolor
+
the border color pixel wand.
+
+
x,y
+
the starting location of the operation.
-
+
-
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.
+
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 ReduceNoiseImage method is:
+
The format of the MagickMedianFilterImage method is:
- Image *ReduceNoiseImage(const Image *image,const double radius,
- ExceptionInfo *exception)
+ MagickBooleanType MagickMedianFilterImage(MagickWand *wand,
+ const double radius)
A description of each parameter follows:
-
image
-
the image.
+
wand
+
the magick wand.
radius
the radius of the pixel neighborhood.
-
exception
-
return any errors or warnings in this structure.
-
-
+
-
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);
-
+
MagickMinimumImages() returns the minimum intensity of an image sequence.
-
The format of the ResetImageAttributeIterator method is:
+
The format of the MagickMinimumImages method is:
- ResetImageAttributeIterator(const ImageInfo *image)
+ MagickWand *MagickMinimumImages(MagickWand *wand)
A description of each parameter follows:
-
image
-
the image.
+
wand
+
the magick wand.
-
+
-
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));
-
+
MagickModeImage() makes each pixel the 'predominate color' of the neighborhood of the specified radius.
-
The format of the SetCacheViewPixels method is:
+
The format of the MagickModeImage method is:
- 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)
A description of each parameter follows:
-
cache_view
-
the cache view.
+
wand
+
the magick wand.
-
x,y,columns,rows
-
These values define the perimeter of a region of pixels.
+
radius
+
the radius of the pixel neighborhood.
-
+
-
SetExceptionInfo() sets the exception severity.
+
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 SetExceptionInfo method is:
+
The format of the MagickMosaicImages method is:
- MagickBooleanType SetExceptionInfo(ExceptionInfo *exception,
- ExceptionType severity)
+ MagickWand *MagickMosaicImages(MagickWand *wand)
A description of each parameter follows:
-
exception
-
the exception info.
-
-
severity
-
the exception severity.
+
wand
+
the magick wand.
-
+
-
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.
+
MagickOpaqueImage() changes any pixel that matches color with the color defined by fill.
-
The format of the SetImage method is:
+
The format of the MagickOpaqueImage method is:
- void SetImage(Image *image,const Quantum opacity)
+ MagickBooleanType MagickOpaqueImage(MagickWand *wand,
+ const PixelWand *target,const PixelWand *fill,const double fuzz)
A description of each parameter follows:
-
image
-
the image.
+
wand
+
the magick wand.
-
opacity
-
Set each pixel to this level of transparency.
+
channel
+
the channel(s).
-
-
-
+
target
+
Change this target color to the fill color within the image.
-
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.
+
fill
+
the fill pixel wand.
-
Deprecated, replace with:
+
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.
-
- SetImageProperty(image,key,value);
-
+
+
+
+
+
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 SetImageAttribute method is:
+
The format of the MagickPaintFloodfillImage method is:
- 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)
A description of each parameter follows:
-
image
-
the image.
+
wand
+
the magick wand.
+
+
channel
+
the channel(s).
-
key
-
the key.
+
fill
+
the floodfill color pixel wand.
-
value
-
the value.
+
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.
+
+
bordercolor
+
the border color pixel wand.
+
+
x,y
+
the starting location of the operation.
-
+
-
SetImageList() inserts an image into the list at the specified position.
+
MagickPaintOpaqueImage() changes any pixel that matches color with the color defined by fill.
-
The format of the SetImageList method is:
+
The format of the MagickPaintOpaqueImage method is:
- 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)
A description of each parameter follows:
-
images
-
the image list.
+
wand
+
the magick wand.
-
image
-
the image.
+
channel
+
the channel(s).
+
+
target
+
Change this target color to the fill color within the image.
-
offset
-
the position within the list.
+
fill
+
the fill pixel wand.
-
exception
-
return any errors or warnings in this structure.
+
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.
-
+
-
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);
-
+
MagickPaintTransparentImage() changes any pixel that matches color with the color defined by fill.
-
The format of the SetImagePixels() method is:
+
The format of the MagickPaintTransparentImage method is:
- 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)
A description of each parameter follows:
-
pixels
-
SetImagePixels returns a pointer to the pixels if they are transferred, otherwise a NULL is returned.
+
wand
+
the magick wand.
+
+
target
+
Change this target color to specified opacity value within the image.
-
image
-
the image.
+
alpha
+
the level of transparency: 1.0 is fully opaque and 0.0 is fully transparent.
-
x,y,columns,rows
-
These values define the perimeter of a region of pixels.
+
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.
-
+
-
SetMagickRegistry() sets a blob into the registry and returns a unique ID. If an error occurs, -1 is returned.
+
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 SetMagickRegistry method is:
+
The format of the MagickRecolorImage method is:
- 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)
A description of each parameter follows:
-
type
-
the registry type.
+
wand
+
the magick wand.
-
blob
-
the address of a Binary Large OBject.
-
-
length
-
For a registry type of ImageRegistryType use sizeof(Image) otherise the blob length in number of bytes.
+
order
+
the number of columns and rows in the color matrix.
-
exception
-
return any errors or warnings in this structure.
+
color_matrix
+
An array of doubles representing the color matrix.
-
+
-
SetMonitorHandler() sets the monitor handler to the specified method and returns the previous monitor handler.
+
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.
-
The format of the SetMonitorHandler method is:
+
The format of the MagickReduceNoiseImage method is:
- MonitorHandler SetMonitorHandler(MonitorHandler handler)
+ MagickBooleanType MagickReduceNoiseImage(MagickWand *wand,
+ const double radius)
A description of each parameter follows:
-
handler
-
Specifies a pointer to a method to handle monitors.
+
wand
+
the magick wand.
+
+
radius
+
the radius of the pixel neighborhood.
-
+
-
ShiftImageList() removes an image from the beginning of the list.
-
-
Deprecated, replace with:
+
MagickMaximumImages() returns the maximum intensity of an image sequence.
-
- RemoveFirstImageFromList(images);
-
-
-
The format of the ShiftImageList method is:
+
The format of the MagickMaximumImages method is:
- Image *ShiftImageList(Image **images)
+ MagickWand *MagickMaximumImages(MagickWand *wand)
A description of each parameter follows:
-
images
-
the image list.
+
wand
+
the magick wand.
-
+
-
SpliceImageList() removes the images designated by offset and length from the list and replaces them with the specified list.
+
MagickSetImageAttribute() associates a property with an image.
-
The format of the SpliceImageList method is:
+
The format of the MagickSetImageAttribute method is:
- 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)
A description of each parameter follows:
-
images
-
the image list.
-
-
offset
-
the position within the list.
+
wand
+
the magick wand.
-
length
-
the length of the image list to remove.
-
-
splice
-
Replace the removed image list with this list.
+
property
+
the property.
-
exception
-
return any errors or warnings in this structure.
+
value
+
the value.
-
+
-
Strip() strips any whitespace or quotes from the beginning and end of a string of characters.
+
MagickSetImageIndex() set the current image to the position of the list specified with the index parameter.
-
The format of the Strip method is:
+
The format of the MagickSetImageIndex method is:
- void Strip(char *message)
+ MagickBooleanType MagickSetImageIndex(MagickWand *wand,
+ const ssize_t index)
A description of each parameter follows:
-
message
-
Specifies an array of characters.
+
wand
+
the magick wand.
+
+
index
+
the scene number.
-
+
-
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));
-
+
MagickTransparentImage() changes any pixel that matches color with the color defined by fill.
-
The format of the SyncCacheView method is:
+
The format of the MagickTransparentImage method is:
- MagickBooleanType SyncCacheView(CacheView *cache_view)
+ MagickBooleanType MagickTransparentImage(MagickWand *wand,
+ const PixelWand *target,const double alpha,const double fuzz)
A description of each parameter follows:
-
cache_view
-
the cache view.
+
wand
+
the magick wand.
-
-
-
+
target
+
Change this target color to specified opacity value within the image.
-
SyncCacheViewPixels() saves the cache view pixels to the in-memory or disk cache. It returns MagickTrue if the pixel region is flushed, otherwise MagickFalse.
+
alpha
+
the level of transparency: 1.0 is fully opaque and 0.0 is fully transparent.
-
Deprecated, replace with:
+
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.
-
- SyncCacheViewAuthenticPixels(cache_view,GetCacheViewException(cache_view));
-
+
+
+
-
The format of the SyncCacheViewPixels method is:
+
MagickRegionOfInterestImage() extracts a region of the image and returns it as a new wand.
+
+
The format of the MagickRegionOfInterestImage method is:
- 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)
A description of each parameter follows:
-
cache_view
-
the cache view.
+
wand
+
the magick wand.
+
+
width
+
the region width.
+
+
height
+
the region height.
+
+
x
+
the region x offset.
-
exception
-
return any errors or warnings in this structure.
+
y
+
the region y offset.
-
+
-
SyncImagePixels() saves the image pixels to the in-memory or disk cache. The method returns MagickTrue if the pixel region is synced, otherwise MagickFalse.
+
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:
- SyncAuthenticPixels(image,&image->exception);
+ MagickSetImagePixels(wand,0,0,640,1,"RGB",CharPixel,pixels);
-
The format of the SyncImagePixels() method is:
+
The format of the MagickSetImagePixels method is:
- 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)
A description of each parameter follows:
-
image
-
the image.
+
wand
+
the magick wand.
+
+
x, y, columns, rows
+
These values define the perimeter of a region of pixels you want to define.
+
+
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.
+
+
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.
+
+
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.
-
+
-
TemporaryFilename() replaces the contents of path by a unique path name.
+
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.).
-
The format of the TemporaryFilename method is:
+
Use MagickRelinquishMemory() to free the blob when you are done with it.
+
+
The format of the MagickWriteImageBlob method is:
- void TemporaryFilename(char *path)
+ unsigned char *MagickWriteImageBlob(MagickWand *wand,size_t *length)
-
A description of each parameter follows.
+
A description of each parameter follows:
+
+
wand
+
the magick wand.
-
path
-
Specifies a pointer to an array of characters. The unique path name is returned in this array.
+
length
+
the length of the blob.
-
+
-
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.
+
NewPixelView() returns a pixel view required for all other methods in the Pixel View API.
-
The format of the ThresholdImage method is:
+
The format of the NewPixelView method is:
- unsigned int ThresholdImage(Image *image,const double threshold)
+ PixelView *NewPixelView(MagickWand *wand)
A description of each parameter follows:
-
image
-
the image.
-
-
threshold
-
Define the threshold value
+
wand
+
the wand.
-
+
-
ThresholdImageChannel() changes the value of individual pixels based on the intensity of each pixel channel. The result is a high-contrast image.
+
NewPixelViewRegion() returns a pixel view required for all other methods in the Pixel View API.
-
The format of the ThresholdImageChannel method is:
+
The format of the NewPixelViewRegion method is:
- 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)
A description of each parameter follows:
-
image
-
the image.
+
wand
+
the magick wand.
-
threshold
-
define the threshold values.
+
x,y,columns,rows
+
These values define the perimeter of a region of pixel_wands view.
-
+
-
TransformHSL() converts a (red, green, blue) to a (hue, saturation, lightness) triple.
+
PixelGetNextRow() returns the next row as an array of pixel wands from the pixel iterator.
-
The format of the TransformHSL method is:
+
The format of the PixelGetNextRow method is:
- 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)
A description of each parameter follows:
-
red, green, blue
-
A Quantum value representing the red, green, and blue component of a pixel..
+
iterator
+
the pixel iterator.
-
hue, saturation, lightness
-
A pointer to a double value representing a component of the HSL color space.
+
number_wands
+
the number of pixel wands.
-
+
-
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);
-
+
PixelIteratorGetException() returns the severity, reason, and description of any error that occurs when using other methods in this API.
-
The format of the TranslateText method is:
+
The format of the PixelIteratorGetException method is:
- char *TranslateText(const ImageInfo *image_info,Image *image,
- const char *embed_text)
+ char *PixelIteratorGetException(const Pixeliterator *iterator,
+ ExceptionType *severity)
A description of each parameter follows:
-
image_info
-
the image info.
+
iterator
+
the pixel iterator.
-
image
-
the image.
-
-
embed_text
-
the address of a character string containing the embedded formatting characters.
+
severity
+
the severity of the error is returned here.
-
+
-
TransparentImage() changes the opacity value associated with any pixel that matches color to the value defined by opacity.
+
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.
-
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.
+
Use this pragma:
-
The format of the TransparentImage method is:
+
+ #pragma omp critical
+
+
+
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 SetPixelViewIterator method is:
- MagickBooleanType TransparentImage(Image *image,
- const PixelPacket target,const Quantum opacity)
+ MagickBooleanType SetPixelViewIterator(PixelView *destination,
+ SetPixelViewMethod set,void *context)
A description of each parameter follows:
-
image
-
the image.
+
destination
+
the pixel view.
-
target
-
the RGB value of the target color.
+
set
+
the set callback method.
-
opacity
-
the replacement opacity value.
+
context
+
the user defined context.
-
+
-
UnshiftImageList() adds the image to the beginning of the 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:
- PrependImageToList(images,CloneImageList(image,exception));
+ #pragma omp critical
-
The format of the UnshiftImageList method is:
+
to define a section of code in your callback transfer method that must be executed by a single thread at a time.
+
+
The format of the TransferPixelViewIterator method is:
- unsigned int UnshiftImageList(Image *images,const Image *image,
- ExceptionInfo *exception)
+ MagickBooleanType TransferPixelViewIterator(PixelView *source,
+ PixelView *destination,TransferPixelViewMethod transfer,void *context)
A description of each parameter follows:
-
images
-
the image list.
+
source
+
the source pixel view.
+
+
destination
+
the destination pixel view.
-
image
-
the image.
+
transfer
+
the transfer callback method.
-
exception
-
return any errors or warnings in this structure.
+
context
+
the user defined context.
-
+
-
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.
+
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:
+
+
+ #pragma omp critical
+
-
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.
+
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 ZoomImage method is:
+
The format of the UpdatePixelViewIterator method is:
- Image *ZoomImage(const Image *image,const size_t columns,
- const size_t rows,ExceptionInfo *exception)
+ MagickBooleanType UpdatePixelViewIterator(PixelView *source,
+ UpdatePixelViewMethod update,void *context)
A description of each parameter follows:
-
image
-
the image.
-
-
columns
-
An integer that specifies the number of columns in the zoom image.
+
source
+
the source pixel view.
-
rows
-
An integer that specifies the number of rows in the scaled image.
+
update
+
the update callback method.
-
exception
-
return any errors or warnings in this structure.
+
context
+
the user defined context.
diff --git a/www/api/display.html b/www/api/display.html
index 90395f442..17df38c61 100644
--- a/www/api/display.html
+++ b/www/api/display.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/distort.html b/www/api/distort.html
index a2e502334..87486ca12 100644
--- a/www/api/distort.html
+++ b/www/api/distort.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/draw.html b/www/api/draw.html
index 847be1e66..02eb126a4 100644
--- a/www/api/draw.html
+++ b/www/api/draw.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/drawing-wand.html b/www/api/drawing-wand.html
index b896f3393..05df92cb6 100644
--- a/www/api/drawing-wand.html
+++ b/www/api/drawing-wand.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
@@ -202,18 +202,18 @@
-
ClearDrawingWand() clear resources associated with the drawing wand.
+
ClearDrawingWand() clears resources associated with the drawing wand.
The format of the ClearDrawingWand method is:
- DrawingWand *ClearDrawingWand(DrawingWand *wand)
+ void ClearDrawingWand(DrawingWand *wand)
A description of each parameter follows:
wand
-
the drawing wand. to destroy
+
the drawing wand to clear.
@@ -247,7 +247,7 @@
A description of each parameter follows:
wand
-the drawing wand. to destroy
+the drawing wand to destroy.
diff --git a/www/api/enhance.html b/www/api/enhance.html
index 0f6315eeb..0e613d015 100644
--- a/www/api/enhance.html
+++ b/www/api/enhance.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/exception.html b/www/api/exception.html
index fb475777b..4cd256ec2 100644
--- a/www/api/exception.html
+++ b/www/api/exception.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/feature.html b/www/api/feature.html
index 0a3694a4d..463601b1c 100644
--- a/www/api/feature.html
+++ b/www/api/feature.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/fourier.html b/www/api/fourier.html
index 689ea45bd..a32b2c286 100644
--- a/www/api/fourier.html
+++ b/www/api/fourier.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/fx.html b/www/api/fx.html
index 2fc681481..38599406a 100644
--- a/www/api/fx.html
+++ b/www/api/fx.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/histogram.html b/www/api/histogram.html
index 787ed9bc6..e2a3597ec 100644
--- a/www/api/histogram.html
+++ b/www/api/histogram.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/image-view.html b/www/api/image-view.html
index 20fa830d7..1f7cadeef 100644
--- a/www/api/image-view.html
+++ b/www/api/image-view.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/image.html b/www/api/image.html
index 78e41dacf..835dc4a09 100644
--- a/www/api/image.html
+++ b/www/api/image.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/layer.html b/www/api/layer.html
index a12243994..da8005cdb 100644
--- a/www/api/layer.html
+++ b/www/api/layer.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/magick-deprecate.html b/www/api/magick-deprecate.html
index 6a6e49e0e..484e4d79f 100644
--- a/www/api/magick-deprecate.html
+++ b/www/api/magick-deprecate.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/magick-image.html b/www/api/magick-image.html
index 73e1df697..0a3afdb82 100644
--- a/www/api/magick-image.html
+++ b/www/api/magick-image.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/magick-property.html b/www/api/magick-property.html
index 89af9c75f..dd2d312e8 100644
--- a/www/api/magick-property.html
+++ b/www/api/magick-property.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/magick-wand.html b/www/api/magick-wand.html
index 0b86ad287..2cba4e42f 100644
--- a/www/api/magick-wand.html
+++ b/www/api/magick-wand.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/magick.html b/www/api/magick.html
index 9239d56fa..e1669c1df 100644
--- a/www/api/magick.html
+++ b/www/api/magick.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/memory.html b/www/api/memory.html
index 9a6b1b413..1ea60f33d 100644
--- a/www/api/memory.html
+++ b/www/api/memory.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/module.html b/www/api/module.html
index f0760201b..967dd44b0 100644
--- a/www/api/module.html
+++ b/www/api/module.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/mogrify.html b/www/api/mogrify.html
index 0b6d7bb54..23339ecda 100644
--- a/www/api/mogrify.html
+++ b/www/api/mogrify.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
@@ -241,7 +241,7 @@
-
** SparseColorOption() parse the complex -sparse-color argument into an ** an array of floating point values than call SparseColorImage(). ** Argument is a complex mix of floating-point pixel coodinates, and color ** specifications (or direct floating point numbers). The number of floats ** needed to represent a color varies depending on teh current channel ** setting.
+
** SparseColorOption() parses the complex -sparse-color argument into an ** an array of floating point values then calls SparseColorImage(). ** Argument is a complex mix of floating-point pixel coodinates, and color ** specifications (or direct floating point numbers). The number of floats ** needed to represent a color varies depending on the current channel ** setting.
diff --git a/www/api/montage.html b/www/api/montage.html
index fc9a4561d..7f42dffd3 100644
--- a/www/api/montage.html
+++ b/www/api/montage.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/morphology.html b/www/api/morphology.html
index 77ac4ef61..a3b3c5765 100644
--- a/www/api/morphology.html
+++ b/www/api/morphology.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/pixel-iterator.html b/www/api/pixel-iterator.html
index a02196157..6c151e556 100644
--- a/www/api/pixel-iterator.html
+++ b/www/api/pixel-iterator.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/pixel-wand.html b/www/api/pixel-wand.html
index bc50770e8..f7f90b364 100644
--- a/www/api/pixel-wand.html
+++ b/www/api/pixel-wand.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/profile.html b/www/api/profile.html
index fc1b79177..36bce5790 100644
--- a/www/api/profile.html
+++ b/www/api/profile.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/property.html b/www/api/property.html
index 4176f0502..e186ef0d6 100644
--- a/www/api/property.html
+++ b/www/api/property.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/registry.html b/www/api/registry.html
index 2d3ad5cb1..3973233b0 100644
--- a/www/api/registry.html
+++ b/www/api/registry.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/resize.html b/www/api/resize.html
index 3b56195e6..4cc2e3a38 100644
--- a/www/api/resize.html
+++ b/www/api/resize.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/resource.html b/www/api/resource.html
index 08bfba439..7101c52ac 100644
--- a/www/api/resource.html
+++ b/www/api/resource.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/segment.html b/www/api/segment.html
index d89428847..927f7eed5 100644
--- a/www/api/segment.html
+++ b/www/api/segment.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/shear.html b/www/api/shear.html
index 094acaf42..8643ed3c7 100644
--- a/www/api/shear.html
+++ b/www/api/shear.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/signature.html b/www/api/signature.html
index 03cd485a0..0cc92055f 100644
--- a/www/api/signature.html
+++ b/www/api/signature.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/stream.html b/www/api/stream.html
index 536699e32..0f3ee48c5 100644
--- a/www/api/stream.html
+++ b/www/api/stream.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/transform.html b/www/api/transform.html
index 8e2762f1b..ca131f827 100644
--- a/www/api/transform.html
+++ b/www/api/transform.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/version.html b/www/api/version.html
index 80b2e3157..cbc9252c9 100644
--- a/www/api/version.html
+++ b/www/api/version.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/api/wand-view.html b/www/api/wand-view.html
index ad6230bc8..84dad49d3 100644
--- a/www/api/wand-view.html
+++ b/www/api/wand-view.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/architecture.html b/www/architecture.html
index 65b107c28..c593c586f 100644
--- a/www/architecture.html
+++ b/www/architecture.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
@@ -288,7 +288,7 @@
When the pixel cache is initialized, pixels are scaled from whatever bit depth they originated from to that required by the pixel cache. For example, a 1-channel 1-bit monochrome PBM image is scaled to a 4 channel 8-bit RGBA image, if you are using the Q8 version of ImageMagick, and 16-bit RGBA for the Q16 version. You can determine which version you have with the ‑version option:
- $magick> identify -versionVersion: ImageMagick 6.6.9-7 2011-04-06 Q16 http://www.imagemagick.org
+ $magick> identify -versionVersion: ImageMagick 6.6.9-8 2011-04-06 Q16 http://www.imagemagick.org
As you can see, the convenience of the pixel cache sometimes comes with a trade-off in storage (e.g. storing a 1-bit monochrome image as 16-bit RGBA is wasteful) and speed (i.e. storing the entire image in memory is generally slower than accessing one scanline of pixels at a time). In most cases, the benefits of the pixel cache typically outweigh any disadvantages.
@@ -357,7 +357,7 @@
break;
indexes=GetVirtualIndexes(source);
for (x=0; x < (ssize_t) source->columns; x++)
- (void) printf("%d\n",indexes[x]);
+ (void) printf("%d\n",GetIndexPixelComponent(indexes+x));
}
if (y < (ssize_t) source->rows)
/* an exception was thrown */
@@ -639,12 +639,12 @@ image=ReadStream(image_info,&StreamPixels,exception);
indexes=GetCacheViewAuthenticIndexQueue(image_view);
for (x=0; x < (ssize_t) image->columns; x++)
{
- q->red= ...
- q->green= ...
- q->blue= ...
- q->opacity= ...
+ SetRedPixelComponent(q,...);
+ SetGreenPixelComponent(q,...);
+ SetBluePixelComponent(q,...);
+ SetOpacityPixelComponent(q,...);
if (indexes != (IndexPacket *) NULL)
- indexes[x]= ...
+ SetIndexPixelComponent(indexes+x,...);
q++;
}
if (SyncCacheViewAuthenticPixels(image_view,exception) == MagickFalse)
@@ -691,11 +691,11 @@ void ConvertBMPToImage(const BITMAPINFOHEADER *bmp_info,
image->setPixels(0,y,image->columns(),1);
for (int x=0; x < int(image->columns()); x++)
{
- q->blue=p[0];
- q->green=p[1];
- q->red=p[2];
+ SetBluePixelComponent(q,p[0]);
+ SetGreenPixelComponent(q,p[1]);
+ SetRedPixelComponent(q,p[2]);
if (bmp_info->biBitCount == 32) {
- q->opacity=p[3];
+ SetOpacityPixelComponent(q,p[3]);
}
q++;
p+=bmp_info->biBitCount/8;
diff --git a/www/binary-releases.html b/www/binary-releases.html
index cdf63c875..fd840aa7f 100644
--- a/www/binary-releases.html
+++ b/www/binary-releases.html
@@ -219,16 +219,16 @@
- ImageMagick-6.6.9-7.i386.rpm |
- download |
- download |
+ ImageMagick-6.6.9-8.i386.rpm |
+ download |
+ download |
CentOS 5.4 i386 RPM |
- ImageMagick-6.6.9-7.x86_64.rpm |
- download |
- download |
+ ImageMagick-6.6.9-8.x86_64.rpm |
+ download |
+ download |
CentOS 5.4 x86_64 RPM |
@@ -265,7 +265,7 @@
ImageMagick RPM's are self-installing. Simply type the following command and you're ready to start using ImageMagick:
- $magick> rpm -Uvh ImageMagick-6.6.9-7.i386.rpm
+ $magick> rpm -Uvh ImageMagick-6.6.9-8.i386.rpm
For other systems, create (or choose) a directory to install the package into and change to that directory, for example:
$magick> cd $HOME
@@ -365,7 +365,7 @@
./imagemagick_compile.sh VERSION
-where VERSION is the version of ImageMagick you want to compile (i.e.: 6.6.9-7, svn, ...)
+where VERSION is the version of ImageMagick you want to compile (i.e.: 6.6.9-8, svn, ...)
This script compiles ImageMagick as a static library to be included in iPhone projects and adds support for
@@ -404,7 +404,7 @@
The amount of memory can be an important factor, especially if you intend to work on large images. A minimum of 512 MB of RAM is recommended, but the more RAM the better. Although ImageMagick runs well on a single core computer, it automagically runs in parallel on multi-core systems reducing run times considerably.
The Windows version of ImageMagick is self-installing. Simply click on the appropriate version below and it will launch itself and ask you a few installation questions. Versions with Q8 in the name are 8 bits-per-pixel component (e.g. 8-bit red, 8-bit green, etc.), whereas, Q16 in the filename are 16 bits-per-pixel component. A Q16 version permits you to read or write 16-bit images without losing precision but requires twice as much resources as the Q8 version. Versions with dll in the filename include ImageMagick libraries as dynamic link libraries. If you are not sure which version is appropriate, choose
-ImageMagick-6.6.9-7-Q16-windows-dll.exe.
+ImageMagick-6.6.9-8-Q16-windows-dll.exe.
@@ -416,44 +416,44 @@
- ImageMagick-6.6.9-7-Q16-windows-dll.exe |
- download |
- download |
+ ImageMagick-6.6.9-8-Q16-windows-dll.exe |
+ download |
+ download |
Win32 dynamic at 16 bits-per-pixel |
- ImageMagick-6.6.9-7-Q16-windows-static.exe |
- download |
- download |
+ ImageMagick-6.6.9-8-Q16-windows-static.exe |
+ download |
+ download |
Win32 static at 16 bits-per-pixel |
- ImageMagick-6.6.9-7-Q8-windows-dll.exe |
- download |
- download |
+ ImageMagick-6.6.9-8-Q8-windows-dll.exe |
+ download |
+ download |
Win32 dynamic at 8 bits-per-pixel |
- ImageMagick-6.6.9-7-Q8-windows-static.exe |
- download |
- download |
+ ImageMagick-6.6.9-8-Q8-windows-static.exe |
+ download |
+ download |
Win32 static at 8 bits-per-pixel |
- ImageMagick-6.6.9-7-Q16-windows-x64-dll.exe |
- download |
- download |
+ ImageMagick-6.6.9-8-Q16-windows-x64-dll.exe |
+ download |
+ download |
Win64 dynamic at 16 bits-per-pixel |
- ImageMagick-6.6.9-7-Q16-windows-x64-static.exe |
- download |
- download |
+ ImageMagick-6.6.9-8-Q16-windows-x64-static.exe |
+ download |
+ download |
Win64 static at 16 bits-per-pixel |
diff --git a/www/changelog.html b/www/changelog.html
index 62a2fe0ca..195bec5e3 100644
--- a/www/changelog.html
+++ b/www/changelog.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
@@ -197,7 +197,11 @@
ImageMagick Changelog
-
- 2011-04-30 6.6.9-7 Cristy <quetzlzacatenango@image...>
+- 2011-05-02 6.6.9-8 Glenn Randers-Pehrson <glennrp@image...>
+ - Fixed some cut-and-paste errors in new png.c code that caused PNG8 reductions to fail.
+- 2011-05-02 6.6.9-8 Anthony Thyssen <A.Thyssen@griffith...>
+ - Add various Option Flags, and fix option skip counts for plus forms of simple operators where plus form is the same as minus form. For example the incorrect counts produces a weird error, and posible future segmentation fault in a command like convert rose: +border show:
+- 2011-04-30 6.6.9-7 Cristy <quetzlzacatenango@image...>
- New version 6.6.9-7.
- 2011-04-30 6.6.9-7 Anthony Thyssen <A.Thyssen@griffith...>
- Fix FX default for interpolation to Bilinear.
diff --git a/www/cipher.html b/www/cipher.html
index a52de7010..4fe35725b 100644
--- a/www/cipher.html
+++ b/www/cipher.html
@@ -185,7 +185,7 @@
Web Hosting Ratings
diff --git a/www/color.html b/www/color.html
index c3a71e2f6..6c8c009e4 100644
--- a/www/color.html
+++ b/www/color.html
@@ -185,7 +185,7 @@
Web Hosting Ratings
diff --git a/www/command-line-options.html b/www/command-line-options.html
index a8703c2c5..50df8abb3 100644
--- a/www/command-line-options.html
+++ b/www/command-line-options.html
@@ -188,7 +188,7 @@
Web Hosting Ratings
@@ -1041,15 +1041,15 @@ a -gravity setting, if present.
The -chop option removes entire rows and columns,
and moves the remaining corner blocks leftward and upward to close the gaps.
-While it can remove internal rows and columns of pixels, it is more typically
-used with as -gravity setting and a '+0+0' offset
-so as to remove a single edge from an image. Compare this to -shave whcih removes equal numbers of pixels from oppisite sides of the image.
-
+While it can remove internal rows and columns of pixels, it is more
+typically used with as -gravity setting and zero
+offsets so as to remove a single edge from an image. Compare this to -shave which removes equal numbers of pixels from oppisite
+sides of the image.
-Using -chop will effectivally undo the results of a
--splice that was given the same geometry
-and -gravity settings.
+Using -chop will effectivally undo the results of a -splice that was given the same geometry and -gravity settings.
@@ -4227,9 +4227,16 @@ bgr). The components can repeat as well (e.g. rgbr).
filename
-Composite the image pixels as defined by the mask. | |
+Prevent updates to image pixels specified by the mask. | |
+
+This the same as using a mask used for composite masking operations, with
+grayscale values causing blended updates of the image the mask is attached to.
+
-Use +mask to remove the image mask.
+Use +mask to remove the mask from images.
+
+Also see -clip-mask which work in the same way,
+but with strict boolean masking.
-mattecolor color
@@ -4248,12 +4255,22 @@ style="background-color: #bdbdbd;">this shade of gray.
return the maximum intensity of an image sequence. | |
+
Select the 'maximum' value from all the surrounding pixels.
+
+
This is legacy option from the method of the same
+name.
+
apply a median filter to the image. | |
+
Select the 'middle' value from all the surrounding pixels.
+
+
This is legacy option from the method of the same
+name.
+
@@ -4295,6 +4312,12 @@ metrics option.
return the minimum intensity of an image sequence. | |
+
Select the 'minimal' value from all the surrounding pixels.
+
+
This is legacy option from the method of the same
+name.
+
+
-mode geometry
@@ -5380,6 +5403,19 @@ id="shared-memory">-shared-memory
Description |
+
+ barycentric |
+ three point triangle of color given 3 points.
+ Giving only 2 points will form a linear gradient between those points.
+ The gradient generated extends beyond the triangle created by those
+ 3 points. |
+
+
+
+ bilinear |
+ Like barycentric but for 4 points. Less than 4 points
+ fall back to barycentric. |
+
voronoi |
Simply map each pixel to the to nearest color point
@@ -5391,19 +5427,14 @@ id="shared-memory">-shared-memory
| Colors points biased on the ratio of inverse distance
squared. Generating spots of color in a sea of the average of
colors. |
-
-
-
- barycentric |
- three point triangle of color given 3 points.
- Giving only 2 points will form a linear gradient between those points.
- Gradient is however not restricted to just the triangle or line. |
- bilinear |
- Like barycentric but for 4 points. Less than 4 points
- fall back to barycentric. |
+ inverse |
+ Colors points biased on the ratio of inverse distance.
+ This generates sharper points of color rather than rounded spots of
+ 'shepards' Generating spots of color in a sea of the
+ average of colors. |
@@ -5416,10 +5447,13 @@ some point beyond the edge of the image. All points are floating point values.
Only the color channels defined by the -channel are
-modified, whcih means the matte/alpha transparency channel is not effected by
-default. If enabled, the image also needs a the matte/alpha channel to be
-enabled for this operator to effect an images transparency. This is typical
-transparency handling for images.
+modified, which means that by default matte/alpha transparency channel is not
+effected. Typically transparency channel is turned off either before or after
+the operation.
+
+Of course if some color points are transparent to generate a transparent
+gradient, then the image also requires transparency enabled to store the
+values.
All the above methods when given a single point of color will replace all
the colors in the image with the color given, regardless of the point. This is
@@ -5433,7 +5467,21 @@ default value.
Splice the current background color into the image. | |
-
See Image Geometry for complete details about the geometry argument. See -background to reset the background color.
+
This will add rows and columns of the current -background color into the given image according to the
+given -gravity effectd geometry setting. >See Image Geometry for complete details about the geometry argument. Essentually -splice will divide the
+image into four quadrants, separating them by the inserted rows and columns.
+
+
+If a dimension of geometry is zero no rows or columns will be added for that
+dimension. Similarly using a zero offset with the appropriate
-gravity setting will add rows and columns to the edges of
+the image, padding the image only along that one edge. Edge padding is what
-splice is most commonly used for.
+
+
If the exact same geometry and -gravity is later used with -chop the
+added added all splices removed.
-spread amount
diff --git a/www/command-line-processing.html b/www/command-line-processing.html
index a65024fcb..32e45a487 100644
--- a/www/command-line-processing.html
+++ b/www/command-line-processing.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/command-line-tools.html b/www/command-line-tools.html
index f24e2578c..20205fe59 100644
--- a/www/command-line-tools.html
+++ b/www/command-line-tools.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/compare.html b/www/compare.html
index 436cb01de..995acf1d4 100644
--- a/www/compare.html
+++ b/www/compare.html
@@ -185,7 +185,7 @@
Web Hosting Ratings
diff --git a/www/compose.html b/www/compose.html
index 6caff7062..07b835c9d 100644
--- a/www/compose.html
+++ b/www/compose.html
@@ -185,7 +185,7 @@
Web Hosting Ratings
diff --git a/www/composite.html b/www/composite.html
index a5b3a33d1..a5b3be7c4 100644
--- a/www/composite.html
+++ b/www/composite.html
@@ -185,7 +185,7 @@
Web Hosting Ratings
diff --git a/www/conjure.html b/www/conjure.html
index 58ed24e79..d7b7eecf2 100644
--- a/www/conjure.html
+++ b/www/conjure.html
@@ -185,7 +185,7 @@
Web Hosting Ratings
diff --git a/www/contact.html b/www/contact.html
index c1e4c6aaf..3c9733090 100644
--- a/www/contact.html
+++ b/www/contact.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/convert.html b/www/convert.html
index 70be095d6..38d7b5600 100644
--- a/www/convert.html
+++ b/www/convert.html
@@ -185,7 +185,7 @@
Web Hosting Ratings
diff --git a/www/display.html b/www/display.html
index 8fc80430d..b1af85dbe 100644
--- a/www/display.html
+++ b/www/display.html
@@ -185,7 +185,7 @@
Web Hosting Ratings
diff --git a/www/download.html b/www/download.html
index 125005dd1..7e5264e20 100644
--- a/www/download.html
+++ b/www/download.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
@@ -199,7 +199,7 @@
Download ImageMagick
ImageMagick source and binary distributions are available from a variety of FTP and Web mirrors around the world listed below. ImageMagick stable and development source releases are also available from Subversion. Before you download, you may want to review recent changes to the ImageMagick distribution.
-
The latest release of ImageMagick is version 6.6.9-7.
+
The latest release of ImageMagick is version 6.6.9-8.
- Australia
- ftp://mirror.aarnet.edu.au/pub/imagemagick/
diff --git a/www/escape.html b/www/escape.html
index 60142a09a..bf03c420c 100644
--- a/www/escape.html
+++ b/www/escape.html
@@ -185,7 +185,7 @@
Web Hosting Ratings
diff --git a/www/examples.html b/www/examples.html
index 23bf53a08..0e437e670 100644
--- a/www/examples.html
+++ b/www/examples.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/exception.html b/www/exception.html
index 9d1e1e691..59efd10e6 100644
--- a/www/exception.html
+++ b/www/exception.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/export.html b/www/export.html
index deb65d6ef..626de2df5 100644
--- a/www/export.html
+++ b/www/export.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/formats.html b/www/formats.html
index 97f291520..8dd773426 100644
--- a/www/formats.html
+++ b/www/formats.html
@@ -185,7 +185,7 @@
Web Hosting Ratings
diff --git a/www/fx.html b/www/fx.html
index 8f27c100c..693c1c301 100644
--- a/www/fx.html
+++ b/www/fx.html
@@ -185,7 +185,7 @@
Web Hosting Ratings
diff --git a/www/high-dynamic-range.html b/www/high-dynamic-range.html
index 9edd8bc29..6be1b4792 100644
--- a/www/high-dynamic-range.html
+++ b/www/high-dynamic-range.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/identify.html b/www/identify.html
index a5ceb27f4..eef3e693a 100644
--- a/www/identify.html
+++ b/www/identify.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
@@ -267,7 +267,7 @@
Tainted: False
Filesize: 3.97266kb
Number pixels: 3.14453kb
- Version: ImageMagick 6.6.9-7 2011-04-06 Q16 http://www.imagemagick.org
+ Version: ImageMagick 6.6.9-8 2011-04-06 Q16 http://www.imagemagick.org
To get the print size in inches of an image at 72 DPI, use:
$magick> identify -format "%[fx:w/72] by %[fx:h/72] inches" document.png8.5 x 11 inches
diff --git a/www/import.html b/www/import.html
index b9fba5226..2f75e2863 100644
--- a/www/import.html
+++ b/www/import.html
@@ -185,7 +185,7 @@
Web Hosting Ratings
diff --git a/www/index.html b/www/index.html
index efa45d021..3785ea141 100644
--- a/www/index.html
+++ b/www/index.html
@@ -209,7 +209,7 @@
The ImageMagick development process ensures a stable API and ABI. Before each ImageMagick release, we perform a comprehensive security assessment that includes memory and thread error detection to prevent security vulnerabilities.
-The current release is ImageMagick 6.6.9-7.
+The current release is ImageMagick 6.6.9-8.
diff --git a/www/jp2.html b/www/jp2.html
index 906550b9a..f1246cd91 100644
--- a/www/jp2.html
+++ b/www/jp2.html
@@ -185,7 +185,7 @@
Web Hosting Ratings
diff --git a/www/links.html b/www/links.html
index 89e0f29c4..acd970fcd 100644
--- a/www/links.html
+++ b/www/links.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/magick++.html b/www/magick++.html
index f2cda0e6c..f3304f92c 100644
--- a/www/magick++.html
+++ b/www/magick++.html
@@ -185,7 +185,7 @@
Web Hosting Ratings
diff --git a/www/magick-core.html b/www/magick-core.html
index f89e013aa..231ca10a6 100644
--- a/www/magick-core.html
+++ b/www/magick-core.html
@@ -185,7 +185,7 @@
Web Hosting Ratings
@@ -356,15 +356,21 @@ static MagickBooleanType SigmoidalContrast(ImageView *contrast_view,
pixels=GetImageViewAuthenticPixels(contrast_view);
for (x=0; x < (ssize_t) (extent.width-extent.x); x++)
{
- pixels[x].red=RoundToQuantum(SigmoidalContrast(pixels[x].red));
- pixels[x].green=RoundToQuantum(SigmoidalContrast(pixels[x].green));
- pixels[x].blue=RoundToQuantum(SigmoidalContrast(pixels[x].blue));
- pixels[x].opacity=RoundToQuantum(SigmoidalContrast(pixels[x].opacity));
+ SetRedPixelComponent(pixels,RoundToQuantum(SigmoidalContrast(
+ GetRedPixelComponent(pixels)));
+ SetGreenPixelComponent(pixels,RoundToQuantum(SigmoidalContrast(
+ GetGreenPixelComponent(pixels)));
+ SetBluePixelComponent(pixels,RoundToQuantum(SigmoidalContrast(
+ GetBluePixelComponent(pixels)));
+ SetOpacityPixelComponent(pixels,RoundToQuantum(SigmoidalContrast(
+ GetOpacityPixelComponent(pixels)));
+ pixels++;
}
indexes=GetImageViewAuthenticIndexes(contrast_view);
if (indexes != (IndexPacket *) NULL)
for (x=0; x < (ssize_t) (extent.width-extent.x); x++)
- indexes[x]=(IndexPacket) RoundToQuantum(SigmoidalContrast(indexes[x]));
+ SetIndexPixelComponent(indexes+x,RoundToQuantum(SigmoidalContrast(
+ GetIndexPixelComponent(indexes+x))));
return(MagickTrue);
}
diff --git a/www/magick-vector-graphics.html b/www/magick-vector-graphics.html
index e7bc4bf30..4b615c498 100644
--- a/www/magick-vector-graphics.html
+++ b/www/magick-vector-graphics.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/magick-wand.html b/www/magick-wand.html
index 5a61f3ecb..fe408a712 100644
--- a/www/magick-wand.html
+++ b/www/magick-wand.html
@@ -236,7 +236,7 @@ int main(int argc,char **argv)
severity; \
\
description=MagickGetException(wand,&severity); \
- (void) fprintf(stderr,"%s %s %u %s\n",GetMagickModule(),description); \
+ (void) fprintf(stderr,"%s %s %lu %s\n",GetMagickModule(),description); \
description=(char *) MagickRelinquishMemory(description); \
exit(-1); \
}
diff --git a/www/miff.html b/www/miff.html
index 673b12d4f..b838077c0 100644
--- a/www/miff.html
+++ b/www/miff.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/mogrify.html b/www/mogrify.html
index 53ce915ee..89da683cb 100644
--- a/www/mogrify.html
+++ b/www/mogrify.html
@@ -185,7 +185,7 @@
Web Hosting Ratings
diff --git a/www/montage.html b/www/montage.html
index ec8aca80c..71ba6095a 100644
--- a/www/montage.html
+++ b/www/montage.html
@@ -185,7 +185,7 @@
Web Hosting Ratings
diff --git a/www/motion-picture.html b/www/motion-picture.html
index f25d107f3..4afa1a2b9 100644
--- a/www/motion-picture.html
+++ b/www/motion-picture.html
@@ -185,7 +185,7 @@
Web Hosting Ratings
diff --git a/www/perl-magick.html b/www/perl-magick.html
index 2358705d3..49c6c59f2 100644
--- a/www/perl-magick.html
+++ b/www/perl-magick.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/quantize.html b/www/quantize.html
index b6fec45d9..b8810ee4b 100644
--- a/www/quantize.html
+++ b/www/quantize.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/resources.html b/www/resources.html
index fea16cdf7..f18f37fda 100644
--- a/www/resources.html
+++ b/www/resources.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/sitemap.html b/www/sitemap.html
index 63f29ae60..34a70c935 100644
--- a/www/sitemap.html
+++ b/www/sitemap.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
diff --git a/www/source/analyze.c b/www/source/analyze.c
index c86918fdb..9e08a44f0 100644
--- a/www/source/analyze.c
+++ b/www/source/analyze.c
@@ -165,7 +165,8 @@ ModuleExport size_t analyzeImage(Image **images,const int argc,
}
for (x=0; x < (ssize_t) image->columns; x++)
{
- ConvertRGBToHSB(p->red,p->green,p->blue,&hue,&saturation,&brightness);
+ ConvertRGBToHSB(GetRedPixelComponent(p),GetGreenPixelComponent(p),
+ GetBluePixelComponent(p),&hue,&saturation,&brightness);
brightness*=QuantumRange;
brightness_sum_x+=brightness;
brightness_sum_x2+=brightness*brightness;
diff --git a/www/source/mgk.c b/www/source/mgk.c
index 11754c007..adda1ee92 100644
--- a/www/source/mgk.c
+++ b/www/source/mgk.c
@@ -219,9 +219,9 @@ static Image *ReadMGKImage(const ImageInfo *image_info,
break;
for (x=0; x < (ssize_t) image->columns; x++)
{
- q->red=ScaleCharToQuantum(*p++);
- q->green=ScaleCharToQuantum(*p++);
- q->blue=ScaleCharToQuantum(*p++);
+ SetRedPixelComponent(q,ScaleCharToQuantum(*p++));
+ SetGreenPixelComponent(q,ScaleCharToQuantum(*p++));
+ SetBluePixelComponent(q,ScaleCharToQuantum(*p++));
q++;
}
if (SyncAuthenticPixels(image,exception) == MagickFalse)
diff --git a/www/sponsors.html b/www/sponsors.html
index ca947a3de..30eec6d3b 100644
--- a/www/sponsors.html
+++ b/www/sponsors.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
@@ -210,7 +210,7 @@
alaTest.com
Autoteile Online Shop
Best Web Hosting
- Custom T-Shirts
+ Bildbearbeitung
Druckerei
Druckerei
Fernsehdienst Berlin
diff --git a/www/stream.html b/www/stream.html
index 2d7d54c4f..7b46e4137 100644
--- a/www/stream.html
+++ b/www/stream.html
@@ -185,7 +185,7 @@
Web Hosting Ratings
diff --git a/www/subversion.html b/www/subversion.html
index a7fd82a55..6cec4db97 100644
--- a/www/subversion.html
+++ b/www/subversion.html
@@ -184,7 +184,7 @@
Web Hosting Ratings
--
2.40.0