diff --git a/magick/image-view.c b/magick/image-view.c
index 136830ec6..3958ad00a 100644
--- a/magick/image-view.c
+++ b/magick/image-view.c
@@ -56,8 +56,11 @@
*/
struct _ImageView
{
- ExceptionInfo
- *exception;
+ char
+ *description;
+
+ RectangleInfo
+ extent;
Image
*image;
@@ -65,12 +68,12 @@ struct _ImageView
CacheView
*view;
- RectangleInfo
- region;
-
size_t
number_threads;
+ ExceptionInfo
+ *exception;
+
MagickBooleanType
debug;
@@ -111,11 +114,12 @@ MagickExport ImageView *CloneImageView(const ImageView *image_view)
if (clone_view == (ImageView *) NULL)
ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed");
(void) ResetMagickMemory(clone_view,0,sizeof(*clone_view));
- clone_view->exception=AcquireExceptionInfo();
- InheritException(clone_view->exception,image_view->exception);
+ clone_view->description=ConstantString(image_view->description);
+ clone_view->extent=image_view->extent;
clone_view->view=CloneCacheView(image_view->view);
- clone_view->region=image_view->region;
clone_view->number_threads=image_view->number_threads;
+ clone_view->exception=AcquireExceptionInfo();
+ InheritException(clone_view->exception,image_view->exception);
clone_view->debug=image_view->debug;
clone_view->signature=MagickSignature;
return(clone_view);
@@ -147,6 +151,8 @@ MagickExport ImageView *DestroyImageView(ImageView *image_view)
{
assert(image_view != (ImageView *) NULL);
assert(image_view->signature == MagickSignature);
+ if (image_view->description != (char *) NULL)
+ image_view->description=DestroyString(image_view->description);
image_view->view=DestroyCacheView(image_view->view);
image_view->exception=DestroyExceptionInfo(image_view->exception);
image_view->signature=(~MagickSignature);
@@ -167,7 +173,7 @@ MagickExport ImageView *DestroyImageView(ImageView *image_view)
%
% DuplexTransferImageViewIterator() iterates over three image 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
+% source and duplex pixel extent 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 image view is confined to the image
% canvas-- that is no negative offsets or widths or heights that exceed the
@@ -203,8 +209,6 @@ MagickExport MagickBooleanType DuplexTransferImageViewIterator(
ImageView *source,ImageView *duplex,ImageView *destination,
DuplexTransferImageViewMethod transfer,void *context)
{
-#define DuplexTransferImageViewTag "ImageView/DuplexTransfer"
-
ExceptionInfo
*exception;
@@ -237,7 +241,7 @@ MagickExport MagickBooleanType DuplexTransferImageViewIterator(
#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++)
+ for (y=source->extent.y; y < (ssize_t) source->extent.height; y++)
{
MagickBooleanType
sync;
@@ -262,16 +266,16 @@ MagickExport MagickBooleanType DuplexTransferImageViewIterator(
if (status == MagickFalse)
continue;
id=GetOpenMPThreadId();
- pixels=GetCacheViewVirtualPixels(source->view,source->region.x,y,
- source->region.width,1,source->exception);
+ pixels=GetCacheViewVirtualPixels(source->view,source->extent.x,y,
+ source->extent.width,1,source->exception);
if (pixels == (const PixelPacket *) NULL)
{
status=MagickFalse;
continue;
}
indexes=GetCacheViewVirtualIndexQueue(source->view);
- duplex_pixels=GetCacheViewVirtualPixels(duplex->view,duplex->region.x,y,
- duplex->region.width,1,duplex->exception);
+ duplex_pixels=GetCacheViewVirtualPixels(duplex->view,duplex->extent.x,y,
+ duplex->extent.width,1,duplex->exception);
if (duplex_pixels == (const PixelPacket *) NULL)
{
status=MagickFalse;
@@ -279,14 +283,14 @@ MagickExport MagickBooleanType DuplexTransferImageViewIterator(
}
duplex_indexes=GetCacheViewVirtualIndexQueue(duplex->view);
destination_pixels=GetCacheViewAuthenticPixels(destination->view,
- destination->region.x,y,destination->region.width,1,exception);
+ destination->extent.x,y,destination->extent.width,1,exception);
if (destination_pixels == (PixelPacket *) NULL)
{
status=MagickFalse;
continue;
}
destination_indexes=GetCacheViewAuthenticIndexQueue(destination->view);
- if (transfer(source,duplex,destination,context) == MagickFalse)
+ if (transfer(source,duplex,destination,y,id,context) == MagickFalse)
status=MagickFalse;
sync=SyncCacheViewAuthenticPixels(destination->view,exception);
if (sync == MagickFalse)
@@ -303,8 +307,8 @@ MagickExport MagickBooleanType DuplexTransferImageViewIterator(
#if defined(MAGICKCORE_OPENMP_SUPPORT)
#pragma omp critical (MagickCore_DuplexTransferImageViewIterator)
#endif
- proceed=SetImageProgress(source_image,DuplexTransferImageViewTag,
- progress++,source->region.height);
+ proceed=SetImageProgress(source_image,source->description,progress++,
+ source->extent.height);
if (proceed == MagickFalse)
status=MagickFalse;
}
@@ -433,28 +437,28 @@ MagickExport char *GetImageViewException(const ImageView *image_view,
% %
% %
% %
-% G e t I m a g e V i e w H e i g h t %
+% G e t I m a g e V i e w E x t e n t %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% GetImageViewHeight() returns the image view height.
+% GetImageViewExtent() returns the image view extent.
%
-% The format of the GetImageViewHeight method is:
+% The format of the GetImageViewExtent method is:
%
-% size_t GetImageViewHeight(const ImageView *image_view)
+% RectangleInfo GetImageViewExtent(const ImageView *image_view)
%
% A description of each parameter follows:
%
% o image_view: the image view.
%
*/
-MagickExport size_t GetImageViewHeight(const ImageView *image_view)
+MagickExport RectangleInfo GetImageViewExtent(const ImageView *image_view)
{
assert(image_view != (ImageView *) NULL);
assert(image_view->signature == MagickSignature);
- return(image_view->region.height);
+ return(image_view->extent);
}
/*
@@ -498,7 +502,7 @@ MagickExport Image *GetImageViewImage(const ImageView *image_view)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% GetImageViewIterator() iterates over the image view in parallel and calls
-% your get method for each scanline of the view. The pixel region is
+% your get method for each scanline of the view. The pixel extent 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.
@@ -527,8 +531,6 @@ MagickExport Image *GetImageViewImage(const ImageView *image_view)
MagickExport MagickBooleanType GetImageViewIterator(ImageView *source,
GetImageViewMethod get,void *context)
{
-#define GetImageViewTag "ImageView/Get"
-
Image
*source_image;
@@ -551,7 +553,7 @@ MagickExport MagickBooleanType GetImageViewIterator(ImageView *source,
#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++)
+ for (y=source->extent.y; y < (ssize_t) source->extent.height; y++)
{
register const IndexPacket
*indexes;
@@ -565,8 +567,8 @@ MagickExport MagickBooleanType GetImageViewIterator(ImageView *source,
if (status == MagickFalse)
continue;
id=GetOpenMPThreadId();
- pixels=GetCacheViewVirtualPixels(source->view,source->region.x,y,
- source->region.width,1,source->exception);
+ pixels=GetCacheViewVirtualPixels(source->view,source->extent.x,y,
+ source->extent.width,1,source->exception);
if (pixels == (const PixelPacket *) NULL)
{
status=MagickFalse;
@@ -583,8 +585,8 @@ MagickExport MagickBooleanType GetImageViewIterator(ImageView *source,
#if defined(MAGICKCORE_OPENMP_SUPPORT)
#pragma omp critical (MagickCore_GetImageViewIterator)
#endif
- proceed=SetImageProgress(source_image,GetImageViewTag,progress++,
- source->region.height);
+ proceed=SetImageProgress(source_image,source->description,progress++,
+ source->extent.height);
if (proceed == MagickFalse)
status=MagickFalse;
}
@@ -658,93 +660,6 @@ MagickExport const PixelPacket *GetImageViewVirtualPixels(
% %
% %
% %
-% G e t I m a g e V i e w W i d t h %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% GetImageViewWidth() returns the image view width.
-%
-% The format of the GetImageViewWidth method is:
-%
-% size_t GetImageViewWidth(const ImageView *image_view)
-%
-% A description of each parameter follows:
-%
-% o image_view: the image view.
-%
-*/
-MagickExport size_t GetImageViewWidth(const ImageView *image_view)
-{
- assert(image_view != (ImageView *) NULL);
- assert(image_view->signature == MagickSignature);
- return(image_view->region.width);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% G e t I m a g e V i e w X %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% GetImageViewX() returns the image view x offset.
-%
-% The format of the GetImageViewX method is:
-%
-% ssize_t GetImageViewX(const ImageView *image_view)
-%
-% A description of each parameter follows:
-%
-% o image_view: the image view.
-%
-*/
-MagickExport ssize_t GetImageViewX(const ImageView *image_view)
-{
- assert(image_view != (ImageView *) NULL);
- assert(image_view->signature == MagickSignature);
- return(image_view->region.x);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% G e t I m a g e V i e w Y %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% GetImageViewY() returns the image view y offset.
-%
-% The format of the GetImageViewY method is:
-%
-% ssize_t GetImageViewY(const ImageView *image_view)
-%
-% A description of each parameter follows:
-%
-% o image_view: the image view.
-%
-*/
-MagickExport ssize_t GetImageViewY(const ImageView *image_view)
-{
- assert(image_view != (ImageView *) NULL);
- assert(image_view->signature == MagickSignature);
- return(image_view->region.y);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
% I s I m a g e V i e w %
% %
% %
@@ -806,12 +721,15 @@ MagickExport ImageView *NewImageView(Image *image)
if (image_view == (ImageView *) NULL)
ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed");
(void) ResetMagickMemory(image_view,0,sizeof(*image_view));
- image_view->exception=AcquireExceptionInfo();
+ image_view->description=ConstantString("ImageView");
image_view->image=image;
image_view->view=AcquireCacheView(image_view->image);
- image_view->region.width=image->columns;
- image_view->region.height=image->rows;
+ image_view->extent.width=image->columns;
+ image_view->extent.height=image->rows;
+ image_view->extent.x=0;
+ image_view->extent.y=0;
image_view->number_threads=GetOpenMPMaximumThreads();
+ image_view->exception=AcquireExceptionInfo();
image_view->debug=IsEventLogging();
image_view->signature=MagickSignature;
return(image_view);
@@ -840,7 +758,7 @@ MagickExport ImageView *NewImageView(Image *image)
%
% o wand: the magick wand.
%
-% o x,y,columns,rows: These values define the perimeter of a region of
+% o x,y,columns,rows: These values define the perimeter of a extent of
% pixel_wands view.
%
*/
@@ -856,14 +774,15 @@ MagickExport ImageView *NewImageViewRegion(Image *image,const ssize_t x,
if (image_view == (ImageView *) NULL)
ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed");
(void) ResetMagickMemory(image_view,0,sizeof(*image_view));
- image_view->exception=AcquireExceptionInfo();
+ image_view->description=ConstantString("ImageView");
image_view->view=AcquireCacheView(image_view->image);
image_view->image=image;
- image_view->region.width=width;
- image_view->region.height=height;
- image_view->region.x=x;
- image_view->region.y=y;
+ image_view->extent.width=width;
+ image_view->extent.height=height;
+ image_view->extent.x=x;
+ image_view->extent.y=y;
image_view->number_threads=GetOpenMPMaximumThreads();
+ image_view->exception=AcquireExceptionInfo();
image_view->debug=IsEventLogging();
image_view->signature=MagickSignature;
return(image_view);
@@ -874,6 +793,39 @@ MagickExport ImageView *NewImageViewRegion(Image *image,const ssize_t x,
% %
% %
% %
+% S e t I m a g e V i e w D e s c r i p t i o n %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% SetImageViewDescription() associates a description with an image view.
+%
+% The format of the SetImageViewDescription method is:
+%
+% void SetImageViewDescription(ImageView *image_view,
+% const char *description)
+%
+% A description of each parameter follows:
+%
+% o image_view: the image view.
+%
+% o description: the image view description.
+%
+*/
+MagickExport void SetImageViewDescription(ImageView *image_view,
+ const char *description)
+{
+ assert(image_view != (ImageView *) NULL);
+ assert(image_view->signature == MagickSignature);
+ image_view->description=ConstantString(description);
+}
+
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
% S e t I m a g e V i e w I t e r a t o r %
% %
% %
@@ -881,7 +833,7 @@ MagickExport ImageView *NewImageViewRegion(Image *image,const ssize_t x,
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% SetImageViewIterator() iterates over the image view in parallel and calls
-% your set method for each scanline of the view. The pixel region is
+% your set method for each scanline of the view. The pixel extent 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
@@ -911,8 +863,6 @@ MagickExport ImageView *NewImageViewRegion(Image *image,const ssize_t x,
MagickExport MagickBooleanType SetImageViewIterator(ImageView *destination,
SetImageViewMethod set,void *context)
{
-#define SetImageViewTag "ImageView/Set"
-
ExceptionInfo
*exception;
@@ -941,7 +891,7 @@ MagickExport MagickBooleanType SetImageViewIterator(ImageView *destination,
#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++)
+ for (y=destination->extent.y; y < (ssize_t) destination->extent.height; y++)
{
MagickBooleanType
sync;
@@ -958,8 +908,8 @@ MagickExport MagickBooleanType SetImageViewIterator(ImageView *destination,
if (status == MagickFalse)
continue;
id=GetOpenMPThreadId();
- pixels=GetCacheViewAuthenticPixels(destination->view,destination->region.x,
- y,destination->region.width,1,exception);
+ pixels=GetCacheViewAuthenticPixels(destination->view,destination->extent.x,
+ y,destination->extent.width,1,exception);
if (pixels == (PixelPacket *) NULL)
{
InheritException(destination->exception,GetCacheViewException(
@@ -985,8 +935,8 @@ MagickExport MagickBooleanType SetImageViewIterator(ImageView *destination,
#if defined(MAGICKCORE_OPENMP_SUPPORT)
#pragma omp critical (MagickCore_SetImageViewIterator)
#endif
- proceed=SetImageProgress(destination_image,SetImageViewTag,progress++,
- destination->region.height);
+ proceed=SetImageProgress(destination_image,destination->description,
+ progress++,destination->extent.height);
if (proceed == MagickFalse)
status=MagickFalse;
}
@@ -1007,7 +957,7 @@ MagickExport MagickBooleanType SetImageViewIterator(ImageView *destination,
%
% TransferImageViewIterator() iterates over two image 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
+% extent 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 image view is confined to the image canvas-- that
% is no negative offsets or widths or heights that exceed the image dimension
@@ -1039,8 +989,6 @@ MagickExport MagickBooleanType SetImageViewIterator(ImageView *destination,
MagickExport MagickBooleanType TransferImageViewIterator(ImageView *source,
ImageView *destination,TransferImageViewMethod transfer,void *context)
{
-#define TransferImageViewTag "ImageView/Transfer"
-
ExceptionInfo
*exception;
@@ -1071,7 +1019,7 @@ MagickExport MagickBooleanType TransferImageViewIterator(ImageView *source,
#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++)
+ for (y=source->extent.y; y < (ssize_t) source->extent.height; y++)
{
MagickBooleanType
sync;
@@ -1094,8 +1042,8 @@ MagickExport MagickBooleanType TransferImageViewIterator(ImageView *source,
if (status == MagickFalse)
continue;
id=GetOpenMPThreadId();
- pixels=GetCacheViewVirtualPixels(source->view,source->region.x,y,
- source->region.width,1,source->exception);
+ pixels=GetCacheViewVirtualPixels(source->view,source->extent.x,y,
+ source->extent.width,1,source->exception);
if (pixels == (const PixelPacket *) NULL)
{
status=MagickFalse;
@@ -1103,14 +1051,14 @@ MagickExport MagickBooleanType TransferImageViewIterator(ImageView *source,
}
indexes=GetCacheViewVirtualIndexQueue(source->view);
destination_pixels=GetCacheViewAuthenticPixels(destination->view,
- destination->region.x,y,destination->region.width,1,exception);
+ destination->extent.x,y,destination->extent.width,1,exception);
if (destination_pixels == (PixelPacket *) NULL)
{
status=MagickFalse;
continue;
}
destination_indexes=GetCacheViewAuthenticIndexQueue(destination->view);
- if (transfer(source,destination,context) == MagickFalse)
+ if (transfer(source,destination,y,id,context) == MagickFalse)
status=MagickFalse;
sync=SyncCacheViewAuthenticPixels(destination->view,exception);
if (sync == MagickFalse)
@@ -1127,8 +1075,8 @@ MagickExport MagickBooleanType TransferImageViewIterator(ImageView *source,
#if defined(MAGICKCORE_OPENMP_SUPPORT)
#pragma omp critical (MagickCore_TransferImageViewIterator)
#endif
- proceed=SetImageProgress(source_image,TransferImageViewTag,progress++,
- source->region.height);
+ proceed=SetImageProgress(source_image,source->description,progress++,
+ source->extent.height);
if (proceed == MagickFalse)
status=MagickFalse;
}
@@ -1148,7 +1096,7 @@ MagickExport MagickBooleanType TransferImageViewIterator(ImageView *source,
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% UpdateImageViewIterator() iterates over the image view in parallel and calls
-% your update method for each scanline of the view. The pixel region is
+% your update method for each scanline of the view. The pixel extent 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.
@@ -1177,8 +1125,6 @@ MagickExport MagickBooleanType TransferImageViewIterator(ImageView *source,
MagickExport MagickBooleanType UpdateImageViewIterator(ImageView *source,
UpdateImageViewMethod update,void *context)
{
-#define UpdateImageViewTag "ImageView/Update"
-
ExceptionInfo
*exception;
@@ -1207,7 +1153,7 @@ MagickExport MagickBooleanType UpdateImageViewIterator(ImageView *source,
#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++)
+ for (y=source->extent.y; y < (ssize_t) source->extent.height; y++)
{
register IndexPacket
*restrict indexes;
@@ -1221,8 +1167,8 @@ MagickExport MagickBooleanType UpdateImageViewIterator(ImageView *source,
if (status == MagickFalse)
continue;
id=GetOpenMPThreadId();
- pixels=GetCacheViewAuthenticPixels(source->view,source->region.x,y,
- source->region.width,1,exception);
+ pixels=GetCacheViewAuthenticPixels(source->view,source->extent.x,y,
+ source->extent.width,1,exception);
if (pixels == (PixelPacket *) NULL)
{
InheritException(source->exception,GetCacheViewException(source->view));
@@ -1230,7 +1176,7 @@ MagickExport MagickBooleanType UpdateImageViewIterator(ImageView *source,
continue;
}
indexes=GetCacheViewAuthenticIndexQueue(source->view);
- if (update(source,context) == MagickFalse)
+ if (update(source,y,id,context) == MagickFalse)
status=MagickFalse;
if (SyncCacheViewAuthenticPixels(source->view,exception) == MagickFalse)
{
@@ -1245,8 +1191,8 @@ MagickExport MagickBooleanType UpdateImageViewIterator(ImageView *source,
#if defined(MAGICKCORE_OPENMP_SUPPORT)
#pragma omp critical (MagickCore_UpdateImageViewIterator)
#endif
- proceed=SetImageProgress(source_image,UpdateImageViewTag,progress++,
- source->region.height);
+ proceed=SetImageProgress(source_image,source->description,progress++,
+ source->extent.height);
if (proceed == MagickFalse)
status=MagickFalse;
}
diff --git a/magick/image-view.h b/magick/image-view.h
index 04cd78784..3a1dc2108 100644
--- a/magick/image-view.h
+++ b/magick/image-view.h
@@ -27,11 +27,12 @@ typedef struct _ImageView
typedef MagickBooleanType
(*DuplexTransferImageViewMethod)(const ImageView *,const ImageView *,
- ImageView *,void *),
+ ImageView *,const ssize_t,const int,void *),
(*GetImageViewMethod)(const ImageView *,void *),
(*SetImageViewMethod)(ImageView *,void *),
- (*TransferImageViewMethod)(const ImageView *,ImageView *,void *),
- (*UpdateImageViewMethod)(ImageView *,void *);
+ (*TransferImageViewMethod)(const ImageView *,ImageView *,const ssize_t,
+ const int,void *),
+ (*UpdateImageViewMethod)(ImageView *,const ssize_t,const int,void *);
extern MagickExport char
*GetImageViewException(const ImageView *,ExceptionType *);
@@ -68,13 +69,11 @@ extern MagickExport MagickBooleanType
extern MagickExport PixelPacket
*GetImageViewAuthenticPixels(const ImageView *);
-extern MagickExport size_t
- GetImageViewHeight(const ImageView *),
- GetImageViewWidth(const ImageView *);
+extern MagickExport RectangleInfo
+ GetImageViewExtent(const ImageView *);
-extern MagickExport ssize_t
- GetImageViewX(const ImageView *),
- GetImageViewY(const ImageView *);
+extern MagickExport void
+ SetImageViewDescription(ImageView *,const char *);
#if defined(__cplusplus) || defined(c_plusplus)
}
diff --git a/magick/thread-private.h b/magick/thread-private.h
index 58be557e6..9275625e3 100644
--- a/magick/thread-private.h
+++ b/magick/thread-private.h
@@ -108,7 +108,7 @@ static inline size_t GetOpenMPMaximumThreads(void)
#endif
}
-static inline ssize_t GetOpenMPThreadId(void)
+static inline int GetOpenMPThreadId(void)
{
#if defined(MAGICKCORE_OPENMP_SUPPORT) && (_OPENMP >= 200203)
return(omp_get_thread_num());
diff --git a/wand/wand-view.c b/wand/wand-view.c
index 921a6e9d5..14c4bdf03 100644
--- a/wand/wand-view.c
+++ b/wand/wand-view.c
@@ -65,10 +65,11 @@ struct _WandView
id;
char
- name[MaxTextExtent];
+ name[MaxTextExtent],
+ *description;
- ExceptionInfo
- *exception;
+ RectangleInfo
+ extent;
MagickWand
*wand;
@@ -76,15 +77,15 @@ struct _WandView
CacheView
*view;
- RectangleInfo
- region;
-
size_t
number_threads;
PixelWand
***pixel_wands;
+ ExceptionInfo
+ *exception;
+
MagickBooleanType
debug;
@@ -134,14 +135,15 @@ WandExport WandView *CloneWandView(const WandView *wand_view)
clone_view->id=AcquireWandId();
(void) FormatMagickString(clone_view->name,MaxTextExtent,"%s-%.20g",
WandViewId,(double) clone_view->id);
- clone_view->exception=AcquireExceptionInfo();
- InheritException(clone_view->exception,wand_view->exception);
+ clone_view->description=ConstantString(wand_view->description);
clone_view->view=CloneCacheView(wand_view->view);
- clone_view->region=wand_view->region;
+ clone_view->extent=wand_view->extent;
clone_view->number_threads=wand_view->number_threads;
+ clone_view->exception=AcquireExceptionInfo();
+ InheritException(clone_view->exception,wand_view->exception);
for (i=0; i < (ssize_t) wand_view->number_threads; i++)
clone_view->pixel_wands[i]=ClonePixelWands((const PixelWand **)
- wand_view->pixel_wands[i],wand_view->region.width);
+ wand_view->pixel_wands[i],wand_view->extent.width);
clone_view->debug=wand_view->debug;
if (clone_view->debug != MagickFalse)
(void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",clone_view->name);
@@ -191,7 +193,7 @@ WandExport WandView *DestroyWandView(WandView *wand_view)
assert(wand_view != (WandView *) NULL);
assert(wand_view->signature == WandSignature);
wand_view->pixel_wands=DestroyPixelsThreadSet(wand_view->pixel_wands,
- wand_view->region.width,wand_view->number_threads);
+ wand_view->extent.width,wand_view->number_threads);
wand_view->view=DestroyCacheView(wand_view->view);
wand_view->exception=DestroyExceptionInfo(wand_view->exception);
wand_view->signature=(~WandSignature);
@@ -213,7 +215,7 @@ WandExport WandView *DestroyWandView(WandView *wand_view)
%
% DuplexTransferWandViewIterator() iterates over three wand 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
+% source and duplex pixel extent 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 wand view is confined to the image
% canvas-- that is no negative offsets or widths or heights that exceed the
@@ -249,8 +251,6 @@ WandExport MagickBooleanType DuplexTransferWandViewIterator(WandView *source,
WandView *duplex,WandView *destination,DuplexTransferWandViewMethod transfer,
void *context)
{
-#define DuplexTransferWandViewTag "WandView/DuplexTransfer"
-
ExceptionInfo
*exception;
@@ -283,7 +283,7 @@ WandExport MagickBooleanType DuplexTransferWandViewIterator(WandView *source,
#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++)
+ for (y=source->extent.y; y < (ssize_t) source->extent.height; y++)
{
MagickBooleanType
sync;
@@ -309,63 +309,63 @@ WandExport MagickBooleanType DuplexTransferWandViewIterator(WandView *source,
if (status == MagickFalse)
continue;
id=GetOpenMPThreadId();
- pixels=GetCacheViewVirtualPixels(source->view,source->region.x,y,
- source->region.width,1,source->exception);
+ pixels=GetCacheViewVirtualPixels(source->view,source->extent.x,y,
+ source->extent.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++)
+ for (x=0; x < (ssize_t) source->extent.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++)
+ for (x=0; x < (ssize_t) source->extent.width; x++)
PixelSetBlackQuantum(source->pixel_wands[id][x],indexes[x]);
if (source_image->storage_class == PseudoClass)
- for (x=0; x < (ssize_t) source->region.width; x++)
+ for (x=0; x < (ssize_t) source->extent.width; x++)
PixelSetIndex(source->pixel_wands[id][x],indexes[x]);
- duplex_pixels=GetCacheViewVirtualPixels(duplex->view,duplex->region.x,y,
- duplex->region.width,1,duplex->exception);
+ duplex_pixels=GetCacheViewVirtualPixels(duplex->view,duplex->extent.x,y,
+ duplex->extent.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++)
+ for (x=0; x < (ssize_t) duplex->extent.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++)
+ for (x=0; x < (ssize_t) duplex->extent.width; x++)
PixelSetBlackQuantum(duplex->pixel_wands[id][x],duplex_indexes[x]);
if (duplex_image->storage_class == PseudoClass)
- for (x=0; x < (ssize_t) duplex->region.width; x++)
+ for (x=0; x < (ssize_t) duplex->extent.width; x++)
PixelSetIndex(duplex->pixel_wands[id][x],duplex_indexes[x]);
destination_pixels=GetCacheViewAuthenticPixels(destination->view,
- destination->region.x,y,destination->region.width,1,exception);
+ destination->extent.x,y,destination->extent.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++)
+ for (x=0; x < (ssize_t) destination->extent.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++)
+ for (x=0; x < (ssize_t) destination->extent.width; x++)
PixelSetBlackQuantum(destination->pixel_wands[id][x],
destination_indexes[x]);
if (destination_image->storage_class == PseudoClass)
- for (x=0; x < (ssize_t) destination->region.width; x++)
+ for (x=0; x < (ssize_t) destination->extent.width; x++)
PixelSetIndex(destination->pixel_wands[id][x],destination_indexes[x]);
- if (transfer(source,duplex,destination,context) == MagickFalse)
+ if (transfer(source,duplex,destination,y,id,context) == MagickFalse)
status=MagickFalse;
- for (x=0; x < (ssize_t) destination->region.width; x++)
+ for (x=0; x < (ssize_t) destination->extent.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++)
+ for (x=0; x < (ssize_t) destination->extent.width; x++)
destination_indexes[x]=PixelGetBlackQuantum(
destination->pixel_wands[id][x]);
sync=SyncCacheViewAuthenticPixels(destination->view,exception);
@@ -383,8 +383,8 @@ WandExport MagickBooleanType DuplexTransferWandViewIterator(WandView *source,
#if defined(MAGICKCORE_OPENMP_SUPPORT)
#pragma omp critical (MagickWand_DuplexTransferWandViewIterator)
#endif
- proceed=SetImageProgress(source_image,DuplexTransferWandViewTag,
- progress++,source->region.height);
+ proceed=SetImageProgress(source_image,source->description,progress++,
+ source->extent.height);
if (proceed == MagickFalse)
status=MagickFalse;
}
@@ -456,28 +456,28 @@ WandExport char *GetWandViewException(const WandView *wand_view,
% %
% %
% %
-% G e t W a n d V i e w H e i g h t %
+% G e t W a n d V i e w E x t e n t %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% GetWandViewHeight() returns the wand view height.
+% GetWandViewExtent() returns the wand view extent.
%
-% The format of the GetWandViewHeight method is:
+% The format of the GetWandViewExtent method is:
%
-% size_t GetWandViewHeight(const WandView *wand_view)
+% RectangleInfo GetWandViewExtent(const WandView *wand_view)
%
% A description of each parameter follows:
%
% o wand_view: the wand view.
%
*/
-WandExport size_t GetWandViewHeight(const WandView *wand_view)
+WandExport RectangleInfo GetWandViewExtent(const WandView *wand_view)
{
assert(wand_view != (WandView *) NULL);
assert(wand_view->signature == WandSignature);
- return(wand_view->region.height);
+ return(wand_view->extent);
}
/*
@@ -492,7 +492,7 @@ WandExport size_t GetWandViewHeight(const WandView *wand_view)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% GetWandViewIterator() iterates over the wand view in parallel and calls
-% your get method for each scanline of the view. The pixel region is
+% your get method for each scanline of the view. The pixel extent 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.
@@ -521,8 +521,6 @@ WandExport size_t GetWandViewHeight(const WandView *wand_view)
WandExport MagickBooleanType GetWandViewIterator(WandView *source,
GetWandViewMethod get,void *context)
{
-#define GetWandViewTag "WandView/Get"
-
Image
*source_image;
@@ -545,7 +543,7 @@ WandExport MagickBooleanType GetWandViewIterator(WandView *source,
#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++)
+ for (y=source->extent.y; y < (ssize_t) source->extent.height; y++)
{
register const IndexPacket
*indexes;
@@ -560,21 +558,21 @@ WandExport MagickBooleanType GetWandViewIterator(WandView *source,
if (status == MagickFalse)
continue;
id=GetOpenMPThreadId();
- pixels=GetCacheViewVirtualPixels(source->view,source->region.x,y,
- source->region.width,1,source->exception);
+ pixels=GetCacheViewVirtualPixels(source->view,source->extent.x,y,
+ source->extent.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++)
+ for (x=0; x < (ssize_t) source->extent.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++)
+ for (x=0; x < (ssize_t) source->extent.width; x++)
PixelSetBlackQuantum(source->pixel_wands[id][x],indexes[x]);
if (source_image->storage_class == PseudoClass)
- for (x=0; x < (ssize_t) source->region.width; x++)
+ for (x=0; x < (ssize_t) source->extent.width; x++)
PixelSetIndex(source->pixel_wands[id][x],indexes[x]);
if (get(source,context) == MagickFalse)
status=MagickFalse;
@@ -586,8 +584,8 @@ WandExport MagickBooleanType GetWandViewIterator(WandView *source,
#if defined(MAGICKCORE_OPENMP_SUPPORT)
#pragma omp critical (MagickWand_GetWandViewIterator)
#endif
- proceed=SetImageProgress(source_image,GetWandViewTag,progress++,
- source->region.height);
+ proceed=SetImageProgress(source_image,source->description,progress++,
+ source->extent.height);
if (proceed == MagickFalse)
status=MagickFalse;
}
@@ -662,93 +660,6 @@ WandExport MagickWand *GetWandViewWand(const WandView *wand_view)
% %
% %
% %
-% G e t W a n d V i e w W i d t h %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% GetWandViewWidth() returns the wand view width.
-%
-% The format of the GetWandViewWidth method is:
-%
-% size_t GetWandViewWidth(const WandView *wand_view)
-%
-% A description of each parameter follows:
-%
-% o wand_view: the wand view.
-%
-*/
-WandExport size_t GetWandViewWidth(const WandView *wand_view)
-{
- assert(wand_view != (WandView *) NULL);
- assert(wand_view->signature == WandSignature);
- return(wand_view->region.width);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% G e t W a n d V i e w X %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% GetWandViewX() returns the wand view x offset.
-%
-% The format of the GetWandViewX method is:
-%
-% ssize_t GetWandViewX(const WandView *wand_view)
-%
-% A description of each parameter follows:
-%
-% o wand_view: the wand view.
-%
-*/
-WandExport ssize_t GetWandViewX(const WandView *wand_view)
-{
- assert(wand_view != (WandView *) NULL);
- assert(wand_view->signature == WandSignature);
- return(wand_view->region.x);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% G e t W a n d V i e w Y %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% GetWandViewY() returns the wand view y offset.
-%
-% The format of the GetWandViewY method is:
-%
-% ssize_t GetWandViewY(const WandView *wand_view)
-%
-% A description of each parameter follows:
-%
-% o wand_view: the wand view.
-%
-*/
-WandExport ssize_t GetWandViewY(const WandView *wand_view)
-{
- assert(wand_view != (WandView *) NULL);
- assert(wand_view->signature == WandSignature);
- return(wand_view->region.y);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
% I s W a n d V i e w %
% %
% %
@@ -835,7 +746,7 @@ WandExport WandView *NewWandView(MagickWand *wand)
*wand_view;
assert(wand != (MagickWand *) NULL);
- assert(wand->signature == MagickSignature);
+ assert(wand->signature == WandSignature);
wand_view=(WandView *) AcquireAlignedMemory(1,sizeof(*wand_view));
if (wand_view == (WandView *) NULL)
ThrowWandFatalException(ResourceLimitFatalError,"MemoryAllocationFailed",
@@ -844,14 +755,15 @@ WandExport WandView *NewWandView(MagickWand *wand)
wand_view->id=AcquireWandId();
(void) FormatMagickString(wand_view->name,MaxTextExtent,"%s-%.20g",
WandViewId,(double) wand_view->id);
- wand_view->exception=AcquireExceptionInfo();
+ wand_view->description=ConstantString("WandView");
wand_view->wand=wand;
wand_view->view=AcquireCacheView(wand_view->wand->images);
- wand_view->region.width=wand->images->columns;
- wand_view->region.height=wand->images->rows;
+ wand_view->extent.width=wand->images->columns;
+ wand_view->extent.height=wand->images->rows;
wand_view->number_threads=GetOpenMPMaximumThreads();
- wand_view->pixel_wands=AcquirePixelsThreadSet(wand_view->region.width,
+ wand_view->pixel_wands=AcquirePixelsThreadSet(wand_view->extent.width,
wand_view->number_threads);
+ wand_view->exception=AcquireExceptionInfo();
if (wand_view->pixel_wands == (PixelWand ***) NULL)
ThrowWandFatalException(ResourceLimitFatalError,"MemoryAllocationFailed",
GetExceptionMessage(errno));
@@ -865,36 +777,36 @@ WandExport WandView *NewWandView(MagickWand *wand)
% %
% %
% %
-% N e w W a n d V i e w R e g i o n %
+% N e w W a n d V i e w E x t e n t %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% NewWandViewRegion() returns a wand view required for all other methods
+% NewWandViewExtent() returns a wand view required for all other methods
% in the Wand View API.
%
-% The format of the NewWandViewRegion method is:
+% The format of the NewWandViewExtent method is:
%
-% WandView *NewWandViewRegion(MagickWand *wand,const ssize_t x,
+% WandView *NewWandViewExtent(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 wand: the magick wand.
%
-% o x,y,columns,rows: These values define the perimeter of a region of
+% o x,y,columns,rows: These values define the perimeter of a extent of
% pixel_wands view.
%
*/
-WandExport WandView *NewWandViewRegion(MagickWand *wand,const ssize_t x,
+WandExport WandView *NewWandViewExtent(MagickWand *wand,const ssize_t x,
const ssize_t y,const size_t width,const size_t height)
{
WandView
*wand_view;
assert(wand != (MagickWand *) NULL);
- assert(wand->signature == MagickSignature);
+ assert(wand->signature == WandSignature);
wand_view=(WandView *) AcquireAlignedMemory(1,sizeof(*wand_view));
if (wand_view == (WandView *) NULL)
ThrowWandFatalException(ResourceLimitFatalError,"MemoryAllocationFailed",
@@ -903,15 +815,16 @@ WandExport WandView *NewWandViewRegion(MagickWand *wand,const ssize_t x,
wand_view->id=AcquireWandId();
(void) FormatMagickString(wand_view->name,MaxTextExtent,"%s-%.20g",
WandViewId,(double) wand_view->id);
- wand_view->exception=AcquireExceptionInfo();
+ wand_view->description=ConstantString("WandView");
wand_view->view=AcquireCacheView(wand_view->wand->images);
wand_view->wand=wand;
- wand_view->region.width=width;
- wand_view->region.height=height;
- wand_view->region.x=x;
- wand_view->region.y=y;
+ wand_view->extent.width=width;
+ wand_view->extent.height=height;
+ wand_view->extent.x=x;
+ wand_view->extent.y=y;
wand_view->number_threads=GetOpenMPMaximumThreads();
- wand_view->pixel_wands=AcquirePixelsThreadSet(wand_view->region.width,
+ wand_view->exception=AcquireExceptionInfo();
+ wand_view->pixel_wands=AcquirePixelsThreadSet(wand_view->extent.width,
wand_view->number_threads);
if (wand_view->pixel_wands == (PixelWand ***) NULL)
ThrowWandFatalException(ResourceLimitFatalError,"MemoryAllocationFailed",
@@ -926,6 +839,38 @@ WandExport WandView *NewWandViewRegion(MagickWand *wand,const ssize_t x,
% %
% %
% %
+% S e t W a n d V i e w D e s c r i p t i o n %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% SetWandViewDescription() associates a description with an image view.
+%
+% The format of the SetWandViewDescription method is:
+%
+% void SetWandViewDescription(WandView *image_view,const char *description)
+%
+% A description of each parameter follows:
+%
+% o wand_view: the wand view.
+%
+% o description: the wand view description.
+%
+*/
+MagickExport void SetWandViewDescription(WandView *wand_view,
+ const char *description)
+{
+ assert(wand_view != (WandView *) NULL);
+ assert(wand_view->signature == WandSignature);
+ wand_view->description=ConstantString(description);
+}
+
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
% S e t W a n d V i e w I t e r a t o r %
% %
% %
@@ -933,7 +878,7 @@ WandExport WandView *NewWandViewRegion(MagickWand *wand,const ssize_t x,
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% SetWandViewIterator() iterates over the wand view in parallel and calls
-% your set method for each scanline of the view. The pixel region is
+% your set method for each scanline of the view. The pixel extent 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
@@ -963,8 +908,6 @@ WandExport WandView *NewWandViewRegion(MagickWand *wand,const ssize_t x,
WandExport MagickBooleanType SetWandViewIterator(WandView *destination,
SetWandViewMethod set,void *context)
{
-#define SetWandViewTag "WandView/Set"
-
ExceptionInfo
*exception;
@@ -993,7 +936,7 @@ WandExport MagickBooleanType SetWandViewIterator(WandView *destination,
#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++)
+ for (y=destination->extent.y; y < (ssize_t) destination->extent.height; y++)
{
MagickBooleanType
sync;
@@ -1011,8 +954,8 @@ WandExport MagickBooleanType SetWandViewIterator(WandView *destination,
if (status == MagickFalse)
continue;
id=GetOpenMPThreadId();
- pixels=GetCacheViewAuthenticPixels(destination->view,destination->region.x,
- y,destination->region.width,1,exception);
+ pixels=GetCacheViewAuthenticPixels(destination->view,destination->extent.x,
+ y,destination->extent.width,1,exception);
if (pixels == (PixelPacket *) NULL)
{
InheritException(destination->exception,GetCacheViewException(
@@ -1023,10 +966,10 @@ WandExport MagickBooleanType SetWandViewIterator(WandView *destination,
indexes=GetCacheViewAuthenticIndexQueue(destination->view);
if (set(destination,context) == MagickFalse)
status=MagickFalse;
- for (x=0; x < (ssize_t) destination->region.width; x++)
+ for (x=0; x < (ssize_t) destination->extent.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++)
+ for (x=0; x < (ssize_t) destination->extent.width; x++)
indexes[x]=PixelGetBlackQuantum(destination->pixel_wands[id][x]);
sync=SyncCacheViewAuthenticPixels(destination->view,exception);
if (sync == MagickFalse)
@@ -1043,8 +986,8 @@ WandExport MagickBooleanType SetWandViewIterator(WandView *destination,
#if defined(MAGICKCORE_OPENMP_SUPPORT)
#pragma omp critical (MagickWand_SetWandViewIterator)
#endif
- proceed=SetImageProgress(destination_image,SetWandViewTag,progress++,
- destination->region.height);
+ proceed=SetImageProgress(destination_image,destination->description,
+ progress++,destination->extent.height);
if (proceed == MagickFalse)
status=MagickFalse;
}
@@ -1065,7 +1008,7 @@ WandExport MagickBooleanType SetWandViewIterator(WandView *destination,
%
% TransferWandViewIterator() iterates over two wand 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
+% extent 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 wand view is confined to the image canvas-- that
% is no negative offsets or widths or heights that exceed the image dimension
@@ -1097,8 +1040,6 @@ WandExport MagickBooleanType SetWandViewIterator(WandView *destination,
WandExport MagickBooleanType TransferWandViewIterator(WandView *source,
WandView *destination,TransferWandViewMethod transfer,void *context)
{
-#define TransferWandViewTag "WandView/Transfer"
-
ExceptionInfo
*exception;
@@ -1129,7 +1070,7 @@ WandExport MagickBooleanType TransferWandViewIterator(WandView *source,
#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++)
+ for (y=source->extent.y; y < (ssize_t) source->extent.height; y++)
{
MagickBooleanType
sync;
@@ -1153,45 +1094,45 @@ WandExport MagickBooleanType TransferWandViewIterator(WandView *source,
if (status == MagickFalse)
continue;
id=GetOpenMPThreadId();
- pixels=GetCacheViewVirtualPixels(source->view,source->region.x,y,
- source->region.width,1,source->exception);
+ pixels=GetCacheViewVirtualPixels(source->view,source->extent.x,y,
+ source->extent.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++)
+ for (x=0; x < (ssize_t) source->extent.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++)
+ for (x=0; x < (ssize_t) source->extent.width; x++)
PixelSetBlackQuantum(source->pixel_wands[id][x],indexes[x]);
if (source_image->storage_class == PseudoClass)
- for (x=0; x < (ssize_t) source->region.width; x++)
+ for (x=0; x < (ssize_t) source->extent.width; x++)
PixelSetIndex(source->pixel_wands[id][x],indexes[x]);
destination_pixels=GetCacheViewAuthenticPixels(destination->view,
- destination->region.x,y,destination->region.width,1,exception);
+ destination->extent.x,y,destination->extent.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++)
+ for (x=0; x < (ssize_t) destination->extent.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++)
+ for (x=0; x < (ssize_t) destination->extent.width; x++)
PixelSetBlackQuantum(destination->pixel_wands[id][x],indexes[x]);
if (destination_image->storage_class == PseudoClass)
- for (x=0; x < (ssize_t) destination->region.width; x++)
+ for (x=0; x < (ssize_t) destination->extent.width; x++)
PixelSetIndex(destination->pixel_wands[id][x],indexes[x]);
- if (transfer(source,destination,context) == MagickFalse)
+ if (transfer(source,destination,y,id,context) == MagickFalse)
status=MagickFalse;
- for (x=0; x < (ssize_t) destination->region.width; x++)
+ for (x=0; x < (ssize_t) destination->extent.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++)
+ for (x=0; x < (ssize_t) destination->extent.width; x++)
destination_indexes[x]=PixelGetBlackQuantum(
destination->pixel_wands[id][x]);
sync=SyncCacheViewAuthenticPixels(destination->view,exception);
@@ -1209,8 +1150,8 @@ WandExport MagickBooleanType TransferWandViewIterator(WandView *source,
#if defined(MAGICKCORE_OPENMP_SUPPORT)
#pragma omp critical (MagickWand_TransferWandViewIterator)
#endif
- proceed=SetImageProgress(source_image,TransferWandViewTag,progress++,
- source->region.height);
+ proceed=SetImageProgress(source_image,source->description,progress++,
+ source->extent.height);
if (proceed == MagickFalse)
status=MagickFalse;
}
@@ -1230,7 +1171,7 @@ WandExport MagickBooleanType TransferWandViewIterator(WandView *source,
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% UpdateWandViewIterator() iterates over the wand view in parallel and calls
-% your update method for each scanline of the view. The pixel region is
+% your update method for each scanline of the view. The pixel extent 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.
@@ -1259,8 +1200,6 @@ WandExport MagickBooleanType TransferWandViewIterator(WandView *source,
WandExport MagickBooleanType UpdateWandViewIterator(WandView *source,
UpdateWandViewMethod update,void *context)
{
-#define UpdateWandViewTag "WandView/Update"
-
ExceptionInfo
*exception;
@@ -1289,7 +1228,7 @@ WandExport MagickBooleanType UpdateWandViewIterator(WandView *source,
#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++)
+ for (y=source->extent.y; y < (ssize_t) source->extent.height; y++)
{
register IndexPacket
*restrict indexes;
@@ -1304,8 +1243,8 @@ WandExport MagickBooleanType UpdateWandViewIterator(WandView *source,
if (status == MagickFalse)
continue;
id=GetOpenMPThreadId();
- pixels=GetCacheViewAuthenticPixels(source->view,source->region.x,y,
- source->region.width,1,exception);
+ pixels=GetCacheViewAuthenticPixels(source->view,source->extent.x,y,
+ source->extent.width,1,exception);
if (pixels == (PixelPacket *) NULL)
{
InheritException(source->exception,GetCacheViewException(
@@ -1314,17 +1253,17 @@ WandExport MagickBooleanType UpdateWandViewIterator(WandView *source,
continue;
}
indexes=GetCacheViewAuthenticIndexQueue(source->view);
- for (x=0; x < (ssize_t) source->region.width; x++)
+ for (x=0; x < (ssize_t) source->extent.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++)
+ for (x=0; x < (ssize_t) source->extent.width; x++)
PixelSetBlackQuantum(source->pixel_wands[id][x],indexes[x]);
- if (update(source,context) == MagickFalse)
+ if (update(source,y,id,context) == MagickFalse)
status=MagickFalse;
- for (x=0; x < (ssize_t) source->region.width; x++)
+ for (x=0; x < (ssize_t) source->extent.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++)
+ for (x=0; x < (ssize_t) source->extent.width; x++)
indexes[x]=PixelGetBlackQuantum(source->pixel_wands[id][x]);
if (SyncCacheViewAuthenticPixels(source->view,exception) == MagickFalse)
{
@@ -1339,8 +1278,8 @@ WandExport MagickBooleanType UpdateWandViewIterator(WandView *source,
#if defined(MAGICKCORE_OPENMP_SUPPORT)
#pragma omp critical (MagickWand_UpdateWandViewIterator)
#endif
- proceed=SetImageProgress(source_image,UpdateWandViewTag,progress++,
- source->region.height);
+ proceed=SetImageProgress(source_image,source->description,progress++,
+ source->extent.height);
if (proceed == MagickFalse)
status=MagickFalse;
}
diff --git a/wand/wand-view.h b/wand/wand-view.h
index 2c6dc23d7..121afac4e 100644
--- a/wand/wand-view.h
+++ b/wand/wand-view.h
@@ -27,11 +27,12 @@ typedef struct _WandView
typedef MagickBooleanType
(*DuplexTransferWandViewMethod)(const WandView *,const WandView *,WandView *,
- void *),
+ const ssize_t,const int,void *),
(*GetWandViewMethod)(const WandView *,void *),
(*SetWandViewMethod)(WandView *,void *),
- (*TransferWandViewMethod)(const WandView *,WandView *,void *),
- (*UpdateWandViewMethod)(WandView *,void *);
+ (*TransferWandViewMethod)(const WandView *,WandView *,const ssize_t,
+ const int,void *),
+ (*UpdateWandViewMethod)(WandView *,const ssize_t,const int,void *);
extern WandExport char
*GetWandViewException(const WandView *,ExceptionType *);
@@ -48,24 +49,22 @@ extern WandExport MagickBooleanType
extern WandExport MagickWand
*GetWandViewWand(const WandView *);
+extern WandExport PixelWand
+ **GetWandViewPixels(const WandView *);
+
+extern WandExport RectangleInfo
+ GetWandViewExtent(const WandView *);
+
+extern WandExport void
+ SetWandViewDescription(WandView *,const char *);
+
extern WandExport WandView
*CloneWandView(const WandView *),
*DestroyWandView(WandView *),
*NewWandView(MagickWand *),
- *NewWandViewRegion(MagickWand *,const ssize_t,const ssize_t,const size_t,
+ *NewWandViewExtent(MagickWand *,const ssize_t,const ssize_t,const size_t,
const size_t);
-extern WandExport PixelWand
- **GetWandViewPixels(const WandView *);
-
-extern WandExport size_t
- GetWandViewHeight(const WandView *),
- GetWandViewWidth(const WandView *);
-
-extern WandExport ssize_t
- GetWandViewX(const WandView *),
- GetWandViewY(const WandView *);
-
#if defined(__cplusplus) || defined(c_plusplus)
}
#endif
diff --git a/www/ImageMagickObject.html b/www/ImageMagickObject.html
index 4e42c508e..e82574b89 100644
--- a/www/ImageMagickObject.html
+++ b/www/ImageMagickObject.html
@@ -207,7 +207,7 @@
Discourse Server •
- Studio
+ Studio
diff --git a/www/advanced-unix-installation.html b/www/advanced-unix-installation.html
index 7be4a0994..42232fc26 100644
--- a/www/advanced-unix-installation.html
+++ b/www/advanced-unix-installation.html
@@ -142,7 +142,7 @@
Druckerei Online
@@ -593,7 +593,7 @@ Options used to compile and link:
Discourse Server •
- Studio
+ Studio
diff --git a/www/advanced-windows-installation.html b/www/advanced-windows-installation.html
index b80d81243..a5fbea8c0 100644
--- a/www/advanced-windows-installation.html
+++ b/www/advanced-windows-installation.html
@@ -142,7 +142,7 @@
Druckerei Online
G2F implements an Ada 95 binding to a subset of the low-level MagickCore library.
+
G2F implements an Ada 95 binding to a subset of the low-level MagickCore library.
C
@@ -172,7 +169,7 @@
Ch
-
ChMagick is a Ch binding to the MagickCore and MagickWand API. Ch is an embeddable C/C++ interpreter for cross-platform scripting.
+
ChMagick is a Ch binding to the MagickCore and MagickWand API. Ch is an embeddable C/C++ interpreter for cross-platform scripting.
COM+
@@ -184,31 +181,31 @@
C++
-
Magick++ provides an object-oriented C++ interface to ImageMagick. See A Gentle Introduction to Magick++ for an introductory tutorial to Magick++. We include the source if you want to correct, enhance, or expand the tutorial.
+
Magick++ provides an object-oriented C++ interface to ImageMagick. See A Gentle Introduction to Magick++ for an introductory tutorial to Magick++. We include the source if you want to correct, enhance, or expand the tutorial.
Java
-
JMagick provides an object-oriented Java interface to ImageMagick. Im4java is a pure-java interface to the ImageMagick command-line.
+
JMagick provides an object-oriented Java interface to ImageMagick. Im4java is a pure-java interface to the ImageMagick command-line.
LabVIEW
-
LVOOP ImageMagick is an object-oriented LabVIEW interface to ImageMagick.
+
LVOOP ImageMagick is an object-oriented LabVIEW interface to ImageMagick.
Lisp
-
CL-Magick provides a Common Lisp interface to the ImageMagick library.
+
CL-Magick provides a Common Lisp interface to the ImageMagick library.
Neko
-
NMagick is a port of the ImageMagick library to the haXe and Neko platforms. It provides image manipulation capabilities to both web and desktop applications using Neko.
+
NMagick is a port of the ImageMagick library to the haXe and Neko platforms. It provides image manipulation capabilities to both web and desktop applications using Neko.
.NET
@@ -222,7 +219,7 @@
Pascal
-
PascalMagick a Pascal binding for the MagickWand API and also the low-level MagickCore library. It works with Free Pascal / Lazarus and Delphi.
+
PascalMagick a Pascal binding for the MagickWand API and also the low-level MagickCore library. It works with Free Pascal / Lazarus and Delphi.
Perl
@@ -234,50 +231,50 @@
PHP
-
MagickWand for PHP a native PHP-extension to the ImageMagick MagickWand API.
+
MagickWand for PHP a native PHP-extension to the ImageMagick MagickWand API.
-
IMagick is a native PHP extension to create and modify images using the ImageMagick API. Documentation for the extension is available here.
+
IMagick is a native PHP extension to create and modify images using the ImageMagick API. Documentation for the extension is available here.
-
phMagick is a wrapper class for ImageMagick, wrapping the most common web image manipulation actions in easy to use functions, but allowing full access to ImageMagick's power by issuing system calls to it's command-line programs.
+
phMagick is a wrapper class for ImageMagick, wrapping the most common web image manipulation actions in easy to use functions, but allowing full access to ImageMagick's power by issuing system calls to it's command-line programs.
Python
-
PythonMagickWand is an object-oriented Python interface to MagickWand based on ctypes.
+
PythonMagickWand is an object-oriented Python interface to MagickWand based on ctypes.
-
PythonMagick is an object-oriented Python interface to ImageMagick.
+
PythonMagick is an object-oriented Python interface to ImageMagick.
REALbasic
-
The MBS Realbasic ImageMagick is a plugin that utilizes the power of ImageMagick from within the RealBasic environment.
+
The MBS Realbasic ImageMagick is a plugin that utilizes the power of ImageMagick from within the RealBasic environment.
Ruby
-
RMagick is an interface between the Ruby programming language and the MagickCore image processing libraries. Get started with RMagick by perusing the documentation.
+
RMagick is an interface between the Ruby programming language and the MagickCore image processing libraries. Get started with RMagick by perusing the documentation.
-
MagickWand for Ruby is an interface between the Ruby programming language and the MagickWand image processing libraries. Get started with MagickWand for PHP by perusing the documentation.
+
MagickWand for Ruby is an interface between the Ruby programming language and the MagickWand image processing libraries. Get started with MagickWand for PHP by perusing the documentation.
-
MiniMagick is a Ruby wrapper for ImageMagick command line. MiniMagick gives you convenient access to all the command line options ImageMagick supports.
+
MiniMagick is a Ruby wrapper for ImageMagick command line. MiniMagick gives you convenient access to all the command line options ImageMagick supports.
-
QuickMagick is a gem for easily accessing ImageMagick command line tools from Ruby programs.
+
QuickMagick is a gem for easily accessing ImageMagick command line tools from Ruby programs.
Tcl/Tk
-
TclMagick a native Tcl-extension to the ImageMagick MagickWand API.
+
TclMagick a native Tcl-extension to the ImageMagick MagickWand API.
XML RPC
-
RemoteMagick is an XML-RPC web service that creates image thumbnails.
+
RemoteMagick is an XML-RPC web service that creates image thumbnails.
DuplexTransferImageViewIterator() iterates over three image 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 image view is confined to the image canvas-- that is no negative offsets or widths or heights that exceed the image dimension are permitted.
+
DuplexTransferImageViewIterator() iterates over three image views in parallel and calls your transfer method for each scanline of the view. The source and duplex pixel extent 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 image view is confined to the image canvas-- that is no negative offsets or widths or heights that exceed the image dimension are permitted.
Use this pragma if the view is not single threaded:
GetImageViewIterator() iterates over the image 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.
+
GetImageViewIterator() iterates over the image view in parallel and calls your get method for each scanline of the view. The pixel extent 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.
Use this pragma if the view is not single threaded:
SetImageViewIterator() iterates over the image 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.
+
SetImageViewIterator() iterates over the image view in parallel and calls your set method for each scanline of the view. The pixel extent 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 if the view is not single threaded:
TransferImageViewIterator() iterates over two image 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 image view is confined to the image canvas-- that is no negative offsets or widths or heights that exceed the image dimension are permitted.
+
TransferImageViewIterator() iterates over two image views in parallel and calls your transfer method for each scanline of the view. The source pixel extent 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 image view is confined to the image canvas-- that is no negative offsets or widths or heights that exceed the image dimension are permitted.
Use this pragma if the view is not single threaded:
UpdateImageViewIterator() iterates over the image 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.
+
UpdateImageViewIterator() iterates over the image view in parallel and calls your update method for each scanline of the view. The pixel extent 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 if the view is not single threaded:
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.
+
+
Use this pragma:
+
+
+ #pragma omp critical
+
+
+
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 DuplexTransferPixelViewIterator method is:
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.
+
+
Use this pragma:
+
+
+ #pragma omp critical
+
+
+
to define a section of code in your callback get method that must be executed by a single thread at a time.
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:
+
+
+ #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.
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.
+
+
Use this pragma:
+
+
+ #pragma omp critical
+
+
+
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:
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
+
+
+
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 UpdatePixelViewIterator method is:
diff --git a/www/cipher.html b/www/cipher.html
index ba791bb73..bc7770cb8 100644
--- a/www/cipher.html
+++ b/www/cipher.html
@@ -206,7 +206,7 @@
Discourse Server •
- Studio
+ Studio
diff --git a/www/color.html b/www/color.html
index 1f430a23d..9949c3c24 100644
--- a/www/color.html
+++ b/www/color.html
@@ -5018,7 +5018,7 @@ color swatch of that color and to convert to all the other color models.
Discourse Server •
- Studio
+ Studio
diff --git a/www/command-line-options.html b/www/command-line-options.html
index d16b64535..67b956888 100644
--- a/www/command-line-options.html
+++ b/www/command-line-options.html
@@ -5986,7 +5986,7 @@ percentage, which defaults to 100 percent (no color change).
Discourse Server •
- Studio
+ Studio
diff --git a/www/command-line-processing.html b/www/command-line-processing.html
index d985f8279..1e197b76f 100644
--- a/www/command-line-processing.html
+++ b/www/command-line-processing.html
@@ -635,7 +635,7 @@ above.
Discourse Server •
- Studio
+ Studio
diff --git a/www/command-line-tools.html b/www/command-line-tools.html
index af6c91fb2..d84e406d0 100644
--- a/www/command-line-tools.html
+++ b/www/command-line-tools.html
@@ -142,7 +142,7 @@
Druckerei Online
ImageMagick includes a number of command-line utilities for manipulating images. Most of you are probably accustomed to editing images one at a time with a graphical user interface (GUI) with such programs as gimp or Photoshop. However, a GUI is not always convenient. Suppose you want to process an image dynamically from a web script or you want to apply the same operations to many images or repeat a specific operation at different times to the same or different image. For these types of operations, the command-line image processing utility is appropriate.
+
ImageMagick includes a number of command-line utilities for manipulating images. Most of you are probably accustomed to editing images one at a time with a graphical user interface (GUI) with such programs as gimp or Photoshop. However, a GUI is not always convenient. Suppose you want to process an image dynamically from a web script or you want to apply the same operations to many images or repeat a specific operation at different times to the same or different image. For these types of operations, the command-line image processing utility is appropriate.
The ImageMagick command-line tools exit with a status of 0 if the command line arguments have a proper syntax and no problems are encountered. Expect a descriptive message and an exit status of 1 if any exception occurs such as improper syntax, a problem reading or writing an image, or any other problem that prevents the command from completing successfully.
-
In the paragraphs below, find a short description for each command-line tool. Click on the program name to get details about the program usage and a list of command-line options that alters how the program behaves. If you are just getting acquainted with ImageMagick, start with the convert program. Be sure to peruse Anthony Thyssen's tutorial on how to use ImageMagick utilities to convert, compose, or edit images from the command-line.
+
In the paragraphs below, find a short description for each command-line tool. Click on the program name to get details about the program usage and a list of command-line options that alters how the program behaves. If you are just getting acquainted with ImageMagick, start with the convert program. Be sure to peruse Anthony Thyssen's tutorial on how to use ImageMagick utilities to convert, compose, or edit images from the command-line.
@@ -306,7 +306,7 @@
Discourse Server •
- Studio
+ Studio
diff --git a/www/contact.html b/www/contact.html
index 5a0e872b9..e833f7860 100644
--- a/www/contact.html
+++ b/www/contact.html
@@ -160,7 +160,7 @@
Contact the Development Team
-
Use this form to contact the ImageMagick Wizards for any of the issues listed below. You can expect a reply within 24-48 hours if your message is on topic and is a sponsorshp, license, or security issue. The bug and documentation issues are for reporting only. For any other issue, post your message to the discourse server.
+
Use this form to contact the ImageMagick Wizards for any of the issues listed below. You can expect a reply within 24-48 hours if your message is on topic and is a sponsorshp, license, or security issue. The bug and documentation issues are for reporting only. For any other issue, post your message to the discourse server.