bool _raisedFlag;
};
+ class MagickPPExport ReadOptions
+ {
+ public:
+
+ // Default constructor
+ ReadOptions(void);
+
+ // Copy constructor
+ ReadOptions(const ReadOptions& options_);
+
+ // Destructor
+ ~ReadOptions();
+
+ // Vertical and horizontal resolution in pixels of the image
+ void density(const Geometry &geomery_);
+ Geometry density(void) const;
+
+ // Image depth (8 or 16)
+ void depth(size_t depth_);
+ size_t depth(void) const;
+
+ // Image size (required for raw formats)
+ void size(const Geometry &geometry_);
+ Geometry size(void) const;
+
+ //
+ // Internal implementation methods. Please do not use.
+ //
+
+ MagickCore::ImageInfo *imageInfo(void);
+
+ private:
+
+ // Assignment not supported
+ ReadOptions& operator=(const ReadOptions&);
+
+ MagickCore::ImageInfo *_imageInfo;
+ };
+
// Reduce noise in image using a noise peak elimination filter
class MagickPPExport reduceNoiseImage : public std::unary_function<Image&,void>
{
// Read images into existing container (appending to container)
// FIXME: need a way to specify options like size, depth, and density.
- template <class Container>
- void readImages( Container *sequence_,
- const std::string &imageSpec_ ) {
- MagickCore::ImageInfo *imageInfo = MagickCore::CloneImageInfo(0);
- imageSpec_.copy( imageInfo->filename, MaxTextExtent-1 );
- imageInfo->filename[ imageSpec_.length() ] = 0;
+ template<class Container>
+ void readImages(Container *sequence_,const std::string &imageSpec_,
+ ReadOptions &options)
+ {
+ MagickCore::Image
+ *images;
+
+ MagickCore::ImageInfo
+ *imageInfo;
+
+ imageInfo=options.imageInfo();
+ imageSpec_.copy(imageInfo->filename,MaxTextExtent-1);
+ imageInfo->filename[imageSpec_.length()] = 0;
GetPPException;
- MagickCore::Image* images = MagickCore::ReadImage( imageInfo, exceptionInfo );
- MagickCore::DestroyImageInfo(imageInfo);
- insertImages( sequence_, images);
+ images=MagickCore::ReadImage(imageInfo,exceptionInfo);
+ insertImages(sequence_,images);
ThrowPPException;
}
- template <class Container>
- void readImages( Container *sequence_,
- const Blob &blob_ ) {
- MagickCore::ImageInfo *imageInfo = MagickCore::CloneImageInfo(0);
+
+ template<class Container>
+ void readImages(Container *sequence_,const std::string &imageSpec_)
+ {
+ ReadOptions options;
+ readImages(sequence_,imageSpec_,options);
+ }
+
+ template<class Container>
+ void readImages(Container *sequence_,const Blob &blob_,ReadOptions &options)
+ {
+ MagickCore::Image
+ *images;
+
+ MagickCore::ImageInfo
+ *imageInfo;
+
GetPPException;
- MagickCore::Image *images = MagickCore::BlobToImage( imageInfo,
- blob_.data(),
- blob_.length(), exceptionInfo );
- MagickCore::DestroyImageInfo(imageInfo);
- insertImages( sequence_, images );
+ images=MagickCore::BlobToImage(imageInfo,blob_.data(),blob_.length(),
+ exceptionInfo);
+ insertImages(sequence_,images);
ThrowPPException;
}
+ template<class Container>
+ void readImages(Container *sequence_,const Blob &blob_)
+ {
+ ReadOptions options;
+ readImages(sequence_,blob_,options);
+ }
+
// Returns a separate grayscale image for each channel specified.
template <class Container >
void separateImages( Container *separatedImages_,
#define MAGICKCORE_IMPLEMENTATION 1
#define MAGICK_PLUSPLUS_IMPLEMENTATION 1
+#include <Magick++/Functions.h>
#include <Magick++/Image.h>
#include <Magick++/STL.h>
image_.raise( _geometry, _raisedFlag );
}
+Magick::ReadOptions::ReadOptions(void)
+ : _imageInfo(static_cast<ImageInfo*>(AcquireMagickMemory(
+ sizeof(ImageInfo))))
+{
+ GetImageInfo(_imageInfo);
+}
+
+Magick::ReadOptions::ReadOptions(const Magick::ReadOptions& options_)
+ : _imageInfo(CloneImageInfo(options_._imageInfo))
+{
+}
+
+Magick::ReadOptions::~ReadOptions()
+{
+ _imageInfo=DestroyImageInfo(_imageInfo);
+}
+
+void Magick::ReadOptions::density(const Magick::Geometry &density_)
+{
+ if (!density_.isValid())
+ _imageInfo->density=(char *) RelinquishMagickMemory(_imageInfo->density);
+ else
+ Magick::CloneString(&_imageInfo->density,density_);
+}
+
+Magick::Geometry Magick::ReadOptions::density(void) const
+{
+ if (_imageInfo->density)
+ return(Geometry(_imageInfo->density));
+
+ return(Geometry());
+}
+
+void Magick::ReadOptions::depth(size_t depth_)
+{
+ _imageInfo->depth=depth_;
+}
+
+size_t Magick::ReadOptions::depth(void) const
+{
+ return(_imageInfo->depth);
+}
+
+void Magick::ReadOptions::size(const Geometry &geometry_)
+{
+ _imageInfo->size=(char *) RelinquishMagickMemory(_imageInfo->size);
+
+ if ( geometry_.isValid() )
+ Magick::CloneString(&_imageInfo->size,geometry_);
+}
+
+Magick::Geometry Magick::ReadOptions::size(void) const
+{
+ if (_imageInfo->size)
+ return(Geometry(_imageInfo->size));
+
+ return(Geometry());
+}
+
+MagickCore::ImageInfo *Magick::ReadOptions::imageInfo(void)
+{
+ return(_imageInfo);
+}
+
// Reduce noise in image using a noise peak elimination filter
Magick::reduceNoiseImage::reduceNoiseImage( void )
: _order(3)