From f05d4947caf1bc27fbec041eb37c474a80c83c0b Mon Sep 17 00:00:00 2001 From: cristy Date: Sat, 17 Mar 2012 16:26:09 +0000 Subject: [PATCH] --- MagickCore/cache-view.c | 58 ++++++++++++++++++++++++++++++++++++++++- MagickCore/cache-view.h | 6 +++-- MagickCore/cache.h | 8 +++--- MagickCore/channel.c | 2 ++ MagickCore/display.c | 32 ++++------------------- MagickCore/draw.c | 18 ++----------- MagickCore/fx.c | 9 +------ MagickCore/xwindow.c | 26 +++--------------- PerlMagick/Magick.xs | 44 ++++++------------------------- coders/stegano.c | 12 +++------ 10 files changed, 90 insertions(+), 125 deletions(-) diff --git a/MagickCore/cache-view.c b/MagickCore/cache-view.c index baa6ada7c..c088696cb 100644 --- a/MagickCore/cache-view.c +++ b/MagickCore/cache-view.c @@ -704,7 +704,7 @@ MagickExport MagickBooleanType GetOneCacheViewVirtualPixel( const int id = GetOpenMPThreadId(); - const Quantum + register const Quantum *p; register ssize_t @@ -746,6 +746,62 @@ MagickExport MagickBooleanType GetOneCacheViewVirtualPixel( % % % % % % +% G e t O n e C a c h e V i e w V i r t u a l P i x e l I n f o % +% % +% % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% GetOneCacheViewVirtualPixelInfo() returns a single pixel at the specified +% (x,y) location. The image background color is returned if an error occurs. +% If you plan to modify the pixel, use GetOneCacheViewAuthenticPixel() instead. +% +% The format of the GetOneCacheViewVirtualPixelInfo method is: +% +% MagickBooleanType GetOneCacheViewVirtualPixelInfo( +% const CacheView *cache_view,const ssize_t x,const ssize_t y, +% PixelInfo *pixel,ExceptionInfo *exception) +% +% A description of each parameter follows: +% +% o cache_view: the cache view. +% +% o x,y: These values define the offset of the pixel. +% +% o pixel: return a pixel at the specified (x,y) location. +% +% o exception: return any errors or warnings in this structure. +% +*/ +MagickExport MagickBooleanType GetOneCacheViewVirtualPixelInfo( + const CacheView *cache_view,const ssize_t x,const ssize_t y,PixelInfo *pixel, + ExceptionInfo *exception) +{ + const int + id = GetOpenMPThreadId(); + + register const Quantum + *p; + + assert(cache_view != (CacheView *) NULL); + assert(cache_view->signature == MagickSignature); + assert(id < (int) cache_view->number_threads); + (void) memset(pixel,0,MaxPixelChannels*sizeof(*pixel)); + p=GetVirtualPixelsFromNexus(cache_view->image, + cache_view->virtual_pixel_method,x,y,1,1,cache_view->nexus_info[id], + exception); + GetPixelInfo(cache_view->image,pixel); + if (p == (const Quantum *) NULL) + return(MagickFalse); + GetPixelInfoPixel(cache_view->image,p,pixel); + return(MagickTrue); +} + +/* +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% % +% % % G e t O n e C a c h e V i e w V i r t u a l P i x e l % % % % % diff --git a/MagickCore/cache-view.h b/MagickCore/cache-view.h index a3782d361..dd4e6ba2e 100644 --- a/MagickCore/cache-view.h +++ b/MagickCore/cache-view.h @@ -68,12 +68,14 @@ extern MagickExport const void *GetCacheViewVirtualMetacontent(const CacheView *); extern MagickExport MagickBooleanType - GetOneCacheViewVirtualPixel(const CacheView *,const ssize_t,const ssize_t, + GetOneCacheViewAuthenticPixel(const CacheView *,const ssize_t,const ssize_t, Quantum *,ExceptionInfo *), GetOneCacheViewVirtualMethodPixel(const CacheView *,const VirtualPixelMethod, const ssize_t,const ssize_t,Quantum *,ExceptionInfo *), - GetOneCacheViewAuthenticPixel(const CacheView *,const ssize_t,const ssize_t, + GetOneCacheViewVirtualPixel(const CacheView *,const ssize_t,const ssize_t, Quantum *,ExceptionInfo *), + GetOneCacheViewVirtualPixelInfo(const CacheView *,const ssize_t,const ssize_t, + PixelInfo *,ExceptionInfo *), SetCacheViewStorageClass(CacheView *,const ClassType,ExceptionInfo *), SetCacheViewVirtualPixelMethod(CacheView *,const VirtualPixelMethod), SyncCacheViewAuthenticPixels(CacheView *,ExceptionInfo *) magick_hot_spot; diff --git a/MagickCore/cache.h b/MagickCore/cache.h index 49fd67310..6b1e5d04e 100644 --- a/MagickCore/cache.h +++ b/MagickCore/cache.h @@ -33,12 +33,12 @@ extern MagickExport const void *GetVirtualMetacontent(const Image *); extern MagickExport MagickBooleanType - GetOneVirtualPixelInfo(const Image *,const VirtualPixelMethod, - const ssize_t,const ssize_t,PixelInfo *,ExceptionInfo *), - GetOneVirtualPixel(const Image *,const ssize_t,const ssize_t,Quantum *, - ExceptionInfo *), GetOneAuthenticPixel(Image *,const ssize_t,const ssize_t,Quantum *, ExceptionInfo *), + GetOneVirtualPixel(const Image *,const ssize_t,const ssize_t,Quantum *, + ExceptionInfo *), + GetOneVirtualPixelInfo(const Image *,const VirtualPixelMethod, + const ssize_t,const ssize_t,PixelInfo *,ExceptionInfo *), PersistPixelCache(Image *,const char *,const MagickBooleanType, MagickOffsetType *,ExceptionInfo *), SyncAuthenticPixels(Image *,ExceptionInfo *) magick_hot_spot; diff --git a/MagickCore/channel.c b/MagickCore/channel.c index e7169a51b..a78468a72 100644 --- a/MagickCore/channel.c +++ b/MagickCore/channel.c @@ -333,6 +333,8 @@ MagickExport Image *ChannelFxImage(const Image *image,const char *expression, case ExchangeChannelOp: case TransferChannelOp: { + if (LocaleCompare(token,"black") == 0) + SetImageColorspace(destination_image,CMYKColorspace,exception); i=ParsePixelChannelOption(token); if (i < 0) { diff --git a/MagickCore/display.c b/MagickCore/display.c index ace850d33..4a75b70b0 100644 --- a/MagickCore/display.c +++ b/MagickCore/display.c @@ -3760,18 +3760,11 @@ static MagickBooleanType XColorEditImage(Display *display, pixel, target; - Quantum - virtual_pixel[CompositePixelChannel]; - /* Update color information using replace algorithm. */ - (void) GetOneCacheViewVirtualPixel(image_view,(ssize_t) x_offset, - (ssize_t) y_offset,virtual_pixel,exception); - target.red=(double) virtual_pixel[RedPixelChannel]; - target.green=(double) virtual_pixel[GreenPixelChannel]; - target.blue=(double) virtual_pixel[BluePixelChannel]; - target.alpha=(double) virtual_pixel[AlphaPixelChannel]; + (void) GetOneCacheViewVirtualPixelInfo(image_view,(ssize_t) + x_offset,(ssize_t) y_offset,&target,exception); if ((*image)->storage_class == DirectClass) { for (y=0; y < (int) (*image)->rows; y++) @@ -10124,18 +10117,11 @@ static MagickBooleanType XMatteEditImage(Display *display, pixel, target; - Quantum - virtual_pixel[CompositePixelChannel]; - /* Update matte information using replace algorithm. */ - (void) GetOneCacheViewVirtualPixel(image_view,(ssize_t) x_offset, - (ssize_t) y_offset,virtual_pixel,exception); - target.red=(double) virtual_pixel[RedPixelChannel]; - target.green=(double) virtual_pixel[GreenPixelChannel]; - target.blue=(double) virtual_pixel[BluePixelChannel]; - target.alpha=(double) virtual_pixel[AlphaPixelChannel]; + (void) GetOneCacheViewVirtualPixelInfo(image_view,(ssize_t) + x_offset,(ssize_t) y_offset,&target,exception); for (y=0; y < (int) (*image)->rows; y++) { q=GetCacheViewAuthenticPixels(image_view,0,(ssize_t) y, @@ -13249,9 +13235,6 @@ static Image *XTileImage(Display *display,XResourceInfo *resource_info, PixelInfo pixel; - Quantum - virtual_pixel[CompositePixelChannel]; - register int j; @@ -13284,12 +13267,7 @@ static Image *XTileImage(Display *display,XResourceInfo *resource_info, x_offset=(int) (width*(tile % (((int) image->columns-x)/width))+x); y_offset=(int) (height*(tile/(((int) image->columns-x)/width))+y); image_view=AcquireCacheView(image); - (void) GetOneCacheViewVirtualPixel(image_view,0,0,virtual_pixel, - exception); - pixel.red=(double) virtual_pixel[RedPixelChannel]; - pixel.green=(double) virtual_pixel[GreenPixelChannel]; - pixel.blue=(double) virtual_pixel[BluePixelChannel]; - pixel.alpha=(double) virtual_pixel[AlphaPixelChannel]; + (void) GetOneCacheViewVirtualPixelInfo(image_view,0,0,&pixel,exception); for (i=0; i < (int) height; i++) { s=GetCacheViewAuthenticPixels(image_view,(ssize_t) x_offset,(ssize_t) diff --git a/MagickCore/draw.c b/MagickCore/draw.c index c5349e3ec..ecdc9d6eb 100644 --- a/MagickCore/draw.c +++ b/MagickCore/draw.c @@ -4196,15 +4196,8 @@ MagickExport MagickBooleanType DrawPrimitive(Image *image, pixel, target; - Quantum - virtual_pixel[CompositePixelChannel]; - - (void) GetOneCacheViewVirtualPixel(image_view,x,y,virtual_pixel, + (void) GetOneCacheViewVirtualPixelInfo(image_view,x,y,&target, exception); - target.red=(double) virtual_pixel[RedPixelChannel]; - target.green=(double) virtual_pixel[GreenPixelChannel]; - target.blue=(double) virtual_pixel[BluePixelChannel]; - target.alpha=(double) virtual_pixel[AlphaPixelChannel]; for (y=0; y < (ssize_t) image->rows; y++) { register Quantum @@ -4319,15 +4312,8 @@ MagickExport MagickBooleanType DrawPrimitive(Image *image, pixel, target; - Quantum - virtual_pixel[CompositePixelChannel]; - - (void) GetOneCacheViewVirtualPixel(image_view,x,y,virtual_pixel, + (void) GetOneCacheViewVirtualPixelInfo(image_view,x,y,&target, exception); - target.red=(double) virtual_pixel[RedPixelChannel]; - target.green=(double) virtual_pixel[GreenPixelChannel]; - target.blue=(double) virtual_pixel[BluePixelChannel]; - target.alpha=(double) virtual_pixel[AlphaPixelChannel]; for (y=0; y < (ssize_t) image->rows; y++) { register Quantum diff --git a/MagickCore/fx.c b/MagickCore/fx.c index d9aec0c22..24691ee65 100644 --- a/MagickCore/fx.c +++ b/MagickCore/fx.c @@ -4794,18 +4794,11 @@ MagickExport Image *SteganoImage(const Image *image,const Image *watermark, { for (x=0; (x < (ssize_t) watermark->columns) && (j < (ssize_t) depth); x++) { - Quantum - virtual_pixel[CompositePixelChannel]; - ssize_t offset; - (void) GetOneCacheViewVirtualPixel(watermark_view,x,y,virtual_pixel, + (void) GetOneCacheViewVirtualPixelInfo(watermark_view,x,y,&pixel, exception); - pixel.red=(double) virtual_pixel[RedPixelChannel]; - pixel.green=(double) virtual_pixel[GreenPixelChannel]; - pixel.blue=(double) virtual_pixel[BluePixelChannel]; - pixel.alpha=(double) virtual_pixel[AlphaPixelChannel]; offset=k/(ssize_t) stegano_image->columns; if (offset >= (ssize_t) stegano_image->rows) break; diff --git a/MagickCore/xwindow.c b/MagickCore/xwindow.c index fdde2b5f7..47831ddaf 100644 --- a/MagickCore/xwindow.c +++ b/MagickCore/xwindow.c @@ -484,9 +484,6 @@ MagickPrivate MagickBooleanType XAnnotateImage(Display *display, Pixmap annotate_pixmap; - Quantum - virtual_pixel[CompositePixelChannel]; - unsigned int depth, height, @@ -559,16 +556,8 @@ MagickPrivate MagickBooleanType XAnnotateImage(Display *display, x=0; y=0; (void) XParseGeometry(annotate_info->geometry,&x,&y,&width,&height); - (void) GetOneVirtualPixel(image,(ssize_t) x,(ssize_t) y,virtual_pixel, - exception); - annotate_image->background_color.red=(double) - virtual_pixel[RedPixelChannel]; - annotate_image->background_color.green=(double) - virtual_pixel[GreenPixelChannel]; - annotate_image->background_color.blue=(double) - virtual_pixel[BluePixelChannel]; - annotate_image->background_color.alpha=(double) - virtual_pixel[AlphaPixelChannel]; + (void) GetOneVirtualPixelInfo(image,UndefinedVirtualPixelMethod,(ssize_t) x, + (ssize_t) y,&annotate_image->background_color,exception); if (annotate_info->stencil == ForegroundStencil) annotate_image->matte=MagickTrue; annotate_view=AcquireCacheView(annotate_image); @@ -2331,9 +2320,6 @@ MagickPrivate MagickBooleanType XDrawImage(Display *display, MagickBooleanType matte; - Quantum - virtual_pixel[CompositePixelChannel]; - Pixmap draw_pixmap; @@ -2492,12 +2478,8 @@ MagickPrivate MagickBooleanType XDrawImage(Display *display, x=0; y=0; (void) XParseGeometry(draw_info->geometry,&x,&y,&width,&height); - (void) GetOneVirtualPixel(image,(ssize_t) x,(ssize_t) y,virtual_pixel, - exception); - draw_image->background_color.red=(double) virtual_pixel[RedPixelChannel]; - draw_image->background_color.green=(double) virtual_pixel[GreenPixelChannel]; - draw_image->background_color.blue=(double) virtual_pixel[BluePixelChannel]; - draw_image->background_color.alpha=(double) virtual_pixel[AlphaPixelChannel]; + (void) GetOneVirtualPixelInfo(image,UndefinedVirtualPixelMethod,(ssize_t) x, + (ssize_t) y,&draw_image->background_color,exception); if (SetImageStorageClass(draw_image,DirectClass,exception) == MagickFalse) return(MagickFalse); draw_image->matte=MagickTrue; diff --git a/PerlMagick/Magick.xs b/PerlMagick/Magick.xs index 4fcdd6f35..7cfecc978 100644 --- a/PerlMagick/Magick.xs +++ b/PerlMagick/Magick.xs @@ -7690,15 +7690,8 @@ Mogrify(ref,...) PixelInfo target; - Quantum - virtual_pixel[MaxPixelChannels]; - - GetPixelInfo(image,&target); - (void) GetOneVirtualPixel(image,0,0,virtual_pixel,exception); - target.red=virtual_pixel[RedPixelChannel]; - target.green=virtual_pixel[GreenPixelChannel]; - target.blue=virtual_pixel[BluePixelChannel]; - target.alpha=virtual_pixel[AlphaPixelChannel]; + (void) GetOneVirtualPixelInfo(image,UndefinedVirtualPixelMethod, + 0,0,&target,exception); if (attribute_flag[0] != 0) (void) QueryColorCompliance(argument_list[0].string_reference, AllCompliance,&target,exception); @@ -8367,9 +8360,6 @@ Mogrify(ref,...) PixelInfo target; - Quantum - virtual_pixel[MaxPixelChannels]; - draw_info=CloneDrawInfo(info ? info->image_info : (ImageInfo *) NULL,(DrawInfo *) NULL); if (attribute_flag[0] != 0) @@ -8382,12 +8372,8 @@ Mogrify(ref,...) if (attribute_flag[3] != 0) (void) QueryColorCompliance(argument_list[3].string_reference, AllCompliance,&draw_info->fill,exception); - (void) GetOneVirtualPixel(image,geometry.x,geometry.y,virtual_pixel, - exception); - target.red=virtual_pixel[RedPixelChannel]; - target.green=virtual_pixel[GreenPixelChannel]; - target.blue=virtual_pixel[BluePixelChannel]; - target.alpha=virtual_pixel[AlphaPixelChannel]; + (void) GetOneVirtualPixelInfo(image,UndefinedVirtualPixelMethod, + geometry.x,geometry.y,&target,exception); invert=MagickFalse; if (attribute_flag[4] != 0) { @@ -8946,9 +8932,6 @@ Mogrify(ref,...) PixelInfo target; - Quantum - virtual_pixel[MaxPixelChannels]; - draw_info=CloneDrawInfo(info ? info->image_info : (ImageInfo *) NULL, (DrawInfo *) NULL); if (attribute_flag[0] != 0) @@ -8960,12 +8943,8 @@ Mogrify(ref,...) geometry.y=argument_list[2].integer_reference; if (image->matte == MagickFalse) (void) SetImageAlpha(image,OpaqueAlpha,exception); - (void) GetOneVirtualPixel(image,geometry.x,geometry.y,virtual_pixel, - exception); - target.red=virtual_pixel[RedPixelChannel]; - target.green=virtual_pixel[GreenPixelChannel]; - target.blue=virtual_pixel[BluePixelChannel]; - target.alpha=virtual_pixel[AlphaPixelChannel]; + (void) GetOneVirtualPixelInfo(image,UndefinedVirtualPixelMethod, + geometry.x,geometry.y,&target,exception); if (attribute_flag[4] != 0) QueryColorCompliance(argument_list[4].string_reference, AllCompliance,&target,exception); @@ -10475,9 +10454,6 @@ Mogrify(ref,...) PixelInfo target; - Quantum - virtual_pixel[MaxPixelChannels]; - draw_info=CloneDrawInfo(info ? info->image_info : (ImageInfo *) NULL,(DrawInfo *) NULL); if (attribute_flag[0] != 0) @@ -10490,12 +10466,8 @@ Mogrify(ref,...) if (attribute_flag[3] != 0) (void) QueryColorCompliance(argument_list[3].string_reference, AllCompliance,&draw_info->fill,exception); - (void) GetOneVirtualPixel(image,geometry.x,geometry.y,virtual_pixel, - exception); - target.red=virtual_pixel[RedPixelChannel]; - target.green=virtual_pixel[GreenPixelChannel]; - target.blue=virtual_pixel[BluePixelChannel]; - target.alpha=virtual_pixel[AlphaPixelChannel]; + (void) GetOneVirtualPixelInfo(image,UndefinedVirtualPixelMethod, + geometry.x,geometry.y,&target,exception); if (attribute_flag[4] != 0) QueryColorCompliance(argument_list[4].string_reference, AllCompliance,&target,exception); diff --git a/coders/stegano.c b/coders/stegano.c index 7b6baa366..7c1eb79ed 100644 --- a/coders/stegano.c +++ b/coders/stegano.c @@ -181,17 +181,11 @@ static Image *ReadSTEGANOImage(const ImageInfo *image_info, x=0; for ( ; (x < (ssize_t) image->columns) && (j < (ssize_t) depth); x++) { - Quantum - virtual_pixel[MaxPixelChannels]; - if ((k/(ssize_t) watermark->columns) >= (ssize_t) watermark->rows) break; - (void) GetOneVirtualPixel(watermark,k % (ssize_t) watermark->columns, - k/(ssize_t) watermark->columns,virtual_pixel,exception); - pixel.red=virtual_pixel[RedPixelChannel]; - pixel.green=virtual_pixel[GreenPixelChannel]; - pixel.blue=virtual_pixel[BluePixelChannel]; - pixel.alpha=virtual_pixel[AlphaPixelChannel]; + (void) GetOneVirtualPixelInfo(watermark,UndefinedVirtualPixelMethod, + k % (ssize_t) watermark->columns,k/(ssize_t) watermark->columns, + &pixel,exception); q=GetAuthenticPixels(image,x,y,1,1,exception); if (q == (Quantum *) NULL) break; -- 2.40.0