From c3ebda260e2cdca5c0efa27addf0a66748d7c6fa Mon Sep 17 00:00:00 2001 From: cristy Date: Sun, 27 Jun 2010 17:11:57 +0000 Subject: [PATCH] --- ChangeLog | 2 + coders/djvu.c | 1 + index.html | 3 - magick/image-view.c | 260 +++++++--------- magick/image-view.h | 17 +- magick/thread-private.h | 2 +- wand/wand-view.c | 333 +++++++++----------- wand/wand-view.h | 29 +- www/ImageMagickObject.html | 2 +- www/advanced-unix-installation.html | 4 +- www/advanced-windows-installation.html | 2 +- www/animate.html | 2 +- www/api.html | 43 ++- www/api/attribute.html | 5 +- www/api/cache-view.html | 4 +- www/api/cache.html | 3 - www/api/color.html | 2 +- www/api/colormap.html | 2 +- www/api/compare.html | 2 +- www/api/composite.html | 2 +- www/api/constitute.html | 4 +- www/api/decorate.html | 5 +- www/api/display.html | 2 +- www/api/distort.html | 2 +- www/api/drawing-wand.html | 2 +- www/api/effect.html | 2 +- www/api/enhance.html | 2 +- www/api/exception.html | 2 +- www/api/feature.html | 4 +- www/api/fx.html | 2 +- www/api/image-view.html | 83 +---- www/api/list.html | 4 +- www/api/magick-deprecate.html | 408 ++++++++++++++++++++++++- www/api/magick-image.html | 2 +- www/api/magick-property.html | 4 +- www/api/magick.html | 2 +- www/api/memory.html | 4 +- www/api/module.html | 2 +- www/api/monitor.html | 4 +- www/api/montage.html | 5 +- www/api/morphology.html | 5 +- www/api/paint.html | 4 +- www/api/pixel-iterator.html | 2 +- www/api/pixel-wand.html | 4 +- www/api/profile.html | 2 +- www/api/property.html | 2 +- www/api/quantize.html | 3 + www/api/resize.html | 2 +- www/api/shear.html | 2 +- www/api/statistic.html | 3 - www/api/transform.html | 2 +- www/architecture.html | 4 +- www/binary-releases.html | 2 +- www/changelog.html | 2 +- www/cipher.html | 2 +- www/color.html | 2 +- www/command-line-options.html | 2 +- www/command-line-processing.html | 2 +- www/command-line-tools.html | 6 +- www/conjure.html | 4 +- www/contact.html | 4 +- www/convert.html | 4 +- www/download.html | 4 +- www/examples.html | 2 +- www/exception.html | 2 +- www/formats.html | 4 +- www/fx.html | 2 +- www/high-dynamic-range.html | 2 +- www/history.html | 2 +- www/import.html | 2 +- www/index.html | 3 - www/install-source.html | 2 +- www/license.html | 2 +- www/links.html | 98 +++--- www/magick-core.html | 28 +- www/magick-wand.html | 29 +- www/miff.html | 2 +- www/mirrors.html | 7 +- www/montage.html | 3 + www/perl-magick.html | 2 +- www/quantize.html | 2 +- www/resources.html | 2 +- www/sitemap.html | 53 ++-- www/sponsors.html | 5 +- www/stream.html | 2 +- www/subversion.html | 4 +- www/t-shirt.html | 5 +- 87 files changed, 919 insertions(+), 680 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3e7b668b3..96d6d5813 100644 --- a/ChangeLog +++ b/ChangeLog @@ -5,6 +5,8 @@ -background lightblue show:). * Do not annotate directory paths in ListFiles(). * Reset the image matte for png:color-type=2. + * Add the ImageView API. + * Fix DJVU coder to read one page (e.g. 'image.djvu[2]'). 2010-06-17 6.6.2-7 Cristy * Support new label:pointsize property. diff --git a/coders/djvu.c b/coders/djvu.c index 73234d929..6503f00cb 100644 --- a/coders/djvu.c +++ b/coders/djvu.c @@ -865,6 +865,7 @@ static Image *ReadDJVUImage(const ImageInfo *image_info, image=ReadOneDJVUImage(lc,i,image_info,exception); if (image == (Image *) NULL) break; + image->scene=i; AppendImageToList(&images,CloneImageList(image,exception)); if (image_info->number_scenes != 0) if (image->scene >= (image_info->scene+image_info->number_scenes-1)) diff --git a/index.html b/index.html index dcfcab793..3715571d0 100644 --- a/index.html +++ b/index.html @@ -141,9 +141,6 @@ - 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 diff --git a/www/animate.html b/www/animate.html index 5cd320e90..e0871220b 100644 --- a/www/animate.html +++ b/www/animate.html @@ -612,7 +612,7 @@ transparent, extract, background, or shape the alpha channel Discourse Server • - Studio + Studio   diff --git a/www/api.html b/www/api.html index cbd582106..caed8f90c 100644 --- a/www/api.html +++ b/www/api.html @@ -141,9 +141,6 @@ - @@ -160,7 +157,7 @@

Ada

-

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.

diff --git a/www/api/attribute.html b/www/api/attribute.html index c97b69bba..dd6d997ed 100644 --- a/www/api/attribute.html +++ b/www/api/attribute.html @@ -141,9 +141,6 @@ - @@ -330,7 +327,7 @@ _8c.html" target="source" name="SetImageChannelDepth">SetImageChannelDepth  --> Discourse Server • - Studio + Studio   diff --git a/www/api/cache-view.html b/www/api/cache-view.html index c781c02ea..12f0901f9 100644 --- a/www/api/cache-view.html +++ b/www/api/cache-view.html @@ -142,7 +142,7 @@ Druckerei Online @@ -576,7 +576,7 @@ _8c.html" target="source" name="SyncCacheViewAuthenticPixels">SyncCacheViewAuthe Discourse Server • - Studio + Studio   diff --git a/www/api/cache.html b/www/api/cache.html index c328f5ab7..199f4888c 100644 --- a/www/api/cache.html +++ b/www/api/cache.html @@ -141,9 +141,6 @@ - diff --git a/www/api/color.html b/www/api/color.html index efaa22b09..322f8b86a 100644 --- a/www/api/color.html +++ b/www/api/color.html @@ -368,7 +368,7 @@ _8c.html" target="source" name="QueryMagickColorname">QueryMagickColorname  --> Discourse Server • - Studio + Studio   diff --git a/www/api/colormap.html b/www/api/colormap.html index a23235881..3c6af74eb 100644 --- a/www/api/colormap.html +++ b/www/api/colormap.html @@ -204,7 +204,7 @@ _8c.html" target="source" name="CycleColormap">CycleColormap Discourse Server • - Studio + Studio   diff --git a/www/api/compare.html b/www/api/compare.html index 287133b07..5087367dc 100644 --- a/www/api/compare.html +++ b/www/api/compare.html @@ -325,7 +325,7 @@ _8c.html" target="source" name="SimilarityImage">SimilarityImage Discourse Server • - Studio + Studio   diff --git a/www/api/composite.html b/www/api/composite.html index 04e239ee6..75f98e476 100644 --- a/www/api/composite.html +++ b/www/api/composite.html @@ -232,7 +232,7 @@ _8c.html" target="source" name="TextureImage">TextureImage Discourse Server • - Studio + Studio   diff --git a/www/api/constitute.html b/www/api/constitute.html index 14eb4a59b..c01c87f06 100644 --- a/www/api/constitute.html +++ b/www/api/constitute.html @@ -142,7 +142,7 @@ Druckerei Online @@ -333,7 +333,7 @@ _8c.html" target="source" name="WriteImages">WriteImages Discourse Server • - Studio + Studio   diff --git a/www/api/decorate.html b/www/api/decorate.html index 389dc7bf5..720d9923e 100644 --- a/www/api/decorate.html +++ b/www/api/decorate.html @@ -141,9 +141,6 @@ - @@ -236,7 +233,7 @@ _8c.html" target="source" name="RaiseImage">RaiseImage Discourse Server • - Studio + Studio   diff --git a/www/api/display.html b/www/api/display.html index 38bceab8f..ecc321ed6 100644 --- a/www/api/display.html +++ b/www/api/display.html @@ -236,7 +236,7 @@ _8c.html" target="source" name="XDisplayBackgroundImage">XDisplayBackgroundImage Discourse Server • - Studio + Studio   diff --git a/www/api/distort.html b/www/api/distort.html index 11236f962..fcf6016b5 100644 --- a/www/api/distort.html +++ b/www/api/distort.html @@ -257,7 +257,7 @@ _8c.html" target="source" name="SparseColorImage">SparseColorImage Discourse Server • - Studio + Studio   diff --git a/www/api/drawing-wand.html b/www/api/drawing-wand.html index 22cd2f2d9..4e7488692 100644 --- a/www/api/drawing-wand.html +++ b/www/api/drawing-wand.html @@ -3067,7 +3067,7 @@ _8c.html" target="source" name="PushDrawingWand">PushDrawingWand Discourse Server • - Studio + Studio   diff --git a/www/api/effect.html b/www/api/effect.html index f5cdf5113..b9163e13d 100644 --- a/www/api/effect.html +++ b/www/api/effect.html @@ -142,7 +142,7 @@ Druckerei Online diff --git a/www/api/enhance.html b/www/api/enhance.html index f67b859f7..16525776a 100644 --- a/www/api/enhance.html +++ b/www/api/enhance.html @@ -142,7 +142,7 @@ Druckerei Online diff --git a/www/api/exception.html b/www/api/exception.html index 5c90e953e..33a70ea4d 100644 --- a/www/api/exception.html +++ b/www/api/exception.html @@ -465,7 +465,7 @@ _8c.html" target="source" name="ThrowException">ThrowException Discourse Server • - Studio + Studio   diff --git a/www/api/feature.html b/www/api/feature.html index c71c4b5a6..d07b78f8f 100644 --- a/www/api/feature.html +++ b/www/api/feature.html @@ -142,7 +142,7 @@ Druckerei Online @@ -193,7 +193,7 @@ _8c.html" target="source" name="GetImageChannelFeatures">GetImageChannelFeatures Discourse Server • - Studio + Studio   diff --git a/www/api/fx.html b/www/api/fx.html index 3e5a29fa5..2236831e1 100644 --- a/www/api/fx.html +++ b/www/api/fx.html @@ -717,7 +717,7 @@ _8c.html" target="source" name="WaveImage">WaveImage Discourse Server • - Studio + Studio   diff --git a/www/api/image-view.html b/www/api/image-view.html index 4c129beaf..399de4249 100644 --- a/www/api/image-view.html +++ b/www/api/image-view.html @@ -141,9 +141,6 @@ - @@ -152,7 +149,7 @@
- +

CloneImageView

@@ -194,7 +191,7 @@ _8c.html" target="source" name="DestroyImageView">DestroyImageView _8c.html" target="source" name="DuplexTransferImageViewIterator">DuplexTransferImageViewIterator
-

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:

@@ -289,15 +286,15 @@ _8c.html" target="source" name="GetImageViewException">GetImageViewException

GetImageViewHeight

+_8c.html" target="source" name="GetImageViewExtent">GetImageViewExtent
-

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:

@@ -328,7 +325,7 @@ _8c.html" target="source" name="GetImageViewImage">GetImageViewImage _8c.html" target="source" name="GetImageViewIterator">GetImageViewIterator
-

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:

@@ -390,60 +387,6 @@ _8c.html" target="source" name="GetImageViewVirtualPixels">GetImageViewVirtualPi

A description of each parameter follows:

-
image_view
-

    the image view.

- -
-

GetImageViewWidth

-
- -

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:

- -
image_view
-

    the image view.

- -
-

GetImageViewX

-
- -

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:

- -
image_view
-

    the image view.

- -
-

GetImageViewY

-
- -

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:

-
image_view

    the image view.

@@ -470,7 +413,7 @@ _8c.html" target="source" name="IsImageView">IsImageView _8c.html" target="source" name="NewImageView">NewImageView
-

NewImageView() returns a image view required for all other methods in the Pixel View API.

+

NewImageView() returns a image view required for all other methods in the Image View API.

The format of the NewImageView method is:

@@ -488,7 +431,7 @@ _8c.html" target="source" name="NewImageView">NewImageView _8c.html" target="source" name="NewImageViewRegion">NewImageViewRegion
-

NewImageViewRegion() returns a image view required for all other methods in the Pixel View API.

+

NewImageViewRegion() returns a image view required for all other methods in the Image View API.

The format of the NewImageViewRegion method is:

@@ -503,14 +446,14 @@ _8c.html" target="source" name="NewImageViewRegion">NewImageViewRegion

    the magick wand.

x,y,columns,rows
-

    These values define the perimeter of a region of pixel_wands view.

+

    These values define the perimeter of a extent of pixel_wands view.

SetImageViewIterator

-

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:

@@ -543,7 +486,7 @@ _8c.html" target="source" name="SetImageViewIterator">SetImageViewIteratorTransferImageViewIterator
-

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:

@@ -579,7 +522,7 @@ _8c.html" target="source" name="TransferImageViewIterator">TransferImageViewIter _8c.html" target="source" name="UpdateImageViewIterator">UpdateImageViewIterator
-

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:

diff --git a/www/api/list.html b/www/api/list.html index 50a9e0868..d1895c573 100644 --- a/www/api/list.html +++ b/www/api/list.html @@ -142,7 +142,7 @@ Druckerei Online
@@ -645,7 +645,7 @@ _8c.html" target="source" name="SplitImageList">SplitImageList Discourse Server • - Studio + Studio  
diff --git a/www/api/magick-deprecate.html b/www/api/magick-deprecate.html index e6a7438b8..bb46bd7cb 100644 --- a/www/api/magick-deprecate.html +++ b/www/api/magick-deprecate.html @@ -152,7 +152,7 @@
- +

MagickAverageImages

@@ -173,6 +173,270 @@ _8c.html" target="source" name="MagickAverageImages">MagickAverageImages

ClonePixelView

+
+ +

ClonePixelView() makes a copy of the specified pixel view.

+ +

The format of the ClonePixelView method is:

+ +
+  PixelView *ClonePixelView(const PixelView *pixel_view)
+
+ +

A description of each parameter follows:

+ +
pixel_view
+

    the pixel view.

+ +
+

DestroyPixelView

+
+ +

DestroyPixelView() deallocates memory associated with a pixel view.

+ +

The format of the DestroyPixelView method is:

+ +
+  PixelView *DestroyPixelView(PixelView *pixel_view,
+    const size_t number_wands,const size_t number_threads)
+
+ +

A description of each parameter follows:

+ +
pixel_view
+

    the pixel view.

+ +
number_wand
+

    the number of pixel wands.

+ +
number_threads
+

    number of threads.

+ +
+

DuplexTransferPixelViewIterator

+
+ +

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:

+ +
+  MagickBooleanType DuplexTransferPixelViewIterator(PixelView *source,
+    PixelView *duplex,PixelView *destination,
+    DuplexTransferPixelViewMethod transfer,void *context)
+
+ +

A description of each parameter follows:

+ +
source
+

    the source pixel view.

+ +
duplex
+

    the duplex pixel view.

+ +
destination
+

    the destination pixel view.

+ +
transfer
+

    the transfer callback method.

+ +
context
+

    the user defined context.

+ +
+

GetPixelViewException

+
+ +

GetPixelViewException() returns the severity, reason, and description of any error that occurs when utilizing a pixel view.

+ +

The format of the GetPixelViewException method is:

+ +
+  char *GetPixelViewException(const PixelWand *pixel_view,
+    ExceptionType *severity)
+
+ +

A description of each parameter follows:

+ +
pixel_view
+

    the pixel pixel_view.

+ +
severity
+

    the severity of the error is returned here.

+ +
+

GetPixelViewHeight

+
+ +

GetPixelViewHeight() returns the pixel view height.

+ +

The format of the GetPixelViewHeight method is:

+ +
+  size_t GetPixelViewHeight(const PixelView *pixel_view)
+
+ +

A description of each parameter follows:

+ +
pixel_view
+

    the pixel view.

+ +
+

GetPixelViewIterator

+
+ +

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.

+ +

The format of the GetPixelViewIterator method is:

+ +
+  MagickBooleanType GetPixelViewIterator(PixelView *source,
+    GetPixelViewMethod get,void *context)
+
+ +

A description of each parameter follows:

+ +
source
+

    the source pixel view.

+ +
get
+

    the get callback method.

+ +
context
+

    the user defined context.

+ +
+

GetPixelViewPixels

+
+ +

GetPixelViewPixels() returns the pixel view pixel_wands.

+ +

The format of the GetPixelViewPixels method is:

+ +
+  PixelWand *GetPixelViewPixels(const PixelView *pixel_view)
+
+ +

A description of each parameter follows:

+ +
pixel_view
+

    the pixel view.

+ +
+

GetPixelViewWand

+
+ +

GetPixelViewWand() returns the magick wand associated with the pixel view.

+ +

The format of the GetPixelViewWand method is:

+ +
+  MagickWand *GetPixelViewWand(const PixelView *pixel_view)
+
+ +

A description of each parameter follows:

+ +
pixel_view
+

    the pixel view.

+ +
+

GetPixelViewWidth

+
+ +

GetPixelViewWidth() returns the pixel view width.

+ +

The format of the GetPixelViewWidth method is:

+ +
+  size_t GetPixelViewWidth(const PixelView *pixel_view)
+
+ +

A description of each parameter follows:

+ +
pixel_view
+

    the pixel view.

+ +
+

GetPixelViewX

+
+ +

GetPixelViewX() returns the pixel view x offset.

+ +

The format of the GetPixelViewX method is:

+ +
+  ssize_t GetPixelViewX(const PixelView *pixel_view)
+
+ +

A description of each parameter follows:

+ +
pixel_view
+

    the pixel view.

+ +
+

GetPixelViewY

+
+ +

GetPixelViewY() returns the pixel view y offset.

+ +

The format of the GetPixelViewY method is:

+ +
+  ssize_t GetPixelViewY(const PixelView *pixel_view)
+
+ +

A description of each parameter follows:

+ +
pixel_view
+

    the pixel view.

+ +
+

IsPixelView

+
+ +

IsPixelView() returns MagickTrue if the the parameter is verified as a pixel view container.

+ +

The format of the IsPixelView method is:

+ +
+  MagickBooleanType IsPixelView(const PixelView *pixel_view)
+
+ +

A description of each parameter follows:

+ +
pixel_view
+

    the pixel view.

+ +
+

MagickClipPathImage

@@ -929,6 +1193,46 @@ _8c.html" target="source" name="MagickWriteImageBlob">MagickWriteImageBlob

NewPixelView

+
+ +

NewPixelView() returns a pixel view required for all other methods in the Pixel View API.

+ +

The format of the NewPixelView method is:

+ +
+  PixelView *NewPixelView(MagickWand *wand)
+
+ +

A description of each parameter follows:

+ +
wand
+

    the wand.

+ +
+

NewPixelViewRegion

+
+ +

NewPixelViewRegion() returns a pixel view required for all other methods in the Pixel View API.

+ +

The format of the NewPixelViewRegion method is:

+ +
+  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:

+ +
wand
+

    the magick wand.

+ +
x,y,columns,rows
+

    These values define the perimeter of a region of pixel_wands view.

+ +
+

PixelGetNextRow

@@ -972,6 +1276,108 @@ _8c.html" target="source" name="PixelIteratorGetException">PixelIteratorGetExcep

    the severity of the error is returned here.

+

SetPixelViewIterator

+
+ +

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.

+ +

The format of the SetPixelViewIterator method is:

+ +
+  MagickBooleanType SetPixelViewIterator(PixelView *destination,
+    SetPixelViewMethod set,void *context)
+
+ +

A description of each parameter follows:

+ +
destination
+

    the pixel view.

+ +
set
+

    the set callback method.

+ +
context
+

    the user defined context.

+ +
+

TransferPixelViewIterator

+
+ +

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:

+ +
+  MagickBooleanType TransferPixelViewIterator(PixelView *source,
+    PixelView *destination,TransferPixelViewMethod transfer,void *context)
+
+ +

A description of each parameter follows:

+ +
source
+

    the source pixel view.

+ +
destination
+

    the destination pixel view.

+ +
transfer
+

    the transfer callback method.

+ +
context
+

    the user defined context.

+ +
+

UpdatePixelViewIterator

+
+ +

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:

+ +
+  MagickBooleanType UpdatePixelViewIterator(PixelView *source,
+    UpdatePixelViewMethod update,void *context)
+
+ +

A description of each parameter follows:

+ +
source
+

    the source pixel view.

+ +
update
+

    the update callback method.

+ +
context
+

    the user defined context.

+ +
diff --git a/www/api/magick-image.html b/www/api/magick-image.html index 26f9fa9fa..45ba6a64a 100644 --- a/www/api/magick-image.html +++ b/www/api/magick-image.html @@ -6462,7 +6462,7 @@ _8c.html" target="source" name="MagickWriteImagesFile">MagickWriteImagesFile Discourse Server • - Studio + Studio  
diff --git a/www/api/magick-property.html b/www/api/magick-property.html index 6867b036b..b5bede313 100644 --- a/www/api/magick-property.html +++ b/www/api/magick-property.html @@ -142,7 +142,7 @@ Druckerei Online
@@ -1627,7 +1627,7 @@ _8c.html" target="source" name="MagickSetType">MagickSetType Discourse Server • - Studio + Studio   diff --git a/www/api/magick.html b/www/api/magick.html index 8a0ecab34..3bdc66a48 100644 --- a/www/api/magick.html +++ b/www/api/magick.html @@ -142,7 +142,7 @@ Druckerei Online diff --git a/www/api/memory.html b/www/api/memory.html index fff00669f..f6e00a766 100644 --- a/www/api/memory.html +++ b/www/api/memory.html @@ -142,7 +142,7 @@ Druckerei Online @@ -404,7 +404,7 @@ _8c.html" target="source" name="SetMagickMemoryMethods">SetMagickMemoryMethods  --> Discourse Server • - Studio + Studio   diff --git a/www/api/module.html b/www/api/module.html index 8a0cc0009..6d723498c 100644 --- a/www/api/module.html +++ b/www/api/module.html @@ -516,7 +516,7 @@ _8c.html" target="source" name="UnregisterModule">UnregisterModule Discourse Server • - Studio + Studio   diff --git a/www/api/monitor.html b/www/api/monitor.html index ccd302c3b..d7415bc15 100644 --- a/www/api/monitor.html +++ b/www/api/monitor.html @@ -142,7 +142,7 @@ Druckerei Online @@ -227,7 +227,7 @@ _8c.html" target="source" name="SetImageInfoProgressMonitor">SetImageInfoProgres Discourse Server • - Studio + Studio   diff --git a/www/api/montage.html b/www/api/montage.html index e25f3d507..ecd4bcdda 100644 --- a/www/api/montage.html +++ b/www/api/montage.html @@ -141,9 +141,6 @@ - @@ -253,7 +250,7 @@ _8c.html" target="source" name="MontageImageList">MontageImageList Discourse Server • - Studio + Studio   diff --git a/www/api/morphology.html b/www/api/morphology.html index f5ae4aa80..9289bea9b 100644 --- a/www/api/morphology.html +++ b/www/api/morphology.html @@ -141,6 +141,9 @@ + @@ -639,7 +642,7 @@ _8c.html" target="source" name="ZeroKernelNans">ZeroKernelNans Discourse Server • - Studio + Studio   diff --git a/www/api/paint.html b/www/api/paint.html index e8b3b684e..77f92c05f 100644 --- a/www/api/paint.html +++ b/www/api/paint.html @@ -142,7 +142,7 @@ Druckerei Online @@ -326,7 +326,7 @@ _8c.html" target="source" name="TransparentPaintImageChroma">TransparentPaintIma Discourse Server • - Studio + Studio   diff --git a/www/api/pixel-iterator.html b/www/api/pixel-iterator.html index 0b8ed2dc8..82869f2b2 100644 --- a/www/api/pixel-iterator.html +++ b/www/api/pixel-iterator.html @@ -506,7 +506,7 @@ _8c.html" target="source" name="PixelSyncIterator">PixelSyncIterator Discourse Server • - Studio + Studio   diff --git a/www/api/pixel-wand.html b/www/api/pixel-wand.html index 11f213dae..6b94b9bf8 100644 --- a/www/api/pixel-wand.html +++ b/www/api/pixel-wand.html @@ -142,7 +142,7 @@ Druckerei Online @@ -1397,7 +1397,7 @@ _8c.html" target="source" name="PixelSetYellowQuantum">PixelSetYellowQuantum Discourse Server • - Studio + Studio   diff --git a/www/api/profile.html b/www/api/profile.html index 7ee76810d..7f0bf79c8 100644 --- a/www/api/profile.html +++ b/www/api/profile.html @@ -142,7 +142,7 @@ Druckerei Online diff --git a/www/api/property.html b/www/api/property.html index edcceccc6..d03e1de11 100644 --- a/www/api/property.html +++ b/www/api/property.html @@ -397,7 +397,7 @@ _8c.html" target="source" name="SetImageProperty">SetImageProperty Discourse Server • - Studio + Studio   diff --git a/www/api/quantize.html b/www/api/quantize.html index 8383b5666..44c060f96 100644 --- a/www/api/quantize.html +++ b/www/api/quantize.html @@ -141,6 +141,9 @@ + diff --git a/www/api/resize.html b/www/api/resize.html index bc1bb45de..b394e8c6b 100644 --- a/www/api/resize.html +++ b/www/api/resize.html @@ -452,7 +452,7 @@ _8c.html" target="source" name="ZoomImage">ZoomImage Discourse Server • - Studio + Studio   diff --git a/www/api/shear.html b/www/api/shear.html index d0b19d1eb..6c9d6bd21 100644 --- a/www/api/shear.html +++ b/www/api/shear.html @@ -142,7 +142,7 @@ Druckerei Online diff --git a/www/api/statistic.html b/www/api/statistic.html index 2cc3bccef..4e478a4c3 100644 --- a/www/api/statistic.html +++ b/www/api/statistic.html @@ -141,9 +141,6 @@ - diff --git a/www/api/transform.html b/www/api/transform.html index c208376a3..90dc5ae4e 100644 --- a/www/api/transform.html +++ b/www/api/transform.html @@ -497,7 +497,7 @@ _8c.html" target="source" name="TrimImage">TrimImage Discourse Server • - Studio + Studio   diff --git a/www/architecture.html b/www/architecture.html index 0c0e7b243..dddf3f8b4 100644 --- a/www/architecture.html +++ b/www/architecture.html @@ -142,7 +142,7 @@ Druckerei Online @@ -1332,7 +1332,7 @@ ModuleExport unsigned long analyzeImage(Image **images,const int argc, Discourse Server • - Studio + Studio   diff --git a/www/binary-releases.html b/www/binary-releases.html index acb5c0f04..7d1022feb 100644 --- a/www/binary-releases.html +++ b/www/binary-releases.html @@ -373,7 +373,7 @@ Discourse Server • - Studio + Studio   diff --git a/www/changelog.html b/www/changelog.html index a9f9e465c..0d8ecba68 100644 --- a/www/changelog.html +++ b/www/changelog.html @@ -142,7 +142,7 @@ Druckerei Online 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 @@ -154,11 +154,11 @@ -

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.

animate

diff --git a/www/conjure.html b/www/conjure.html index ceec76e19..2501d0fba 100644 --- a/www/conjure.html +++ b/www/conjure.html @@ -143,7 +143,7 @@ Druckerei Online
@@ -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.

Contact the Wizards

Enter this code, @@ -216,7 +216,7 @@ Discourse Server • - Studio + Studio   diff --git a/www/convert.html b/www/convert.html index 86d093f2e..fccc77fa5 100644 --- a/www/convert.html +++ b/www/convert.html @@ -143,7 +143,7 @@ Druckerei Online

@@ -1280,7 +1280,7 @@ transparent, extract, background, or shape the alpha channel Discourse Server • - Studio + Studio   diff --git a/www/download.html b/www/download.html index c8382b5ab..6c46f7eee 100644 --- a/www/download.html +++ b/www/download.html @@ -142,7 +142,7 @@ Druckerei Online @@ -204,7 +204,7 @@ Discourse Server • - Studio + Studio   diff --git a/www/examples.html b/www/examples.html index 25fb86e51..e7f16f26e 100644 --- a/www/examples.html +++ b/www/examples.html @@ -152,7 +152,7 @@
-

Here are a few examples of what you can do with an image using ImageMagick from the command line, a program interface, or script. You can generate this image yourself with this PerlMagick script, examples.pl.


+

Here are a few examples of what you can do with an image using ImageMagick from the command line, a program interface, or script. You can generate this image yourself with this PerlMagick script, examples.pl.


[ImageMagick] diff --git a/www/exception.html b/www/exception.html index e33c63d69..1ab9cdb70 100644 --- a/www/exception.html +++ b/www/exception.html @@ -142,7 +142,7 @@ Druckerei Online
diff --git a/www/formats.html b/www/formats.html index e50a865bf..6f9f943b0 100644 --- a/www/formats.html +++ b/www/formats.html @@ -143,7 +143,7 @@ Druckerei Online @@ -1768,7 +1768,7 @@ convert \( -size 15x15 xc:black xc:white -append \) \ Discourse Server • - Studio + Studio   diff --git a/www/fx.html b/www/fx.html index c367d7b1c..c6ce826c6 100644 --- a/www/fx.html +++ b/www/fx.html @@ -143,7 +143,7 @@ Druckerei Online diff --git a/www/high-dynamic-range.html b/www/high-dynamic-range.html index d712577e8..1f0e10050 100644 --- a/www/high-dynamic-range.html +++ b/www/high-dynamic-range.html @@ -191,7 +191,7 @@ Discourse Server • - Studio + Studio   diff --git a/www/history.html b/www/history.html index a9b5a1cda..0b08dcdc0 100644 --- a/www/history.html +++ b/www/history.html @@ -164,7 +164,7 @@ I swear by my life and my love of it that I will never live for the sake of anot

The next generation of ImageMagick, version 5, started when Bob Friesenhahn contacted me and suggested I improve the application programming interface so users could leverage the image-processing algorithms from other languages or scripts. Bob also wrote a C++ wrapper for ImageMagick called Magick++, and began contributing enhancements such as the module loader facility, automatic file identification, and test suites. In the mean-time, the project picked up a few other notable contributors: Glenn Randers-Pehrson, William Radcliffe, and Leonard Rosenthol. By now, ImageMagick was being utilized by tens of thousands of users, who reacted gruffly when a new release broke an existing API call or script. The other members of the group wanted to freeze the API and command line but I was not quite ready, since ImageMagick was not quite what I had envisioned it could be. Bob and the others created a fork of ImageMagick while I continued to develop ImageMagick.

-

I did not work alone for long. Anthony Thyssen contacted me about deficiencies in the ImageMagick command line programs. He pointed out that the command line was confusing when dealing with more than one image. He suggested an orderly, well-defined method for dealing with the command line, and this became ImageMagick version 6 (the current release). His efforts are detailed on his web pages, Examples of ImageMagick Usage. I highly recommend that you peruse his site. He has illustrated the power of ImageMagick in ways that even I did not know were possible.

+

I did not work alone for long. Anthony Thyssen contacted me about deficiencies in the ImageMagick command line programs. He pointed out that the command line was confusing when dealing with more than one image. He suggested an orderly, well-defined method for dealing with the command line, and this became ImageMagick version 6 (the current release). His efforts are detailed on his web pages, Examples of ImageMagick Usage. I highly recommend that you peruse his site. He has illustrated the power of ImageMagick in ways that even I did not know were possible.

Another notable contributer, Fred Weinhaus, makes available a plethora of command-line scripts that perform geometric transforms, blurs, sharpens, edging, noise removal, and color manipulations.

diff --git a/www/import.html b/www/import.html index b4f637fef..a7da3d78c 100644 --- a/www/import.html +++ b/www/import.html @@ -143,7 +143,7 @@ Druckerei Online diff --git a/www/index.html b/www/index.html index 828da9cd6..d8cc37766 100644 --- a/www/index.html +++ b/www/index.html @@ -141,9 +141,6 @@ - diff --git a/www/install-source.html b/www/install-source.html index 2642f5f8c..428f21546 100644 --- a/www/install-source.html +++ b/www/install-source.html @@ -223,7 +223,7 @@ to compile the program and on completion run the program.

Discourse Server • - Studio + Studio   diff --git a/www/license.html b/www/license.html index 917ec6849..91c2341e6 100644 --- a/www/license.html +++ b/www/license.html @@ -142,7 +142,7 @@ Druckerei Online diff --git a/www/links.html b/www/links.html index c385ce415..eb03896cf 100644 --- a/www/links.html +++ b/www/links.html @@ -142,7 +142,7 @@ Druckerei Online @@ -160,23 +160,23 @@

Command-line Tutorials

@@ -184,18 +184,18 @@
@@ -203,10 +203,10 @@
@@ -214,24 +214,24 @@

ImageMagick Book Review

Mailing List Archives

@@ -239,13 +239,13 @@
Denmark
-
http://imagemagick.europnews.de

+
http://imagemagick.europnews.de

Germany
-
http://imagemagick.linux-mirror.org

+
http://imagemagick.linux-mirror.org

Ireland
-
http://imagemagick.oss-mirror.org

+
http://imagemagick.oss-mirror.org

United States
-
http://www.imagemagick.org
+
http://www.imagemagick.org
@@ -253,16 +253,16 @@
    -
    G'MIC: convert, manipulate and visualize generic 1D/2D/3D multi-spectral image files
    -
    Image Commander: bulk picture processing with a GUI
    +
    G'MIC: convert, manipulate and visualize generic 1D/2D/3D multi-spectral image files
    +
    Image Commander: bulk picture processing with a GUI

Other Projects Hosted by ImageMagick Studio

@@ -272,7 +272,7 @@ Discourse Server • - Studio + Studio   diff --git a/www/magick-core.html b/www/magick-core.html index 75782c378..7b3122bbe 100644 --- a/www/magick-core.html +++ b/www/magick-core.html @@ -143,7 +143,7 @@ Druckerei Online @@ -291,12 +291,15 @@ #include <magick/MagickCore.h> static MagickBooleanType SigmoidalContrast(ImageView *contrast_view, - void *context) + const ssize_t y,const int id,void *context) { #define QuantumScale ((MagickRealType) 1.0/(MagickRealType) QuantumRange) #define SigmoidalContrast(x) \ (QuantumRange*(1.0/(1+exp(10.0*(0.5-QuantumScale*x)))-0.0066928509)*1.0092503) + RectangleInfo + extent; + register IndexPacket *indexes; @@ -306,8 +309,9 @@ static MagickBooleanType SigmoidalContrast(ImageView *contrast_view, register ssize_t x; + extent=GetImageViewExtent(contrast_view); pixels=GetImageViewAuthenticPixels(contrast_view); - for (x=0; x < (ssize_t) GetImageViewWidth(contrast_view); x++) + 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)); @@ -316,7 +320,7 @@ static MagickBooleanType SigmoidalContrast(ImageView *contrast_view, } indexes=GetImageViewAuthenticIndexes(contrast_view); if (indexes != (IndexPacket *) NULL) - for (x=0; x < (ssize_t) GetImageViewWidth(contrast_view); x++) + for (x=0; x < (ssize_t) (extent.width-extent.x); x++) indexes[x]=(IndexPacket) RoundToQuantum(SigmoidalContrast(indexes[x])); return(MagickTrue); } @@ -329,9 +333,19 @@ int main(int argc,char **argv) CatchException(exception); \ if (contrast_image != (Image *) NULL) \ contrast_image=DestroyImage(contrast_image); \ - exception=DestroyExceptionInfo(exception); \ - image_info=DestroyImageInfo(image_info); \ - MagickCoreTerminus(); \ + exit(-1); \ +} +#define ThrowViewException(view) \ +{ \ + char \ + *description; \ + \ + ExceptionType \ + severity; \ + \ + description=GetImageViewException(view,&severity); \ + (void) fprintf(stderr,"%s %s %lu %s\n",GetMagickModule(),description); \ + description=DestroyString(description); \ exit(-1); \ } diff --git a/www/magick-wand.html b/www/magick-wand.html index 48e7e0f24..f3ab6fe70 100644 --- a/www/magick-wand.html +++ b/www/magick-wand.html @@ -357,12 +357,15 @@ int main(int argc,char **argv) #include <wand/MagickWand.h> static MagickBooleanType SigmoidalContrast(WandView *pixel_view, - void *context) + const ssize_t y,const int id,void *context) { #define QuantumScale ((MagickRealType) 1.0/(MagickRealType) QuantumRange) #define SigmoidalContrast(x) \ (QuantumRange*(1.0/(1+exp(10.0*(0.5-QuantumScale*x)))-0.0066928509)*1.0092503) + RectangleInfo + extent; + MagickPixelPacket pixel; @@ -372,8 +375,9 @@ static MagickBooleanType SigmoidalContrast(WandView *pixel_view, register long x; + extent=GetWandViewExtent(contrast_view); pixels=GetWandViewPixels(contrast_view); - for (x=0; x < (long) GetWandViewWidth(contrast_view); x++) + for (x=0; x < (long) (extent.width-extent.height); x++) { PixelGetMagickColor(pixels[x],&pixel); pixel.red=SigmoidalContrast(pixel.red); @@ -387,20 +391,27 @@ static MagickBooleanType SigmoidalContrast(WandView *pixel_view, int main(int argc,char **argv) { +#define ThrowViewException(view) \ +{ \ + description=GetWandViewException(view,&severity); \ + (void) fprintf(stderr,"%s %s %lu %s\n",GetMagickModule(),description); \ + description=(char *) MagickRelinquishMemory(description); \ + exit(-1); \ +} #define ThrowWandException(wand) \ { \ - char \ - *description; \ - \ - ExceptionType \ - severity; \ - \ - description=MagickGetException(wand,&severity); \ + description=MagickGetException(wand,&severity); \ (void) fprintf(stderr,"%s %s %lu %s\n",GetMagickModule(),description); \ description=(char *) MagickRelinquishMemory(description); \ exit(-1); \ } + char + *description; + + ExceptionType + severity; + MagickBooleanType status; diff --git a/www/miff.html b/www/miff.html index f20f52113..3a7a83014 100644 --- a/www/miff.html +++ b/www/miff.html @@ -308,7 +308,7 @@ or fewer colors in the image, each byte of image data contains an index value. I Discourse Server • - Studio + Studio   diff --git a/www/mirrors.html b/www/mirrors.html index 10bbc85b9..3d1a94db5 100644 --- a/www/mirrors.html +++ b/www/mirrors.html @@ -141,9 +141,6 @@ - @@ -155,9 +152,9 @@

The ImageMagick web site is available from a variety of web mirrors around the world listed below.

France
-
http://imagemagick.europnews.de/

+
http://imagemagick.europnews.de/

Unites States
-
http://www.imagemagick.org/
+
http://www.imagemagick.org/

If you want to add a new web-site mirror, please contact us.

diff --git a/www/montage.html b/www/montage.html index f1ba869ed..67d826d2c 100644 --- a/www/montage.html +++ b/www/montage.html @@ -142,6 +142,9 @@ + diff --git a/www/perl-magick.html b/www/perl-magick.html index 0482fb772..0fb09d897 100644 --- a/www/perl-magick.html +++ b/www/perl-magick.html @@ -142,7 +142,7 @@ Druckerei Online diff --git a/www/quantize.html b/www/quantize.html index d67be5c2a..5af83b8b1 100644 --- a/www/quantize.html +++ b/www/quantize.html @@ -142,7 +142,7 @@ Druckerei Online diff --git a/www/resources.html b/www/resources.html index 981b1fb51..cd18481db 100644 --- a/www/resources.html +++ b/www/resources.html @@ -407,7 +407,7 @@ file or data stream.

Discourse Server • - Studio + Studio   diff --git a/www/sitemap.html b/www/sitemap.html index 84c2ac9a8..de81e717b 100644 --- a/www/sitemap.html +++ b/www/sitemap.html @@ -141,9 +141,6 @@ - @@ -163,7 +160,7 @@
Introduction: convert, edit, and compose images from the command-line or program interface.
Examples of ImageMagick usage: a few examples that show what you can do with an image using ImageMagick.
-
Anthony Thyssen's examples of ImageMagick usage: a comprehensive tutorial of using ImageMagick from the command line.
+
Anthony Thyssen's examples of ImageMagick usage: a comprehensive tutorial of using ImageMagick from the command line.
Color names: how to specify a color name, a hex color, or a numerical RGB, RGBA, HSL, HSLA, CMYK, or CMYKA color.
Resources: ImageMagick depends on external resources including configuration files, loadable modules, fonts, and environment variables.
Architecture: get to know more about the software and algorithms behind ImageMagick.
@@ -177,12 +174,12 @@
Download ImageMagick: ImageMagick source and binary distributions are available from a variety of FTP and Web mirrors.
@@ -221,7 +218,7 @@
Command line processing: the anatomy of the command line.
Command line options: annotated list of all options that can appear on the command-line.
Fx: apply a mathematical expression to an image or image channels.
-
Fred's ImageMagick Scripts: a plethora of command-line scripts that perform geometric transforms, blurs, sharpens, edging, noise removal, and color manipulations.
+
Fred's ImageMagick Scripts: a plethora of command-line scripts that perform geometric transforms, blurs, sharpens, edging, noise removal, and color manipulations.
@@ -231,21 +228,21 @@
Program interfaces: application programming interfaces.
    -
    ChMagick: is a Ch an embeddable MagickCore C/C++ interpreter for cross-platform scripting.
    -
    CL-Magick: provides a Common Lisp interface to the ImageMagick library.
    -
    G2F: implements an Ada 95 binding to a subset of the low-level MagickCore library.
    -
    Magick++: provides an object-oriented C++ interface to ImageMagick.
    -
    IMagick: is a native PHP extension to create and modify images using the ImageMagick API.
    -
    JMagick: provides an object-oriented Java interface to ImageMagick.
    +
    ChMagick: is a Ch an embeddable MagickCore C/C++ interpreter for cross-platform scripting.
    +
    CL-Magick: provides a Common Lisp interface to the ImageMagick library.
    +
    G2F: implements an Ada 95 binding to a subset of the low-level MagickCore library.
    +
    Magick++: provides an object-oriented C++ interface to ImageMagick.
    +
    IMagick: is a native PHP extension to create and modify images using the ImageMagick API.
    +
    JMagick: provides an object-oriented Java interface to ImageMagick.
    MagickCore: C API, recommended for wizard-level developers.
    MagickWand: convert, compose, and edit images from the C language.
    -
    MagickWand for PHP: a native PHP-extension to the ImageMagick MagickWand API.
    -
    nMagick: is a port of the ImageMagick library to the haXe and Neko platforms.
    -
    PascalMagick: a Pascal binding for the MagickWand API and also the low-level MagickCore library.
    +
    MagickWand for PHP: a native PHP-extension to the ImageMagick MagickWand API.
    +
    nMagick: is a port of the ImageMagick library to the haXe and Neko platforms.
    +
    PascalMagick: a Pascal binding for the MagickWand API and also the low-level MagickCore library.
    PerlMagick: convert, compose, and edit images from the Perl language.
    -
    PythonMagick: an object-oriented Python interface to ImageMagick.
    -
    RMagick: is an interface between the Ruby programming language and ImageMagick.
    -
    TclMagick: a native Tcl-extension to the ImageMagick MagickWand API.
    +
    PythonMagick: an object-oriented Python interface to ImageMagick.
    +
    RMagick: is an interface between the Ruby programming language and ImageMagick.
    +
    TclMagick: a native Tcl-extension to the ImageMagick MagickWand API.
@@ -265,8 +262,8 @@
-
Definitive Guide to ImageMagick: this book explains ImageMagick in a practical, learn-by-example fashion.
-
ImageMagick Tricks: this book is packed with examples of photo manipulations, logo creation, animations, and complete web projects.
+
Definitive Guide to ImageMagick: this book explains ImageMagick in a practical, learn-by-example fashion.
+
ImageMagick Tricks: this book is packed with examples of photo manipulations, logo creation, animations, and complete web projects.
Discourse server: get help from fellow ImageMagick users and developers, post to these forums.
Contact the Wizards: for bug reports (only if you do not want to sign up to the discourse server), a source or documentation patch, a security or license issue, or if you want to be a sponsor of the ImageMagick project.
@@ -276,7 +273,7 @@
-
Report bugs and vulnerabilities: our highest priority is to fix security defects and bug reports, usually within 48 hours of your report. The bug discourse server requires that you register. If you do not want to register, you can contact the ImageMagick developers with a convenient web form.
+
Report bugs and vulnerabilities: our highest priority is to fix security defects and bug reports, usually within 48 hours of your report. The bug discourse server requires that you register. If you do not want to register, you can contact the ImageMagick developers with a convenient web form.
Sponsor ImageMagick: contribute bug fixes, enhancements, hardware, funds, etc. to ensure the ImageMagick project thrives.
ImageMagick t-shirt: donate $25 USD and we acknowledge your gift with a logoed t-shirt.
@@ -302,8 +299,8 @@

Technology Sandbox

-
Fourier Transform Processing With ImageMagick
-
ImageMagick v6 Examples -- Fourier Transforms
+
Fourier Transform Processing With ImageMagick
+
ImageMagick v6 Examples -- Fourier Transforms
@@ -313,7 +310,7 @@ Discourse Server • - Studio + Studio   diff --git a/www/sponsors.html b/www/sponsors.html index 72d4cb013..be448be04 100644 --- a/www/sponsors.html +++ b/www/sponsors.html @@ -141,6 +141,9 @@ + @@ -236,7 +239,7 @@ Discourse Server • - Studio + Studio   diff --git a/www/stream.html b/www/stream.html index ad55ca6e7..df5b505f0 100644 --- a/www/stream.html +++ b/www/stream.html @@ -143,7 +143,7 @@ Druckerei Online diff --git a/www/subversion.html b/www/subversion.html index dd15baec5..1377a83c0 100644 --- a/www/subversion.html +++ b/www/subversion.html @@ -142,7 +142,7 @@ Druckerei Online @@ -176,7 +176,7 @@ ImageMagick-6.6.2

Discourse Server • - Studio + Studio   diff --git a/www/t-shirt.html b/www/t-shirt.html index 6e791c784..a97dc7ee7 100644 --- a/www/t-shirt.html +++ b/www/t-shirt.html @@ -141,9 +141,6 @@ - @@ -191,7 +188,7 @@ Discourse Server • - Studio + Studio   -- 2.50.1