]> granicus.if.org Git - imagemagick/commitdiff
(no commit message)
authorcristy <urban-warrior@git.imagemagick.org>
Sat, 17 Mar 2012 16:26:09 +0000 (16:26 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Sat, 17 Mar 2012 16:26:09 +0000 (16:26 +0000)
MagickCore/cache-view.c
MagickCore/cache-view.h
MagickCore/cache.h
MagickCore/channel.c
MagickCore/display.c
MagickCore/draw.c
MagickCore/fx.c
MagickCore/xwindow.c
PerlMagick/Magick.xs
coders/stegano.c

index baa6ada7c13d2c88c70bdbdac56dfcd175834284..c088696cbb1ba8e24645185993fd2b4d864e6d72 100644 (file)
@@ -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);
+}
+\f
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                                                                             %
+%                                                                             %
+%                                                                             %
 %   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                     %
 %                                                                             %
 %                                                                             %
index a3782d361f3b3c4750707cce1c036440fb3b1643..dd4e6ba2e262e16483ee62537e0dc853574a3be2 100644 (file)
@@ -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;
index 49fd67310cdea5ecb1765e9325907fa0976d8e78..6b1e5d04ea3636be5424abd0fd0c4a3f316d2686 100644 (file)
@@ -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;
index e7169a51b570aa94bef744c089f5f657e9fc59ff..a78468a7200af21d147df3ac51731e3c56a4b4d7 100644 (file)
@@ -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)
           {
index ace850d33d2fc2e7a914ef72b57f8862923becac..4a75b70b0d1bee43bfae40ae327871a2b9ff5f35 100644 (file)
@@ -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)
index c5349e3ecb1b39260e679d2fefd332c00c87a1a1..ecdc9d6eb79060e847292667ec7c80a602277c4f 100644 (file)
@@ -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
index d9aec0c222570ef129e3640d9b7e67b19a3dcfe9..24691ee65477c0427ab6c4a3cde05898a33b3d9f 100644 (file)
@@ -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;
index fdde2b5f76d337f7715ab9b609c5d629761de73d..47831ddaf9e5809fc27a829c76b2e5eec9f9d00d 100644 (file)
@@ -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;
index 4fcdd6f350994a63f9f67a94f75c962bdb0fea09..7cfecc9781df9419e2b5e950f3a969542226f261 100644 (file)
@@ -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);
index 7b6baa366c4478ba697fef29834702b6f3486d84..7c1eb79ed83c20b1ad6a0ec3500f9c72feb5ddd6 100644 (file)
@@ -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;