From: dirk Date: Sat, 7 Dec 2013 22:40:01 +0000 (+0000) Subject: Added interpolate and resample to Magick++. X-Git-Tag: 7.0.1-0~3055 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f8c6db577bf34604c1b62d0ac8ae0a3010750493;p=imagemagick Added interpolate and resample to Magick++. Added fxImages to STL.h. --- diff --git a/Magick++/lib/Image.cpp b/Magick++/lib/Image.cpp index ca244826f..25503aa77 100644 --- a/Magick++/lib/Image.cpp +++ b/Magick++/lib/Image.cpp @@ -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(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; diff --git a/Magick++/lib/Magick++/Image.h b/Magick++/lib/Magick++/Image.h index 076dcdfcb..d95b9e996 100644 --- a/Magick++/lib/Magick++/Image.h +++ b/Magick++/lib/Magick++/Image.h @@ -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_); diff --git a/Magick++/lib/Magick++/Include.h b/Magick++/lib/Magick++/Include.h index c7de876b3..c93938f88 100644 --- a/Magick++/lib/Magick++/Include.h +++ b/Magick++/lib/Magick++/Include.h @@ -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; diff --git a/Magick++/lib/Magick++/STL.h b/Magick++/lib/Magick++/STL.h index 35f033ed5..2dea2ce03 100644 --- a/Magick++/lib/Magick++/STL.h +++ b/Magick++/lib/Magick++/STL.h @@ -2275,6 +2275,27 @@ namespace Magick (void) MagickCore::DestroyExceptionInfo( &exceptionInfo ); } + // Applies a mathematical expression to a sequence of images. + template + 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