Magick::Image 类

快速目录

Image 是 Magick++ 中的主要对象,表示单个图像帧(参见设计)。对于包含多个图像帧的图像序列或图像(例如 GIF、TIFF、MIFF、Postscript 和 MNG 格式),必须使用STL 接口 进行操作。可以通过在文件名末尾添加数组样式的符号来请求多帧图像的单个帧(例如,“animation.gif[3]”检索 GIF 动画的第四帧)。可以对图像应用各种图像操作。可以对图像设置属性以影响操作操作。 Pixels 类提供对图像像素的底层访问。为了方便起见,包含<Magick++.h>足以使用完整的 Magick++ API。Magick++ API 位于 Magick 命名空间中,因此您必须要么在每个类/枚举名称前添加前缀“Magick:”,要么在包含using namespace Magick;”。Magick++.h头文件后添加语句“

分配 Image 对象的首选方式是通过自动分配(在栈上)。不必担心在栈上分配 Image 对象会过度增大栈,因为 Magick++ 会从堆中分配所有大型数据对象(例如实际的图像数据)。与显式分配(通过 new)相比,首选使用自动分配,因为它出错的可能性要小得多,并且允许使用 C++ 作用域规则来避免内存泄漏。使用自动分配允许 Magick++ 对象像 C++ 本机数据类型(例如“int”)一样进行赋值和复制,从而产生清晰易读的代码。使用自动分配会导致代码自然地具有异常安全性,因为如果抛出异常,一旦栈展开到分配作用域之外,对象就会自动释放(对于通过 new 分配的对象并非如此)。

Image 非常易于使用。例如,这是一个读取图像、裁剪图像并将其写入新文件的程序源代码(异常处理是可选的,但强烈建议使用)

#include <Magick++.h> 
#include <iostream> 
using namespace std; 
using namespace Magick; 
int main(int argc,char **argv) 
{ 
  InitializeMagick(*argv);

  // Construct the image object. Separating image construction from the 
  // the read operation ensures that a failure to read the image file 
  // doesn't render the image object useless. 
  Image image;
  try { 
    // Read a file into image object 
    image.read( "girl.gif" );

    // Crop the image to specified size (width, height, xOffset, yOffset)
    image.crop( Geometry(100,100, 100, 100) );

    // Write the image to a file 
    image.write( "x.gif" ); 
  } 
  catch( Exception &error_ ) 
    { 
      cout << "Caught exception: " << error_.what() << endl; 
      return 1; 
    } 
  return 0; 
}
以下是一个程序的源代码,它演示了 Magick++ 高效的引用计数赋值和复制构造函数操作的使用,这些操作最大限度地减少了内存的使用并消除了不必要的复制操作(允许 Image 对象被高效地赋值,并复制到容器中)。该程序完成以下操作
  1. 读取主图像。
  2. 将主图像赋值给第二个图像。
  3. 将第二个图像调整大小为 640x480。
  4. 将主图像赋值给第三个图像。
  5. 将第三个图像调整大小为 800x600。
  6. 将第二个图像写入文件。
  7. 将第三个图像写入文件。
#include <Magick++.h> 
#include <iostream> 
using namespace std; 
using namespace Magick; 
int main(int argc,char **argv) 
{ 
  InitializeMagick(*argv);

  Image master("horse.jpg"); 
  Image second = master; 
  second.resize("640x480"); 
  Image third = master; 
  third.resize("800x600"); 
  second.write("horse640x480.jpg"); 
  third.write("horse800x600.jpg"); 
  return 0; 
}
在整个操作过程中,内存中最多存在三个图像,并且图像数据从未被复制。

以下是另一个简单程序的源代码,该程序创建一个 100x100 像素的白色图像,并在中心放置一个红色像素,并将其写入文件

#include <Magick++.h> 
using namespace std; 
using namespace Magick; 
int main(int argc,char **argv) 
{ 
  InitializeMagick(*argv);
  Image image( "100x100", "white" ); 
  image.pixelColor( 49, 49, "red" ); 
  image.write( "red_pixel.png" ); 
  return 0; 
}
如果要将彩色图像更改为灰度图像,可以添加以下行
image.quantizeColorSpace( GRAYColorspace ); 
image.quantizeColors( 256 ); 
image.quantize( );

或者,更简单地说

 image.type( GrayscaleType );

在写入图像之前。

BLOB

虽然编码图像(例如 JPEG)最常写入和读取磁盘文件,但编码图像也可以驻留在内存中。内存中的编码图像称为 BLOB(二进制大对象),可以使用Blob 类表示。编码图像最初可以通过直接从文件读取、从数据库读取图像、从磁盘文件内存映射或由 Magick++ 写入内存来放置在内存中。一旦编码图像被放置在一个 Blob 中,它就可以通过构造函数read() 读取到 Magick++ Image 中。同样,Magick++ 图像可以通过write() 写入到 Blob 中。

以下是用 Image 写入 Blob 的示例
 

#include >Magick++.h> 
using namespace std; 
using namespace Magick; 
int main(int argc,char **argv) 
{ 
  InitializeMagick(*argv);

  // Read GIF file from disk 
  Image image( "giraffe.gif" );
  // Write to BLOB in JPEG format 
  Blob blob; 
  image.magick( "JPEG" ) // Set JPEG output format 
  image.write( &blob );

  [ Use BLOB data (in JPEG format) here ]

  return 0; 
}


同样,要从 Blob 读取图像,您可以使用以下示例之一

[ 以下示例的入口条件是 data 是指向编码图像数据的指针,length 表示数据的大小 ]

Blob blob( data, length ); 
Image image( blob );
或者
Blob blob( data, length ); 
Image image; 
image.read( blob);
某些图像不包含其大小或格式,因此必须预先指定大小和格式
Blob blob( data, length ); 
Image image; 
image.size( "640x480") 
image.magick( "RGBA" ); 
image.read( blob);

构造函数

Image 可以通过多种方式构造。它可以从文件、URL 或内存中BLOB 中包含的编码图像(例如 JPEG)构造。可用的 Image 构造函数如下表所示
 
 
Image 构造函数
签名
描述
const std::string &imageSpec_ 通过从 imageSpec_ 指定的文件或 URL 读取来构造 Image。使用数组符号(例如 filename[9])从多帧图像中选择特定的场景。
const Geometry &size_, const Color &color_ 构造指定大小和颜色的空白图像画布
const Blob &blob_ 通过读取内存中BLOB 中包含的编码图像数据来构造 Image。根据构造函数参数,还可以指定 Blob 的大小深度类型(格式)。某些图像格式要求指定大小。ImageMagick 用于深度的默认值取决于编译时 Quantum 大小(8 或 16)。如果 ImageMagick 的 Quantum 大小与图像不匹配,则可能需要指定深度。ImageMagick 通常可以自动检测图像的格式。当无法自动检测格式时,必须指定格式(类型)。
const Blob &blob_, const Geometry &size_
const Blob &blob_, const Geometry &size, size_t depth
const Blob &blob_, const Geometry &size, size_t depth_, const string &magick_
const Blob &blob_, const Geometry &size, const string &magick_
const size_t width_, 
const size_t height_,
std::string map_,
const StorageType type_,
const void *pixels_
基于图像像素数组构造新的 Image。像素数据必须按扫描线顺序从上到下排列。数据可以是字符、短整数、整数、浮点数或双精度数。浮点数和双精度数要求像素归一化 [0..1]。其他类型为 [0..MaxRGB]。例如,要从无符号红绿蓝字符数据创建 640x480 图像,请使用

   Image image( 640, 480, "RGB", 0, pixels );

