ドキュメント • Magick++の入手 • インストール • バグ報告
Magick++ APIは、ImageMagick画像処理ライブラリのオブジェクト指向C++ APIです。
Magick++は、PerlMagickに触発されたオブジェクトモデルをサポートしています。画像は暗黙的な参照カウントをサポートしているため、コピーコンストラクタと代入にはほとんどコストがかかりません。実際に画像をコピーするコスト(必要な場合)は、修正直前に行われ、このコピーはMagick++によって自動的に管理されます。非参照コピーは自動的に削除されます。画像オブジェクトは(ポインタではなく)値セマンティクスをサポートしているため、メモリ内に複数の世代の画像を同時にサポートするのが簡単です。
Magick++は、標準テンプレートライブラリ(STL)の統合サポートを提供しているため、利用可能な強力なコンテナ(例:deque、vector、list、およびmap)を使用して、PERL&PerlMagickで可能なプログラムと同様のプログラムを記述できます。STL互換のテンプレート版のImageMagickのリストスタイル操作が提供されているため、STLコンテナに格納された複数の画像に対して操作を実行できます。
ドキュメント
APIを構成するすべてのMagick++クラス、クラスメソッド、およびテンプレート関数について、詳細なドキュメントが提供されています。Magick++の入門チュートリアルについては、Magick++入門を参照してください。チュートリアルの修正、強化、拡張を行う場合は、ソースを含めています。
Magick++の入手
Magick++は、ImageMagickソースリリースの一部として含まれており、HTTPまたはGitHub経由で取得できます。
インストール
Magick++ソースを入手したら、UNIXおよびWindows用の詳細なインストール手順に従ってください。
使い方
Magick++-configというヘルパースクリプトがLinuxにインストールされており、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、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++コミュニティフォーラムに問い合わせるか、バグを報告してください。