]> granicus.if.org Git - imagemagick/blobdiff - magick/deprecate.c
(no commit message)
[imagemagick] / magick / deprecate.c
index 3ad596c1578b0281b571c2ef93723379fbfd85df..ce94831c5822181d6713b5cd90cfb9a5792e5716 100644 (file)
@@ -17,7 +17,7 @@
 %                                October 2002                                 %
 %                                                                             %
 %                                                                             %
-%  Copyright 1999-2010 ImageMagick Studio LLC, a non-profit organization      %
+%  Copyright 1999-2011 ImageMagick Studio LLC, a non-profit organization      %
 %  dedicated to making software imaging solutions freely available.           %
 %                                                                             %
 %  You may not use this file except in compliance with the License.  You may  %
@@ -1157,14 +1157,6 @@ MagickExport MagickBooleanType ColorFloodfillImage(Image *image,
   Image
     *floodplane_image;
 
-  ssize_t
-    offset,
-    start,
-    x,
-    x1,
-    x2,
-    y;
-
   MagickBooleanType
     skip;
 
@@ -1177,6 +1169,14 @@ MagickExport MagickBooleanType ColorFloodfillImage(Image *image,
   SegmentInfo
     *segment_stack;
 
+  ssize_t
+    offset,
+    start,
+    x,
+    x1,
+    x2,
+    y;
+
   /*
     Check boundary conditions.
   */
@@ -1360,7 +1360,7 @@ MagickExport MagickBooleanType ColorFloodfillImage(Image *image,
       break;
     for (x=0; x < (ssize_t) image->columns; x++)
     {
-      if (p->opacity != OpaqueOpacity)
+      if (GetOpacityPixelComponent(p) != OpaqueOpacity)
         {
           (void) GetFillColor(draw_info,x,y,&fill_color);
           MagickCompositeOver(&fill_color,(MagickRealType) fill_color.opacity,q,
@@ -1779,21 +1779,21 @@ MagickExport unsigned int DispatchImage(const Image *image,const ssize_t x_offse
 */
 
 static double GetSimilarityMetric(const Image *image,const Image *reference,
-  const ssize_t x_offset,const ssize_t y_offset,const double similarity_threshold,
-  ExceptionInfo *exception)
+  const ssize_t x_offset,const ssize_t y_offset,
+  const double similarity_threshold,ExceptionInfo *exception)
 {
   CacheView
     *image_view,
     *reference_view;
 
-  ssize_t
-    y;
-
   double
     channels,
     normalized_similarity,
     similarity;
 
+  ssize_t
+    y;
+
   /*
     Compute the similarity in pixels between two images.
   */
@@ -1833,15 +1833,19 @@ static double GetSimilarityMetric(const Image *image,const Image *reference,
       MagickRealType
         pixel;
 
-      pixel=QuantumScale*(p->red-(double) q->red);
+      pixel=QuantumScale*(GetRedPixelComponent(p)-(double)
+        GetRedPixelComponent(q));
       similarity+=pixel*pixel;
-      pixel=QuantumScale*(p->green-(double) q->green);
+      pixel=QuantumScale*(GetGreenPixelComponent(p)-(double)
+        GetGreenPixelComponent(q));
       similarity+=pixel*pixel;
-      pixel=QuantumScale*(p->blue-(double) q->blue);
+      pixel=QuantumScale*(GetBluePixelComponent(p)-(double)
+        GetBluePixelComponent(q));
       similarity+=pixel*pixel;
       if ((image->matte != MagickFalse) && (reference->matte != MagickFalse))
         {
-          pixel=QuantumScale*(p->opacity-(double) q->opacity);
+          pixel=QuantumScale*(GetOpacityPixelComponent(p)-(double)
+            GetOpacityPixelComponent(q));
           similarity+=pixel*pixel;
         }
       if ((image->colorspace == CMYKColorspace) &&
@@ -1866,15 +1870,15 @@ static double GetSimilarityMetric(const Image *image,const Image *reference,
 MagickExport Image *ExtractSubimageFromImage(Image *image,
   const Image *reference,ExceptionInfo *exception)
 {
-  ssize_t
-    y;
-
   double
     similarity_threshold;
 
   RectangleInfo
     offset;
 
+  ssize_t
+    y;
+
   /*
     Extract reference from image.
   */
@@ -2101,18 +2105,20 @@ MagickExport unsigned int FuzzyColorMatch(const PixelPacket *p,
   register MagickRealType
     distance;
 
-  if ((fuzz == 0.0) && (p->red == q->red) && (p->green == q->green) &&
-      (p->blue == q->blue))
+  if ((fuzz == 0.0) && (GetRedPixelComponent(p) == GetRedPixelComponent(q)) &&
+      (GetGreenPixelComponent(p) == GetGreenPixelComponent(q)) &&
+      (GetBluePixelComponent(p) == GetBluePixelComponent(q)))
     return(MagickTrue);
-  pixel.red=p->red-(MagickRealType) q->red;
+  pixel.red=GetRedPixelComponent(p)-(MagickRealType) GetRedPixelComponent(q);
   distance=pixel.red*pixel.red;
   if (distance > (fuzz*fuzz))
     return(MagickFalse);
-  pixel.green=p->green-(MagickRealType) q->green;
+  pixel.green=GetGreenPixelComponent(p)-(MagickRealType)
+    GetGreenPixelComponent(q);
   distance+=pixel.green*pixel.green;
   if (distance > (fuzz*fuzz))
     return(MagickFalse);
-  pixel.blue=p->blue-(MagickRealType) q->blue;
+  pixel.blue=GetBluePixelComponent(p)-(MagickRealType) GetBluePixelComponent(q);
   distance+=pixel.blue*pixel.blue;
   if (distance > (fuzz*fuzz))
     return(MagickFalse);
@@ -2253,7 +2259,7 @@ MagickExport void *GetConfigureBlob(const char *filename,char *path,
         blob=FileToBlob(path,~0,length,exception);
     }
 #endif
-#if defined(MAGICKCORE_WINDOWS_SUPPORT) && !(defined(MAGICKCORE_CONFIGURE_PATH) || defined(MAGICKCORE_SHARE_CONFIGURE_PATH))
+#if defined(MAGICKCORE_WINDOWS_SUPPORT) && !(defined(MAGICKCORE_CONFIGURE_PATH) || defined(MAGICKCORE_SHARE_PATH))
   if (blob == (void *) NULL)
     {
       char
@@ -3455,8 +3461,8 @@ MagickExport MagickPixelPacket InterpolatePixelColor(const Image *image,
         alpha[16],
         gamma;
 
-      p=GetCacheViewVirtualPixels(image_view,(ssize_t) floor(x)-1,(ssize_t) floor(y)-
-        1,4,4,exception);
+      p=GetCacheViewVirtualPixels(image_view,(ssize_t) floor(x)-1,(ssize_t)
+        floor(y)-1,4,4,exception);
       if (p == (const PixelPacket *) NULL)
         break;
       indexes=GetCacheViewVirtualIndexQueue(image_view);
@@ -3498,8 +3504,8 @@ MagickExport MagickPixelPacket InterpolatePixelColor(const Image *image,
       PointInfo
         delta;
 
-      p=GetCacheViewVirtualPixels(image_view,(ssize_t) floor(x)-1,(ssize_t) floor(y)-
-        1,4,4,exception);
+      p=GetCacheViewVirtualPixels(image_view,(ssize_t) floor(x)-1,(ssize_t)
+        floor(y)-1,4,4,exception);
       if (p == (const PixelPacket *) NULL)
         break;
       indexes=GetCacheViewVirtualIndexQueue(image_view);
@@ -3539,8 +3545,8 @@ MagickExport MagickPixelPacket InterpolatePixelColor(const Image *image,
       PointInfo
         delta;
 
-      p=GetCacheViewVirtualPixels(image_view,(ssize_t) floor(x),(ssize_t) floor(y),2,
-        2,exception);
+      p=GetCacheViewVirtualPixels(image_view,(ssize_t) floor(x),(ssize_t)
+        floor(y),2,2,exception);
       if (p == (const PixelPacket *) NULL)
         break;
       indexes=GetCacheViewVirtualIndexQueue(image_view);
@@ -3624,8 +3630,8 @@ MagickExport MagickPixelPacket InterpolatePixelColor(const Image *image,
       MagickPixelPacket
         pixels[1];
 
-      p=GetCacheViewVirtualPixels(image_view,(ssize_t) floor(x),(ssize_t) floor(y),1,
-        1,exception);
+      p=GetCacheViewVirtualPixels(image_view,(ssize_t) floor(x),(ssize_t)
+        floor(y),1,1,exception);
       if (p == (const PixelPacket *) NULL)
         break;
       indexes=GetCacheViewVirtualIndexQueue(image_view);
@@ -3646,8 +3652,8 @@ MagickExport MagickPixelPacket InterpolatePixelColor(const Image *image,
         delta,
         luminance;
 
-      p=GetCacheViewVirtualPixels(image_view,(ssize_t) floor(x),(ssize_t) floor(y),
-        2,2,exception);
+      p=GetCacheViewVirtualPixels(image_view,(ssize_t) floor(x),(ssize_t)
+        floor(y),2,2,exception);
       if (p == (const PixelPacket *) NULL)
         break;
       indexes=GetCacheViewVirtualIndexQueue(image_view);
@@ -3781,10 +3787,6 @@ MagickExport MagickPixelPacket InterpolatePixelColor(const Image *image,
     }
     case SplineInterpolatePixel:
     {
-      ssize_t
-        j,
-        n;
-
       MagickPixelPacket
         pixels[16];
 
@@ -3797,8 +3799,12 @@ MagickExport MagickPixelPacket InterpolatePixelColor(const Image *image,
       PointInfo
         delta;
 
-      p=GetCacheViewVirtualPixels(image_view,(ssize_t) floor(x)-1,(ssize_t) floor(y)-
-        1,4,4,exception);
+      ssize_t
+        j,
+        n;
+
+      p=GetCacheViewVirtualPixels(image_view,(ssize_t) floor(x)-1,(ssize_t)
+        floor(y)-1,4,4,exception);
       if (p == (const PixelPacket *) NULL)
         break;
       indexes=GetCacheViewVirtualIndexQueue(image_view);
@@ -3937,7 +3943,7 @@ MagickExport unsigned int IsSubimage(const char *geometry,
 %  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.
+%  different level ranges for each of the color channels separately.
 %
 %  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
@@ -4285,14 +4291,6 @@ MagickExport MagickBooleanType MatteFloodfillImage(Image *image,
   Image
     *floodplane_image;
 
-  ssize_t
-    offset,
-    start,
-    x,
-    x1,
-    x2,
-    y;
-
   MagickBooleanType
     skip;
 
@@ -4302,6 +4300,14 @@ MagickExport MagickBooleanType MatteFloodfillImage(Image *image,
   SegmentInfo
     *segment_stack;
 
+  ssize_t
+    offset,
+    start,
+    x,
+    x1,
+    x2,
+    y;
+
   /*
     Check boundary conditions.
   */
@@ -4483,7 +4489,7 @@ MagickExport MagickBooleanType MatteFloodfillImage(Image *image,
       break;
     for (x=0; x < (ssize_t) image->columns; x++)
     {
-      if (p->opacity != OpaqueOpacity)
+      if (GetOpacityPixelComponent(p) != OpaqueOpacity)
         q->opacity=opacity;
       p++;
       q++;
@@ -4567,6 +4573,90 @@ MagickExport Image *MinimumImages(const Image *images,ExceptionInfo *exception)
 %                                                                             %
 %                                                                             %
 %                                                                             %
+%     M e d i a n F i l t e r I m a g e                                       %
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%  MedianFilterImage() applies a digital filter that improves the quality
+%  of a noisy image.  Each pixel is replaced by the median in a set of
+%  neighboring pixels as defined by radius.
+%
+%  The algorithm was contributed by Mike Edmonds and implements an insertion
+%  sort for selecting median color-channel values.  For more on this algorithm
+%  see "Skip Lists: A probabilistic Alternative to Balanced Trees" by William
+%  Pugh in the June 1990 of Communications of the ACM.
+%
+%  The format of the MedianFilterImage method is:
+%
+%      Image *MedianFilterImage(const Image *image,const double radius,
+%        ExceptionInfo *exception)
+%
+%  A description of each parameter follows:
+%
+%    o image: the image.
+%
+%    o radius: the radius of the pixel neighborhood.
+%
+%    o exception: return any errors or warnings in this structure.
+%
+*/
+MagickExport Image *MedianFilterImage(const Image *image,const double radius,
+  ExceptionInfo *exception)
+{
+  Image
+    *median_image;
+
+  median_image=StatisticImage(image,MedianStatistic,(size_t) radius,(size_t)
+    radius,exception);
+  return(median_image);
+}
+\f
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%     M o d e I m a g e                                                       %
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%  ModeImage() makes each pixel the 'predominate color' of the neighborhood
+%  of the specified radius.
+%
+%  The format of the ModeImage method is:
+%
+%      Image *ModeImage(const Image *image,const double radius,
+%        ExceptionInfo *exception)
+%
+%  A description of each parameter follows:
+%
+%    o image: the image.
+%
+%    o radius: the radius of the pixel neighborhood.
+%
+%    o exception: return any errors or warnings in this structure.
+%
+*/
+MagickExport Image *ModeImage(const Image *image,const double radius,
+  ExceptionInfo *exception)
+{
+  Image
+    *mode_image;
+
+  mode_image=StatisticImage(image,ModeStatistic,(size_t) radius,(size_t) radius,
+    exception);
+  return(mode_image);
+}
+\f
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                                                                             %
+%                                                                             %
+%                                                                             %
 %     M o s a i c I m a g e s                                                 %
 %                                                                             %
 %                                                                             %
@@ -4634,15 +4724,15 @@ MagickExport MagickBooleanType OpaqueImage(Image *image,
 {
 #define OpaqueImageTag  "Opaque/Image"
 
-  ssize_t
-    y;
-
   MagickBooleanType
     proceed;
 
   register ssize_t
     i;
 
+  ssize_t
+    y;
+
   /*
     Make image color opaque.
   */
@@ -5310,13 +5400,13 @@ MagickExport unsigned int RandomChannelThresholdImage(Image *image,const char
     lower_threshold,
     upper_threshold;
 
+  RandomInfo
+    *random_info;
+
   ssize_t
     count,
     y;
 
-  RandomInfo
-    *random_info;
-
   static MagickRealType
     o2[4]={0.2f, 0.6f, 0.8f, 0.4f},
     o3[9]={0.1f, 0.6f, 0.3f, 0.7f, 0.5f, 0.8f, 0.4f, 0.9f, 0.2f},
@@ -5395,34 +5485,34 @@ MagickExport unsigned int RandomChannelThresholdImage(Image *image,const char
       {
         indexes=GetAuthenticIndexQueue(image);
         for (x=0; x < (ssize_t) image->columns; x++)
-          {
-            MagickRealType
-              intensity;
+        {
+          MagickRealType
+            intensity;
 
-            intensity=(MagickRealType) PixelIntensityToQuantum(q);
-            if (order == 1)
-              {
-                if (intensity < lower_threshold)
-                  threshold=lower_threshold;
-                else if (intensity > upper_threshold)
-                  threshold=upper_threshold;
-                else
-                  threshold=(MagickRealType) (QuantumRange*
-                    GetPseudoRandomValue(random_info));
-              }
-            else if (order == 2)
-              threshold=(MagickRealType) QuantumRange*o2[(x%2)+2*(y%2)];
-            else if (order == 3)
-              threshold=(MagickRealType) QuantumRange*o3[(x%3)+3*(y%3)];
-            else if (order == 4)
-              threshold=(MagickRealType) QuantumRange*o4[(x%4)+4*(y%4)];
-            q->red=q->green=q->blue=(Quantum) (intensity <=
-               threshold ? 0 : QuantumRange);
-            index=(IndexPacket) (intensity <= threshold ? 0 : 1);
-            *indexes++=index;
-            q->red=q->green=q->blue=image->colormap[(ssize_t) index].red;
-            q++;
-          }
+          intensity=(MagickRealType) PixelIntensityToQuantum(q);
+          if (order == 1)
+            {
+              if (intensity < lower_threshold)
+                threshold=lower_threshold;
+              else if (intensity > upper_threshold)
+                threshold=upper_threshold;
+              else
+                threshold=(MagickRealType) (QuantumRange*
+                  GetPseudoRandomValue(random_info));
+            }
+          else if (order == 2)
+            threshold=(MagickRealType) QuantumRange*o2[(x%2)+2*(y%2)];
+          else if (order == 3)
+            threshold=(MagickRealType) QuantumRange*o3[(x%3)+3*(y%3)];
+          else if (order == 4)
+            threshold=(MagickRealType) QuantumRange*o4[(x%4)+4*(y%4)];
+          index=(IndexPacket) (intensity <= threshold ? 0 : 1);
+          SetIndexPixelComponent(indexes+x,index);
+          SetRedPixelComponent(q,image->colormap[(ssize_t) index].red);
+          SetGreenPixelComponent(q,image->colormap[(ssize_t) index].green);
+          SetBluePixelComponent(q,image->colormap[(ssize_t) index].blue);
+          q++;
+        }
       }
     if (LocaleCompare(channel,"opacity") == 0 ||
         LocaleCompare(channel,"all") == 0 ||
@@ -5447,8 +5537,8 @@ MagickExport unsigned int RandomChannelThresholdImage(Image *image,const char
                 threshold=(MagickRealType) QuantumRange*o3[(x%3)+3*(y%3)];
               else if (order == 4)
                 threshold=(MagickRealType) QuantumRange*o4[(x%4)+4*(y%4)]/1.7;
-              q->opacity=(Quantum) ((MagickRealType) q->opacity <= threshold ?
-                 0 : QuantumRange);
+              SetOpacityPixelComponent(q,(MagickRealType) q->opacity <=
+                threshold ? 0 : QuantumRange);
               q++;
             }
       }
@@ -5572,6 +5662,47 @@ MagickExport Image *RecolorImage(const Image *image,const size_t order,
 %                                                                             %
 %                                                                             %
 %                                                                             %
+%     R e d u c e N o i s e I m a g e                                         %
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%  ReduceNoiseImage() smooths the contours of an image while still preserving
+%  edge information.  The algorithm works by replacing each pixel with its
+%  neighbor closest in value.  A neighbor is defined by radius.  Use a radius
+%  of 0 and ReduceNoise() selects a suitable radius for you.
+%
+%  The format of the ReduceNoiseImage method is:
+%
+%      Image *ReduceNoiseImage(const Image *image,const double radius,
+%        ExceptionInfo *exception)
+%
+%  A description of each parameter follows:
+%
+%    o image: the image.
+%
+%    o radius: the radius of the pixel neighborhood.
+%
+%    o exception: return any errors or warnings in this structure.
+%
+*/
+MagickExport Image *ReduceNoiseImage(const Image *image,const double radius,
+  ExceptionInfo *exception)
+{
+  Image
+    *reduce_image;
+
+  reduce_image=StatisticImage(image,NonpeakStatistic,(size_t) radius,(size_t)
+    radius,exception);
+  return(reduce_image);
+}
+\f
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                                                                             %
+%                                                                             %
+%                                                                             %
 %   R e s e t I m a g e A t t r i b u t e I t e r a t o r                     %
 %                                                                             %
 %                                                                             %
@@ -5739,12 +5870,12 @@ MagickExport MagickBooleanType SetExceptionInfo(ExceptionInfo *exception,
 */
 MagickExport void SetImage(Image *image,const Quantum opacity)
 {
-  ssize_t
-    y;
-
   PixelPacket
     background_color;
 
+  ssize_t
+    y;
+
   (void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v6.2.0");
   assert(image != (Image *) NULL);
   if (image->debug != MagickFalse)
@@ -6437,12 +6568,12 @@ MagickExport unsigned int ThresholdImage(Image *image,const double threshold)
     indexes=GetAuthenticIndexQueue(image);
     for (x=0; x < (ssize_t) image->columns; x++)
     {
-      index=(IndexPacket) ((MagickRealType)
-        PixelIntensityToQuantum(q) <= threshold ? 0 : 1);
-      indexes[x]=index;
-      q->red=image->colormap[(ssize_t) index].red;
-      q->green=image->colormap[(ssize_t) index].green;
-      q->blue=image->colormap[(ssize_t) index].blue;
+      index=(IndexPacket) ((MagickRealType) PixelIntensityToQuantum(q) <=
+        threshold ? 0 : 1);
+      SetIndexPixelComponent(indexes+x,index);
+      SetRedPixelComponent(q,image->colormap[(ssize_t) index].red);
+      SetGreenPixelComponent(q,image->colormap[(ssize_t) index].green);
+      SetBluePixelComponent(q,image->colormap[(ssize_t) index].blue);
       q++;
     }
     if (!SyncAuthenticPixels(image,&image->exception))
@@ -6556,23 +6687,20 @@ MagickExport unsigned int ThresholdImageChannel(Image *image,
       {
         index=(IndexPacket) ((MagickRealType)
           PixelIntensityToQuantum(q) <= pixel.red ? 0 : 1);
-        indexes[x]=index;
-        q->red=image->colormap[(ssize_t) index].red;
-        q->green=image->colormap[(ssize_t) index].green;
-        q->blue=image->colormap[(ssize_t) index].blue;
+        SetIndexPixelComponent(indexes+x,index);
+        SetRedPixelComponent(q,image->colormap[(ssize_t) index].red);
+        SetGreenPixelComponent(q,image->colormap[(ssize_t) index].green);
+        SetBluePixelComponent(q,image->colormap[(ssize_t) index].blue);
         q++;
       }
     else
       for (x=0; x < (ssize_t) image->columns; x++)
       {
-        q->red=(Quantum) ((MagickRealType)
-          q->red <= pixel.red ? 0 : QuantumRange);
-        q->green=(Quantum) ((MagickRealType)
-          q->green <= pixel.green ? 0 : QuantumRange);
-        q->blue=(Quantum) ((MagickRealType)
-          q->blue <= pixel.blue ? 0 : QuantumRange);
-        q->opacity=(Quantum) ((MagickRealType)
-          q->opacity <= pixel.opacity ? 0 : QuantumRange);
+        SetRedPixelComponent(q,q->red <= pixel.red ? 0 : QuantumRange);
+        SetGreenPixelComponent(q,q->green <= pixel.green ? 0 : QuantumRange);
+        SetBluePixelComponent(q,q->blue <= pixel.blue ? 0 : QuantumRange);
+        SetOpacityPixelComponent(q,q->opacity <= pixel.opacity ? 0 :
+          QuantumRange);
         q++;
       }
     if (!SyncAuthenticPixels(image,&image->exception))
@@ -6783,12 +6911,12 @@ MagickExport MagickBooleanType TransparentImage(Image *image,
 {
 #define TransparentImageTag  "Transparent/Image"
 
-  ssize_t
-    y;
-
   MagickBooleanType
     proceed;
 
+  ssize_t
+    y;
+
   /*
     Make image color transparent.
   */