参数如下
 

width_ 图像的宽度(以像素为单位)。
height_ 图像的高度(以像素为单位)。
map_ 此字符字符串可以是 R=红色、G=绿色、B=蓝色、A=alpha、C=青色、Y=黄色、M=品红色和 K=黑色的任意组合或顺序。顺序反映了提供的像素数组中像素的顺序。
type_ 像素存储类型(CharPixel、ShortPixel、IntegerPixel、FloatPixel 或 DoublePixel)
pixels_ 此值数组包含由 map_ 和 type_ 参数定义的像素分量。数组的长度必须等于由 width_ 和 height_ 值以及 type_ 参数指定的面积。

图像操作方法

Image 支持访问 ImageMagick 库提供的所有单图像(相对于图像列表)操作。如果必须处理多图像文件(例如动画),则必须使用STL 接口,它在 Image 之上提供多图像抽象。

图像操作方法非常易于使用。例如

Image image; 
image.read("myImage.tiff"); 
image.addNoise(GaussianNoise); 
image.write("myImage.tiff");
将高斯噪声添加到图像文件“myImage.tiff”。

Image 支持的操作如下表所示
 

Image 图像操作方法
方法 签名 描述
adaptiveThreshold
size_t width, size_t height, size_t offset = 0
对图像应用自适应阈值处理。如果理想的阈值级别事先未知,或者图像上的照明梯度不恒定,则自适应阈值处理非常有用。自适应阈值处理通过评估像素区域(由 widthheight 指定的大小)的均值(平均值)并将均值用作阈值来工作。为了去除背景中的残余噪声,可以通过从均值中减去一个常数 offset(默认为零)来调整阈值,以计算阈值。
addNoise
NoiseType noiseType_ 使用指定的噪声类型向图像添加噪声。
addNoiseChannel
const ChannelType channel_, const NoiseType noiseType_
使用指定的噪声类型向图像通道添加噪声。channel_ 参数指定要向其添加噪声的通道。noiseType_ 参数指定噪声的类型。
affineTransform
const DrawableAffine &affine
通过指定的仿射(或自由变换)矩阵变换图像。
annotate
const std::string &text_, const Geometry &location_ 使用指定的文本和放置位置进行注释
string text_, const Geometry &boundingArea_, GravityType gravity_ 使用指定的文本、边界区域和放置重力进行注释。如果 boundingArea_ 无效,则边界区域为整个图像。
const std::string &text_, const Geometry &boundingArea_, GravityType gravity_, double degrees_,  使用指定的文本、边界区域、放置重力和旋转对文本进行注释。如果 boundingArea_ 无效,则边界区域为整个图像。
const std::string &text_, GravityType gravity_ 使用文本(边界区域为整个图像)和放置重力进行注释。
blur
const double radius_ = 1, const double sigma_ = 0.5 模糊图像。radius_ 参数指定高斯半径(以像素为单位),不包括中心像素。sigma_ 参数指定拉普拉斯算子的标准差(以像素为单位)。
blurChannel
const ChannelType channel_, const double radius_ = 0.0, const double sigma_ = 1.0
模糊图像通道。channel_ 参数指定要模糊的通道。radius_ 参数指定高斯半径(以像素为单位),不包括中心像素。sigma_ 参数指定拉普拉斯算子的标准差(以像素为单位)。
border
const Geometry &geometry_ = "6x6+0+0" 边框图像(向图像添加边框)。边框的颜色由 borderColor 属性指定。
cdl
const std::string &cdl_ 使用颜色决策列表进行颜色校正。有关详细信息,请参见http://en.wikipedia.org/wiki/ASC_CDL
channel
ChannelType channel_ 从图像中提取通道。使用此选项从图像中提取特定通道。例如,alphaChannel 用于从图像中提取 alpha 值。
charcoal
const double radius_ = 1, const double sigma_ = 0.5 炭笔效果图像(看起来像炭笔素描)。radius_ 参数指定高斯半径(以像素为单位),不包括中心像素。sigma_ 参数指定拉普拉斯算子的标准差(以像素为单位)。
chop
const Geometry &geometry_ 裁剪图像(删除图像的垂直或水平子区域)
colorize
const unsigned int opacityRed_, const unsigned int opacityGreen_, const unsigned int opacityBlue_, const Color &penColor_

