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 对象被高效地赋值,并复制到容器中)。该程序完成以下操作
#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 );
在写入图像之前。
以下是用 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);
|
|
||||||||||
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 );
参数如下
|
图像操作方法非常易于使用。例如
Image image; image.read("myImage.tiff"); image.addNoise(GaussianNoise); image.write("myImage.tiff");将高斯噪声添加到图像文件“myImage.tiff”。
Image 支持的操作如下表所示
方法 | 签名 | 描述 | |||||||||||||
size_t width, size_t height, size_t offset = 0 |
对图像应用自适应阈值处理。如果理想的阈值级别事先未知,或者图像上的照明梯度不恒定,则自适应阈值处理非常有用。自适应阈值处理通过评估像素区域(由 width 和 height 指定的大小)的均值(平均值)并将均值用作阈值来工作。为了去除背景中的残余噪声,可以通过从均值中减去一个常数 offset(默认为零)来调整阈值,以计算阈值。 |
||||||||||||||
|
NoiseType noiseType_ | 使用指定的噪声类型向图像添加噪声。 | |||||||||||||
addNoiseChannel |
const ChannelType channel_, const NoiseType noiseType_ |
使用指定的噪声类型向图像通道添加噪声。channel_ 参数指定要向其添加噪声的通道。noiseType_ 参数指定噪声的类型。 |
|||||||||||||
affineTransform |
const DrawableAffine &affine |
通过指定的仿射(或自由变换)矩阵变换图像。 |
|||||||||||||
|
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_ | 使用文本(边界区域为整个图像)和放置重力进行注释。 | ||||||||||||||
|
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_ 参数指定拉普拉斯算子的标准差(以像素为单位)。 | |||||||||||||
|
const Geometry &geometry_ = "6x6+0+0" | 边框图像(向图像添加边框)。边框的颜色由 borderColor 属性指定。 | |||||||||||||
|
const std::string &cdl_ | 使用颜色决策列表进行颜色校正。有关详细信息,请参见http://en.wikipedia.org/wiki/ASC_CDL。 | |||||||||||||
|
ChannelType channel_ | 从图像中提取通道。使用此选项从图像中提取特定通道。例如,alphaChannel 用于从图像中提取 alpha 值。 | |||||||||||||
|
const double radius_ = 1, const double sigma_ = 0.5 | 炭笔效果图像(看起来像炭笔素描)。radius_ 参数指定高斯半径(以像素为单位),不包括中心像素。sigma_ 参数指定拉普拉斯算子的标准差(以像素为单位)。 | |||||||||||||
|
const Geometry &geometry_ | 裁剪图像(删除图像的垂直或水平子区域) | |||||||||||||
|
const unsigned int opacityRed_, const unsigned int opacityGreen_, const unsigned int opacityBlue_, const Color &penColor_ | 使用指定的红色、绿色和蓝色量子不透明度百分比,用笔颜色给图像着色。 | |||||||||||||
|
const size_t order_, const double *color_matrix_ | 应用颜色校正到图像。 | |||||||||||||
|
const std::string &comment_ | 对图像添加注释(将注释字符串添加到图像)。默认情况下,每个图像都以其文件名进行注释。使用此方法为图像分配特定注释。可以选择通过嵌入特殊格式字符来包含图像文件名、类型、宽度、高度或其他图像属性。 | |||||||||||||
比较 |
const Image &reference_ |
将当前图像与另一个图像进行比较。在当前图像中设置meanErrorPerPixel、normalizedMaxError和normalizedMeanError。如果图像相同,则返回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 | |||||||||||||||
|
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 错误扩散应用于图像。默认情况下,颜色减少会选择一组最能代表原始图像的最佳颜色。或者,您可以使用此选项从图像文件中选择特定的颜色集。 | |||||||||||||
|
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 度表示从右侧)。 |
|||||||||||||
|
bool grayscale_ = false | 反转图像中的颜色。用每个像素的补色替换每个像素(白色变为黑色,黄色变为蓝色,等等)。将 grayscale 设置为仅反转图像中的灰度值。 | |||||||||||||
|
void | 规范化图像(通过将像素值规范化到颜色的完整范围来提高对比度)。 | |||||||||||||
|
size_t radius_ = 3 | 油画图像(图像看起来像油画)。 | |||||||||||||
|
unsigned int opacity_ | 设置或衰减图像中的不透明度通道。如果图像像素是不透明的,则将其设置为指定的不透明度值,否则将其与提供的不透明度值混合。opacity_ 的值范围为 0(完全不透明)到 MaxRGB。定义 OpaqueOpacity 和 TransparentOpacity 分别可用于指定完全不透明或完全透明。 | |||||||||||||
|
const Color &opaqueColor_, const Color &penColor_ | 将与 opaqueColor_ 匹配的像素的颜色更改为指定的 penColor_。 | |||||||||||||
|
const std::string &imageSpec_ | Ping 类似于 read,只是只读取足够的部分来确定图像的列、行和文件大小。 columns, rows 和 fileSize 属性在调用 ping 后有效。调用 ping 后,图像数据无效。 | |||||||||||||
const Blob &blob_ | |||||||||||||||
process |
std::string name_, const ssize_t argc_, char **argv_ |
执行指定的进程模块,通过参数向量传递任何参数,argc_ 指定向量中的参数数量,argv_ 传递一个以 null 结尾的 C 字符串数组的地址,这些字符串构成参数向量。如果请求的进程模块不存在、加载失败或执行期间失败,则会抛出异常。 |
|||||||||||||
|
bool measureError_ = false | 量化图像(减少颜色数量)。将 measureError_ 设置为 true 以计算错误属性。 | |||||||||||||
|
const Geometry &geometry_ = "6x6+0+0", bool raisedFlag_ = false | 凸显图像(使图像边缘变亮或变暗,以产生 3D 凸起或凹陷效果)。 | |||||||||||||
|
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 );
参数如下
|
||||||||||||||
|
const double order_ | 使用噪声峰值消除滤波器减少图像中的噪声。 | |||||||||||||
randomThreshold |
const Geometry &thresholds_ |
对图像进行随机阈值化。根据每个像素的强度与随机阈值进行比较,更改各个像素的值。结果是低对比度的双色图像。thresholds_ 参数是一个包含 LOWxHIGH 阈值的几何图形。如果字符串包含 2x2、3x3 或 4x4,则将执行 2、3 或 4 阶的有序抖动。这是一种非常快速的替代“量化”基于抖动的方案。 |
|||||||||||||
randomThresholdChannel |
const Geometry &thresholds_, const ChannelType channel_ |
对图像通道进行随机阈值化。类似于 randomThreshold(),但仅限于指定的通道。 |
|||||||||||||
|
int columns_, ssize_t rows_ | 滚动图像(垂直和水平滚动图像)指定的列数和行数。 | |||||||||||||
|
double degrees_ | 按指定的度数逆时针旋转图像。 | |||||||||||||
|
const Geometry &geometry_ | 使用像素采样算法调整图像大小。 | |||||||||||||
|
const Geometry &geometry_ | 使用简单的比率算法调整图像大小。 | |||||||||||||
|
double clusterThreshold_ = 1.0, double smoothingThreshold_ = 1.5 |
通过分析颜色组件的直方图并使用模糊 c 均值技术识别同质单元来分割(合并类似的图像组件)。还使用 quantizeColorSpace 和 verbose 图像属性。指定 clusterThreshold_ 作为每个簇必须超过簇阈值的像素数才能被视为有效。SmoothingThreshold_ 消除直方图二阶导数中的噪声。随着值的增加,您可以预期得到更平滑的二阶导数。默认值为 1.5。 | |||||||||||||
|
double azimuth_ = 30, double elevation_ = 30,
bool colorShading_ = false |
使用远光源对图像进行阴影处理。指定 azimuth_ 和 elevation_ 作为光源的位置。默认情况下,阴影结果为灰度图像。将 colorShading_ 设置为 true 以对图像的红色、绿色和蓝色分量进行阴影处理。 | |||||||||||||
|
const double percent_opacity = 80, const double sigma_ = 0.5, const ssize_t x_ = 0, const ssize_t y_ = 0 | 模拟图像阴影。 | |||||||||||||
|
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_ 参数指定拉普拉斯算子的标准差(以像素为单位)。 | |||||||||||||
|
const Geometry &geometry_ | 从图像边缘修剪像素。 | |||||||||||||
|
double xShearAngle_, double yShearAngle_ | 剪切图像(通过沿 X 或 Y 轴滑动图像创建平行四边形)。剪切沿 X 或 Y 轴滑动图像的一条边,创建一个平行四边形。X 方向剪切沿 X 轴滑动一条边,而 Y 方向剪切沿 Y 轴滑动一条边。剪切量由剪切角控制。对于 X 方向剪切,x 度相对于 Y 轴测量,类似地,对于 Y 方向剪切,y 度相对于 X 轴测量。剪切图像后留下的空三角形将填充 borderColor 定义的颜色。 | |||||||||||||
|
double factor_ = 50.0 | 使图像曝光(类似于在显影过程中将照相胶片曝光于光线下所看到的效果)。 | |||||||||||||
|
const Geometry &geometry_ | 将背景色拼接成图像。 | |||||||||||||
|
size_t amount_ = 3 | 将像素随机分散到图像中指定的量。 | |||||||||||||
|
const Image &watermark_ | 向图像添加数字水印(基于第二张图像)。 | |||||||||||||
|
const ChannelType channel, const SparseColorMethod method, const size_t number_arguments, const double *arguments | 稀疏颜色图像,给定一组坐标,使用各种方法对这些坐标处找到的颜色进行插值,跨越整个图像。 | |||||||||||||
|
ImageStatistics *statistics | 获取图像统计信息。统计信息被规范化到 0.0 到 1.0 的范围,并输出到指定的 ImageStatistics 结构中。该结构包含每个通道的最大值、最小值、平均值、标准差和方差:红色、绿色、蓝色和不透明度(例如 statistics->red.maximum)。 | |||||||||||||
|
const Image &rightImage_ | 创建一个使用红蓝眼镜观看时看起来是立体图像的图像(左侧为红色图像,右侧为蓝色图像)。 | |||||||||||||
|
double degrees_ | 旋转图像(图像像素旋转一定的角度)。 | |||||||||||||
|
const Image &texture_ | 在与图像背景颜色匹配的像素上叠加纹理。 | |||||||||||||
|
double threshold_ | 阈值化图像。 | |||||||||||||
|
const Geometry &imageGeometry_ | 根据图像和裁剪几何图形变换图像。裁剪几何图形是可选的。 | |||||||||||||
const Geometry &imageGeometry_, const Geometry &cropGeometry_ | |||||||||||||||
|
const Color &color_ | 向图像添加 alpha 图像,将与颜色匹配的像素设置为透明。 | |||||||||||||
|
void | 修剪图像中为背景色的边缘。 | |||||||||||||
|
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_ 参数指定应用差异量所需的像素阈值。 | |||||||||||||
|
double amplitude_ = 25.0, double wavelength_ = 150.0 | 沿着正弦波改变图像。 | |||||||||||||
|
const string &imageSpec_ |
使用文件名 imageSpec_ 将图像写入文件。 注意: 如果选择的图像格式能够支持的颜色少于原始图像,或者已请求量化,则原始图像将被量化为更少的颜色。如果这是一个问题,请使用原始图像的副本。 |
|||||||||||||
Blob *blob_ |
将图像写入存储在 blob_ 中的内存中 BLOB。magick_ 参数指定要写入的图像格式(默认为 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);
参数如下
|
||||||||||||||
|
const Geometry &geometry_ | 将图像调整为指定的大小。 |
图像属性很容易使用。例如,要将 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_ | 用作背景纹理的图像文件名。不会修改图像像素。 |
|
size_t | void | 基本图像宽度(变换前) | |
|
字符串 | void | 基本图像文件名(变换前) | |
|
size_t | void | 基本图像高度(变换前) | |
|
颜色 | void | const Color &color_ | 图像边框颜色 |
boundingBox |
几何 | void | 返回包含非边框像素的最小边界框。在区分像素时使用当前的模糊值。这是 crop(Geometry(0,0)) 使用的裁剪边界框。 | |
|
颜色 | 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 | void | ClassType class_ | 图像存储类。请注意,从 DirectClass 图像转换为 PseudoClass 图像可能会导致颜色丢失,因为调色板的大小有限(256 或 65535 种颜色)。 |
|
图像 | void | const Image &clipMask_ | 将剪切蒙版图像与当前图像关联。剪切蒙版图像必须与当前图像具有相同的尺寸,否则会抛出异常。在剪切蒙版图像中像素透明的地方发生剪切。剪切传递无效图像以取消设置现有的剪切蒙版。 |
|
双精度 | void | double fuzz_ | 在此距离内的颜色被认为是相等的。许多算法搜索目标颜色。默认情况下,颜色必须完全相同。使用此选项匹配 RGB 空间中接近目标颜色的颜色。 |
|
颜色 | size_t index_ | size_t index_, const Color &color_ | 颜色映射索引处的颜色。 |
size_t |
void |
size_t entries_ |
颜色映射中条目的数量。设置颜色映射大小可能会扩展或截断颜色映射。支持的最大条目数由 MaxColormapSize 常量指定,并且取决于编译 ImageMagick 时 QuantumDepth 的值。如果请求的条目数超过支持的条目数,则会抛出异常。截断颜色映射时应注意确保图像颜色映射索引引用有效的颜色映射条目。 |
|
|
ColorspaceType colorSpace_ | void | ColorspaceType colorSpace_ | 用于表示图像像素颜色的颜色空间(例如 CMYK)。图像像素始终存储为 RGB(A),除了 CMY(K) 的情况。 |
|
size_t | void | 图像宽度 | |
|
字符串 | void | 图像注释 | |
|
CompositeOperator | void | CompositeOperator compose_ | 当隐式使用合成时(例如用于图像平铺)要使用的合成运算符。 |
类型 |
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 编译的量子深度。 |
|
EndianType | void | EndianType endian_ | 指定(或获取)支持该格式的格式的 endian 选项。 |
|
字符串 | void | 图像蒙太奇中的图块名称 | |
|
FILE * | FILE * | FILE *file_ | 图像文件描述符。 |
|
字符串 | void | const string &fileName_ | 图像文件名。 |
|
off_t | void | 磁盘上图像的字节数 | |
|
颜色 | void | const Color &fillColor_ | 绘制对象时使用的颜色 |
|
图像 | void | const Image &fillPattern_ | 绘制对象时使用的图案图像。 |
|
FillRule | void | const Magick::FillRule &fillRule_ | 绘制对象时使用的规则。 |
|
FilterTypes | void | FilterTypes filterType_ | 调整图像大小时使用的滤镜。使用的缩减滤镜对调整图像大小时所需的时间和产生的质量有重大影响。默认滤镜是 Lanczos,它已被证明在缩减大多数图像时可以产生高质量的结果。 |
|
字符串 | void | const string &font_ | 文本渲染字体。如果字体是完全限定的 X 服务器字体名称,则从 X 服务器获取字体。要使用 TrueType 字体,请在 TrueType 文件名之前加上 @。否则,指定 Postscript 字体名称(例如“helvetica”)。 |
|
size_t | void | size_t pointSize_ | 文本渲染字体大小 |
|
TypeMetric | const std::string &text_, TypeMetric *metrics | 使用指定的 text 以及当前的 font 和 fontPointSize 设置,使用字体类型度量更新度量。 | |
|
字符串 | void | 长格式图像格式描述。 | |
|
双精度(典型范围 0.8 到 2.3) | void | 图像的伽马级别。由于显示器之间的差异,相同的彩色图像在两个不同的工作站上显示可能看起来不同。使用伽马校正来调整这种颜色差异。 | |
|
几何 | void | 编码时图像的首选大小。 | |
方法 |
size_t { 0 = 未指定处置方式, 1 = 不要处置图形, 3 = 用背景色覆盖图形, 4 = 用前一个图形覆盖图形。 } |
void | size_t disposeMethod_ | GIF处置方式。此选项用于在创建GIF动画时控制连续帧的渲染方式(如何处置前一帧)。 |
|
Blob | void | const Blob &colorProfile_ | ICC颜色配置文件。通过Blob提供,因为Magick++/和ImageMagick目前不支持直接格式化此数据结构。有关ICC颜色配置文件格式的规范,请访问国际色彩联盟。 |
类型 |
InterlaceType | void | InterlaceType interlace_ | 交错方案的类型(默认值为NoInterlace)。此选项用于指定原始图像格式(如RGB或YUV)的交错方案类型。NoInterlace表示不交错,LineInterlace使用扫描线交错,PlaneInterlace使用平面交错。PartitionInterlace类似于PlaneInterlace,但不同的平面保存到单独的文件中(例如image.R、image.G和image.B)。使用LineInterlace或PlaneInterlace创建交错的GIF或渐进式JPEG图像。 |
|
Blob | void | const Blob & iptcProfile_ | IPTC配置文件。通过Blob提供,因为Magick++和ImageMagick目前不支持直接格式化此数据结构。有关IPTC配置文件的规范,请访问国际新闻电信委员会。 |
|
字符串 | void | const string &label_ | 图像标签 |
|
字符串 | void | const string &magick_ | 获取图像格式(例如“GIF”) |
|
const bool | void | const bool alphaFlag_ | 图像是否支持透明度(alpha通道) |
|
颜色 | void | const Color &matteColor_ | 图像蒙版(边框)颜色 |
PerPixel |
双精度 | void | 图像颜色减少时计算的每个像素的平均误差。仅当verbose设置为true且图像刚刚量化时,此参数才有效。 | |
modulusDepth |
size_t |
void |
size_t depth_ |
图像模数深度(支持红/绿/蓝分量而不会损失精度的最低位数)。可以通过提供小于当前值的值来降低像素模数深度,将像素更新(降低精度)到新的深度。使用此方法无法将像素模数深度增加到当前值以上。 |
|
布尔值 | void | bool flag_ | 将图像转换为黑白 |
几何 |
几何 | void | 图像蒙太奇中的图块大小和偏移量。仅对蒙太奇图像有效。 | |
MaxError |
双精度 | void | 图像颜色减少时计算的每个像素的归一化最大误差。仅当verbose设置为true且图像刚刚量化时,此参数才有效。 | |
MeanError |
双精度 | void | 图像颜色减少时计算的每个像素的归一化平均误差。仅当verbose设置为true且图像刚刚量化时,此参数才有效。 | |
orientation |
OrientationType |
void |
OrientationType orientation_ |
图像方向。某些文件格式(如DPX和TIFF)支持。用于将其翻转到正确的方向。 |
|
size_t | void |
图像中运行长度编码数据包的数量
the image |
|
|
size_t | void | 每个像素数据包中的字节数 | |
|
几何 | void | const Geometry &pageSize_ |
图像画布的首选大小和位置。
使用此选项指定Postscript页面(以每英寸点数为单位)或TEXT页面(以像素为单位)的尺寸和位置。此选项通常与 density 一起使用。 Page也可用于定位GIF图像(例如动画中的场景) |
|
颜色 | ssize_t x_, ssize_t y_ | ssize_t x_, ssize_t y_, const Color &color_ | 获取/设置位置x和y处的像素颜色。 |
Blob |
const std::string name_ |
const std::string name_, const Blob &colorProfile_ |
获取/设置/删除一个命名配置文件。有效名称包括“*”,“8BIM”,“ICM”,“IPTC”或用户/格式定义的配置文件名称。 |
|
|
size_t (0到100) | void | size_t quality_ | JPEG/MIFF/PNG压缩级别(默认值为75)。 |
Colors |
size_t | void | size_t colors_ | 图像中首选的颜色数量。图像中实际的颜色数量可能少于您的请求,但绝不会更多。颜色数量少于使用此选项指定的图像将删除任何重复或未使用的颜色。 |
ColorSpace |
ColorspaceType | void | ColorspaceType colorSpace_ | 量化颜色的颜色空间(默认值为RGB)。经验证据表明,YUV或YIQ等颜色空间中的距离比RGB空间中的距离更接近感知颜色差异。在减少图像颜色时,这些颜色空间可能会产生更好的结果。 |
Dither |
布尔值 | void | bool flag_ | 将Floyd/Steinberg误差扩散应用于图像。抖动基本策略是通过平均几个相邻像素的强度,用空间分辨率来换取强度分辨率。使用此选项可以改善颜色减少时出现严重轮廓的图像。必须设置quantizeColors或monochrome选项才能使此选项生效。 |
TreeDepth |
size_t | void | size_t treeDepth_ | 量化颜色分类树的深度。值为0或1允许选择颜色减少算法的最佳树深度。值2到8可用于手动调整树深度。 |
Intent |
RenderingIntent | void | RenderingIntent render_ | 渲染意图的类型 |
Units |
ResolutionType | void | ResolutionType units_ | 图像分辨率的单位 |
|
size_t | void | 图像中像素行的数量 | |
|
size_t | void | size_t scene_ | 图像场景编号 |
|
字符串 | bool force_ = false | 图像MD5签名。将force_设置为“true”以强制重新计算签名。 | |
|
几何 | void | const Geometry &geometry_ | 原始图像的宽度和高度(不支持宽度和高度信息的图像)。Size也可用于影响从多分辨率格式(例如Photo CD、JBIG或JPEG)读取的图像大小。 |
|
void | 剥离图像的所有配置文件和注释。 | ||
|
布尔值 | void | bool flag_ | 启用或禁用绘制对象轮廓时的抗锯齿。 |
|
颜色 | void | const Color &strokeColor_ | 绘制对象轮廓时使用的颜色 |
|
size_t | void | double strokeDashOffset_ | 使用虚线模式绘制时,指定虚线模式中开始虚线的距离(默认值为0)。 |
|
const double* | void | const double* strokeDashArray_ | 指定用于描边路径的虚线和间隙的模式。strokeDashArray表示一个以零结尾的数字数组,这些数字指定用户单位中交替虚线和间隙的长度(以像素为单位)。如果提供了奇数个值,则重复值列表以产生偶数个值。典型的strokeDashArray_数组可能包含成员5 3 2 0,其中零值表示模式数组的结束。 |
|
LineCap | void | LineCap lineCap_ | 指定在描边路径(或其他矢量形状)的角处使用的形状。LineJoin的值为UndefinedJoin、MiterJoin、RoundJoin和BevelJoin。 |
|
LineJoin | void | LineJoin lineJoin_ | 指定在描边路径(或其他矢量形状)的角处使用的形状。LineJoin的值为UndefinedJoin、MiterJoin、RoundJoin和BevelJoin。 |
|
size_t | void | size_t miterLimit_ | 指定斜接限制。当两条线段以锐角相交并且为“lineJoin”指定了斜接连接时,斜接可能扩展到远远超出描边路径的线条厚度。miterLimit'对斜接长度与“lineWidth”的比率施加限制。此参数的默认值为4。 |
|
双精度 | void | double strokeWidth_ | 绘制矢量对象时使用的笔划宽度(默认值为1) |
|
图像 | void | const Image &strokePattern_ | 绘制对象笔划(轮廓)时使用的图案图像。 |
|
size_t | void | size_t subImage_ | 图像序列的子图像 |
|
size_t | void | size_t subRange_ | 相对于基本图像的图像数量 |
string |
void |
const std::string &encoding_ |
指定用于文本注释的代码集。目前只能指定“UTF-8”字符编码,用于表示 Unicode 作为字节序列。指定空字符串以使用默认的ASCII编码。使用Unicode成功进行文本注释可能需要设计为支持Unicode的字体。 |
|
|
字符串 | void | const string &tileName_ | 图块名称 |
|
size_t | void | 图像中的颜色数量 | |
|
ImageType | void | ImageType | 图像类型。 |
|
布尔值 | void | bool verboseFlag_ | 打印有关图像的详细信息 |
|
字符串 | void | const string &view_ | FlashPix查看参数。 |
|
VirtualPixelMethod | void | VirtualPixelMethod virtualPixelMethod_ | 图像虚拟像素方法。 |
|
string(例如“hostname:0.0”) | void | const string &display_ | 要显示到的X11显示器、从中获取字体的显示器或从中捕获图像的显示器 |
|
双精度 | void | 图像的x分辨率 | |
|
双精度 | void | 图像的y分辨率 |
通过getPixels()获取现有的图像像素。使用setPixels()创建一个新的像素区域。
为了确保仅修改图像的当前生成,应调用Image的modifyImage()方法以将基础图像上的引用计数减少到1。如果未执行此操作,则由于在复制或构造Image时使用引用计数,因此可能会修改图像的先前生成。
根据操作系统的功能以及窗口与图像的关系,像素缓存可能是所选窗口中像素的副本,也可能是实际的图像像素。无论哪种情况,调用syncPixels()都能确保基础图像使用修改后的像素缓存内容进行更新。方法readPixels()支持根据QuantumTypes将外部像素数据格式复制到像素缓存中。方法writePixels()支持根据QuantumTypes指定的格式将缓存中的像素复制到外部像素表示形式。
像素区域实际上是一个小的图像,其中可以访问、寻址和更新像素,如下例所示
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");
图像缓存支持以下方法
|
|
|
|
|
const Quantum * | const ssize_t x_, const ssize_t y_, const size_t columns_, const size_t rows_ | 将图像中的像素传输到由指定矩形区域定义的像素缓存中。返回的指针在下次调用 getPixel、getConstPixels 或 setPixels 之前保持有效,并且用户永远不应该释放它。 |
|
const void* | void | 返回指向对应于先前getPixel()、getConstPixels() 或 setPixels() 调用的图像像素元内容的指针。返回的指针在下次调用 getPixel、getConstPixels 或 setPixels 之前保持有效,并且用户永远不应该释放它。像素元内容表示一个 void 类型的数组,其中每个条目对应于一个 x,y 像素位置。 |
|
void* | void | 返回指向对应于上次getConstPixels、getPixels或setPixels调用请求的像素区域的图像像素元内容的指针。返回的指针在下次调用 getPixel、getConstPixels 或 setPixels 之前保持有效,并且用户永远不应该释放它。 |
|
Quantum * | const ssize_t x_, const ssize_t y_, const size_t columns_, const size_t rows_ | 将图像中的像素传输到由指定矩形区域定义的像素缓存中。修改后的像素随后可以通过 syncPixels 传输回图像。返回的指针在下次调用 getPixel、getConstPixels() 或 setPixels() 之前保持有效,并且用户永远不应该释放它。 |
|
Quantum * | const ssize_t x_, const ssize_t y_, const size_t columns_, const size_t rows_ | 分配一个像素缓存区域以存储由区域矩形定义的图像像素。此区域随后通过 syncPixels 从像素缓存传输到图像。返回的指针在下次调用 getPixel、getConstPixels 或 setPixels 之前保持有效,并且用户永远不应该释放它。 |
|
void | void | 将图像缓存像素传输到图像。 |
|
void | QuantumTypes quantum_, unsigned char *source_, | 将一个或多个像素组件从缓冲区或文件传输到图像的图像像素缓存中。ReadPixels 通常用于支持图像解码器。传输的区域对应于先前 setPixels 调用设置的区域。 |
|
void | QuantumTypes quantum_, unsigned char *destination_ | 将一个或多个像素组件从图像像素缓存传输到缓冲区或文件。WritePixels 通常用于支持图像编码器。传输的区域对应于先前 getPixels 或 getConstPixels 调用设置的区域。 |