Magick++ 使用有限的模板参数类型。当前的模板参数类型是
容器具有 后插入序列 属性的容器。序列支持正向迭代器,后插入序列支持通过 push_back() 追加元素的附加功能。常见的兼容容器类型是 STL 的 < vector > 和 <list > 模板容器。此模板参数通常用于表示一个输出容器,其中可能追加一个或多个图像帧。像 STL <vector > 这样的容器,其具有给定的默认 容量,可能需要通过 reserve() 将其 容量调整到更大的 容量,以支持预期的最终 大小。由于 Magick++ 图像非常小,因此 STL < vector > 的默认容量可能足以满足大多数情况。输入迭代器
用于表示容器中位置的输入迭代器。这些模板参数通常用于表示一组元素,其中 first_ 表示要处理的第一个元素,last_ 表示停止的元素。在处理容器的整个内容时,了解 STL 容器通常提供 begin() 和 end() 方法来返回分别对应于第一个元素和最后一个元素的输入迭代器,这一点非常有用。
以下是如何将 GIF 动画中的帧"test_image_anim.gif" 水平追加,并将生成的图像写入文件 appended_image.miff 的示例
#include <list> #include <Magick++.h> using namespace std; using namespace Magick; int main(int argc,char **argv) { InitializeMagick(*argv); list<Image> imageList; readImages( &imageList, "test_image_anim.gif" ); Image appended; appendImages( &appended, imageList.begin(), imageList.end() ); appended.write( "appended_image.miff" ); return 0; }
以下表格显示了可用于操作图像帧序列的 Magick++ 特定 STL 算法
|
|
|
|
输入迭代器 first_, 输入迭代器 last_ | 动画一组图像帧。图像帧依次显示,从而产生动画效果。动画选项来自第一个图像帧。此功能目前仅在 X11 下支持。 |
|
Image *appendedImage_, 输入迭代器 first_, 输入迭代器 last_, bool stack_ = false | 追加一组图像帧,将结果写入 appendedImage_。所有输入图像帧必须具有相同的宽度或高度。相同宽度的图像帧从上到下堆叠。相同高度的图像帧从左到右堆叠。如果 stack_ 参数为假,则矩形图像帧从左到右堆叠,否则从上到下堆叠。 |
|
Image *averagedImage_, 输入迭代器 first_, 输入迭代器 last_ | 平均一组图像帧,将结果写入 averagedImage_。所有输入图像帧必须具有相同的像素大小。 |
|
容器 *coalescedImages_, 输入迭代器 first_, 输入迭代器 last_ |
通过“播放”图像序列(观察页面偏移量和处置方法)来创建合并的图像序列,从而创建新的图像序列,其中所有帧都为全尺寸且完全渲染。请注意,如果原始图像序列依赖于页面偏移量和处置方法,则生成的序列将比原始序列更大(可能大得多)。这对于具有页面偏移量和处置方法的 GIF 动画序列很有用。生成的图像序列通过 coalescedImages_ 返回。 |
|
容器 *deconstructedImages_, 输入迭代器 first_, 输入迭代器 last_ | 将图像序列分解为组成部分。这对于创建 GIF 或 MNG 动画序列很有用。输入序列由 first_ 和 last_ 指定,分解后的图像通过 deconstructedImages_ 返回。 |
|
输入迭代器 first_, 输入迭代器 last_ | 显示一组图像帧。通过使用弹出菜单,可以依次选择图像帧。此功能在 X11 下完全支持,但在其他环境中可能只有有限的支持。 警告: 如果图像格式与显示视觉效果不兼容(例如,在颜色映射显示器上使用 JPEG),则原始图像将被修改。如果这是一个问题,请使用原始图像的副本。 |
|
Image *flattendImage_, 输入迭代器 first_, 输入迭代器 last_ | 将表示图像层的图像帧序列合并为单个合成表示。flattendImage_ 参数指向一个现有的 Image,并使用扁平化的图像对其进行更新。此函数对于将 Photoshop 图层组合到单个图像中很有用。 |
|
容器 *fourierImages_, const Image &image_ | 通过 fourierImages_ 实现图像的离散傅里叶变换(DFT)作为幅度/相位图像对。 |
|
容器 *fourierImages_, const Image &image_, const bool magnitude_ | 通过 fourierImages_ 实现图像的离散傅里叶变换(DFT)作为幅度/相位或实部/虚部图像对。 |
|
输入迭代器 first_, 输入迭代器 last_, const Image & mapImage_, bool dither_, bool measureError_ = false | 将图像序列的颜色替换为参考图像中最近的颜色。将 dither_ 设置为 true 以启用抖动。将 measureError_ 设置为 true 以评估量化误差。 |
|
容器 *montageImages_, 输入迭代器 first_, 输入迭代器 last_, const Montage &montageOpts_ | 通过组合多个独立的图像帧来创建一个合成图像。输出容器 montageImages_ 中可能会生成多个帧,具体取决于平铺设置和拼贴的图像帧数量。拼贴选项通过参数 montageOpts_ 提供。在第一个图像帧中设置的选项 ( backgroundColor, borderColor , matteColor , penColor, font, 和 fontPointsize ) 也会被 montageImages() 用作选项。 |
|
容器 *morphedImages_, 输入迭代器 first_, 输入迭代器 last_, size_t frames_ | 变形一组图像帧。此算法通过添加 frames_ 指定的插值帧数量来扩展图像帧的数量(输出到容器 morphedImages_),以便原始帧在作为动画播放时相互变形(混合)。 |
|
Image *mosaicImage_, 输入迭代器 first_, 输入迭代器 last_ | 将多个图像镶嵌起来,形成一幅连贯的图像。mosicImage_ 参数使用由 first_ 到 last_ 表示的图像序列构造的镶嵌图像进行更新。 |
输入迭代器 first_, 输入迭代器 last_, bool measureError_ = false | 使用当前量化设置对图像中的颜色进行量化。将 measureError_ 设置为 true 以测量量化误差。 | |
|
容器 *sequence_, const std::string &imageSpec_ | 将图像帧序列读取到现有容器中(追加到容器 sequence_),其中图像名称在 UTF-8 字符串 imageSpec_ 中指定。 |
容器 *sequence_, const Blob &blob_ | 从 Blob blob_ 将图像帧序列读取到现有容器中(追加到容器 sequence_)。 | |
|
输入迭代器 first_, 输入迭代器 last_, const std::string &imageSpec_, bool adjoin_ = true | 将容器中的图像写入由字符串 imageSpec_ 指定的文件。将 adjoin_ 设置为 false 以通过通配符 imageSpec_ 写入一组图像帧(例如 image%02d.miff)。 通配符必须是以下之一%0Nd、%0No 或 %0Nx. 警告: 如果选择的图像格式能够支持的颜色少于原始图像,或者已请求量化,则原始图像将被量化为更少颜色。如果这是一个问题,请使用原始图像的副本。 |
输入迭代器 first_, 输入迭代器 last_, Blob *blob_, bool adjoin_ = true | 将容器中的图像写入由 Blob blob_ 指定的内存中 BLOB。将 adjoin_ 设置为 false 以通过通配符 imageSpec_ 写入一组图像帧(例如 image%02d.miff)。 警告: 如果选择的图像格式能够支持的颜色少于原始图像,或者已请求量化,则原始图像将被量化为更少颜色。如果这是一个问题,请使用原始图像的副本。 |
此外,我们还支持以下尚未记录的方法:combineImages()
、evaluateImages()
、mergeImageLayers()
、optimizeImageLayers()
、optimizePlusImageLayers()
和 separateImages()
。
unary_function<Arg, Result>并期望派生类实现以下形式的方法
Result operator()( Arg argument_);该方法由使用函数对象的算法调用。在 Magick++ 定义的一元函数对象的情况下,调用的函数类似于
void operator()( Image &image_);典型的实现类似于
void operator()( Image &image_ )其中 contrast 是 Image 方法,_sharpen 是由其构造函数在函数对象中存储的参数。由于构造函数可能是多态的,因此给定的函数对象可能具有多个构造函数,并根据提供的参数选择适当的 Image 方法。
{
image_.contrast( _sharpen );
}
本质上,一元函数对象(如 Magick++ 提供的)只是提供了一种方法来构造一个对象,该对象缓存参数,供以后由为使用一元函数对象而设计的算法使用。每个由 Image 类提供的算法都对应一个一元函数对象,并且有一个与 Image 类中的每个同义方法兼容的构造函数。
以下表格显示了 Magick++ 提供的用于支持操作图像的一元函数对象
函数对象 | 构造函数签名 | 描述 |
size_t width, size_t height, unsigned offset = 0 |
对图像应用自适应阈值。如果理想的阈值水平事先未知,或者照明梯度在整个图像中不一致,则自适应阈值很有用。自适应阈值通过评估像素区域的平均值(由 width 和 height 指定的大小)并使用平均值作为阈值来工作。为了消除背景中的残留噪声,可以将阈值调整为从平均值中减去一个常数 offset(默认值为零)来计算阈值。 |
|
|
噪声类型 noiseType_ | 使用指定的噪声类型为图像添加噪声。 |
affineTransformImage |
const DrawableAffine &affine_ |
使用指定的仿射(或自由变换)矩阵变换图像。 |
|
const std::string &text_, const 几何 &location_ | 使用指定的文本、边界区域、放置重力以及旋转进行文本标注。如果boundingArea_无效,则边界区域为整个图像。 |
std::string text_, const 几何 &boundingArea_, 重力类型 gravity_ | 使用指定的文本、边界区域以及放置重力进行标注。如果boundingArea_无效,则边界区域为整个图像。 | |
const std::string &text_, const 几何 &boundingArea_, 重力类型 gravity_, double degrees_, | 使用指定的文本、边界区域、放置重力以及旋转进行文本标注。如果boundingArea_无效,则边界区域为整个图像。 | |
const std::string &text_, 重力类型 gravity_ | 使用文本(边界区域为整个图像)以及放置重力进行标注。 | |
|
const double radius_ = 1, const double sigma_ = 0.5 | 模糊图像。radius_参数指定高斯模糊的半径(以像素为单位),不包括中心像素。sigma_参数指定拉普拉斯算子的标准差(以像素为单位)。 |
|
const 几何 &geometry_ = "6x6+0+0" | 给图像添加边框。边框颜色由borderColor属性指定。 |
|
const double radius_ = 1, const double sigma_ = 0.5 | 炭笔效果图像(看起来像炭笔素描)。radius_参数指定高斯模糊的半径(以像素为单位),不包括中心像素。sigma_参数指定拉普拉斯算子的标准差(以像素为单位)。 |
|
const 几何 &geometry_ | 裁剪图像(移除图像的垂直或水平子区域)。 |
|
const size_t opacityRed_, const size_t opacityGreen_, const size_t opacityBlue_, const Color &penColor_ | 使用笔颜色和指定的红色、绿色以及蓝色量子不透明度百分比对图像进行着色。 |
const size_t opacity_, const 颜色 &penColor_ | 使用笔颜色和指定的百分比不透明度对图像进行着色。 | |
|
const std::string &comment_ | 给图像添加注释(将注释字符串添加到图像)。默认情况下,每个图像都使用其文件名进行注释。使用此方法可以为图像分配特定的注释。您还可以通过嵌入特殊格式字符来包含图像文件名、类型、宽度、高度或其他图像属性。 |
|
const 图像 &compositeImage_, ssize_t xOffset_, ssize_t yOffset_, 合成运算符 compose_ = InCompositeOp | 将图像合成到另一个图像上,指定偏移量并使用指定的算法。 |
const 图像 &compositeImage_, const Geometry &offset_, 合成运算符 compose_ = InCompositeOp | ||
|
void | 压缩图像(对内存中的图像重新进行行程长度编码)。 |
|
size_t sharpen_ | 增强图像对比度(增强图像中的强度差异)。 |
|
const 几何 &geometry_ | 裁剪图像(原始图像的子区域)。 |
图像 |
int amount_ | 循环图像颜色映射。 |
|
void | 消除图像斑点噪声(减少斑点噪声)。 |
|
const 可绘制对象 &drawable_ | 在图像上绘制形状或文本。 |
const std::list<可绘制对象 > &drawable_ | 使用包含在 STL 列表中的可绘制对象集在图像上绘制形状或文本。使用此方法可以提高绘制性能,并允许将绘制对象批处理到列表中以供重复使用。 | |
|
size_t radius_ = 0.0 | 边缘检测图像(突出显示图像中的边缘)。半径是像素邻域的半径。指定半径为零以自动选择半径。 |
|
const double radius_ = 1, const double sigma_ = 0.5 | 浮雕图像(使用 3D 效果突出显示边缘)。radius_参数指定高斯模糊的半径(以像素为单位),不包括中心像素。sigma_参数指定拉普拉斯算子的标准差(以像素为单位)。 |
|
void | 增强图像(最小化噪声)。 |
|
void | 均衡图像(直方图均衡)。 |
|
void | 翻转图像(沿垂直方向反射每条扫描线)。 |
ColorImage |
ssize_t x_, ssize_t y_, const 颜色 &fillColor_ | 将颜色泛洪填充到与目标像素颜色匹配且与目标像素相邻的像素中。在确定颜色匹配时使用当前模糊设置。 |
const 几何 &point_, const 颜色 &fillColor_ | ||
ssize_t x_, ssize_t y_, const 颜色 &fillColor_, const 颜色 &borderColor_ | 从目标像素开始,将颜色泛洪填充到像素中,并在匹配指定的边界颜色时停止。在确定颜色匹配时使用当前模糊设置。 | |
const 几何 &point_, const 颜色 &fillColor_, const 颜色 &borderColor_ | ||
TextureImage |
ssize_t x_, ssize_t y_, const 图像 &texture_ | 将纹理泛洪填充到与目标像素颜色匹配且与目标像素相邻的像素中。在确定颜色匹配时使用当前模糊设置。 |
const 几何 &point_, const Image &texture_ | ||
ssize_t x_, ssize_t y_, const Image &texture_, const 颜色 &borderColor_ | 从目标像素开始,将纹理泛洪填充到像素中,并在匹配指定的边界颜色时停止。在确定颜色匹配时使用当前模糊设置。 | |
const 几何 &point_, const Image &texture_, const 颜色 &borderColor_ | ||
|
void | 翻转图像(沿水平方向反射每条扫描线)。 |
|
const 几何 &geometry_ = "25x25+6+6" | 在图像周围添加装饰性边框。 |
size_t width_, size_t height_, ssize_t x_, ssize_t y_, ssize_t innerBevel_ = 0, ssize_t outerBevel_ = 0 | ||
|
double gamma_ | 伽马校正图像(统一的红色、绿色以及蓝色校正)。 |
double gammaRed_, double gammaGreen_, double gammaBlue_ | 伽马校正图像的红色、绿色以及蓝色通道。 | |
|
double width_, double sigma_ | 高斯模糊图像。卷积掩码中要包含的相邻像素数量由 'width_' 指定。例如,宽度为 1 会得到一个 (标准) 3x3 卷积掩码。高斯钟形曲线的标准差由 'sigma_' 指定。 |
|
double factor_ | 内爆图像(特殊效果)。 |
|
const 图像 &phaseImage_, const bool magnitude_ | 实现图像的逆离散傅里叶变换 (DFT),可以是幅度/相位或实部/虚部图像对。 |
|
const string &label_ | 为图像分配标签。使用此选项可以为图像分配特定标签。您还可以通过嵌入特殊格式字符来包含图像文件名、类型、宽度、高度或场景编号。如果字符串的第一个字符是 @,则图像标签将从以字符串中剩余字符命名的文件中读取。在转换为 Postscript 时,使用此选项可以指定要在图像上方打印的标题字符串。 |
levelImage |
const double black_point, const double white_point, const double mid_point=1.0 |
调整图像的级别。通过将落在指定的白色点和黑色点之间的颜色缩放到完整的可用量子范围内来调整图像的级别。提供的参数表示黑色点、中间点(伽马)以及白色点。黑色点指定图像中最暗的颜色。比黑色点更暗的颜色将设置为零。中间点(伽马)指定要应用于图像的伽马校正。白色点指定图像中最亮的颜色。比白色点更亮的颜色将设置为最大量子值。黑色点和白色点的有效范围是 0 到 QuantumRange,而中间点(伽马)的有效范围是 0 到 10。 |
levelChannelImage |
const Magick::ChannelType channel, const double black_point, const double white_point, const double mid_point=1.0 |
调整图像通道的级别。通过将落在指定的白色点和黑色点之间的值缩放到完整的可用量子范围内来调整图像通道的级别。提供的参数表示黑色点、中间点(伽马)以及白色点。黑色点指定图像中最暗的颜色。比黑色点更暗的颜色将设置为零。中间点(伽马)指定要应用于图像的伽马校正。白色点指定图像中最亮的颜色。比白色点更亮的颜色将设置为最大量子值。黑色点和白色点的有效范围是 0 到 QuantumRange,而中间点(伽马)的有效范围是 0 到 10。 |
|
通道类型 layer_ | 从图像中提取图层。使用此选项可以从图像中提取特定的图层。例如,MatteLayer对于从图像中提取不透明度值很有用。 |
|
void | 按整数倍放大图像。 |
|
const 图像 &mapImage_ , bool dither_ = false | 使用参考图像中最接近的颜色重新映射图像颜色。将 dither_ 设置为 true 以将 Floyd/Steinberg 错误扩散应用于图像。默认情况下,颜色缩减会选择最佳颜色集,这些颜色集最能代表原始图像。或者,您也可以使用此选项从图像文件中选择特定颜色集。 |
图像 |
const 颜色 &target_, unsigned int matte_, ssize_t x_, ssize_t y_, 绘制方法 method_ | 使用蒙版值泛洪填充指定区域。 |
medianFilterImage | const double radius_ = 0.0 | 通过用圆形邻域中的中值颜色替换每个像素分量来过滤图像。 |
|
void | 按整数倍缩小图像。 |
|
double brightness_, double saturation_, double hue_ | 调整图像的色调、饱和度以及亮度百分比。饱和度和亮度的调整是当前值的比率(1.0 表示无变化)。色调的调整是相对于当前位置的绝对旋转,从 -180 度到 +180 度,对应于 0 到 2.0 的参数范围(1.0 表示无变化)。 |
|
bool grayscale_ = false | 反转图像中的颜色。将每个像素替换为其互补色(白色变为黑色,黄色变为蓝色,等等)。将 grayscale 设置为仅反转图像中的灰度值。 |
|
void | 规范化图像(通过将像素值规范化以跨越完整范围的颜色值来增加对比度)。 |
|
size_t radius_ = 3 | 油画图像(图像看起来像油画)。 |
|
size_t opacity_ | 设置或衰减图像中的不透明度通道。如果图像像素是不透明的,则将它们设置为指定的不透明度值,否则将它们与提供的不透明度值混合。opacity_ 的值范围是 0(完全不透明)到 QuantumRange。定义 OpaqueOpacity 和 TransparentOpacity 可用于分别指定完全不透明或完全透明。 |
|
const 颜色 &opaqueColor_, const 颜色 &penColor_ | 将与 opaqueColor_ 匹配的像素颜色更改为指定的 penColor_。 |
|
bool measureError_ = false | 量化图像(减少颜色数量)。将 measureError_ 设置为 true 以计算错误属性。 |
|
const 几何 &geometry_ = "6x6+0+0", bool raisedFlag_ = false | 凸显图像(使图像的边缘变亮或变暗,以形成 3D 凸显或凹陷的效果)。 |
图像 |
void | 使用噪声峰值消除滤波器减少图像中的噪声。 |
size_t order_ | ||
|
int columns_, ssize_t rows_ | 滚动图像(垂直和水平滚动图像)指定列数和行数) |
|
双倍角度_ | 逆时针旋转图像指定角度数 |
|
const Geometry &geometry_ | 使用像素采样算法调整图像大小 |
|
const 几何 &geometry_ | 使用简单比率算法调整图像大小 |
|
double clusterThreshold_ = 1.0, double smoothingThreshold_ = 1.5 |
通过分析颜色分量的直方图并使用模糊 c 均值技术识别与之同质的单元来分割(合并类似的图像组件)。还使用量化颜色空间和详细图像属性。指定clusterThreshold_,作为每个集群必须超过集群阈值才能被视为有效的像素数量。SmoothingThreshold_消除直方图二阶导数中的噪声。随着值的增加,您可以预期得到更平滑的二阶导数。默认值为 1.5。 |
|
double azimuth_ = 30, double elevation_ = 30, bool colorShading_ = false |
使用远处光源遮蔽图像。指定azimuth_和elevation_作为光源的位置。默认情况下,阴影结果为灰度图像。设置colorShading_为true以遮蔽图像的红色、绿色和蓝色分量。 |
|
const double radius_ = 1, const double sigma_ = 0.5 | 锐化图像中的像素。radius_参数指定高斯半径(以像素为单位),不包括中心像素。sigma_参数指定拉普拉斯算子的标准差(以像素为单位)。 |
|
const 几何 &geometry_ | 从图像边缘修剪像素。 |
|
double xShearAngle_, double yShearAngle_ | 剪切图像(通过沿 X 或 Y 轴滑动图像创建平行四边形)。剪切沿着 X 或 Y 轴滑动图像的一条边,创建一个平行四边形。X 方向剪切沿着 X 轴滑动一条边,而 Y 方向剪切沿着 Y 轴滑动一条边。剪切量由剪切角控制。对于 X 方向剪切,x 度相对于 Y 轴测量,类似地,对于 Y 方向剪切,y 度相对于 X 轴测量。从剪切图像中剩余的空三角形用定义为borderColor的颜色填充。 |
|
double factor_ | 曝光图像(类似于在显影过程中将照相底片曝光于光线下时看到的效果) |
|
size_t amount_ = 3 | 在图像内随机散布像素指定数量 |
|
const Image &watermark_ | 向图像添加数字水印(基于第二张图像) |
|
const Image &rightImage_ | 创建一个图像,当使用红蓝眼镜观看时会显示为立体图像(左侧为红色图像,右侧为蓝色图像) |
|
双倍角度_ | 螺旋图像(图像像素按角度旋转) |
|
const Image &texture_ | 在图像背景上叠加纹理 |
|
double threshold_ | 阈值图像 |
|
const Geometry &imageGeometry_ | 根据图像和裁剪几何形状变换图像。裁剪几何形状是可选的。 |
const Geometry &imageGeometry_, const Geometry &cropGeometry_ | ||
|
const Color &color_ | 将哑光图像添加到图像,将与颜色匹配的像素设置为透明。 |
|
void | 从图像中修剪与背景颜色相同的边缘。 |
|
double amplitude_ = 25.0, double wavelength_ = 150.0 | 沿正弦波改变图像。 |
|
const 几何 &geometry_ | 将图像缩放至指定大小。 |
函数对象可用于设置图像帧上的属性,这些属性等效于 Image 对象中的方法。这些函数对象允许使用 f 在一系列图像帧中设置选项or_each().
以下代码示例了如何在 GIF 动画中将颜色“红色”设置为透明
list<image> images; readImages( &images, "animation.gif" ); for_each ( images.begin(), images.end(), transparentImage( "red" ) ); writeImages( images.begin(), images.end(), "animation.gif" );
可用于设置图像属性的函数对象为
|
|
|
|
|
bool | bool flag_ | 将图像合并到单个多图像文件中。 |
|
bool | bool flag_ | 控制渲染的 Postscript 和 Postscript 或 TrueType 字体是否抗锯齿。默认情况下启用。 |
延迟图像 |
size_t(0 到 65535) | size_t delay_ | 以 1/100 秒为单位的时间(0 到 65535),在显示动画序列中的下一张图像之前必须经过的时间。此选项对于调节 Netscape 中 GIF 图像序列的动画很有用。 |
迭代图像 |
size_t | size_t iterations_ | 动画循环迭代次数(例如 Netscape 循环扩展)。 |
ColorImage |
颜色 | const Color &color_ | 图像背景颜色 |
TextureImage |
std::string | const string &texture_ | 用作背景纹理的图像。 |
图像 |
颜色 | const Color &color_ | 图像边框颜色 |
|
颜色 | const Color &boxColor_ | 注释文本渲染的基础颜色。 |
蓝色主色图像 |
double x & y | double x_, double y_ | 色度蓝色主点(例如 x=0.15,y=0.06) |
绿色主色图像 |
double x & y | double x_, double y_ | 色度绿色主点(例如 x=0.3,y=0.6) |
红色主色图像 |
double x & y | double x_, double y_ | 色度红色主点(例如 x=0.64,y=0.33) |
白点图像 |
double x & y | double x_, double y_ | 色度白点(例如 x=0.3127,y=0.329) |
|
double | double fuzz_ | 此距离内的颜色被视为相等。一些算法会搜索目标颜色。默认情况下,颜色必须完全匹配。使用此选项来匹配 RGB 空间中接近目标颜色的颜色。 |
|
颜色 | size_t index_, const Color &color_ | 颜色调色板索引处的颜色。 |
颜色空间图像 | 颜色空间类型 | ColorspaceType colorSpace_ | 用于表示图像像素颜色的颜色空间(例如 CMYK)。图像像素始终存储为 RGB(A),除了 CMY(K) 的情况。 |
|
合成操作符 | CompositeOperator compose_ | 当隐式使用合成(例如用于图像扁平化)时要使用的合成操作符。 |
图像 |
压缩类型 | CompressionType compressType_ | 图像压缩类型。默认值为指定图像文件的压缩类型。 |
|
Geometry (默认 72x72) | const Geometry &density_ | 图像的垂直和水平分辨率(以像素为单位)。此选项在解码 Postscript 或 Portable Document 页面时指定图像密度。通常与psPageSize一起使用。 |
|
size_t(8 或 16) | size_t depth_ | 图像深度。用于在读取或写入原始图像时指定位深度,或者当输出格式支持多种深度时。默认为 ImageMagick 编译的量子深度。 |
|
字节序类型 | EndianType endian_ | 为支持它的格式指定(或获取)字节序选项。 |
|
std::string | const std::string &fileName_ | 图像文件名。 |
|
颜色 | const Color &fillColor_ | 填充绘制对象的颜色 |
|
过滤器类型 | FilterTypes filterType_ | 调整图像大小时要使用的过滤器。所采用的缩减过滤器对调整图像大小所需的时间和最终质量有重大影响。默认过滤器是Lanczos,它已被证明在缩减图像时能够产生良好的效果。 |
|
std::string | const std::string &font_ | 文本渲染字体。如果字体是完全限定的 X 服务器字体名称,则字体将从 X 服务器获取。要使用 TrueType 字体,请在 TrueType 文件名前面加上一个 @。否则,请指定 Postscript 字体名称(例如“helvetica”)。 |
图像 |
size_t | size_t pointSize_ | 文本渲染字体字号 |
方法图像 |
size_t { 0 = 未指定处置, 1 = 不要处置图形, 3 = 用背景颜色覆盖图形, 4 = 用前一个图形覆盖图形。 } |
size_t disposeMethod_ | 图层处置方法。此选项用于控制创建 GIF 动画时如何渲染连续帧(如何处置前一帧)。 |
类型图像 |
隔行扫描类型 | InterlaceType interlace_ | 隔行扫描方案的类型(默认NoInterlace)。此选项用于指定原始图像格式(例如 RGB 或 YUV)的隔行扫描方案类型。NoInterlace表示不隔行扫描,LineInterlace使用扫描线隔行扫描,PlaneInterlace使用平面隔行扫描。PartitionInterlace类似于PlaneInterlace,但不同的平面被保存到单独的文件中(例如 image.R、image.G 和 image.B)。使用LineInterlace或PlaneInterlace来创建隔行扫描的 GIF 或渐进式 JPEG 图像。 |
|
bool | bool isValid_ | 设置图像有效性。如果参数为 false,则有效的图像将变为空(无效)。 |
|
std::string | const std::string &label_ | 图像标签 |
|
double | double lineWidth_ | 绘制线条、圆形、椭圆等时的线宽。见 Drawable 。 |
|
std::string | const std::string &magick_ | 获取图像格式(例如“GIF”) |
|
bool | bool matteFlag_ | 如果图像具有透明度,则为 true。如果设置为 true,则如果图像具有蒙版通道,则存储蒙版通道,否则创建不透明通道。 |
|
颜色 | const Color &matteColor_ | 图像蒙版(帧)颜色 |
图像 |
bool | bool flag_ | 将图像转换为黑白 |
|
Geometry | const Geometry &pageSize_ | 图像画布的首选大小和位置。
使用此选项来指定 Postscript 页面或 TEXT 页面的尺寸和位置(以点/英寸为单位)。此选项通常与density 一起使用。 Page 也可以用于定位 GIF 图像(例如动画中的场景) |
|
颜色 | const Color &penColor_ | 在图像上添加注释或绘制时要使用的笔颜色。 |
|
图像 | const Image & penTexture_ | 用它来绘制的纹理图像(类似于笔颜色)。 |
|
颜色 | size_t x_, size_t y_, const Color &color_ | 获取/设置位置 x 和 y 处的像素颜色。 |
|
Geometry | const Geometry &pageSize_ | Postscript 页面大小。使用此选项来指定 Postscript 页面或 TEXT 页面的尺寸(以点/英寸为单位)。此选项通常与density一起使用。 |
|
size_t(0 到 100) | size_t quality_ | JPEG/MIFF/PNG 压缩级别(默认 75)。 |
颜色图像 |
size_t | size_t colors_ | 图像中首选的颜色数量。图像中实际的颜色数量可能少于您的请求,但绝不会超过。如果图像的唯一颜色少于使用此选项指定的颜色数量,则将删除任何重复或未使用的颜色。 |
颜色空间图像 |
颜色空间类型 | ColorspaceType colorSpace_ | 颜色空间用于量化颜色(默认RGB)。经验表明,YUV或YIQ等颜色空间中的距离比RGB空间中的距离更能反映感知的颜色差异。当减少图像颜色时,这些颜色空间可能会产生更好的结果。 |
DitherImage |
bool | bool flag_ | 将Floyd/Steinberg误差扩散应用于图像。抖动 的基本策略是通过对几个相邻像素的强度进行平均,以牺牲强度分辨率来换取空间分辨率。使用此选项可以改善在减少颜色时出现严重轮廓的图像。必须设置 quantizeColors 或 monochrome 选项才能使此选项生效。 |
TreeDepthImage |
size_t (0到8) | size_t treeDepth_ | 量化颜色分类树的深度。值0或1允许为颜色减少算法选择最佳树深度。值2到8可用于手动调整树深度。 |
IntentImage |
RenderingIntent | RenderingIntent render_ | 渲染意图类型 |
UnitsImage |
ResolutionType | ResolutionType units_ | 图像分辨率单位 |
|
size_t | size_t scene_ | 图像场景编号 |
|
Geometry | const 几何 &geometry_ | 原始图像(不支持宽度和高度信息的图像)的宽度和高度。大小也可用于影响从多分辨率格式(例如Photo CD,JBIG或JPEG)读取的图像大小。 |
|
void | 剥离图像的所有配置文件和注释。 | |
|
颜色 | const Color &strokeColor_ | 绘制对象轮廓时使用的颜色 |
|
size_t | size_t subImage_ | 图像序列的子图像 |
|
size_t | size_t subRange_ | 相对于基准图像的图像数量 |
|
std::string | const std::string &tileName_ | 图块名称 |
|
ImageType | ImageType type_ | 图像存储类型。 |
|
bool | bool verboseFlag_ | 打印有关图像的详细信息 |
|
std::string | const std::string &view_ | FlashPix查看参数。 |
|
std::string (例如“hostname:0.0”) | const std::string &display_ | 用于显示、获取字体或捕获图像的X11显示器 |
Magick++ 提供 coderInfoList() 函数以支持获取有关 ImageMagick 支持的图像格式的信息。ImageMagick 中的图像格式支持由称为“编解码器”的模块提供。根据布尔真值表匹配,用户提供的容器将被更新。真值表支持基于 ImageMagick 是否可以读取格式、写入格式或是否支持格式的多个帧来进行匹配。通配符说明符支持任何“不关心”字段。通过 coderInfoList() 获得的数据可能有助于准备 GUI 对话框或根据 ImageMagick 构建中的支持来决定要写入哪个输出格式。
coderInfoList 的定义是
class CoderInfo { public: enum MatchType { AnyMatch, // match any coder TrueMatch, // match coder if true FalseMatch // match coder if false }; [ remaining CoderInfo methods ] } template <class Container > void coderInfoList( Container *container_, CoderInfo::MatchType isReadable_ = CoderInfo::AnyMatch, CoderInfo::MatchType isWritable_ = CoderInfo::AnyMatch, CoderInfo::MatchType isMultiFrame_ = CoderInfo::AnyMatch );
以下示例展示了如何检索支持读取图像的所有编解码器的列表,并打印编解码器属性(所有列出的格式都可读)
list<CoderInfo> coderList; coderInfoList( &coderList, // Reference to output list CoderInfo::TrueMatch, // Match readable formats CoderInfo::AnyMatch, // Don't care about writable formats CoderInfo::AnyMatch); // Don't care about multi-frame support list<CoderInfo>::iterator entry = coderList.begin(); while( entry != coderList.end() ) { cout << entry->name() << ": (" << entry->description() << ") : "; cout << "Readable = "; if ( entry->isReadable() ) cout << "true"; else cout << "false"; cout << ", "; cout << "Writable = "; if ( entry->isWritable() ) cout << "true"; else cout << "false"; cout << ", "; cout << "Multiframe = "; if ( entry->isMultiframe() ) cout << "true"; else cout << "false"; cout << endl; entry ++; }}
Magick++ 提供 colorHistogram 模板函数以从图像中检索颜色直方图。颜色直方图提供了图像中每个颜色出现的次数。直方图被写入用户提供的容器中,该容器(例如)可以是 <vector> 或 <map>。 当使用 <map> 时,Color 用作键,以便可以快速查找颜色的使用次数。写入 <map> 可能比写入 <vector> 速度更慢,因为 <map> 按(颜色强度)对条目进行排序并检查唯一性。每个直方图条目都包含在类型 std::pair<Magick::Color,unsigned long> 中,其中对的第一成员是 Color, 对的第二成员是 'unsigned long'. 使用 <pair> 的“first”成员访问 Color,并使用“second”成员访问图像中颜色出现的次数。
模板函数声明如下
template <class Container > void colorHistogram( Container *histogram_, const Image image)
以下示例演示了如何使用 <map> 和 <vector> 来检索颜色直方图,并打印出格式化的摘要。
使用 <map>
Image image("image.miff"); map<Color,unsigned long> histogram; colorHistogram( &histogram, image ); std::map<Color,unsigned long>::const_iterator p=histogram.begin(); while (p != histogram.end()) { cout << setw(10) << (int)p->second << ": (" << setw(quantum_width) << (int)p->first.redQuantum() << "," << setw(quantum_width) << (int)p->first.greenQuantum() << "," << setw(quantum_width) << (int)p->first.blueQuantum() << ")" << endl; p++; }
Image image("image.miff"); std::vector<std::pair<Color,unsigned long> > histogram; colorHistogram( &histogram, image ); std::vector<std::pair<Color,unsigned long> >::const_iterator p=histogram.begin(); while (p != histogram.end()) { cout << setw(10) << (int)p->second << ": (" << setw(quantum_width) << (int)p->first.redQuantum() << "," << setw(quantum_width) << (int)p->first.greenQuantum() << "," << setw(quantum_width) << (int)p->first.blueQuantum() << ")" << endl; p++; }