使用指定的红色、绿色和蓝色量子不透明度百分比,用笔颜色给图像着色。
colorMatrix
const size_t order_, const double *color_matrix_ 应用颜色校正到图像。
注释
const std::string &comment_ 对图像添加注释(将注释字符串添加到图像)。默认情况下,每个图像都以其文件名进行注释。使用此方法为图像分配特定注释。可以选择通过嵌入特殊格式字符来包含图像文件名、类型、宽度、高度或其他图像属性。
比较
const Image &reference_
将当前图像与另一个图像进行比较。在当前图像中设置meanErrorPerPixelnormalizedMaxErrornormalizedMeanError。如果图像相同,则返回false。如果参考图像的列、行、颜色空间或蒙版与当前图像不同,则会抛出ErrorOption异常。
合成
const Image &compositeImage_, ssize_t xOffset_, ssize_t yOffset_, CompositeOperator compose_ = InCompositeOp 使用compose_指定的合成算法,将图像合成到当前图像上,偏移量由xOffset_yOffset_指定。
const Image &compositeImage_, const Geometry &offset_, CompositeOperator compose_ = InCompositeOp 使用compose_指定的合成算法,将图像合成到当前图像上,偏移量由offset_指定。
const Image &compositeImage_, GravityType gravity_, CompositeOperator compose_ = InCompositeOp 使用compose_指定的合成算法,将图像合成到当前图像上,位置由gravity_指定。
对比度
size_t sharpen_ 增强图像对比度(增强图像中的强度差异)
卷积
size_t order_, const double *kernel_ 卷积图像。对图像应用用户指定的卷积。order_参数表示滤波器内核中列和行的数量,kernel_是一个双精度数的二维数组,表示要应用的卷积内核。
裁剪
const Geometry &geometry_ 裁剪图像(原始图像的子区域)
循环颜色映射
int amount_ 循环图像颜色映射
去斑点
void 去除图像斑点(减少斑点噪声)
显示
void 在屏幕上显示图像。
注意: 如果图像格式与显示视觉不兼容(例如,在颜色映射显示器上使用 JPEG),则原始图像将被更改。如果这是一个问题,请使用原始图像的副本。
扭曲
const DistortImageMethod method, const size_t number_arguments, const double *arguments, const bool bestfit = false 扭曲图像。对图像应用用户指定的扭曲。
绘制
const Drawable &drawable_ 在图像上绘制形状或文本。
const std::list<Drawable > &drawable_ 使用包含在 STL 列表中的 Drawable 对象集在图像上绘制形状或文本。使用此方法可以提高绘图性能,并允许将绘制对象批量组合到列表中以重复使用。
边缘
size_t radius_ = 0.0 突出显示图像边缘。半径是像素邻域的半径。指定半径为零以进行自动半径选择。
浮雕
const double radius_ = 1, const double sigma_ = 0.5 浮雕图像(使用 3D 效果突出显示边缘)。radius_参数指定高斯函数的半径(以像素为单位),不包括中心像素。sigma_参数指定拉普拉斯算子的标准差(以像素为单位)。
增强
void 增强图像(最大程度减少噪声)
均衡
void 均衡图像(直方图均衡)
擦除
void 将所有图像像素设置为当前背景颜色。
扩展
const Geometry &geometry_ 根据几何形状、重力和图像背景颜色扩展图像。
const Geometry &geometry_, const Color &backgroundColor_
const Geometry &geometry_, const GravityType &gravity_ 根据几何形状、重力和图像背景颜色扩展图像。
const Geometry &geometry_, const Color &backgroundColor_, const GravityType &gravity_
翻转
void 翻转图像(沿垂直方向反射每条扫描线)
填充
颜色
ssize_t x_, ssize_t y_, const Color &fillColor_ 填充与目标像素颜色匹配且与目标像素相邻的像素的颜色。在确定颜色匹配时使用当前的模糊设置。
const Geometry &point_, const Color &fillColor_
ssize_t x_, ssize_t y_, const Color &fillColor_, const Color &borderColor_ 从目标像素开始填充颜色,并在与指定的边界颜色匹配的像素处停止。在确定颜色匹配时使用当前的模糊设置。
const Geometry &point_, const Color &fillColor_, const Color &borderColor_
填充不透明度 const long x_, const long y_, const unsigned int opacity_, const PaintMethod method_ 使用指定方法,用替换的不透明度值填充与目标像素(x,y)颜色(在模糊因子内)匹配的像素。
填充
纹理
ssize_t x_, ssize_t y_,  const Image &texture_ 填充与目标像素颜色匹配且与目标像素相邻的像素的纹理。在确定颜色匹配时使用当前的模糊设置。
const Geometry &point_, const Image &texture_
ssize_t x_, ssize_t y_, const Image &texture_, const Color &borderColor_ 从目标像素开始填充纹理,并在与指定的边界颜色匹配的像素处停止。在确定颜色匹配时使用当前的模糊设置。
const Geometry &point_, const Image &texture_, const Color &borderColor_
翻转
void  翻转图像(沿水平方向反射每条扫描线)
框架
const Geometry &geometry_ = "25x25+6+6" 在图像周围添加装饰性框架
size_t width_, size_t height_, ssize_t x_, ssize_t y_, ssize_t innerBevel_ = 0, ssize_t outerBevel_ = 0
fx
const std::string expression, const Magick::ChannelType channel Fx 图像。对图像应用数学表达式。
伽马
double gamma_ 伽马校正图像(统一的红色、绿色和蓝色校正)。
double gammaRed_, double gammaGreen_, double gammaBlue_ 伽马校正图像的红色、绿色和蓝色通道。
高斯模糊
const double width_, const double sigma_ 高斯模糊图像。卷积掩码中包含的相邻像素数由“width_”指定。例如,宽度为 1 会产生一个 (标准) 3x3 卷积掩码。高斯钟形曲线的标准差由“sigma_”指定。
高斯模糊通道
const ChannelType channel_, const double radius_ = 0.0, const double sigma_ = 1.0
高斯模糊图像通道。channel_参数指定要模糊的通道。卷积掩码中包含的相邻像素数由“width_”指定。例如,宽度为 1 会产生一个 (标准) 3x3 卷积掩码。高斯钟形曲线的标准差由“sigma_”指定。
haldClut
const Image &reference_
将 Hald 颜色查找表应用于图像。
内爆
const double factor_ 图像内爆(特殊效果)
逆傅里叶变换
const Image &phaseImage_, const bool magnitude_ 实现图像的逆离散傅里叶变换 (DFT),作为幅度/相位或实部/虚部图像对。
标签
const string &label_ 为图像分配标签。使用此选项为图像分配特定标签。可以选择通过嵌入特殊格式字符来包含图像文件名、类型、宽度、高度或场景编号在标签中。如果字符串的第一个字符是@,则从标题为字符串中其余字符的文件中读取图像标签。转换为 Postscript 时,使用此选项指定要在图像上方打印的标题字符串。
级别
const double black_point, const double white_point, const double mid_point=1.0
级别图像。通过将落在指定白点和黑点之间的颜色缩放至完整的可用量子范围来调整图像的级别。提供的参数表示黑点、中点(伽马)和白点。黑点指定图像中最暗的颜色。比黑点更暗的颜色设置为零。中点(伽马)指定要应用于图像的伽马校正。白点指定图像中最亮的颜色。比白点更亮的颜色设置为最大量子值。黑点和白点的有效范围是 0 到 MaxRGB,而中点(伽马)的有用范围是 0 到 10。
级别通道
const ChannelType channel, const double black_point, const double white_point, const double mid_point=1.0
级别图像通道。通过将落在指定白点和黑点之间的值缩放至完整的可用量子范围来调整图像通道的级别。提供的参数表示黑点、中点(伽马)和白点。黑点指定图像中最暗的颜色。比黑点更暗的颜色设置为零。中点(伽马)指定要应用于图像的伽马校正。白点指定图像中最亮的颜色。比白点更亮的颜色设置为最大量子值。黑点和白点的有效范围是 0 到 MaxRGB,而中点(伽马)的有用范围是 0 到 10。
放大
void 按整数倍放大图像
映射
const Image &mapImage_ , bool dither_ = false 使用参考图像中最接近的颜色重新映射图像颜色。将 dither_ 设置为true以将 Floyd/Steinberg 错误扩散应用于图像。默认情况下,颜色减少会选择一组最能代表原始图像的最佳颜色。或者,您可以使用此选项从图像文件中选择特定的颜色集。
填充 Alpha
const ssize_t x_, const ssize_t, const unsigned int  alpha_, const Color &target_, const bool invert_ 用替换的 Alpha 值填充指定的区域。
中值滤波 const double radius_ = 0.0 通过用圆形邻域中的中值颜色替换每个像素分量来滤波图像
合并图层
LayerMethod noiseType_ 处理构成一组图像图层或动画帧的多个图像。
缩小
void 按整数倍缩小图像
修改图像 void 准备更新图像。确保只有一个对基础图像的引用,以便可以安全地修改基础图像而不会影响图像的先前版本。如果需要,将基础图像复制到新图像。
调制
double brightness_, double saturation_, double hue_ 调整图像的色相、饱和度和亮度百分比。饱和度和亮度的调整是相对于当前值的比率(1.0 表示无变化)。色相的调整是从当前位置旋转 -180 度到 +180 度的绝对旋转,对应于 0 到 2.0 的参数范围(1.0 表示无变化)。
motionBlur
const double radius_, const double sigma_, const double angle_
使用指定的模糊因子对图像进行运动模糊。radius_ 参数指定高斯函数的半径(以像素为单位),不包括中心像素。sigma_ 参数指定拉普拉斯算子的标准差(以像素为单位)。angle_ 参数指定物体出现的方向(0 度表示从右侧)。
negate
bool grayscale_ = false 反转图像中的颜色。用每个像素的补色替换每个像素(白色变为黑色,黄色变为蓝色,等等)。将 grayscale 设置为仅反转图像中的灰度值。
normalize
void 规范化图像(通过将像素值规范化到颜色的完整范围来提高对比度)。
oilPaint
size_t radius_ = 3 油画图像(图像看起来像油画)。
opacity
unsigned int opacity_ 设置或衰减图像中的不透明度通道。如果图像像素是不透明的,则将其设置为指定的不透明度值,否则将其与提供的不透明度值混合。opacity_ 的值范围为 0(完全不透明)到 MaxRGB。定义 OpaqueOpacityTransparentOpacity 分别可用于指定完全不透明或完全透明。
opaque
const Color &opaqueColor_, const Color &penColor_ 将与 opaqueColor_ 匹配的像素的颜色更改为指定的 penColor_。
ping
const std::string &imageSpec_ Ping 类似于 read,只是只读取足够的部分来确定图像的列、行和文件大小。 columns, rowsfileSize 属性在调用 ping 后有效。调用 ping 后,图像数据无效。
const Blob &blob_
process
std::string name_, const ssize_t argc_, char **argv_
执行指定的进程模块,通过参数向量传递任何参数,argc_ 指定向量中的参数数量,argv_ 传递一个以 null 结尾的 C 字符串数组的地址,这些字符串构成参数向量。如果请求的进程模块不存在、加载失败或执行期间失败,则会抛出异常。
quantize
bool measureError_ = false 量化图像(减少颜色数量)。将 measureError_ 设置为 true 以计算错误属性。
raise
const Geometry &geometry_ = "6x6+0+0",  bool raisedFlag_ =  false 凸显图像(使图像边缘变亮或变暗,以产生 3D 凸起或凹陷效果)。
read
const string &imageSpec_ 将图像读取到当前对象中。
const Geometry &size_, const std::string &imageSpec_ 将指定大小的图像读取到当前对象中。此形式适用于未指定其大小的图像或为解码图像指定大小提示。例如,在读取 Photo CD、JBIG 或 JPEG 图像时,大小请求会导致库返回一个分辨率大于或等于指定大小的图像。这可能会节省内存和时间。
const Blob &blob_ 将指定大小的编码图像从内存中的 BLOB 读取到当前对象中。根据方法参数,还可以指定 Blob 的大小、深度和格式。某些图像格式要求指定大小。ImageMagick 用于深度的默认值取决于其 Quantum 大小(8 或 16)。如果 ImageMagick 的 Quantum 大小与图像不匹配,则可能需要指定深度。ImageMagick 通常可以自动检测图像的格式。当无法自动检测格式时,必须指定格式。
const Blob &blob_, const Geometry &size_
const Blob &blob_, const Geometry &size_, size_t depth_
const Blob &blob_, const Geometry &size_, size_t depth_, const string &magick_ 
const Blob &blob_, const Geometry &size_, const string &magick_
const size_t width_, const size_t height_, std::string map_, const StorageType type_, const void *pixels_ 基于图像像素数组读取图像。像素数据必须按扫描线顺序从上到下排列。数据可以是字符、短整数、整数、浮点数或双精度数。浮点数和双精度数要求像素归一化到 [0..1]。其他类型为 [0..MaxRGB]。例如,要从无符号红绿蓝字符数据创建 640x480 图像,请使用

  image.read( 640, 480, "RGB", CharPixel, pixels );

