Magick++ は、ImageMagick 画像処理ライブラリへのシンプルな C++ API を提供します。Magick++は、膨大な数の画像フォーマットの読み書きと、広範な従来の画像処理操作をサポートしています。ImageMagick C API は複雑で、データ構造は現在ドキュメント化されていません。Magick++ は、C API から利用可能な機能のほとんどにアクセスできますが、シンプルでオブジェクト指向の、よくドキュメント化されたフレームワークで提供されます。
Magick++ は、商用グレードのアプリケーション開発をサポートすることを目的としています。ユーザーのアプリケーションとの競合の可能性を避けるため、Magick++ に含まれるすべてのシンボル (ヘッダー<Magick++.h>によってインクルードされる) は、Magick 名前空間にスコープされています。ImageMagick C ライブラリからのシンボルは、競合の可能性を避けるために MagickCore 名前空間の下にインポートされ、ImageMagick マクロは Magick++ 実装内にのみ含まれるため、ユーザーのアプリケーションに影響を与えません。
Magick++ のコアクラスは、Image クラスです。Image クラスは、単一の画像フレーム (JPEG 画像など) を操作するためのメソッドを提供します。複数の画像フレームを操作したり、複数の画像フレームをサポートするファイル形式 (GIF アニメーション、MPEG アニメーション、Postscript ファイルなど) を読み書きしたりするために、標準テンプレートライブラリ (STL) 互換の アルゴリズムと関数オブジェクト が提供されています。
Image クラスは、組み込み変数型 (例: 'int') のセマンティクスをサポートする参照カウント方式のメモリ管理をサポートしており、非常に効率的なoperator =とコピーコンストラクタ (ポインタのみが割り当てられる) を備えています。同時に、画像データが必要に応じて複製されるため、以前の世代に影響を与えることなく画像を変更できます。Image クラスは内部でヒープメモリを管理するため、画像は C++ の自動 (スタックベース) メモリ割り当てを使用して割り当てるのが最適です。このサポートにより、Magick++ を使用するほとんどのプログラムはポインタを使用せずに記述できるため、実装が簡素化され、ポインタを使用するリスクを回避できます。プログラムが自動メモリ割り当てを使用して Magick++ 画像を割り当てると、プログラムのその側面は自然に例外安全でスレッドセーフになります。
Image クラスは、引数を指定するために、いくつかの補助クラスを使用します。色は Color クラスを介して指定されます。X11 スタイルの文字列形式で指定された色は、暗黙的に Color クラスに変換されます。ジオメトリ引数 (幅、高さ、および/または x および y オフセットを指定するもの) は、Geometry クラスを介して指定されます。Color クラスと同様に、X11 スタイルの文字列として指定されたジオメトリは、暗黙的に Geometry クラスに変換されます。2 次元の描画可能なオブジェクトは、Drawable クラスを介して指定されます。描画可能なオブジェクトは、単一のオブジェクトとして、または現在の画像オプションを使用してレンダリングされるオブジェクトのリストとして提供できます。モンタージュオプション (モンタージュは 1 つの画像にレンダリングされたサムネイルのグリッドです) は、Montage クラスを介して指定されます。
エラーは、標準 C++ exception クラスから派生した Exception クラスから派生した C++ 例外を使用して報告されます。例外は操作と同期して報告され、スタックがアンワインドされるときに最初に一致する try ブロックによってキャッチされます。これにより、複数の関連する Magick++ コマンドを 1 行ずつではなく、まとめてエラー処理できるクリーンなコーディングスタイルが可能になります。Image オブジェクトは参照カウント方式のメモリ管理を提供するため、スタック上の参照されていない画像は自動的にクリーンアップされ、メモリリークの可能性が回避されます。
利用可能なユーザーレベルクラスのドキュメントは、以下の表からアクセスできます。
Blob | バイナリラージオブジェクトコンテナ。 |
CoderInfo | サポートされている画像フォーマットに関する情報を報告します (coderInfoList と共に使用します) |
Color | 色指定。 |
Drawable | 描画可能な形状 ('draw' への入力用)。 |
Exception | C++ 例外オブジェクト。 |
Geometry | ジオメトリ指定。 |
Image | 画像フレーム。これは Magick++ の主要なオブジェクトです。 |
Montage | montageImages() 用のモンタージュオプション。 |
Pixels | 画像ピクセルへの低レベルアクセス。 |
STL | 画像フレームのコンテナを操作するための STL アルゴリズムと関数オブジェクト。 |
TypeMetric | フォントタイプメトリクスのコンテナ (Image::fontTypeMetrics と共に使用します)。 |