Magick++ 为 ImageMagick 图像处理库提供了一个简单的 C++ API,支持读取和写入大量图像格式,以及支持广泛的传统图像处理操作。ImageMagick C API 非常复杂,并且数据结构目前没有文档记录。Magick++ 提供了对 C API 中大多数功能的访问,但采用了简单、面向对象且文档齐全的框架。

Magick++ 旨在支持商业级应用程序开发。为了避免与用户应用程序可能发生的冲突,Magick++ 中包含的所有符号(由头文件<Magick++.h>)包含)都作用域到 namespace Magick。来自 ImageMagick C 库的符号在 MagickCore 命名空间下导入,以避免可能的冲突,而 ImageMagick 宏仅包含在 Magick++ 实现中,因此不会影响用户应用程序。

Magick++ 中的核心类是 Image 类。Image 类提供了用于操作单个图像帧(例如 JPEG 图像)的方法。标准模板库 (STL) compatible 算法和函数对象 被提供用于操作多个图像帧或读取和写入支持多个图像帧的文件格式(例如 GIF 动画、MPEG 动画和 Postscript 文件)。

Image 类支持引用计数内存管理,它支持内在变量类型(例如“int”)的语义,具有极高的效率operator =和复制构造函数(只分配指针),同时确保图像数据按需复制,以便可以在不影响早期版本的情况下修改图像。由于 Image 类在内部管理堆内存,因此最好通过 C++ 自动(基于堆栈)内存分配来分配图像。此支持允许使用 Magick++ 的大多数程序在不使用任何指针的情况下编写,从而简化了实现并避免了使用指针的风险。当程序使用自动内存分配来分配 Magick++ 图像时,该程序的这一方面将自然地成为异常安全的和线程安全的。

图像类使用一些辅助类来指定参数。颜色通过 Color 类指定。以 X11 风格字符串形式指定的颜色将隐式转换为 Color 类。几何参数(指定宽度、高度和/或 x 和 y 偏移量)通过 Geometry 类指定。与 Color 类类似,以 X11 风格字符串形式指定的几何图形将隐式转换为 Geometry 类。二维可绘制对象通过 Drawable 类指定。可绘制对象可以作为单个对象或作为要使用当前图像选项渲染的对象列表提供。蒙太奇选项(蒙太奇是在一个图像中渲染的缩略图网格)通过 Montage 类指定。

错误使用从 Exception 类派生的 C++ 异常报告,该类本身是从标准 C++ 异常类派生的。异常与操作同步报告,并由第一个匹配的 try 块在堆栈展开时捕获。这允许使用一种干净的编码风格,其中多个相关的 Magick++ 命令可以一起执行,错误作为一个单元而不是逐行处理。由于 Image 对象提供引用计数内存管理,因此堆栈上未引用的图像会自动清理,避免了潜在的内存泄漏。

为了方便访问,可用的用户级类的文档可以通过以下表格获得。


Magick++ 用户级类
Blob 二进制大对象容器。
CoderInfo 报告有关支持的图像格式的信息(与 coderInfoList() 一起使用)
Color 颜色规范。
Drawable 可绘制形状(用于“draw”的输入)。
Exception C++ 异常对象。
Geometry 几何图形规范。
Image 图像帧。这是 Magick++ 中的主要对象。
Montage montageImages() 的蒙太奇选项。
Pixels 对图像像素的低级访问。
STL 用于操作图像帧容器的 STL 算法和函数对象。
TypeMetric 字体类型度量容器(与 Image::fontTypeMetrics 一起使用)。