参数如下
 

width_ 图像的宽度(以像素为单位)。
height_ 图像的高度(以像素为单位)。
map_ 此字符字符串可以是 R=红色、G=绿色、B=蓝色、A=alpha、C=青色、Y=黄色、M=品红色和 K=黑色的任意组合或顺序。顺序反映了提供的像素数组中像素的顺序。
type_ 像素存储类型(CharPixel、ShortPixel、IntegerPixel、FloatPixel 或 DoublePixel)
pixels_ 此值数组包含由 map_ 和 type_ 参数定义的像素分量。数组的长度必须等于由 width_ 和 height_ 值以及 type_ 参数指定的面积。
reduceNoise
const double order_ 使用噪声峰值消除滤波器减少图像中的噪声。
randomThreshold
const Geometry &thresholds_
对图像进行随机阈值化。根据每个像素的强度与随机阈值进行比较,更改各个像素的值。结果是低对比度的双色图像。thresholds_ 参数是一个包含 LOWxHIGH 阈值的几何图形。如果字符串包含 2x2、3x3 或 4x4,则将执行 2、3 或 4 阶的有序抖动。这是一种非常快速的替代“量化”基于抖动的方案。
randomThresholdChannel
const Geometry &thresholds_, const ChannelType channel_
对图像通道进行随机阈值化。类似于 randomThreshold(),但仅限于指定的通道。
roll
int columns_, ssize_t rows_ 滚动图像(垂直和水平滚动图像)指定的列数和行数。
rotate
double degrees_ 按指定的度数逆时针旋转图像。
sample
const Geometry &geometry_  使用像素采样算法调整图像大小。
scale
const Geometry &geometry_ 使用简单的比率算法调整图像大小。
segment
double clusterThreshold_ = 1.0,
double smoothingThreshold_ = 1.5
通过分析颜色组件的直方图并使用模糊 c 均值技术识别同质单元来分割(合并类似的图像组件)。还使用 quantizeColorSpaceverbose 图像属性。指定 clusterThreshold_ 作为每个簇必须超过簇阈值的像素数才能被视为有效。SmoothingThreshold_ 消除直方图二阶导数中的噪声。随着值的增加,您可以预期得到更平滑的二阶导数。默认值为 1.5。
shade
double azimuth_ = 30, double elevation_ = 30,
bool colorShading_ = false
使用远光源对图像进行阴影处理。指定 azimuth_elevation_ 作为光源的位置。默认情况下,阴影结果为灰度图像。将 colorShading_ 设置为 true 以对图像的红色、绿色和蓝色分量进行阴影处理。
shadow
const double percent_opacity = 80, const double sigma_ = 0.5, const ssize_t x_ = 0, const ssize_t y_ = 0 模拟图像阴影。
sharpen
const double radius_ = 1, const double sigma_ = 0.5 锐化图像中的像素。radius_ 参数指定高斯函数的半径(以像素为单位),不包括中心像素。sigma_ 参数指定拉普拉斯算子的标准差(以像素为单位)。
sharpenChannel
const ChannelType channel_, const double radius_ = 0.0, const double sigma_ = 1.0
锐化图像通道中的像素量子 channel_ 参数指定要锐化的通道。radius_ 参数指定高斯函数的半径(以像素为单位),不包括中心像素。sigma_ 参数指定拉普拉斯算子的标准差(以像素为单位)。
shave
const Geometry &geometry_ 从图像边缘修剪像素。
shear
double xShearAngle_, double yShearAngle_ 剪切图像(通过沿 X 或 Y 轴滑动图像创建平行四边形)。剪切沿 X 或 Y 轴滑动图像的一条边,创建一个平行四边形。X 方向剪切沿 X 轴滑动一条边,而 Y 方向剪切沿 Y 轴滑动一条边。剪切量由剪切角控制。对于 X 方向剪切,x 度相对于 Y 轴测量,类似地,对于 Y 方向剪切,y 度相对于 X 轴测量。剪切图像后留下的空三角形将填充 borderColor 定义的颜色。
solarize
double factor_ = 50.0 使图像曝光(类似于在显影过程中将照相胶片曝光于光线下所看到的效果)。
splice
const Geometry &geometry_ 将背景色拼接成图像。
spread
size_t amount_ = 3 将像素随机分散到图像中指定的量。
stegano
const Image &watermark_ 向图像添加数字水印(基于第二张图像)。
sparseColor
const ChannelType channel, const SparseColorMethod method, const size_t number_arguments, const double *arguments 稀疏颜色图像,给定一组坐标,使用各种方法对这些坐标处找到的颜色进行插值,跨越整个图像。
statistics
ImageStatistics *statistics 获取图像统计信息。统计信息被规范化到 0.0 到 1.0 的范围,并输出到指定的 ImageStatistics 结构中。该结构包含每个通道的最大值、最小值、平均值、标准差和方差:红色、绿色、蓝色和不透明度(例如 statistics->red.maximum)。
stereo
const Image &rightImage_ 创建一个使用红蓝眼镜观看时看起来是立体图像的图像(左侧为红色图像,右侧为蓝色图像)。
swirl
double degrees_ 旋转图像(图像像素旋转一定的角度)。
texture
const Image &texture_ 在与图像背景颜色匹配的像素上叠加纹理。
threshold
double threshold_ 阈值化图像。
transform
const Geometry &imageGeometry_ 根据图像和裁剪几何图形变换图像。裁剪几何图形是可选的。
const Geometry &imageGeometry_, const Geometry &cropGeometry_ 
transparent
const Color &color_ 向图像添加 alpha 图像,将与颜色匹配的像素设置为透明。
trim
void 修剪图像中为背景色的边缘。
unsharpmask
double radius_, double sigma_, double amount_, double threshold_ 使用锐化蒙版算法锐化图像。radius_ 参数指定高斯函数的半径(以像素为单位),不包括中心像素。sigma_ 参数指定高斯函数的标准差(以像素为单位)。amount_ 参数指定添加到原始图像中的原始图像和模糊图像之间差异的百分比。threshold_ 参数指定应用差异量所需的像素阈值。
unsharpmaskChannel
const ChannelType channel_, const double radius_, const double sigma_, const double amount_, const double threshold_
使用锐化蒙版算法锐化图像通道。channel_ 参数指定要锐化的通道。radius_ 参数指定高斯函数的半径(以像素为单位),不包括中心像素。sigma_ 参数指定高斯函数的标准差(以像素为单位)。amount_ 参数指定添加到原始图像中的原始图像和模糊图像之间差异的百分比。threshold_ 参数指定应用差异量所需的像素阈值。
wave

