Exception は、Magick++ がエラーを報告した際にスローされるオブジェクトの基底クラスを表します。 Magick++ は、エラーが発生した操作と同期して C++ 例外をスローします。 これにより、エラーを囲むコード (おそらく単一の画像を処理するコード) 内でトラップできます。同時に、シンプルなコーディングスタイルでコードを記述できます。
try/catch ブロックは、重要な作業の本体と見なせる一連の操作を囲む必要があります。 たとえば、プログラムが画像のリストを処理し、これらの画像の一部に欠陥がある可能性がある場合、1 つの画像を処理するコード全体 (画像オブジェクトのインスタンス化を含む) を try/catch ブロックで囲むことで、エラーチェックのオーバーヘッドを最小限に抑えながら、そのオブジェクトを処理するために作成されたすべてのオブジェクトが安全に破棄されるようにすることができます (C++ 例外は、囲む try ブロックまでスタックを巻き戻し、作成されたオブジェクトを破棄します)。
プログラムのメインループの擬似コードは次のようになります
プログラムに必要な try/catch ブロックの場所と数は、エラー処理の高度さによって異なります。 非常に単純なプログラムでは、try/catch ブロックを 1 つだけ使用する場合があります。
Exception クラスは、C++ 標準例外クラスから派生しています。 つまり、エラーに関する追加情報 (例: ユーザーに表示する) を含む C++ 文字列が含まれています。 what() メソッドを使用してこの文字列にアクセスします。 例:
catch( Exception & error_ ) { cout << "Caught exception: " << error_.what() << endl; }
Warning クラスと Error クラスは、Exception クラスから派生しています。 Warning から派生した例外は、結果の完全性または品質に影響を与える可能性のある致命的でないエラーを表すためにスローされます (例: montage に引数として提供された 1 つの画像に欠陥がある)。 ほとんどの場合、Warning 例外は、すぐにキャッチして処理し (例: 診断を出力)、続行することで無視できます。 Error から派生した例外は、有効な結果を生成できない致命的なエラーを表すためにスローされます (例: 存在しないファイルを読み取ろうとした場合)。
具体的な派生例外クラスは、次の表に示されています。
警告サブクラス
警告 |
警告の説明 |
WarningUndefined |
未指定の警告タイプ。 |
WarningBlob |
現在使用されていません |
WarningCache |
現在使用されていません |
キャッシュサブシステムによって報告された警告。 |
WarningCoder |
一部のコーダーによって発行された警告。 |
現在使用されていません |
WarningConfigure |
構成ファイルの読み込み中に報告された警告 |
WarningCorruptImage |
画像が破損していると判断された場合に発行される警告。 |
WarningDelegate |
デリゲート (外部プログラムへのインターフェース) サブシステムによって報告された警告。 |
WarningDraw |
レンダリングサブシステムによって報告された警告。 |
WarningFileOpen |
現在使用されていません |
画像ファイルを開くことができなかった場合に報告される警告 (権限の問題、ファイルタイプの誤り、またはファイルが存在しない)。 |
現在使用されていません |
WarningImage |
現在使用されていません |
画像処理中に報告された警告 |
現在使用されていません |
WarningMissingDelegate |
必要なアドオンライブラリまたはプログラムが見つからない場合に報告される警告 |
WarningModule |
現在使用されていません |
モジュールローダーサブシステムによって報告された警告 |
WarningMonitor |
進捗モニターサブシステムによって報告された警告 |
現在使用されていません |
WarningOption |
現在使用されていません |
オプションの形式が正しくないか、範囲外の場合に報告される警告。 |
WarningRegistry |
画像/ BLOBレジストリサブシステムによって報告された警告
WarningResourceLimit |
プログラムリソースが使い果たされた場合に報告される警告 (例: メモリ不足)。 |
WarningStream |
ピクセルストリームサブシステムによって報告された警告 |
WarningType |
タイプ(フォント)レンダリングサブシステムによって報告された警告 |
WarningXServer |
X11 サブシステムによって報告された警告。 |
エラーサブクラス |
エラー |
エラーの説明 |
ErrorUndefined |
未指定のエラードラッグ |
ErrorBlob |
BLOB I/O サブシステムによって報告されたエラー。 |
ErrorCache |
ピクセルキャッシュサブシステムによって報告されたエラー。 |
ErrorCoder |
コーダー (画像形式のサポート) によって報告されたエラー。 |
ErrorConfigure |
構成ファイルのロード中に報告されたエラー。 |
ErrorCorruptImage |
画像ファイルが破損している場合に報告されるエラー。 |
ErrorDelegate |
デリゲート (外部プログラムへのインターフェース) サブシステムによって報告されたエラー。 |
ErrorDraw |
画像への描画中に報告されたエラー。 |
現在使用されていません |
ErrorFileOpen |
画像ファイルを開くことができない場合に報告されるエラー。 |
ErrorImage |
描画中に報告されたエラー。 |
ErrorMissingDelegate |
リクエストされた操作をサポートするためにアドオンライブラリまたはプログラムが必要な場合に報告されるエラー。 |
ErrorModule |
モジュールローダーサブシステムによって報告されたエラー。 |
ErrorMonitor |
進捗モニターサブシステムによって報告されたエラー。 |
ErrorOption |
オプションの形式が正しくないか、範囲外の場合に報告されるエラー。 |