]> granicus.if.org Git - imagemagick/commitdiff
Added interpolate and resample to Magick++.
authordirk <dirk@git.imagemagick.org>
Sat, 7 Dec 2013 22:40:01 +0000 (22:40 +0000)
committerdirk <dirk@git.imagemagick.org>
Sat, 7 Dec 2013 22:40:01 +0000 (22:40 +0000)
Added fxImages to STL.h.

Magick++/lib/Image.cpp
Magick++/lib/Magick++/Image.h
Magick++/lib/Magick++/Include.h
Magick++/lib/Magick++/STL.h

index ca244826fdeb29635431ac1fda27d9251d9455bc..25503aa77f73e3c6e5ab208320b5210b17316c77 100644 (file)
@@ -1019,6 +1019,17 @@ Magick::InterlaceType Magick::Image::interlaceType(void) const
   return(constImage()->interlace);
 }
 
+void Magick::Image::interpolate(const PixelInterpolateMethod interpolate_)
+{
+  modifyImage();
+  image()->interpolate=interpolate_;
+}
+
+Magick::PixelInterpolateMethod Magick::Image::interpolate(void) const
+{
+  return constImage()->interpolate;
+}
+
 void Magick::Image::iptcProfile(const Magick::Blob &iptcProfile_)
 {
   modifyImage();
@@ -3688,7 +3699,32 @@ void Magick::Image::reduceNoise(const double order_)
   ThrowPPException;
 }
 
-void Magick::Image::resize( const Geometry &geometry_ )
+void Magick::Image::resample(const Geometry &geometry_)
+{
+  MagickCore::Image
+    *newImage;
+
+  size_t
+    height=rows(),
+    width=columns();
+
+  ssize_t
+    x=0,
+    y=0;
+
+  // Calculate new size.  This code should be supported using binary arguments
+  // in the ImageMagick library.
+  ParseMetaGeometry(static_cast<std::string>(geometry_).c_str(),&x,&y,&width,
+    &height);
+
+  GetPPException;
+  newImage=ResampleImage(constImage(),width,height,image()->filter,
+    &exceptionInfo);
+  replaceImage(newImage);
+  ThrowPPException;
+}
+
+void Magick::Image::resize(const Geometry &geometry_)
 {
   MagickCore::Image
     *newImage;
index 076dcdfcb18cf98c2ee092a8274ac537b6975e4c..d95b9e9965c6dd143136350972d47e1be74716d7 100644 (file)
@@ -315,6 +315,10 @@ namespace Magick
     void interlaceType(const InterlaceType interlace_);
     InterlaceType interlaceType(void) const;
 
+    // Pixel color interpolation method to use
+    void interpolate(const PixelInterpolateMethod interpolate_);
+    PixelInterpolateMethod interpolate(void) const;
+
     // IPTC profile (BLOB)
     void iptcProfile(const Blob &iptcProfile_);
     Blob iptcProfile(void) const;
@@ -1127,6 +1131,9 @@ namespace Magick
     void reduceNoise(void);
     void reduceNoise(const double order_);
 
+    // Resize image in terms of its pixel size.
+    void resample(const Geometry &geometry_);
+
     // Resize image to specified size.
     void resize(const Geometry &geometry_);
 
index c7de876b3bd769f0f77d9c7bd9d5de0fd94a2b60..c93938f88d25552b601a0ec2929ec7068a4e882c 100644 (file)
@@ -610,6 +610,21 @@ namespace Magick
   using MagickCore::JPEGInterlace;
   using MagickCore::PNGInterlace;
 
+  // Pixel interpolation methods
+  using MagickCore::PixelInterpolateMethod;
+  using MagickCore::UndefinedInterpolatePixel;
+  using MagickCore::AverageInterpolatePixel;
+  using MagickCore::Average9InterpolatePixel;
+  using MagickCore::Average16InterpolatePixel;
+  using MagickCore::BackgroundInterpolatePixel;
+  using MagickCore::BilinearInterpolatePixel;
+  using MagickCore::BlendInterpolatePixel;
+  using MagickCore::CatromInterpolatePixel;
+  using MagickCore::IntegerInterpolatePixel;
+  using MagickCore::MeshInterpolatePixel;
+  using MagickCore::NearestInterpolatePixel;
+  using MagickCore::SplineInterpolatePixel;
+
   // Layer method
   using MagickCore::LayerMethod;
   using MagickCore::UndefinedLayer;
@@ -1235,6 +1250,7 @@ namespace Magick
   using MagickCore::RegistryWarning;
   using MagickCore::RelinquishMagickMemory;
   using MagickCore::RemapImage;
+  using MagickCore::ResampleImage;
   using MagickCore::ResizeImage;
   using MagickCore::ResizeMagickMemory;
   using MagickCore::ResourceLimitError;
index 35f033ed5450548e1e88732e064588732c475347..2dea2ce031e7485f7f0f8bcbb25aa1b4356ddf4e 100644 (file)
@@ -2275,6 +2275,27 @@ namespace Magick
     (void) MagickCore::DestroyExceptionInfo( &exceptionInfo );
   }
 
+  // Applies a mathematical expression to a sequence of images.
+  template <class InputIterator>
+  void fxImages(Image *fxImage_,InputIterator first_,InputIterator last_,
+    const std::string expression)
+  {
+    MagickCore::ExceptionInfo
+      exceptionInfo;
+
+    MagickCore::Image
+      *image;
+
+    MagickCore::GetExceptionInfo(&exceptionInfo);
+    linkImages(first_,last_);
+    image=FxImageChannel(first_->constImage(),DefaultChannels,
+      expression.c_str(),&exceptionInfo);
+    unlinkImages(first_,last_);
+    fxImage_->replaceImage(image);
+    throwException(exceptionInfo);
+    (void) DestroyExceptionInfo(&exceptionInfo);
+  }
+
   // Replace the colors of a sequence of images with the closest color
   // from a reference image.
   // Set dither_ to true to enable dithering.  Set measureError_ to