double amplitude_ = 25.0, double wavelength_ = 150.0 沿着正弦波改变图像。
写入
const string &imageSpec_ 使用文件名 imageSpec_ 将图像写入文件。
注意: 如果选择的图像格式能够支持的颜色少于原始图像,或者已请求量化,则原始图像将被量化为更少的颜色。如果这是一个问题,请使用原始图像的副本。
Blob *blob_ 将图像写入存储在 blob_ 中的内存中 BLOBmagick_ 参数指定要写入的图像格式(默认为 magick)。depth_ 参数指定图像深度(默认为 depth)。
注意: 如果选择的图像格式能够支持的颜色少于原始图像,或者已请求量化,则原始图像将被量化为更少的颜色。如果这是一个问题,请使用原始图像的副本。
Blob *blob_, std::string &magick_
Blob *blob_, std::string &magick_, size_t depth_
const ssize_t x_, const ssize_t y_, const size_t columns_, const size_t rows_, const std::string &map_, const StorageType type_, void *pixels_ 将像素数据写入您提供的缓冲区。数据以字符、短整型、整型、浮点型或双精度型格式保存,顺序由 type_ 参数指定。例如,我们想以红色-绿色-蓝色顺序提取 640x480 图像的第 1 个扫描线作为字符数据

  image.write(0,0,640,1,"RGB",0,pixels);

参数如下
 

x_ 要提取区域的最左侧坐标的横坐标。
y_ 要提取区域的最顶部坐标的纵坐标。
columns_ 要提取区域的宽度(以像素为单位)。
rows_ 要提取区域的高度(以像素为单位)。
map_ 此字符字符串可以是 R=红色、G=绿色、B=蓝色、A=alpha、C=青色、Y=黄色、M=品红色和 K=黑色的任意组合或顺序。排序反映了提供的像素数组中像素的顺序。
type_ 像素存储类型(CharPixel、ShortPixel、IntegerPixel、FloatPixel 或 DoublePixel)
pixels_ 此值数组包含由 map_ 和 type_ 参数定义的像素分量。数组的长度必须等于由 width_ 和 height_ 值以及 type_ 参数指定的面积。
调整大小
const Geometry &geometry_ 将图像调整为指定的大小。

图像属性

图像属性通过 Image 中的方法设置和获取。除了接受指针参数的方法(例如 chromaBluePrimary)所有方法都按值返回属性。

图像属性很容易使用。例如,要将 TIFF 文件“file.tiff”的分辨率设置为水平和垂直方向上的每英寸 150 点 (DPI),您可以使用以下示例代码

string filename("file.tiff"); 
Image image; 
image.read(filename); 
image.resolutionUnits(PixelsPerInchResolution); 
image.density(Geometry(150,150));   // could also use image.density("150x150") 
image.write(filename)
支持的图像属性以及获取它们所需的函数参数如下表所示
 
