文档 • 获取 Magick++ • 安装 • 报告错误
Magick++ API 是 ImageMagick 图像处理库的面向对象的 C++ API。
Magick++ 支持一个受 PerlMagick 启发的对象模型。图像支持隐式引用计数,因此复制构造函数和赋值几乎不产生任何成本。实际复制图像(如果需要)的成本是在修改之前发生的,此复制由 Magick++ 自动管理。取消引用的副本会自动删除。图像对象支持值(而不是指针)语义,因此在内存中同时支持图像的多个生成非常简单。
Magick++ 提供对 标准模板库 (STL) 的集成支持,因此可以使用可用的强大容器(例如 deque、vector、list 和 map)来编写类似于 PERL & PerlMagick 可能的程序。提供 ImageMagick 列表式操作的 STL 兼容模板版本,以便可以对存储在 STL 容器中的多个图像执行操作。
文档
为所有 Magick++ 类、类方法和模板函数提供了详细的 文档,这些函数构成了 API。有关 Magick++ 的入门教程,请参见 Magick++ 入门指南。如果您想更正、增强或扩展教程,我们还包括 源代码。
获取 Magick++
Magick++ 作为 ImageMagick 源代码发布的一部分,可以通过 HTTP 或 GitHub 获取。
安装
在您获得 Magick++ 源代码后,请按照这些针对 UNIX 和 Windows 的详细 安装说明 进行操作。
使用
在 Linux 下安装了一个名为 Magick++-config 的辅助脚本,它有助于回忆编译和链接使用 Magick++ 的程序所需的编译选项。例如,以下命令编译并链接源文件 demo.cpp 以生成可执行文件 demo(请注意,引号是反引号)。
c++ `Magick++-config --cxxflags --cppflags` -O2 -o demo demo.cpp \ `Magick++-config --ldflags --libs`
如果 ImageMagick 不在您的默认系统路径中,请设置 PKG_CONFIG_PATH 环境变量。
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
Windows 用户可以通过手动编辑 Magick++ 演示程序之一的项目文件来开始使用。
请注意,在 Windows(以及可能在 Mac 上)下,可能需要在使用 Magick++ 库之前初始化 ImageMagick 库。此初始化是通过将路径传递到 ImageMagick DLL(假设它们与您的程序位于同一目录中)到 InitializeMagick() 函数调用来执行的。这通常是通过提供程序的路径(argv[0])来完成的,如以下示例所示。
int main( int argc, char ** argv) { InitializeMagick(*argv); ...
此初始化步骤在 Linux、Linux、Cygwin 或任何其他支持将 ImageMagick 安装在已知位置概念的操作环境中是不需要的。
以下是一个使用 Magick++ API 的示例程序,可帮助您入门,magick++.cpp。它读取图像、裁剪图像并以 PNG 图像格式将图像写入磁盘。
#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( "logo:" );
// 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( "logo.png" );
}
catch( Exception &error_ )
{
cout << "Caught exception: " << error_.what() << endl;
return 1;
}
return 0;
}
报告错误
有关使用的问题,请发送至 Magick++ 社区论坛,或报告任何错误。