]> granicus.if.org Git - imagemagick/commitdiff
(no commit message)
authorcristy <urban-warrior@git.imagemagick.org>
Wed, 29 Aug 2012 21:00:11 +0000 (21:00 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Wed, 29 Aug 2012 21:00:11 +0000 (21:00 +0000)
Magick++/lib/Drawable.cpp
Magick++/lib/Image.cpp
Magick++/lib/Options.cpp
MagickCore/gem.c
MagickCore/gem.h
MagickCore/pixel-accessor.h

index 2642a7c73d32f5190ba0029e0ac55dc2663cffdf..a63228c0d6f4df40b824ae7bdd2ece0b394c143d 100644 (file)
@@ -9,9 +9,9 @@
 #define MAGICK_PLUSPLUS_IMPLEMENTATION 1
 #define MAGICK_DRAWABLE_IMPLEMENTATION
 
+#include "Magick++/Include.h"
 #include <math.h>
 #include <string>
-#include "Magick++/Include.h"
 
 #include "Magick++/Drawable.h"
 #include "Magick++/Image.h"
index c61217e6768e41af9a7cd909a81eb2f111b39e97..0e0b54e77a92781b3e7bc07efd2fde3372bab254 100644 (file)
@@ -8,12 +8,12 @@
 #define MAGICKCORE_IMPLEMENTATION  1
 #define MAGICK_PLUSPLUS_IMPLEMENTATION 1
 
+#include "Magick++/Include.h"
 #include <cstdlib>
 #include <string>
 #include <string.h>
 #include <errno.h>
 #include <math.h>
-#include "Magick++/Include.h"
 
 using namespace std;
 
index 0de052685b6f0040b5262e552741a1c34b5402c6..7ff7bfe4e1560ec54e072895cd82b2c30e3c8124 100644 (file)
 #define MAGICKCORE_IMPLEMENTATION  1
 #define MAGICK_PLUSPLUS_IMPLEMENTATION 1
 
+#include "Magick++/Include.h"
 #include <string>
 #include <string.h>
 #include <stdlib.h>
 #include <math.h>
-#include "Magick++/Include.h"
+
 #include "Magick++/Options.h"
 #include "Magick++/Functions.h"
 #include "Magick++/Exception.h"
index 64608bc357b787c3ac8b966f821624ab5259a734..0d6ee4036608c33b8c52fe23ac95424f52888739 100644 (file)
@@ -1012,3 +1012,61 @@ MagickPrivate size_t  GetOptimalKernelWidth(const double radius,
 {
   return(GetOptimalKernelWidth1D(radius,sigma));
 }
+\f
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%   I n v e r s e s R G B C o m p a n d o r                                   %
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%  InversesRGBCompandor() removes the gamma function from a sRGB pixel.
+%
+%  The format of the InversesRGBCompandor method is:
+%
+%      double InversesRGBCompandor(const double pixel)
+%
+%  A description of each parameter follows:
+%
+%    o pixel: the pixel.
+%
+*/
+MagickExport double InversesRGBCompandor(const double pixel)
+{
+  if (pixel <= (0.0404482362771076*QuantumRange))
+    return(pixel/12.92);
+  return(QuantumRange*pow((QuantumScale*pixel+0.055)/1.055,2.4));
+}
+\f
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%   s R G B C o m p a n d o r                                                 %
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%  sRGBCompandor() adds the gamma function to a sRGB pixel.
+%
+%  The format of the sRGBCompandor method is:
+%
+%      double sRGBCompandor(const double pixel)
+%
+%  A description of each parameter follows:
+%
+%    o pixel: the pixel.
+%
+*/
+MagickExport double sRGBCompandor(const double pixel)
+{
+  if (pixel <= (0.0031306684425005883*QuantumRange))
+    return(12.92*pixel);
+  return(QuantumRange*(1.055*pow(QuantumScale*pixel,1.0/2.4)-0.055));
+}
index 9dc8de6128b3c125a9cdfb0925091191d1b6f80d..4fc348d9c4d9291bd620fa4b29cad840cfc10ba9 100644 (file)
@@ -26,7 +26,9 @@ extern "C" {
 #include <MagickCore/random_.h>
 
 extern MagickExport double
-  ExpandAffine(const AffineMatrix *);
+  ExpandAffine(const AffineMatrix *),
+  InversesRGBCompandor(const double),
+  sRGBCompandor(const double);
 
 extern MagickExport void
   ConvertHSLToRGB(const double,const double,const double,double *,double *,
index 8916ab0aec9690c606a92b2ceaed99873ebc8373..d8a4900938894c477f0273f2cfeae4bee30e095e 100644 (file)
 extern "C" {
 #endif
 
-#include <math.h>
 #include <MagickCore/cache.h>
 #include <MagickCore/cache-view.h>
 #include <MagickCore/color.h>
 #include <MagickCore/colorspace.h>
+#include <MagickCore/gem.h>
 #include <MagickCore/image.h>
 
 #undef index
 
-static inline double InversesRGBCompandor(const double pixel)
-{
-  if (pixel <= (0.0404482362771076*QuantumRange))
-    return(pixel/12.92);
-  return(QuantumRange*pow((QuantumScale*pixel+0.055)/1.055,2.4));
-}
-
-static inline double sRGBCompandor(const double pixel)
-{
-  if (pixel <= (0.0031306684425005883*QuantumRange))
-    return(12.92*pixel);
-  return(QuantumRange*(1.055*pow(QuantumScale*pixel,1.0/2.4)-0.055));
-}
-
 static inline Quantum GetPixela(const Image *restrict image,
   const Quantum *restrict pixel)
 {
@@ -400,6 +386,11 @@ static inline PixelTrait GetPixelYellowTraits(const Image *restrict image)
   return(image->channel_map[YellowPixelChannel].traits);
 }
 
+static inline double AbsolutePixelValue(const double x)
+{
+  return(x < 0.0 ? -x : x);
+}
+
 static inline MagickBooleanType IsPixelEquivalent(const Image *restrict image,
   const Quantum *restrict p,const PixelInfo *restrict q)
 {
@@ -411,9 +402,9 @@ static inline MagickBooleanType IsPixelEquivalent(const Image *restrict image,
   red=(double) p[image->channel_map[RedPixelChannel].offset];
   green=(double) p[image->channel_map[GreenPixelChannel].offset];
   blue=(double) p[image->channel_map[BluePixelChannel].offset];
-  if ((fabs(red-q->red) < MagickEpsilon) &&
-      (fabs(green-q->green) < MagickEpsilon) &&
-      (fabs(blue-q->blue) < MagickEpsilon))
+  if ((AbsolutePixelValue(red-q->red) < MagickEpsilon) &&
+      (AbsolutePixelValue(green-q->green) < MagickEpsilon) &&
+      (AbsolutePixelValue(blue-q->blue) < MagickEpsilon))
     return(MagickTrue);
   return(MagickFalse);
 }
@@ -429,7 +420,8 @@ static inline MagickBooleanType IsPixelGray(const Image *restrict image,
   red=(double) pixel[image->channel_map[RedPixelChannel].offset];
   green=(double) pixel[image->channel_map[GreenPixelChannel].offset];
   blue=(double) pixel[image->channel_map[BluePixelChannel].offset];
-  if ((fabs(red-green) < MagickEpsilon) && (fabs(green-blue) < MagickEpsilon))
+  if ((AbsolutePixelValue(red-green) < MagickEpsilon) &&
+      (AbsolutePixelValue(green-blue) < MagickEpsilon))
     return(MagickTrue);
   return(MagickFalse);
 }
@@ -437,27 +429,30 @@ static inline MagickBooleanType IsPixelGray(const Image *restrict image,
 static inline MagickBooleanType IsPixelInfoEquivalent(
   const PixelInfo *restrict p,const PixelInfo *restrict q)
 {
-  if ((p->alpha_trait == BlendPixelTrait) && (q->alpha_trait != BlendPixelTrait) &&
-      (fabs(p->alpha-OpaqueAlpha) >= MagickEpsilon))
+  if ((p->alpha_trait == BlendPixelTrait) &&
+      (q->alpha_trait != BlendPixelTrait) &&
+      (AbsolutePixelValue(p->alpha-OpaqueAlpha) >= MagickEpsilon))
     return(MagickFalse);
-  if ((q->alpha_trait == BlendPixelTrait) && (p->alpha_trait != BlendPixelTrait) &&
-      (fabs(q->alpha-OpaqueAlpha)) >= MagickEpsilon)
+  if ((q->alpha_trait == BlendPixelTrait) &&
+      (p->alpha_trait != BlendPixelTrait) &&
+      (AbsolutePixelValue(q->alpha-OpaqueAlpha)) >= MagickEpsilon)
     return(MagickFalse);
-  if ((p->alpha_trait == BlendPixelTrait) && (q->alpha_trait == BlendPixelTrait))
+  if ((p->alpha_trait == BlendPixelTrait) &&
+      (q->alpha_trait == BlendPixelTrait))
     {
-      if (fabs(p->alpha-q->alpha) >= MagickEpsilon)
+      if (AbsolutePixelValue(p->alpha-q->alpha) >= MagickEpsilon)
         return(MagickFalse);
-      if (fabs(p->alpha-TransparentAlpha) < MagickEpsilon)
+      if (AbsolutePixelValue(p->alpha-TransparentAlpha) < MagickEpsilon)
         return(MagickTrue);
     }
-  if (fabs(p->red-q->red) >= MagickEpsilon)
+  if (AbsolutePixelValue(p->red-q->red) >= MagickEpsilon)
     return(MagickFalse);
-  if (fabs(p->green-q->green) >= MagickEpsilon)
+  if (AbsolutePixelValue(p->green-q->green) >= MagickEpsilon)
     return(MagickFalse);
-  if (fabs(p->blue-q->blue) >= MagickEpsilon)
+  if (AbsolutePixelValue(p->blue-q->blue) >= MagickEpsilon)
     return(MagickFalse);
   if ((p->colorspace == CMYKColorspace) &&
-      (fabs(p->black-q->black) >= MagickEpsilon))
+      (AbsolutePixelValue(p->black-q->black) >= MagickEpsilon))
     return(MagickFalse);
   return(MagickTrue);
 }
@@ -471,11 +466,13 @@ static inline MagickBooleanType IsPixelMonochrome(const Image *restrict image,
     red;
 
   red=(double) pixel[image->channel_map[RedPixelChannel].offset];
-  if ((fabs(red) >= MagickEpsilon) || (fabs(red-QuantumRange) >= MagickEpsilon))
+  if ((AbsolutePixelValue(red) >= MagickEpsilon) ||
+      (AbsolutePixelValue(red-QuantumRange) >= MagickEpsilon))
     return(MagickFalse);
   green=(double) pixel[image->channel_map[GreenPixelChannel].offset];
   blue=(double) pixel[image->channel_map[BluePixelChannel].offset];
-  if ((fabs(red-green) < MagickEpsilon) && (fabs(green-blue) < MagickEpsilon))
+  if ((AbsolutePixelValue(red-green) < MagickEpsilon) &&
+      (AbsolutePixelValue(green-blue) < MagickEpsilon))
     return(MagickTrue);
   return(MagickFalse);
 }
@@ -486,8 +483,8 @@ static inline MagickBooleanType IsPixelInfoGray(
   if ((pixel_info->colorspace != GRAYColorspace) &&
       (pixel_info->colorspace != RGBColorspace))
     return(MagickFalse);
-  if ((fabs(pixel_info->red-pixel_info->green) < MagickEpsilon) &&
-      (fabs(pixel_info->green-pixel_info->blue) < MagickEpsilon))
+  if ((AbsolutePixelValue(pixel_info->red-pixel_info->green) < MagickEpsilon) &&
+      (AbsolutePixelValue(pixel_info->green-pixel_info->blue) < MagickEpsilon))
     return(MagickTrue);
   return(MagickFalse);
 }
@@ -498,11 +495,11 @@ static inline MagickBooleanType IsPixelInfoMonochrome(
   if ((pixel_info->colorspace != GRAYColorspace) &&
       (pixel_info->colorspace != RGBColorspace))
     return(MagickFalse);
-  if ((fabs(pixel_info->red) >= MagickEpsilon) ||
-      (fabs(pixel_info->red-QuantumRange) >= MagickEpsilon))
+  if ((AbsolutePixelValue(pixel_info->red) >= MagickEpsilon) ||
+      (AbsolutePixelValue(pixel_info->red-QuantumRange) >= MagickEpsilon))
     return(MagickFalse);
-  if ((fabs(pixel_info->red-pixel_info->green) < MagickEpsilon) &&
-      (fabs(pixel_info->green-pixel_info->blue) < MagickEpsilon))
+  if ((AbsolutePixelValue(pixel_info->red-pixel_info->green) < MagickEpsilon) &&
+      (AbsolutePixelValue(pixel_info->green-pixel_info->blue) < MagickEpsilon))
     return(MagickTrue);
   return(MagickFalse);
 }