图像属性
函数
类型
获取签名
设置签名
描述
拼接
布尔值 void bool flag_ 将图像合并到单个多图像文件中。
抗锯齿
布尔值 void bool flag_ 控制渲染的 Postscript 和 Postscript 或 TrueType 字体的抗锯齿。默认情况下启用。
动画-
延迟
size_t(0 到 65535) void size_t delay_ 以 1/100 秒为单位的时间(0 到 65535),在显示动画序列中的下一张图像之前必须经过的时间。此选项可用于调节 Netscape 中 GIF 图像序列的动画。
动画-
迭代次数
size_t void size_t iterations_ 循环动画(例如 Netscape 循环扩展)的迭代次数。
属性
字符串
const std::string name_
const std::string name_, const std::string value_ 任意命名的图像属性。可以将任意数量的命名属性附加到图像。例如,图像注释是名称为“comment”的命名图像属性。EXIF 标签作为命名属性附加到图像。使用语法“EXIF:<tag>”请求类似于“EXIF:DateTime”的 EXIF 标签。
背景-
颜色
颜色 void const Color &color_ 图像背景颜色
背景-
纹理
字符串 void const string &texture_ 用作背景纹理的图像文件名。不会修改图像像素。
baseColumns
size_t void   基本图像宽度(变换前)
baseFilename
字符串 void   基本图像文件名(变换前)
baseRows
size_t void   基本图像高度(变换前)
borderColor
颜色 void  const Color &color_ 图像边框颜色
boundingBox
几何 void   返回包含非边框像素的最小边界框。在区分像素时使用当前的模糊值。这是 crop(Geometry(0,0)) 使用的裁剪边界框。
boxColor
颜色 void const Color &boxColor_ 注释文本在其上呈现的基本颜色。
cacheThreshold size_t   const size_t 以字节为单位的像素缓存阈值。一旦超过此阈值,所有后续的像素缓存操作都将到/从磁盘进行。这是一个静态方法,它设置的属性由所有 Image 对象共享。
channelDepth
size_t
const ChannelType channel_
const ChannelType channel_, const size_t depth_
通道模数深度。通道模数深度表示在不丢失的情况下支持通道所需的最小位数。如果请求的模数深度小于当前模数深度,则设置通道的模数深度会修改通道(即丢弃分辨率),否则不会更改通道。与模数深度没有关联的属性,因此通过检查像素来获取当前模数深度。因此,返回的深度可能小于最近设置的通道深度。后续图像处理可能会导致通道深度增加。
channels
size_t   const size_t 像素通道数。
色度-
BluePrimary
double x & y double *x_, double *y_ double x_, double y_ 色度蓝色原色点(例如 x=0.15,y=0.06)
色度-
GreenPrimary
double x & y double *x_, double *y_ double x_, double y_ 色度绿色原色点(例如 x=0.3,y=0.6)
色度-
RedPrimary
double x & y double *x_, double *y_ double x_, double y_ 色度红色原色点(例如 x=0.64,y=0.33)
色度-
WhitePoint
double x & y double*x_, double *y_ double x_, double y_ 色度白点(例如 x=0.3127,y=0.329)
classType
ClassType void  ClassType class_ 图像存储类。请注意,从 DirectClass 图像转换为 PseudoClass 图像可能会导致颜色丢失,因为调色板的大小有限(256 或 65535 种颜色)。
clipMask
图像 void const Image &clipMask_ 将剪切蒙版图像与当前图像关联。剪切蒙版图像必须与当前图像具有相同的尺寸,否则会抛出异常。在剪切蒙版图像中像素透明的地方发生剪切。剪切传递无效图像以取消设置现有的剪切蒙版。
colorFuzz
双精度 void double fuzz_ 在此距离内的颜色被认为是相等的。许多算法搜索目标颜色。默认情况下,颜色必须完全相同。使用此选项匹配 RGB 空间中接近目标颜色的颜色。
colorMap
颜色 size_t index_ size_t index_, const Color &color_ 颜色映射索引处的颜色。
colorMapSize
size_t
void
size_t entries_
颜色映射中条目的数量。设置颜色映射大小可能会扩展或截断颜色映射。支持的最大条目数由 MaxColormapSize 常量指定,并且取决于编译 ImageMagick 时 QuantumDepth 的值。如果请求的条目数超过支持的条目数,则会抛出异常。截断颜色映射时应注意确保图像颜色映射索引引用有效的颜色映射条目。
colorSpace
ColorspaceType colorSpace_ void ColorspaceType colorSpace_ 用于表示图像像素颜色的颜色空间(例如 CMYK)。图像像素始终存储为 RGB(A),除了 CMY(K) 的情况。
columns
size_t void   图像宽度
注释
字符串 void   图像注释
compose
CompositeOperator void CompositeOperator compose_ 当隐式使用合成时(例如用于图像平铺)要使用的合成运算符。
compress-
类型
CompressionType void CompressionType compressType_ 图像压缩类型。默认为指定图像文件的压缩类型。
调试
布尔值 void bool flag_ 启用 ImageMagick 在执行时打印内部调试消息。
defineValue
字符串
const std::string &magick_, const std::string &key_
const std::string &magick_, const std::string &key_,  const std::string &value_
设置或获取在编码或解码指定格式时应用的定义字符串。定义的含义特定于格式。格式由 magick_ 参数指定,特定于格式的键由 key_ 指定,关联的值由 value_ 指定。如果必须完全删除键,请参阅 defineSet() 方法。
defineSet
布尔值
const std::string &magick_, const std::string &key_
const std::string &magick_, const std::string &key_, bool flag_
设置或获取在编码或解码指定格式时应用的定义标志。 . 与 defineValue() 方法类似,只是传递 flag_ 值“true”会使用该格式和键创建一个无值的 define。传递 flag_ 值“false”将删除任何现有的匹配定义。如果存在匹配的键,则该方法返回“true”,如果不存在匹配的键,则返回“false”。
密度
Geometry  (默认 72x72) void const Geometry &density_ 图像的垂直和水平分辨率(以像素为单位)。此选项在解码 Postscript 或 Portable Document 页面时指定图像密度。通常与 psPageSize 一起使用。
深度
 size_t(8-32) void size_t depth_ 图像深度。用于在读取或写入原始图像时或输出格式支持多种深度时指定位深度。默认为 ImageMagick 编译的量子深度。
