]> granicus.if.org Git - imagemagick/commitdiff
(no commit message)
authorcristy <urban-warrior@git.imagemagick.org>
Mon, 21 Sep 2009 14:40:44 +0000 (14:40 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Mon, 21 Sep 2009 14:40:44 +0000 (14:40 +0000)
ChangeLog
PerlMagick/Magick.xs
magick/composite.c
magick/deprecate.c
magick/deprecate.h
magick/enhance.c
magick/enhance.h
magick/image.c
magick/methods.h
wand/mogrify.c

index e8c7669547ca39a12ed392c30d38e2e1c764d6a3..b146ad755d879bac29cffd2c01755d224fdfd831 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,14 @@
+2009-09-21  6.5.6-3 Cristy  <quetzlzacatenango@image...>
+  * Deprecate LevelImageColors(), replace with LevelColorsImage().
+
+2009-09-17  6.5.6-2 Cristy  <quetzlzacatenango@image...>
+  * Optimize copy composite operator.
+
+2009-09-15  6.5.6-2 Cristy  <quetzlzacatenango@image...>
+  * Use -define jpeg:size to scale a JPEG image to the specified size.
+
 2009-09-13  6.5.6-0 Cristy  <quetzlzacatenango@image...>
   * Fix ICON alpha mask scanline pad.
-  * Use -define jpeg:size to scale a JPEG image to the specified size.
 
 2009-09-11  6.5.5-10 Cristy  <quetzlzacatenango@image...>
   * Return the global maximum threads to avoid the rare cache view assertions.
index ca28ca675422c6790e268b1bfdbc91f286d60f14..67bfaa67ea748914c7f06f63d3c087380a37ac06 100644 (file)
@@ -9960,7 +9960,7 @@ Mogrify(ref,...)
                &white_point,exception);
           if (attribute_flag[3] != 0)
             channel=(ChannelType) argument_list[3].long_reference;
-          (void) LevelImageColors(image,channel,&black_point,&white_point,
+          (void) LevelColorsImageChannel(image,channel,&black_point,&white_point,
             argument_list[0].long_reference != 0 ? MagickTrue : MagickFalse);
           break;
         }
index 47505acae3dcc8fdeae2e5d017141dc1f0a1cf4d..8fda479b791c2260022b236d2d4ea43884606a28 100644 (file)
@@ -1349,6 +1349,83 @@ MagickExport MagickBooleanType CompositeImageChannel(Image *image,
       modify_outside_overlay=MagickTrue;
       break;
     }
