10#ifndef Magick_STL_header
11#define Magick_STL_header
13#include "Magick++/Include.h"
20#include "Magick++/CoderInfo.h"
21#include "Magick++/Drawable.h"
22#include "Magick++/Exception.h"
23#include "Magick++/Montage.h"
47 class MagickPPExport adaptiveBlurImage
50 adaptiveBlurImage(
const double radius_ = 1,
const double sigma_ = 0.5 );
52 void operator()(
Image &image_ )
const;
63 class MagickPPExport adaptiveThresholdImage
66 adaptiveThresholdImage(
const size_t width_,
68 const ::ssize_t offset_ = 0 );
70 void operator()(
Image &image_ )
const;
79 class MagickPPExport addNoiseImage
82 addNoiseImage ( NoiseType noiseType_ );
84 void operator()(
Image &image_ )
const;
91 class MagickPPExport affineTransformImage
96 void operator()(
Image &image_ )
const;
103 class MagickPPExport annotateImage
107 annotateImage (
const std::string &text_,
112 annotateImage (
const std::string &text_,
114 const GravityType gravity_ );
118 annotateImage (
const std::string &text_,
120 const GravityType gravity_,
121 const double degrees_ );
125 annotateImage (
const std::string &text_,
126 const GravityType gravity_ );
128 void operator()(
Image &image_ )
const;
131 const std::string _text;
133 const GravityType _gravity;
134 const double _degrees;
138 class MagickPPExport blurImage
141 blurImage(
const double radius_ = 1,
const double sigma_ = 0.5 );
143 void operator()(
Image &image_ )
const;
151 class MagickPPExport borderImage
154 borderImage(
const Geometry &geometry_ = borderGeometryDefault );
156 void operator()(
Image &image_ )
const;
163 class MagickPPExport channelImage
166 channelImage(
const ChannelType channel_ );
168 void operator()(
Image &image_ )
const;
171 ChannelType _channel;
175 class MagickPPExport charcoalImage
178 charcoalImage(
const double radius_ = 1,
const double sigma_ = 0.5 );
180 void operator()(
Image &image_ )
const;
188 class MagickPPExport chopImage
191 chopImage(
const Geometry &geometry_ );
193 void operator()(
Image &image_ )
const;
202 class MagickPPExport cdlImage
205 cdlImage(
const std::string &cdl_ );
207 void operator()(
Image &image_ )
const;
214 class MagickPPExport colorizeImage
217 colorizeImage(
const unsigned int opacityRed_,
218 const unsigned int opacityGreen_,
219 const unsigned int opacityBlue_,
220 const Color &penColor_ );
222 colorizeImage(
const unsigned int opacity_,
223 const Color &penColor_ );
225 void operator()(
Image &image_ )
const;
228 unsigned int _opacityRed;
229 unsigned int _opacityGreen;
230 unsigned int _opacityBlue;
236 class MagickPPExport colorMatrixImage
239 colorMatrixImage(
const size_t order_,
240 const double *color_matrix_ );
242 void operator()(
Image &image_ )
const;
246 const double *_color_matrix;
250 class MagickPPExport colorSpaceImage
253 colorSpaceImage( ColorspaceType colorSpace_ );
255 void operator()(
Image &image_ )
const;
258 ColorspaceType _colorSpace;
262 class MagickPPExport commentImage
265 commentImage(
const std::string &comment_ );
267 void operator()(
Image &image_ )
const;
270 std::string _comment;
275 class MagickPPExport compositeImage
278 compositeImage(
const Image &compositeImage_,
281 CompositeOperator compose_ = InCompositeOp );
283 compositeImage(
const Image &compositeImage_,
285 CompositeOperator compose_ = InCompositeOp );
287 void operator()(
Image &image_ )
const;
290 Image _compositeImage;
293 CompositeOperator _compose;
297 class MagickPPExport contrastImage
300 contrastImage(
const size_t sharpen_ );
302 void operator()(
Image &image_ )
const;
309 class MagickPPExport cropImage
312 cropImage(
const Geometry &geometry_ );
314 void operator()(
Image &image_ )
const;
321 class MagickPPExport cycleColormapImage
324 cycleColormapImage( const ::ssize_t amount_ );
326 void operator()(
Image &image_ )
const;
333 class MagickPPExport despeckleImage
336 despeckleImage(
void );
338 void operator()(
Image &image_ )
const;
347 class MagickPPExport distortImage
350 distortImage(
const Magick::DistortImageMethod method_,
351 const size_t number_arguments_,
352 const double *arguments_,
353 const bool bestfit_ );
355 distortImage(
const Magick::DistortImageMethod method_,
356 const size_t number_arguments_,
357 const double *arguments_ );
359 void operator()(
Image &image_ )
const;
362 DistortImageMethod _method;
363 size_t _number_arguments;
364 const double *_arguments;
369 class MagickPPExport drawImage
374 drawImage(
const Drawable &drawable_ );
377 drawImage(
const DrawableList &drawable_ );
379 void operator()(
Image &image_ )
const;
382 DrawableList _drawableList;
386 class MagickPPExport edgeImage
389 edgeImage(
const double radius_ = 0.0 );
391 void operator()(
Image &image_ )
const;
398 class MagickPPExport embossImage
402 embossImage(
const double radius_,
const double sigma_ );
404 void operator()(
Image &image_ )
const;
412 class MagickPPExport enhanceImage
415 enhanceImage(
void );
417 void operator()(
Image &image_ )
const;
423 class MagickPPExport equalizeImage
426 equalizeImage(
void );
428 void operator()(
Image &image_ )
const;
434 class MagickPPExport fillColorImage
437 fillColorImage(
const Color &fillColor_ );
439 void operator()(
Image &image_ )
const;
446 class MagickPPExport flipImage
451 void operator()(
Image &image_ )
const;
457 class MagickPPExport floodFillColorImage
463 floodFillColorImage( const ::ssize_t x_,
465 const Color &fillColor_ );
467 floodFillColorImage(
const Geometry &point_,
468 const Color &fillColor_ );
473 floodFillColorImage( const ::ssize_t x_,
475 const Color &fillColor_,
476 const Color &borderColor_ );
478 floodFillColorImage(
const Geometry &point_,
479 const Color &fillColor_,
480 const Color &borderColor_ );
482 void operator()(
Image &image_ )
const;
492 class MagickPPExport floodFillTextureImage
498 floodFillTextureImage( const ::ssize_t x_,
500 const Image &texture_ );
502 floodFillTextureImage(
const Geometry &point_,
503 const Image &texture_ );
508 floodFillTextureImage( const ::ssize_t x_,
510 const Image &texture_,
511 const Color &borderColor_ );
513 floodFillTextureImage(
const Geometry &point_,
514 const Image &texture_,
515 const Color &borderColor_ );
517 void operator()(
Image &image_ )
const;
527 class MagickPPExport flopImage
532 void operator()(
Image &image_ )
const;
538 class MagickPPExport frameImage
541 frameImage(
const Geometry &geometry_ = frameGeometryDefault );
543 frameImage(
const size_t width_,
const size_t height_,
544 const ::ssize_t innerBevel_ = 6, const ::ssize_t outerBevel_ = 6 );
546 void operator()(
Image &image_ )
const;
551 ::ssize_t _outerBevel;
552 ::ssize_t _innerBevel;
556 class MagickPPExport gammaImage
559 gammaImage(
const double gamma_ );
561 gammaImage (
const double gammaRed_,
562 const double gammaGreen_,
563 const double gammaBlue_ );
565 void operator()(
Image &image_ )
const;
577 class MagickPPExport gaussianBlurImage
580 gaussianBlurImage(
const double width_,
const double sigma_ );
582 void operator()(
Image &image_ )
const;
590 class MagickPPExport haldClutImage
593 haldClutImage(
const Image &haldClutImage_ );
595 void operator()(
Image &image_ )
const;
598 Image _haldClutImage;
602 class MagickPPExport implodeImage
605 implodeImage(
const double factor_ = 50 );
607 void operator()(
Image &image_ )
const;
615 class MagickPPExport inverseFourierTransformImage
618 inverseFourierTransformImage(
const Image &phaseImage_ );
620 void operator()(
Image &image_ )
const;
628 class MagickPPExport isValidImage
631 isValidImage(
const bool isValid_ );
633 void operator()(
Image &image_ )
const;
640 class MagickPPExport labelImage
643 labelImage(
const std::string &label_ );
645 void operator()(
Image &image_ )
const;
653 class MagickPPExport levelImage
656 levelImage(
const double black_point,
657 const double white_point,
658 const double mid_point=1.0 );
660 void operator()(
Image &image_ )
const;
669 class MagickPPExport levelChannelImage
672 levelChannelImage(
const Magick::ChannelType channel,
673 const double black_point,
674 const double white_point,
675 const double mid_point=1.0 );
677 void operator()(
Image &image_ )
const;
680 Magick::ChannelType _channel;
687 class MagickPPExport magnifyImage
690 magnifyImage(
void );
692 void operator()(
Image &image_ )
const;
698 class MagickPPExport mapImage
701 mapImage(
const Image &mapImage_ ,
702 const bool dither_ =
false );
704 void operator()(
Image &image_ )
const;
712 class MagickPPExport matteFloodfillImage
715 matteFloodfillImage(
const Color &target_ ,
716 const unsigned int matte_,
717 const ::ssize_t x_, const ::ssize_t y_,
718 const PaintMethod method_ );
720 void operator()(
Image &image_ )
const;
732 class MagickPPExport medianFilterImage
735 medianFilterImage(
const double radius_ = 0.0 );
737 void operator()(
Image &image_ )
const;
744 class MagickPPExport mergeLayersImage
747 mergeLayersImage ( ImageLayerMethod layerMethod_ );
749 void operator()(
Image &image_ )
const;
752 ImageLayerMethod _layerMethod;
756 class MagickPPExport minifyImage
761 void operator()(
Image &image_ )
const;
767 class MagickPPExport modulateImage
770 modulateImage(
const double brightness_,
771 const double saturation_,
774 void operator()(
Image &image_ )
const;
784 class MagickPPExport negateImage
787 negateImage(
const bool grayscale_ =
false );
789 void operator()(
Image &image_ )
const;
797 class MagickPPExport normalizeImage
800 normalizeImage(
void );
802 void operator()(
Image &image_ )
const;
808 class MagickPPExport oilPaintImage
811 oilPaintImage(
const double radius_ = 3 );
813 void operator()(
Image &image_ )
const;
826 class MagickPPExport opacityImage
829 opacityImage(
const unsigned int opacity_ );
831 void operator()(
Image &image_ )
const;
834 unsigned int _opacity;
838 class MagickPPExport opaqueImage
841 opaqueImage(
const Color &opaqueColor_,
842 const Color &penColor_ );
844 void operator()(
Image &image_ )
const;
852 class MagickPPExport quantizeImage
855 quantizeImage(
const bool measureError_ =
false );
857 void operator()(
Image &image_ )
const;
865 class MagickPPExport raiseImage
868 raiseImage(
const Geometry &geometry_ = raiseGeometryDefault,
869 const bool raisedFlag_ =
false );
871 void operator()(
Image &image_ )
const;
878 class MagickPPExport ReadOptions
886 ReadOptions(
const ReadOptions& options_);
892 void density(
const Geometry &geometry_);
896 void depth(
size_t depth_);
897 size_t depth(
void)
const;
900 void quiet(
const bool quiet_);
901 bool quiet(
void)
const;
904 void size(
const Geometry &geometry_);
911 MagickCore::ImageInfo *imageInfo(
void);
916 ReadOptions& operator=(
const ReadOptions&);
918 MagickCore::ImageInfo *_imageInfo;
923 class MagickPPExport reduceNoiseImage
926 reduceNoiseImage(
void );
928 reduceNoiseImage (
const size_t order_ );
930 void operator()(
Image &image_ )
const;
937 class MagickPPExport resizeImage
940 resizeImage(
const Geometry &geometry_ );
942 void operator()(
Image &image_ )
const;
950 class MagickPPExport rollImage
955 rollImage( const ::ssize_t columns_, const ::ssize_t rows_ );
957 void operator()(
Image &image_ )
const;
965 class MagickPPExport rotateImage
968 rotateImage(
const double degrees_ );
970 void operator()(
Image &image_ )
const;
977 class MagickPPExport sampleImage
980 sampleImage(
const Geometry &geometry_ );
982 void operator()(
Image &image_ )
const;
989 class MagickPPExport scaleImage
992 scaleImage(
const Geometry &geometry_ );
994 void operator()(
Image &image_ )
const;
1004 class MagickPPExport segmentImage
1007 segmentImage(
const double clusterThreshold_ = 1.0,
1008 const double smoothingThreshold_ = 1.5 );
1010 void operator()(
Image &image_ )
const;
1013 double _clusterThreshold;
1014 double _smoothingThreshold;
1018 class MagickPPExport shadeImage
1021 shadeImage(
const double azimuth_ = 30,
1022 const double elevation_ = 30,
1023 const bool colorShading_ =
false );
1025 void operator()(
Image &image_ )
const;
1034 class MagickPPExport shadowImage
1037 shadowImage(
const double percent_opacity_ = 80,
const double sigma_ = 0.5,
1038 const ssize_t x_ = 5,
const ssize_t y_ = 5 );
1040 void operator()(
Image &image_ )
const;
1043 double _percent_opacity;
1050 class MagickPPExport sharpenImage
1053 sharpenImage(
const double radius_ = 1,
const double sigma_ = 0.5 );
1055 void operator()(
Image &image_ )
const;
1063 class MagickPPExport shaveImage
1066 shaveImage(
const Geometry &geometry_ );
1068 void operator()(
Image &image_ )
const;
1076 class MagickPPExport shearImage
1079 shearImage(
const double xShearAngle_,
1080 const double yShearAngle_ );
1082 void operator()(
Image &image_ )
const;
1085 double _xShearAngle;
1086 double _yShearAngle;
1091 class MagickPPExport solarizeImage
1094 solarizeImage(
const double factor_ );
1096 void operator()(
Image &image_ )
const;
1103 class MagickPPExport spliceImage
1106 spliceImage(
const Geometry &geometry_ );
1108 void operator()(
Image &image_ )
const;
1115 class MagickPPExport spreadImage
1118 spreadImage(
const size_t amount_ = 3 );
1120 void operator()(
Image &image_ )
const;
1127 class MagickPPExport steganoImage
1130 steganoImage(
const Image &waterMark_ );
1132 void operator()(
Image &image_ )
const;
1140 class MagickPPExport stereoImage
1143 stereoImage(
const Image &rightImage_ );
1145 void operator()(
Image &image_ )
const;
1152 class MagickPPExport strokeColorImage
1155 strokeColorImage(
const Color &strokeColor_ );
1157 void operator()(
Image &image_ )
const;
1164 class MagickPPExport swirlImage
1167 swirlImage(
const double degrees_ );
1169 void operator()(
Image &image_ )
const;
1176 class MagickPPExport textureImage
1179 textureImage(
const Image &texture_ );
1181 void operator()(
Image &image_ )
const;
1188 class MagickPPExport thresholdImage
1191 thresholdImage(
const double threshold_ );
1193 void operator()(
Image &image_ )
const;
1200 class MagickPPExport transformImage
1203 transformImage(
const Geometry &imageGeometry_ );
1205 transformImage(
const Geometry &imageGeometry_,
1208 void operator()(
Image &image_ )
const;
1216 class MagickPPExport transparentImage
1219 transparentImage(
const Color& color_ );
1221 void operator()(
Image &image_ )
const;
1228 class MagickPPExport trimImage
1233 void operator()(
Image &image_ )
const;
1239 class MagickPPExport waveImage
1242 waveImage(
const double amplitude_ = 25.0,
1243 const double wavelength_ = 150.0 );
1245 void operator()(
Image &image_ )
const;
1253 class MagickPPExport zoomImage
1256 zoomImage(
const Geometry &geometry_ );
1258 void operator()(
Image &image_ )
const;
1269 class MagickPPExport antiAliasImage
1272 antiAliasImage(
const bool flag_ );
1274 void operator()(
Image &image_ )
const;
1281 class MagickPPExport adjoinImage
1284 adjoinImage(
const bool flag_ );
1286 void operator()(
Image &image_ )
const;
1294 class MagickPPExport animationDelayImage
1297 animationDelayImage(
const size_t delay_ );
1299 void operator()(
Image &image_ )
const;
1307 class MagickPPExport animationIterationsImage
1310 animationIterationsImage(
const size_t iterations_ );
1312 void operator()(
Image &image_ )
const;
1319 class MagickPPExport backgroundColorImage
1322 backgroundColorImage(
const Color &color_ );
1324 void operator()(
Image &image_ )
const;
1331 class MagickPPExport backgroundTextureImage
1334 backgroundTextureImage(
const std::string &backgroundTexture_ );
1336 void operator()(
Image &image_ )
const;
1339 std::string _backgroundTexture;
1343 class MagickPPExport borderColorImage
1346 borderColorImage(
const Color &color_ );
1348 void operator()(
Image &image_ )
const;
1355 class MagickPPExport boxColorImage
1358 boxColorImage(
const Color &boxColor_ );
1360 void operator()(
Image &image_ )
const;
1367 class MagickPPExport chromaBluePrimaryImage
1370 chromaBluePrimaryImage(
const double x_,
const double y_ );
1372 void operator()(
Image &image_ )
const;
1380 class MagickPPExport chromaGreenPrimaryImage
1383 chromaGreenPrimaryImage(
const double x_,
const double y_ );
1385 void operator()(
Image &image_ )
const;
1393 class MagickPPExport chromaRedPrimaryImage
1396 chromaRedPrimaryImage(
const double x_,
const double y_ );
1398 void operator()(
Image &image_ )
const;
1406 class MagickPPExport chromaWhitePointImage
1409 chromaWhitePointImage(
const double x_,
const double y_ );
1411 void operator()(
Image &image_ )
const;
1419 class MagickPPExport colorFuzzImage
1422 colorFuzzImage(
const double fuzz_ );
1424 void operator()(
Image &image_ )
const;
1431 class MagickPPExport colorMapImage
1434 colorMapImage(
const size_t index_,
const Color &color_ );
1436 void operator()(
Image &image_ )
const;
1445 class MagickPPExport composeImage
1448 composeImage(
const CompositeOperator compose_ );
1450 void operator()(
Image &image_ )
const;
1453 CompositeOperator _compose;
1457 class MagickPPExport compressTypeImage
1460 compressTypeImage(
const CompressionType compressType_ );
1462 void operator()(
Image &image_ )
const;
1465 CompressionType _compressType;
1469 class MagickPPExport densityImage
1472 densityImage(
const Geometry &geomery_ );
1474 void operator()(
Image &image_ )
const;
1481 class MagickPPExport depthImage
1484 depthImage(
const size_t depth_ );
1486 void operator()(
Image &image_ )
const;
1494 class MagickPPExport endianImage
1497 endianImage(
const EndianType endian_ );
1499 void operator()(
Image &image_ )
const;
1506 class MagickPPExport fileNameImage
1509 fileNameImage(
const std::string &fileName_ );
1511 void operator()(
Image &image_ )
const;
1514 std::string _fileName;
1518 class MagickPPExport filterTypeImage
1521 filterTypeImage(
const FilterTypes filterType_ );
1523 void operator()(
Image &image_ )
const;
1526 FilterTypes _filterType;
1530 class MagickPPExport fontImage
1533 fontImage(
const std::string &font_ );
1535 void operator()(
Image &image_ )
const;
1542 class MagickPPExport fontPointsizeImage
1545 fontPointsizeImage(
const size_t pointsize_ );
1547 void operator()(
Image &image_ )
const;
1554 class MagickPPExport gifDisposeMethodImage
1557 gifDisposeMethodImage(
const size_t disposeMethod_ );
1559 void operator()(
Image &image_ )
const;
1562 size_t _disposeMethod;
1566 class MagickPPExport interlaceTypeImage
1569 interlaceTypeImage(
const InterlaceType interlace_ );
1571 void operator()(
Image &image_ )
const;
1574 InterlaceType _interlace;
1578 class MagickPPExport lineWidthImage
1581 lineWidthImage(
const double lineWidth_ );
1583 void operator()(
Image &image_ )
const;
1590 class MagickPPExport magickImage
1593 magickImage(
const std::string &magick_ );
1595 void operator()(
Image &image_ )
const;
1598 std::string _magick;
1602 class MagickPPExport matteImage
1605 matteImage(
const bool matteFlag_ );
1607 void operator()(
Image &image_ )
const;
1614 class MagickPPExport matteColorImage
1617 matteColorImage(
const Color &matteColor_ );
1619 void operator()(
Image &image_ )
const;
1626 class MagickPPExport monochromeImage
1629 monochromeImage(
const bool monochromeFlag_ );
1631 void operator()(
Image &image_ )
const;
1634 bool _monochromeFlag;
1638 class MagickPPExport penColorImage
1641 penColorImage(
const Color &penColor_ );
1643 void operator()(
Image &image_ )
const;
1650 class MagickPPExport penTextureImage
1653 penTextureImage(
const Image &penTexture_ );
1655 void operator()(
Image &image_ )
const;
1662 class MagickPPExport pixelColorImage
1665 pixelColorImage( const ::ssize_t x_,
1667 const Color &color_);
1669 void operator()(
Image &image_ )
const;
1678 class MagickPPExport pageImage
1681 pageImage(
const Geometry &pageSize_ );
1683 void operator()(
Image &image_ )
const;
1690 class MagickPPExport qualityImage
1693 qualityImage(
const size_t quality_ );
1695 void operator()(
Image &image_ )
const;
1702 class MagickPPExport quantizeColorsImage
1705 quantizeColorsImage(
const size_t colors_ );
1707 void operator()(
Image &image_ )
const;
1714 class MagickPPExport quantizeColorSpaceImage
1717 quantizeColorSpaceImage(
const ColorspaceType colorSpace_ );
1719 void operator()(
Image &image_ )
const;
1722 ColorspaceType _colorSpace;
1726 class MagickPPExport quantizeDitherImage
1729 quantizeDitherImage(
const bool ditherFlag_ );
1731 void operator()(
Image &image_ )
const;
1738 class MagickPPExport quantizeTreeDepthImage
1741 quantizeTreeDepthImage(
const size_t treeDepth_ );
1743 void operator()(
Image &image_ )
const;
1750 class MagickPPExport renderingIntentImage
1753 renderingIntentImage(
const RenderingIntent renderingIntent_ );
1755 void operator()(
Image &image_ )
const;
1758 RenderingIntent _renderingIntent;
1762 class MagickPPExport resolutionUnitsImage
1765 resolutionUnitsImage(
const ResolutionType resolutionUnits_ );
1767 void operator()(
Image &image_ )
const;
1770 ResolutionType _resolutionUnits;
1774 class MagickPPExport sceneImage
1777 sceneImage(
const size_t scene_ );
1779 void operator()(
Image &image_ )
const;
1786 class MagickPPExport sigmoidalContrastImage
1789 sigmoidalContrastImage(
const size_t sharpen_,
1790 const double contrast,
1791 const double midpoint = QuantumRange / 2.0 );
1793 void operator()(
Image &image_ )
const;
1802 class MagickPPExport sizeImage
1805 sizeImage(
const Geometry &geometry_ );
1807 void operator()(
Image &image_ )
const;
1814 class MagickPPExport stripImage
1819 void operator()(
Image &image_ )
const;
1825 class MagickPPExport subImageImage
1828 subImageImage(
const size_t subImage_ );
1830 void operator()(
Image &image_ )
const;
1837 class MagickPPExport subRangeImage
1840 subRangeImage(
const size_t subRange_ );
1842 void operator()(
Image &image_ )
const;
1849 class MagickPPExport tileNameImage
1852 tileNameImage(
const std::string &tileName_ );
1854 void operator()(
Image &image_ )
const;
1857 std::string _tileName;
1861 class MagickPPExport typeImage
1864 typeImage(
const ImageType type_ );
1866 void operator()(
Image &image_ )
const;
1869 Magick::ImageType _type;
1874 class MagickPPExport verboseImage
1877 verboseImage(
const bool verbose_ );
1879 void operator()(
Image &image_ )
const;
1886 class MagickPPExport viewImage
1889 viewImage(
const std::string &view_ );
1891 void operator()(
Image &image_ )
const;
1899 class MagickPPExport x11DisplayImage
1902 x11DisplayImage(
const std::string &display_ );
1904 void operator()(
Image &image_ )
const;
1907 std::string _display;
1924 template <
class InputIterator>
1925 bool linkImages( InputIterator first_,
1926 InputIterator last_ ) {
1928 MagickCore::Image* previous = 0;
1929 ::ssize_t scene = 0;
1930 for ( InputIterator iter = first_; iter != last_; ++iter )
1935 iter->modifyImage();
1937 MagickCore::Image* current = iter->image();
1939 current->previous = previous;
1941 current->scene = scene++;
1944 previous->next = current;
1948 return(scene > 0 ?
true :
false);
1954 template <
class InputIterator>
1955 void unlinkImages( InputIterator first_,
1956 InputIterator last_ ) {
1957 for( InputIterator iter = first_; iter != last_; ++iter )
1959 MagickCore::Image* image = iter->image();
1960 image->previous = 0;
1968 template <
class Container>
1969 void insertImages( Container *sequence_,
1970 MagickCore::Image* images_ ) {
1971 MagickCore::Image *image = images_;
1976 MagickCore::Image* next_image = image->next;
1979 if (next_image != 0)
1980 next_image->previous=0;
1982 sequence_->push_back( Magick::Image( image ) );
1997 template <
class InputIterator>
1998 void animateImages( InputIterator first_,
1999 InputIterator last_ ) {
2000 if (linkImages(first_,last_) ==
false)
2003 MagickCore::AnimateImages( first_->imageInfo(), first_->image() );
2004 MagickCore::GetImageException( first_->image(), exceptionInfo );
2005 unlinkImages( first_, last_ );
2006 ThrowPPException(first_->quiet());
2011 template <
class InputIterator>
2012 void appendImages(
Image *appendedImage_,
2013 InputIterator first_,
2014 InputIterator last_,
2015 bool stack_ =
false) {
2016 if (linkImages(first_,last_) ==
false)
2019 MagickCore::Image* image = MagickCore::AppendImages( first_->image(),
2020 (MagickBooleanType) stack_,
2022 unlinkImages( first_, last_ );
2023 appendedImage_->replaceImage( image );
2024 ThrowPPException(appendedImage_->quiet());
2028 template <
class Container>
2029 void artifactNames(Container *names_,
const Image* image_)
2036 MagickCore::ResetImageArtifactIterator(image_->constImage());
2037 name=MagickCore::GetNextImageArtifact(image_->constImage());
2038 while (name != (
char *) NULL)
2040 names_->push_back(std::string(name));
2041 name=MagickCore::GetNextImageArtifact(image_->constImage());
2046 template <
class Container>
2047 void attributeNames(Container *names_,
const Image* image_)
2054 MagickCore::ResetImagePropertyIterator(image_->constImage());
2055 name=MagickCore::GetNextImageProperty(image_->constImage());
2056 while (name != (
char *) NULL)
2058 names_->push_back(std::string(name));
2059 name=MagickCore::GetNextImageProperty(image_->constImage());
2065 template <
class InputIterator>
2066 void averageImages(
Image *averagedImage_,
2067 InputIterator first_,
2068 InputIterator last_ ) {
2070 linkImages( first_, last_ );
2071 MagickCore::Image* image = MagickCore::EvaluateImages( first_->image(),
2072 MagickCore::MeanEvaluateOperator, exceptionInfo );
2073 unlinkImages( first_, last_ );
2074 averagedImage_->replaceImage( image );
2075 ThrowPPException(averagedImage_->quiet());
2083 template <
class InputIterator,
class Container >
2084 void coalesceImages(Container *coalescedImages_,InputIterator first_,
2085 InputIterator last_)
2093 if (linkImages(first_,last_) ==
false)
2097 quiet=first_->quiet();
2098 images=MagickCore::CoalesceImages( first_->image(),exceptionInfo);
2101 unlinkImages(first_,last_);
2104 coalescedImages_->clear();
2107 insertImages(coalescedImages_,images);
2110 ThrowPPException(quiet);
2122 template <
class Container >
2123 void coderInfoList( Container *container_,
2124 CoderInfo::MatchType isReadable_ = CoderInfo::AnyMatch,
2125 CoderInfo::MatchType isWritable_ = CoderInfo::AnyMatch,
2126 CoderInfo::MatchType isMultiFrame_ = CoderInfo::AnyMatch
2129 size_t number_formats;
2132 MagickCore::GetMagickList(
"*", &number_formats, exceptionInfo );
2135 throwException(exceptionInfo);
2136 throwExceptionExplicit(MagickCore::MissingDelegateError,
2137 "Coder array not returned!", 0 );
2141 container_->clear();
2143 for ( ::ssize_t i=0; i < (::ssize_t) number_formats; i++)
2145 const MagickCore::MagickInfo *magick_info =
2146 MagickCore::GetMagickInfo( coder_list[i], exceptionInfo );
2147 coder_list[i]=(
char *)
2148 MagickCore::RelinquishMagickMemory( coder_list[i] );
2151 if ( magick_info->stealth )
2155 CoderInfo coderInfo( magick_info->name );
2158 if ( isReadable_ != CoderInfo::AnyMatch &&
2159 (( coderInfo.isReadable() && isReadable_ != CoderInfo::TrueMatch ) ||
2160 ( !coderInfo.isReadable() && isReadable_ != CoderInfo::FalseMatch )) )
2164 if ( isWritable_ != CoderInfo::AnyMatch &&
2165 (( coderInfo.isWritable() && isWritable_ != CoderInfo::TrueMatch ) ||
2166 ( !coderInfo.isWritable() && isWritable_ != CoderInfo::FalseMatch )) )
2170 if ( isMultiFrame_ != CoderInfo::AnyMatch &&
2171 (( coderInfo.isMultiFrame() && isMultiFrame_ != CoderInfo::TrueMatch ) ||
2172 ( !coderInfo.isMultiFrame() && isMultiFrame_ != CoderInfo::FalseMatch )) )
2176 container_->push_back( coderInfo );
2179 catch (Magick::ErrorModule&)
2184 coder_list=(
char **) MagickCore::RelinquishMagickMemory( coder_list );
2185 ThrowPPException(
false);
2228 template <
class Container >
2229 void colorHistogram( Container *histogram_,
const Image image)
2235 MagickCore::ColorPacket *histogram_array =
2236 MagickCore::GetImageHistogram( image.constImage(), &colors, exceptionInfo );
2237 ThrowPPException(image.quiet());
2240 histogram_->clear();
2243 for (
size_t i=0; i < colors; i++)
2245 histogram_->insert( histogram_->end(), std::pair<const Color,size_t>
2246 (
Color(histogram_array[i].pixel), (
size_t) histogram_array[i].count) );
2250 histogram_array=(MagickCore::ColorPacket *)
2251 MagickCore::RelinquishMagickMemory(histogram_array);
2258 template <
class InputIterator >
2259 void combineImages(
Image *combinedImage_,
2260 InputIterator first_,
2261 InputIterator last_,
2262 const ChannelType channel_ ) {
2263 if (linkImages(first_,last_) ==
false)
2266 MagickCore::Image* image = CombineImages( first_->image(), channel_, exceptionInfo );
2267 unlinkImages( first_, last_ );
2268 combinedImage_->replaceImage( image );
2269 ThrowPPException(combinedImage_->quiet());
2272 template <
class Container>
2273 void cropToTiles(Container *tiledImages_,
const Image image_,
2277 MagickCore::Image* images=CropImageToTiles(image_.constImage(),
2278 static_cast<std::string
>(geometry_).c_str(),exceptionInfo);
2279 tiledImages_->clear();
2280 insertImages(tiledImages_,images);
2281 ThrowPPException(image_.quiet());
2286 template <
class InputIterator,
class Container>
2287 void deconstructImages(Container *deconstructedImages_,InputIterator first_,
2288 InputIterator last_)
2296 if (linkImages(first_,last_) ==
false)
2300 quiet=first_->quiet();
2301 images=DeconstructImages(first_->image(),exceptionInfo);
2304 unlinkImages(first_,last_);
2307 deconstructedImages_->clear();
2310 insertImages(deconstructedImages_,images);
2313 ThrowPPException(quiet);
2319 template <
class InputIterator>
2320 void displayImages( InputIterator first_,
2321 InputIterator last_ ) {
2322 if (linkImages(first_,last_) ==
false)
2325 MagickCore::DisplayImages( first_->imageInfo(), first_->image() );
2326 MagickCore::GetImageException( first_->image(), exceptionInfo );
2327 unlinkImages( first_, last_ );
2328 ThrowPPException(first_->quiet());
2335 template <
class InputIterator >
2336 void evaluateImages(
Image *evaluatedImage_,
2337 InputIterator first_,
2338 InputIterator last_,
2339 const MagickEvaluateOperator operator_ ) {
2340 if (linkImages(first_,last_) ==
false)
2343 MagickCore::Image* image = EvaluateImages( first_->image(), operator_, exceptionInfo );
2344 unlinkImages( first_, last_ );
2345 evaluatedImage_->replaceImage( image );
2346 ThrowPPException(evaluatedImage_->quiet());
2351 template <
class InputIterator>
2352 void flattenImages(
Image *flattenedImage_,
2353 InputIterator first_,
2354 InputIterator last_ ) {
2355 if (linkImages(first_,last_) ==
false)
2358 MagickCore::Image* image = MagickCore::MergeImageLayers( first_->image(),
2359 FlattenLayer,exceptionInfo );
2360 unlinkImages( first_, last_ );
2361 flattenedImage_->replaceImage( image );
2362 ThrowPPException(flattenedImage_->quiet());
2367 template <
class Container >
2368 void forwardFourierTransformImage( Container *fourierImages_,
2369 const Image &image_ ) {
2373 MagickCore::Image* images = ForwardFourierTransformImage(
2374 image_.constImage(), MagickTrue, exceptionInfo);
2377 fourierImages_->clear();
2380 insertImages( fourierImages_, images );
2383 ThrowPPException(image_.quiet());
2385 template <
class Container >
2386 void forwardFourierTransformImage( Container *fourierImages_,
2387 const Image &image_,
const bool magnitude_ ) {
2391 MagickCore::Image* images = ForwardFourierTransformImage(
2392 image_.constImage(), magnitude_ ==
true ? MagickTrue : MagickFalse,
2396 fourierImages_->clear();
2399 insertImages( fourierImages_, images );
2402 ThrowPPException(image_.quiet());
2406 template <
class InputIterator>
2407 void fxImages(
Image *fxImage_,InputIterator first_,InputIterator last_,
2408 const std::string expression)
2413 if (linkImages(first_,last_) ==
false)
2416 image=FxImageChannel(first_->constImage(),DefaultChannels,
2417 expression.c_str(),exceptionInfo);
2418 unlinkImages(first_,last_);
2419 fxImage_->replaceImage(image);
2420 ThrowPPException(fxImage_->quiet());
2427 template <
class InputIterator>
2428 void mapImages( InputIterator first_,
2429 InputIterator last_,
2430 const Image& mapImage_,
2431 bool dither_ =
false,
2432 bool measureError_ =
false ) {
2434 if (linkImages(first_,last_) ==
false)
2437 MagickCore::QuantizeInfo quantizeInfo;
2438 MagickCore::GetQuantizeInfo( &quantizeInfo );
2439 quantizeInfo.dither = dither_ ? MagickCore::MagickTrue : MagickCore::MagickFalse;
2440 MagickCore::RemapImages( &quantizeInfo, first_->image(),
2441 (mapImage_.isValid() ? mapImage_.constImage() : (
const MagickCore::Image*) NULL));
2442 MagickCore::GetImageException( first_->image(), exceptionInfo );
2443 if ( exceptionInfo->severity != MagickCore::UndefinedException )
2445 unlinkImages( first_, last_ );
2446 throwException(exceptionInfo,mapImage_.quiet());
2449 MagickCore::Image* image = first_->image();
2453 if ( measureError_ )
2455 MagickCore::GetImageQuantizeError( image );
2456 if ( image->exception.severity > MagickCore::UndefinedException )
2458 unlinkImages( first_, last_ );
2459 throwException(exceptionInfo,mapImage_.quiet());
2464 MagickCore::SyncImage( image );
2465 if ( image->exception.severity > MagickCore::UndefinedException )
2467 unlinkImages( first_, last_ );
2468 throwException(exceptionInfo,mapImage_.quiet());
2475 unlinkImages( first_, last_ );
2476 (void) MagickCore::DestroyExceptionInfo( exceptionInfo );
2481 template <
class InputIterator >
2482 void mergeImageLayers(
Image *mergedImage_,
2483 InputIterator first_,
2484 InputIterator last_,
2485 const ImageLayerMethod method_ ) {
2486 if (linkImages(first_,last_) ==
false)
2489 MagickCore::Image* image = MergeImageLayers( first_->image(), method_, exceptionInfo );
2490 unlinkImages( first_, last_ );
2491 mergedImage_->replaceImage( image );
2492 ThrowPPException(mergedImage_->quiet());
2496 template <
class Container,
class InputIterator>
2497 void montageImages(Container *montageImages_,InputIterator first_,
2498 InputIterator last_,
const Montage &options_)
2506 MagickCore::MontageInfo
2509 if (linkImages(first_,last_) ==
false)
2512 montageInfo=
static_cast<MagickCore::MontageInfo*
>(
2513 MagickCore::AcquireMagickMemory(
sizeof(MagickCore::MontageInfo)));
2516 options_.updateMontageInfo(*montageInfo);
2519 if (options_.label().length() != 0)
2520 first_->label(options_.label());
2524 quiet=first_->quiet();
2525 images=MagickCore::MontageImages(first_->image(),montageInfo,
2529 unlinkImages(first_,last_);
2532 montageImages_->clear();
2534 if (images != (MagickCore::Image *) NULL)
2535 insertImages(montageImages_,images);
2538 MagickCore::DestroyMontageInfo(montageInfo);
2541 ThrowPPException(quiet);
2544 if (montageImages_->size() > 0 && options_.transparentColor().isValid())
2546 options_.transparentColor()));
2550 template <
class InputIterator,
class Container>
2551 void morphImages(Container *morphedImages_,InputIterator first_,
2552 InputIterator last_,
size_t frames_)
2560 if (linkImages(first_,last_) ==
false)
2563 quiet=first_->quiet();
2564 images=MagickCore::MorphImages(first_->image(),frames_,exceptionInfo);
2567 unlinkImages(first_,last_);
2570 morphedImages_->clear();
2573 insertImages(morphedImages_,images);
2576 ThrowPPException(quiet);
2580 template <
class InputIterator>
2581 void mosaicImages(
Image *mosaicImage_,
2582 InputIterator first_,
2583 InputIterator last_ ) {
2584 if (linkImages(first_,last_) ==
false)
2587 MagickCore::Image* image = MagickCore::MergeImageLayers( first_->image(),
2588 MosaicLayer,exceptionInfo );
2589 unlinkImages( first_, last_ );
2590 mosaicImage_->replaceImage( image );
2591 ThrowPPException(mosaicImage_->quiet());
2598 template <
class InputIterator,
class Container>
2599 void optimizeImageLayers(Container *optimizedImages_,InputIterator first_,
2600 InputIterator last_)
2608 if (linkImages(first_,last_) ==
false)
2611 quiet=first_->quiet();
2612 images=OptimizeImageLayers(first_->image(),exceptionInfo);
2614 unlinkImages(first_,last_);
2616 optimizedImages_->clear();
2618 insertImages(optimizedImages_,images);
2620 ThrowPPException(quiet);
2626 template <
class InputIterator,
class Container >
2627 void optimizePlusImageLayers(Container *optimizedImages_,
2628 InputIterator first_,InputIterator last_)
2636 if (linkImages(first_,last_) ==
false)
2639 quiet=first_->quiet();
2640 images=OptimizePlusImageLayers(first_->image(),exceptionInfo);
2642 unlinkImages(first_,last_);
2644 optimizedImages_->clear();
2646 insertImages(optimizedImages_,images);
2648 ThrowPPException(quiet);
2654 template<
class InputIterator>
2655 void optimizeTransparency(InputIterator first_,InputIterator last_)
2657 if (linkImages(first_,last_) ==
false)
2660 OptimizeImageTransparency(first_->image(),exceptionInfo);
2661 unlinkImages(first_,last_ );
2663 ThrowPPException(first_->quiet());
2667 template <
class Container>
2668 void profileNames(Container *names_,
const Image* image_)
2675 MagickCore::ResetImageProfileIterator(image_->constImage());
2676 name=MagickCore::GetNextImageProfile(image_->constImage());
2677 while (name != (
const char *) NULL)
2679 names_->push_back(std::string(name));
2680 name=MagickCore::GetNextImageProfile(image_->constImage());
2686 template <
class InputIterator>
2687 void quantizeImages( InputIterator first_,
2688 InputIterator last_,
2689 bool measureError_ =
false ) {
2690 if (linkImages(first_,last_) ==
false)
2694 MagickCore::QuantizeImages( first_->quantizeInfo(),
2696 MagickCore::GetImageException( first_->image(), exceptionInfo );
2697 if ( exceptionInfo->severity > MagickCore::UndefinedException )
2699 unlinkImages( first_, last_ );
2700 throwException(exceptionInfo,first_->quiet());
2703 MagickCore::Image* image = first_->image();
2707 if ( measureError_ )
2708 MagickCore::GetImageQuantizeError( image );
2711 MagickCore::SyncImage( image );
2717 unlinkImages( first_, last_ );
2718 (void) MagickCore::DestroyExceptionInfo( exceptionInfo );
2722 template<
class Container>
2723 void readImages(Container *sequence_,
const std::string &imageSpec_,
2729 MagickCore::ImageInfo
2732 imageInfo=options.imageInfo();
2733 imageSpec_.copy(imageInfo->filename,MaxTextExtent-1);
2734 imageInfo->filename[imageSpec_.length()] = 0;
2736 images=MagickCore::ReadImage(imageInfo,exceptionInfo);
2737 insertImages(sequence_,images);
2738 ThrowPPException(options.quiet());
2741 template<
class Container>
2742 void readImages(Container *sequence_,
const std::string &imageSpec_)
2745 readImages(sequence_,imageSpec_,options);
2748 template<
class Container>
2749 void readImages(Container *sequence_,
const Blob &blob_,
ReadOptions &options)
2755 images=MagickCore::BlobToImage(options.imageInfo(),blob_.data(),
2756 blob_.length(),exceptionInfo);
2757 insertImages(sequence_,images);
2758 ThrowPPException(options.quiet());
2761 template<
class Container>
2762 void readImages(Container *sequence_,
const Blob &blob_)
2765 readImages(sequence_,blob_,options);
2769 template <
class Container >
2770 void separateImages( Container *separatedImages_,
2771 const Image &image_,
2772 const ChannelType channel_ ) {
2775 MagickCore::Image* images = MagickCore::SeparateImages( image_.constImage(), channel_, exceptionInfo );
2777 separatedImages_->clear();
2779 insertImages( separatedImages_, images );
2781 ThrowPPException(image_.quiet());
2786 template<
class InputIterator>
2787 void smushImages(
Image *smushedImage_,InputIterator first_,
2788 InputIterator last_,
const ssize_t offset_,
bool stack_=
false)
2793 if (linkImages(first_,last_) ==
false)
2796 newImage=MagickCore::SmushImages(first_->constImage(),
2797 (MagickBooleanType) stack_,offset_,exceptionInfo);
2798 unlinkImages(first_,last_);
2799 smushedImage_->replaceImage(newImage);
2800 ThrowPPException(smushedImage_->quiet());
2804 template <
class InputIterator>
2805 void writeImages( InputIterator first_,
2806 InputIterator last_,
2807 const std::string &imageSpec_,
2808 bool adjoin_ =
true ) {
2809 if (linkImages(first_,last_) ==
false)
2812 first_->adjoin( adjoin_ );
2815 ::ssize_t errorStat = MagickCore::WriteImages( first_->constImageInfo(),
2819 unlinkImages( first_, last_ );
2821 if ( errorStat !=
false )
2823 (void) MagickCore::DestroyExceptionInfo( exceptionInfo );
2827 ThrowPPException(first_->quiet());
2830 template <
class InputIterator>
2831 void writeImages( InputIterator first_,
2832 InputIterator last_,
2834 bool adjoin_ =
true) {
2835 if (linkImages(first_,last_) ==
false)
2838 first_->adjoin( adjoin_ );
2841 size_t length = 2048;
2842 void* data = MagickCore::ImagesToBlob( first_->imageInfo(),
2846 blob_->updateNoCopy( data, length, Magick::Blob::MallocAllocator );
2848 unlinkImages( first_, last_ );
2850 ThrowPPException(first_->quiet());