endian
EndianType void EndianType endian_ 指定(或获取)支持该格式的格式的 endian 选项。
目录
字符串 void   图像蒙太奇中的图块名称
文件
FILE * FILE * FILE *file_ 图像文件描述符。
fileName
字符串 void const string &fileName_ 图像文件名。
fileSize
off_t void   磁盘上图像的字节数
fillColor
颜色 void const Color &fillColor_ 绘制对象时使用的颜色
fillPattern
图像 void const Image &fillPattern_ 绘制对象时使用的图案图像。
fillRule
FillRule void const Magick::FillRule &fillRule_ 绘制对象时使用的规则。
filterType
FilterTypes void FilterTypes filterType_ 调整图像大小时使用的滤镜。使用的缩减滤镜对调整图像大小时所需的时间和产生的质量有重大影响。默认滤镜是 Lanczos,它已被证明在缩减大多数图像时可以产生高质量的结果。
字体
字符串 void const string &font_ 文本渲染字体。如果字体是完全限定的 X 服务器字体名称,则从 X 服务器获取字体。要使用 TrueType 字体,请在 TrueType 文件名之前加上 @。否则,指定 Postscript 字体名称(例如“helvetica”)。
fontPointsize
size_t void size_t pointSize_ 文本渲染字体大小
fontTypeMetrics
TypeMetric const std::string &text_, TypeMetric *metrics   使用指定的 text 以及当前的 fontfontPointSize 设置,使用字体类型度量更新度量。
格式
字符串 void   长格式图像格式描述。
伽马
双精度(典型范围 0.8 到 2.3) void   图像的伽马级别。由于显示器之间的差异,相同的彩色图像在两个不同的工作站上显示可能看起来不同。使用伽马校正来调整这种颜色差异。
几何形状
几何 void   编码时图像的首选大小。
gifDispose-
方法
size_t
{ 0 = 未指定处置方式,
1 = 不要处置图形,
3 = 用背景色覆盖图形,
4 = 用前一个图形覆盖图形。 }
void size_t disposeMethod_ GIF处置方式。此选项用于在创建GIF动画时控制连续帧的渲染方式(如何处置前一帧)。
iccColorProfile
Blob void const Blob &colorProfile_ ICC颜色配置文件。通过Blob提供,因为Magick++/和ImageMagick目前不支持直接格式化此数据结构。有关ICC颜色配置文件格式的规范,请访问国际色彩联盟
interlace-
类型
InterlaceType void InterlaceType interlace_ 交错方案的类型(默认值为NoInterlace)。此选项用于指定原始图像格式(如RGB或YUV)的交错方案类型。NoInterlace表示不交错,LineInterlace使用扫描线交错,PlaneInterlace使用平面交错。PartitionInterlace类似于PlaneInterlace,但不同的平面保存到单独的文件中(例如image.R、image.G和image.B)。使用LineInterlacePlaneInterlace创建交错的GIF或渐进式JPEG图像。
iptcProfile
Blob void const Blob & iptcProfile_ IPTC配置文件。通过Blob提供,因为Magick++和ImageMagick目前不支持直接格式化此数据结构。有关IPTC配置文件的规范,请访问国际新闻电信委员会
标签
字符串 void const string &label_ 图像标签
magick
字符串 void  const string &magick_ 获取图像格式(例如“GIF”)
alpha
const bool void const bool alphaFlag_ 图像是否支持透明度(alpha通道)
matteColor
颜色 void const Color &matteColor_ 图像蒙版(边框)颜色
meanError-
PerPixel
双精度 void   图像颜色减少时计算的每个像素的平均误差。仅当verbose设置为true且图像刚刚量化时,此参数才有效。
modulusDepth
size_t
void
size_t depth_
图像模数深度(支持红/绿/蓝分量而不会损失精度的最低位数)。可以通过提供小于当前值的值来降低像素模数深度,将像素更新(降低精度)到新的深度。使用此方法无法将像素模数深度增加到当前值以上。
monochrome
布尔值 void bool flag_ 将图像转换为黑白
montage-
几何
几何 void   图像蒙太奇中的图块大小和偏移量。仅对蒙太奇图像有效。
normalized-
MaxError
双精度 void   图像颜色减少时计算的每个像素的归一化最大误差。仅当verbose设置为true且图像刚刚量化时,此参数才有效。
normalized-
MeanError
双精度 void   图像颜色减少时计算的每个像素的归一化平均误差。仅当verbose设置为true且图像刚刚量化时,此参数才有效。
orientation
OrientationType void
OrientationType orientation_ 图像方向。某些文件格式(如DPX和TIFF)支持。用于将其翻转到正确的方向。
packets
size_t void   图像中运行长度编码数据包的数量
the image
packetSize
size_t void   每个像素数据包中的字节数
page
几何 void const Geometry &pageSize_ 图像画布的首选大小和位置。

使用此选项指定Postscript页面(以每英寸点数为单位)或TEXT页面(以像素为单位)的尺寸和位置。此选项通常与 density 一起使用。

Page也可用于定位GIF图像(例如动画中的场景)

pixelColor
颜色 ssize_t x_, ssize_t y_ ssize_t x_, ssize_t y_, const Color &color_ 获取/设置位置x和y处的像素颜色。
profile
Blob
const std::string name_
const std::string name_, const Blob &colorProfile_
获取/设置/删除一个命名配置文件。有效名称包括“*”,“8BIM”,“ICM”,“IPTC”或用户/格式定义的配置文件名称。
quality
size_t (0到100) void size_t quality_ JPEG/MIFF/PNG压缩级别(默认值为75)。
quantize-
Colors
size_t void size_t colors_ 图像中首选的颜色数量。图像中实际的颜色数量可能少于您的请求,但绝不会更多。颜色数量少于使用此选项指定的图像将删除任何重复或未使用的颜色。
quantize-
ColorSpace
ColorspaceType void ColorspaceType colorSpace_ 量化颜色的颜色空间(默认值为RGB)。经验证据表明,YUV或YIQ等颜色空间中的距离比RGB空间中的距离更接近感知颜色差异。在减少图像颜色时,这些颜色空间可能会产生更好的结果。
quantize-
Dither
布尔值 void bool flag_ 将Floyd/Steinberg误差扩散应用于图像。抖动基本策略是通过平均几个相邻像素的强度,用空间分辨率来换取强度分辨率。使用此选项可以改善颜色减少时出现严重轮廓的图像。必须设置quantizeColors或monochrome选项才能使此选项生效。
quantize-
TreeDepth
size_t  void size_t treeDepth_ 量化颜色分类树的深度。值为0或1允许选择颜色减少算法的最佳树深度。值2到8可用于手动调整树深度。
rendering-
Intent
RenderingIntent void RenderingIntent render_ 渲染意图的类型
resolution-
Units
ResolutionType void ResolutionType units_ 图像分辨率的单位
rows
size_t void   图像中像素行的数量
scene
size_t void size_t scene_ 图像场景编号
signature
字符串 bool force_ = false   图像MD5签名。将force_设置为“true”以强制重新计算签名。
size
几何 void const Geometry &geometry_ 原始图像的宽度和高度(不支持宽度和高度信息的图像)。Size也可用于影响从多分辨率格式(例如Photo CD、JBIG或JPEG)读取的图像大小。
strip
void 剥离图像的所有配置文件和注释。
strokeAntiAlias
布尔值 void bool flag_ 启用或禁用绘制对象轮廓时的抗锯齿。
strokeColor
颜色 void const Color &strokeColor_ 绘制对象轮廓时使用的颜色
strokeDashOffset
size_t void double strokeDashOffset_ 使用虚线模式绘制时,指定虚线模式中开始虚线的距离(默认值为0)。
strokeDashArray
const double* void const double* strokeDashArray_ 指定用于描边路径的虚线和间隙的模式。strokeDashArray表示一个以零结尾的数字数组,这些数字指定用户单位中交替虚线和间隙的长度(以像素为单位)。如果提供了奇数个值,则重复值列表以产生偶数个值。典型的strokeDashArray_数组可能包含成员5 3 2 0,其中零值表示模式数组的结束。
strokeLineCap
LineCap void LineCap lineCap_ 指定在描边路径(或其他矢量形状)的角处使用的形状。LineJoin的值为UndefinedJoin、MiterJoin、RoundJoin和BevelJoin。
strokeLineJoin
LineJoin void LineJoin lineJoin_ 指定在描边路径(或其他矢量形状)的角处使用的形状。LineJoin的值为UndefinedJoin、MiterJoin、RoundJoin和BevelJoin。
strokeMiterLimit
size_t void size_t miterLimit_ 指定斜接限制。当两条线段以锐角相交并且为“lineJoin”指定了斜接连接时,斜接可能扩展到远远超出描边路径的线条厚度。miterLimit'对斜接长度与“lineWidth”的比率施加限制。此参数的默认值为4。
strokeWidth
双精度 void double strokeWidth_ 绘制矢量对象时使用的笔划宽度(默认值为1)
strokePattern
图像 void const Image &strokePattern_ 绘制对象笔划(轮廓)时使用的图案图像。
subImage
size_t void size_t subImage_ 图像序列的子图像
subRange
size_t void size_t subRange_ 相对于基本图像的图像数量
textEncoding
string
void
const std::string &encoding_
指定用于文本注释的代码集。目前只能指定“UTF-8”字符编码,用于表示 Unicode 作为字节序列。指定空字符串以使用默认的ASCII编码。使用Unicode成功进行文本注释可能需要设计为支持Unicode的字体。
tileName
字符串 void const string &tileName_ 图块名称
totalColors
size_t void   图像中的颜色数量
type
ImageType void ImageType 图像类型。
verbose
布尔值 void bool verboseFlag_ 打印有关图像的详细信息
view
字符串 void const string &view_ FlashPix查看参数。
virtualPixelMethod
VirtualPixelMethod void VirtualPixelMethod virtualPixelMethod_ 图像虚拟像素方法。
x11Display
string(例如“hostname:0.0”) void const string &display_ 要显示到的X11显示器、从中获取字体的显示器或从中捕获图像的显示器
xResolution
双精度 void   图像的x分辨率
yResolution
双精度 void   图像的y分辨率