+    case OverCompositeOp:
+    {
+      if (image->matte != MagickFalse)
+        break;
+    }
+    case CopyCompositeOp:
+    {
+      if ((x_offset+(long) composite_image->columns) < 0)
+        break;
+      if ((x_offset+(long) composite_image->columns) >= (long) image->columns)
+        break;
+      if ((y_offset+(long) composite_image->rows) < 0)
+        break;
+      if ((y_offset+(long) composite_image->rows) >= (long) image->rows)
+        break;
+      status=MagickTrue;
+      exception=(&image->exception);
+      image_view=AcquireCacheView(image);
+      composite_view=AcquireCacheView(composite_image);
+#if defined(_OPENMP) && (_OPENMP >= 200203)
+#pragma omp parallel for schedule(static,1) shared(status)
+#endif
+      for (y=0; y < (long) composite_image->rows; y++)
+      {
+        MagickBooleanType
+          sync;
+
+        register const IndexPacket
+          *composite_indexes;
+
+        register const PixelPacket
+          *p;
+
+        register IndexPacket
+          *indexes;
+
+        register PixelPacket
+          *q;
+
+        if (status == MagickFalse)
+          continue;
+        p=GetCacheViewVirtualPixels(composite_view,0,y,composite_image->columns,
+          1,exception);
+        q=QueueCacheViewAuthenticPixels(image_view,x_offset,y+y_offset,
+          composite_image->columns,1,exception);
+        if ((p == (const PixelPacket *) NULL) || (q == (PixelPacket *) NULL))
+          {
+            status=MagickFalse;
+            continue;
+          }
+        composite_indexes=GetCacheViewVirtualIndexQueue(composite_view);
+        indexes=GetCacheViewAuthenticIndexQueue(image_view);
+        (void) CopyMagickMemory(q,p,composite_image->columns*sizeof(*p));
+        if ((indexes != (IndexPacket *) NULL) &&
+            (composite_indexes != (const IndexPacket *) NULL))
+          (void) CopyMagickMemory(indexes,composite_indexes,
+            composite_image->columns*sizeof(*indexes));
+        sync=SyncCacheViewAuthenticPixels(image_view,exception);
+        if (sync == MagickFalse)
+          status=MagickFalse;
+        if (image->progress_monitor != (MagickProgressMonitor) NULL)
+          {
+            MagickBooleanType
+              proceed;
+
+#if defined(_OPENMP) && (_OPENMP >= 200203)
+#pragma omp critical (MagickCore_TextureImage)
+#endif
+            proceed=SetImageProgress(image,CompositeImageTag,y,image->rows);
+            if (proceed == MagickFalse)
+              status=MagickFalse;
+          }
+      }
+      composite_view=DestroyCacheView(composite_view);
+      image_view=DestroyCacheView(image_view);
+      return(status);
+    }
     case CopyOpacityCompositeOp:
     case ChangeMaskCompositeOp:
     {
@@ -2516,7 +2593,7 @@ MagickExport MagickBooleanType TextureImage(Image *image,const Image *texture)
     for (x=0; x < (long) image->columns; x+=texture->columns)
     {
       width=texture->columns;
-      if ((x+width) > (long) image->columns)
+      if ((x+(long) width) > (long) image->columns)
         width=image->columns-x;
       (void) CopyMagickMemory(q,p,width*sizeof(*p));
       if ((indexes != (IndexPacket *) NULL) &&
index e6e7dc8dd5163ab2dba6163731ca68a8826dec2d..ee3e9cf378f98f2ed672c69d1bf0974c6789e951 100644 (file)
@@ -3188,8 +3188,8 @@ MagickExport MagickPixelPacket InterpolatePixelColor(const Image *image,
         alpha[16],
         gamma;
 
-      p=GetCacheViewVirtualPixels(image_view,(long) floor(x)-1,(long) floor(y)-1,
-        4,4,exception);
+      p=GetCacheViewVirtualPixels(image_view,(long) floor(x)-1,(long) floor(y)-
+        1,4,4,exception);
       if (p == (const PixelPacket *) NULL)
         break;
       indexes=GetCacheViewVirtualIndexQueue(image_view);
@@ -3231,8 +3231,8 @@ MagickExport MagickPixelPacket InterpolatePixelColor(const Image *image,
       PointInfo
         delta;
 
-      p=GetCacheViewVirtualPixels(image_view,(long) floor(x)-1,(long) floor(y)-1,
-        4,4,exception);
+      p=GetCacheViewVirtualPixels(image_view,(long) floor(x)-1,(long) floor(y)-
+        1,4,4,exception);
       if (p == (const PixelPacket *) NULL)
         break;
       indexes=GetCacheViewVirtualIndexQueue(image_view);
@@ -3272,8 +3272,8 @@ MagickExport MagickPixelPacket InterpolatePixelColor(const Image *image,
       PointInfo
         delta;
 
-      p=GetCacheViewVirtualPixels(image_view,(long) floor(x),(long) floor(y),2,2,
-        exception);
+      p=GetCacheViewVirtualPixels(image_view,(long) floor(x),(long) floor(y),2,
+        2,exception);
       if (p == (const PixelPacket *) NULL)
         break;
       indexes=GetCacheViewVirtualIndexQueue(image_view);
@@ -3357,8 +3357,8 @@ MagickExport MagickPixelPacket InterpolatePixelColor(const Image *image,
       MagickPixelPacket
         pixels[1];
 
-      p=GetCacheViewVirtualPixels(image_view,(long) floor(x),(long) floor(y),1,1,
-        exception);
+      p=GetCacheViewVirtualPixels(image_view,(long) floor(x),(long) floor(y),1,
+        1,exception);
       if (p == (const PixelPacket *) NULL)
         break;
       indexes=GetCacheViewVirtualIndexQueue(image_view);
@@ -3503,8 +3503,8 @@ MagickExport MagickPixelPacket InterpolatePixelColor(const Image *image,
       MagickPixelPacket
         pixels[1];
 
-      p=GetCacheViewVirtualPixels(image_view,NearestNeighbor(x),NearestNeighbor(y),
-        1,1,exception);
+      p=GetCacheViewVirtualPixels(image_view,NearestNeighbor(x),
+        NearestNeighbor(y),1,1,exception);
       if (p == (const PixelPacket *) NULL)
         break;
       indexes=GetCacheViewVirtualIndexQueue(image_view);
@@ -3530,8 +3530,8 @@ MagickExport MagickPixelPacket InterpolatePixelColor(const Image *image,
       PointInfo
         delta;
 
-      p=GetCacheViewVirtualPixels(image_view,(long) floor(x)-1,(long) floor(y)-1,
-        4,4,exception);
+      p=GetCacheViewVirtualPixels(image_view,(long) floor(x)-1,(long) floor(y)-
+        1,4,4,exception);
       if (p == (const PixelPacket *) NULL)
         break;
       indexes=GetCacheViewVirtualIndexQueue(image_view);
@@ -3656,6 +3656,54 @@ MagickExport unsigned int IsSubimage(const char *geometry,
 %                                                                             %
 %                                                                             %
 %                                                                             %
+%     L e v e l I m a g e C o l o r s                                         %
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%  LevelImageColor() will map the given color to "black" and "white"
+%  values, limearly spreading out the colors, and level values on a channel by
+%  channel bases, as per LevelImage().  The given colors allows you to specify
+%  different level ranges for each of the color channels seperatally.
+%
+%  If the boolean 'invert' is set true the image values will modifyed in the
+%  reverse direction. That is any existing "black" and "white" colors in the
+%  image will become the color values given, with all other values compressed
+%  appropriatally.  This effectivally maps a greyscale gradient into the given
+%  color gradient.
+%
+%  The format of the LevelImageColors method is:
+%
+%  MagickBooleanType LevelImageColors(Image *image,const ChannelType channel,
+%    const MagickPixelPacket *black_color,const MagickPixelPacket *white_color,
+%    const MagickBooleanType invert)
+%
+%  A description of each parameter follows:
+%
+%    o image: the image.
+%
+%    o channel: the channel.
+%
+%    o black_color: The color to map black to/from
+%
+%    o white_point: The color to map white to/from
+%
+%    o invert: if true map the colors (levelize), rather than from (level)
+%
+*/
+MagickBooleanType LevelImageColors(Image *image,const ChannelType channel,
+  const MagickPixelPacket *black_color,const MagickPixelPacket *white_color,
+  const MagickBooleanType invert)
+{
+  return(LevelColorsImageChannel(image,channel,black_color,white_color,invert));
+}
+\f
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                                                                             %
+%                                                                             %
+%                                                                             %
 %   L i b e r a t e M e m o r y                                               %
 %                                                                             %
 %                                                                             %
index b48eb40e9b393dfb279c6eacaa5ee3369f0043f7..fac6a9082e36074b8510308ddf3e3e96898d49ab 100644 (file)
@@ -167,6 +167,8 @@ extern MagickExport MagickBooleanType
     magick_attribute((format (printf,3,0))),
   FuzzyColorCompare(const Image *,const PixelPacket *,const PixelPacket *),
   FuzzyOpacityCompare(const Image *,const PixelPacket *,const PixelPacket *),
+  LevelImageColors(Image *,const ChannelType,const MagickPixelPacket *,
+    const MagickPixelPacket *, const MagickBooleanType),
   MagickMonitor(const char *,const MagickOffsetType,const MagickSizeType,
     void *),
   MapImage(Image *,const Image *,const MagickBooleanType),
index 5f90e6643b8bd77a0ff5094239e3558feb7fbca6..e02cc7bc12bf5ac364f34f339a804b49530b8294 100644 (file)
@@ -84,7 +84,7 @@
 %  AutoGammaImage() extract the 'mean' from the image and adjust the image
 %  to try make set its gamma appropriatally.
 %
-%  The format of the LevelImage method is:
+%  The format of the AutoGammaImage method is:
 %
 %      MagickBooleanType AutoGammaImage(Image *image)
 %      MagickBooleanType AutoGammaImageChannel(Image *image,
@@ -2392,8 +2392,7 @@ MagickExport MagickBooleanType LevelImage(Image *image,const char *levels)
     status=LevelImageChannel(image,DefaultChannels,black_point,white_point,
       gamma);
   else
-    status=LevelizeImageChannel(image,DefaultChannels,black_point,white_point,
-      gamma);
+    status=LevelizeImage(image,black_point,white_point,gamma);
   return(status);
 }
 \f
@@ -2402,26 +2401,28 @@ MagickExport MagickBooleanType LevelImage(Image *image,const char *levels)
 %                                                                             %
 %                                                                             %
 %                                                                             %
-%     L e v e l I m a g e C h a n n e l                                       %
+%     L e v e l i z e I m a g e                                               %
 %                                                                             %
 %                                                                             %
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  LevelImageChannel() applies the normal LevelImage() operation to just the
-%  Specific channels specified, spreading out the values between the black and
-%  white points over the entire range of values.  Gamma correction is also
-%  applied after the values has been mapped.
+%  LevelizeImage() applies the normal level operation to the image, spreading
+%  out the values between the black and white points over the entire range of
+%  values.  Gamma correction is also applied after the values has been mapped.
 %
 %  It is typically used to improve image contrast, or to provide a controlled
 %  linear threshold for the image. If the black and white points are set to
 %  the minimum and maximum values found in the image, the image can be
 %  normalized.  or by swapping black and white values, negate the image.
 %
-%  The format of the LevelizeImageChannel method is:
+%  The format of the LevelizeImage method is:
 %
-%      MagickBooleanType LevelImageChannel(Image *image,
-%        const ChannelType channel,black_point,white_point,gamma)
+%      MagickBooleanType LevelizeImage(Image *image,const double black_point,
+%        const double white_point,const double gamma)
+%      MagickBooleanType LevelizeImageChannel(Image *image,
+%        const ChannelType channel,const double black_point,
+%        const double white_point,const double gamma)
 %
 %  A description of each parameter follows:
 %
@@ -2437,6 +2438,18 @@ MagickExport MagickBooleanType LevelImage(Image *image,const char *levels)
 %             use 1.0 for purely linear stretching of image color values
 %
 */
+
+MagickExport MagickBooleanType LevelizeImage(Image *image,
+  const double black_point,const double white_point,const double gamma)
+{
+  MagickBooleanType
+    status;
+
+  status=LevelizeImageChannel(image,DefaultChannels,black_point,white_point,
+    gamma);
+  return(status);
+}
+
 MagickExport MagickBooleanType LevelImageChannel(Image *image,
   const ChannelType channel,const double black_point,const double white_point,
   const double gamma)
@@ -2729,11 +2742,14 @@ MagickExport MagickBooleanType LevelizeImageChannel(Image *image,
 %  appropriatally.  This effectivally maps a greyscale gradient into the given
 %  color gradient.
 %
-%  The format of the LevelImageColors method is:
+%  The format of the LevelColorsImageChannel method is:
 %
-%    MagickBooleanType LevelImageColors(Image *image,const ChannelType channel,
+%    MagickBooleanType LevelColorsImage(Image *image,
 %      const MagickPixelPacket *black_color,
 %      const MagickPixelPacket *white_color,const MagickBooleanType invert)
+%    MagickBooleanType LevelColorsImageChannel(Image *image,
+%      const ChannelType channel,const MagickPixelPacket *black_color,
+%      const MagickPixelPacket *white_color,const MagickBooleanType invert)
 %
 %  A description of each parameter follows:
 %
@@ -2748,12 +2764,23 @@ MagickExport MagickBooleanType LevelizeImageChannel(Image *image,
 %    o invert: if true map the colors (levelize), rather than from (level)
 %
 */
-MagickBooleanType LevelImageColors(Image *image,const ChannelType channel,
+
+MagickExport MagickBooleanType LevelColorsImage(Image *image,
   const MagickPixelPacket *black_color,const MagickPixelPacket *white_color,
   const MagickBooleanType invert)
 {
-#define LevelColorImageTag  "LevelColor/Image"
+  MagickBooleanType
+    status;
 
+  status=LevelColorsImageChannel(image,DefaultChannels,black_color,white_color,
+    invert);
+  return(status);
+}
+
+MagickExport MagickBooleanType LevelColorsImageChannel(Image *image,
+  const ChannelType channel,const MagickPixelPacket *black_color,
+  const MagickPixelPacket *white_color,const MagickBooleanType invert)
+{
   MagickStatusType
     status;
 
index f2759e8292df08f3951b671fa042ee8d80fb3bc4..c0dd09ba5a3d15787d45f91d5731ab2b2cee82cd 100644 (file)
@@ -43,9 +43,12 @@ extern MagickExport MagickBooleanType
   LevelImage(Image *,const char *),
   LevelImageChannel(Image *,const ChannelType,const double,const double,
     const double),
+  LevelizeImage(Image *,const double,const double,const double),
   LevelizeImageChannel(Image *,const ChannelType,const double,const double,
     const double),
-  LevelImageColors(Image *,const ChannelType,const MagickPixelPacket *,
+  LevelColorsImage(Image *,const MagickPixelPacket *,const MagickPixelPacket *,
+    const MagickBooleanType),
+  LevelColorsImageChannel(Image *,const ChannelType,const MagickPixelPacket *,
     const MagickPixelPacket *,const MagickBooleanType),
   LinearStretchImage(Image *,const double,const double),
   ModulateImage(Image *,const char *),
index afd1397f6d749828eae3f8a0c74e530690728ced..959a25cc2e7a77ab42bff6f932843d0c0ea18283 100644 (file)
@@ -2760,8 +2760,7 @@ MagickExport MagickBooleanType SetImageAlphaChannel(Image *image,
           GetMagickPixelPacket(image,&background);
           SetMagickPixelPacket(image,&(image->background_color),(IndexPacket *)
             NULL,&background);
-          (void) LevelImageColors(image,DefaultChannels,&background,&background,
-            MagickTrue);
+          (void) LevelColorsImage(image,&background,&background,MagickTrue);
         }
       break;
     }
index b62d34259139ae02e8f58a746febde39ae5b424a..b9195c0d832d4a1a68db0eca6122822ea8d0fa5b 100644 (file)
@@ -667,7 +667,7 @@ extern "C" {
 #define IsTaintImage  PrependMagickMethod(IsTaintImage)
 #define LeastSquaresAddTerms  PrependMagickMethod(LeastSquaresAddTerms)
 #define LevelImageChannel  PrependMagickMethod(LevelImageChannel)
-#define LevelImageColors  PrependMagickMethod(LevelImageColors)
+#define LevelColorsImageChannel  PrependMagickMethod(LevelColorsImageChannel)
 #define LevelImage  PrependMagickMethod(LevelImage)
 #define LevelizeImageChannel  PrependMagickMethod(LevelizeImageChannel)
 #define LiberateMemory  PrependMagickMethod(LiberateMemory)
index c12bf9c44b04fb4e39df5fbba2299e25f4b3603d..e6464e5d3fee6077e5cea20b09a586a2875819cc 100644 (file)
@@ -1880,7 +1880,7 @@ WandExport MagickBooleanType MogrifyImage(ImageInfo *image_info,const int argc,
                 else
                   (void) QueryMagickColor("#ffffff",&white_point,exception);
               }
-            (void) LevelImageColors(*image,channel,&black_point,&white_point,
+            (void) LevelColorsImageChannel(*image,channel,&black_point,&white_point,
               *option == '+' ? MagickTrue : MagickFalse);
             break;
           }