低级图像像素访问

可以通过Image Pixel Cache直接访问图像像素(类型为Quantum )。Image Pixel Cache是实际图像像素的矩形窗口(可能在内存中、从磁盘文件内存映射或完全在磁盘上)。存在两个接口来访问Image Pixel Cache。此处描述的接口(Image类的一部分)一次只支持一个视图。有关支持同时像素视图(最多行数)的更抽象的接口,请参阅Pixels 类。作为类比,此处描述的接口与Pixels 类相关联,就像stdio的gets()与fgets()相关联一样。 Pixels 类提供了更通用的接口形式。

通过getPixels()获取现有的图像像素。使用setPixels()创建一个新的像素区域。

为了确保仅修改图像的当前生成,应调用Image的modifyImage()方法以将基础图像上的引用计数减少到1。如果未执行此操作,则由于在复制或构造Image时使用引用计数,因此可能会修改图像的先前生成。

根据操作系统的功能以及窗口与图像的关系,像素缓存可能是所选窗口中像素的副本,也可能是实际的图像像素。无论哪种情况,调用syncPixels()都能确保基础图像使用修改后的像素缓存内容进行更新。方法readPixels()支持根据QuantumTypes将外部像素数据格式复制到像素缓存中。方法writePixels()支持根据QuantumTypes指定的格式将缓存中的像素复制到外部像素表示形式。

像素区域实际上是一个小的图像,其中可以访问、寻址和更新像素,如下例所示

cache

Image image("cow.png"); 
// Ensure that there are no other references to this image.
image.modifyImage();
// Set the image type to TrueColor DirectClass representation.
image.type(TrueColorType);
// Request pixel region with size 60x40, and top origin at 20x30 
ssize_t columns = 60; 
Quantum *pixel_cache = image.getPixels(20,30,columns,40); 
// Set pixel at column 5, and row 10 in the pixel cache to red. 
ssize_t column = 5; 
ssize_t row = 10; 
Quantum *pixel = pixel_cache+row*columns+column; 
*pixel = Color("red"); 
// Save changes to underlying image .
image.syncPixels();
  // Save updated image to file.
image.write("horse.png");

图像缓存支持以下方法
 

图像缓存方法
方法
返回值
签名
描述
getConstPixels
const Quantum * const ssize_t x_, const ssize_t y_, const size_t columns_, const size_t rows_ 将图像中的像素传输到由指定矩形区域定义的像素缓存中。返回的指针在下次调用 getPixel、getConstPixels 或 setPixels 之前保持有效,并且用户永远不应该释放它。
getConstMetacontent
const void* void 返回指向对应于先前getPixel()、getConstPixels() 或 setPixels() 调用的图像像素元内容的指针。返回的指针在下次调用 getPixel、getConstPixels 或 setPixels 之前保持有效,并且用户永远不应该释放它。像素元内容表示一个 void 类型的数组,其中每个条目对应于一个 x,y 像素位置。
getMetacontent
void* void 返回指向对应于上次getConstPixelsgetPixelssetPixels调用请求的像素区域的图像像素元内容的指针。返回的指针在下次调用 getPixel、getConstPixels 或 setPixels 之前保持有效,并且用户永远不应该释放它。
getPixels
Quantum * const ssize_t x_, const ssize_t y_, const size_t columns_, const size_t rows_ 将图像中的像素传输到由指定矩形区域定义的像素缓存中。修改后的像素随后可以通过 syncPixels 传输回图像。返回的指针在下次调用 getPixel、getConstPixels() 或 setPixels() 之前保持有效,并且用户永远不应该释放它。
setPixels
Quantum * const ssize_t x_, const ssize_t y_, const size_t columns_, const size_t rows_ 分配一个像素缓存区域以存储由区域矩形定义的图像像素。此区域随后通过 syncPixels 从像素缓存传输到图像。返回的指针在下次调用 getPixel、getConstPixels 或 setPixels 之前保持有效,并且用户永远不应该释放它。
syncPixels
void void 将图像缓存像素传输到图像。
readPixels
void QuantumTypes quantum_, unsigned char *source_, 将一个或多个像素组件从缓冲区或文件传输到图像的图像像素缓存中。ReadPixels 通常用于支持图像解码器。传输的区域对应于先前 setPixels 调用设置的区域。
writePixels
void QuantumTypes quantum_, unsigned char *destination_ 将一个或多个像素组件从图像像素缓存传输到缓冲区或文件。WritePixels 通常用于支持图像编码器。传输的区域对应于先前 getPixels 或 getConstPixels 调用设置的区域。