API ガイド > 付録 >

# 付録 F: イメージ プラグインの追加

Maya の特長は、固有のイメージ ファイル トランスレータ機能を作成できる外部プラグイン モジュール機構です。これは Maya に新しいイメージを追加するためのシステムであり、Maya API とは異なります。これらのプラグイン モジュールは、アプリケーションを開始するときにいつでも使用可能です。イメージ ファイルにアクセスする場合に表示されるイメージ ファイル タイプのリストからこれらにアクセスできます。

プラグイン イメージ モジュールは動的な共有オブジェクトとして実装され(DSO または DLL)、C または C++ で記述できます。この場合、イメージ ファイルの読み取りと書き込みを行うアルゴリズムを実装するだけです。ユーザ インタフェースとフロー制御は Maya によって暗黙的に処理されます。

この文書では、イメージ プラグイン モジュールを記述するためのプロトコルについて説明します。複数のフレームまたはムービー ファイルのサポート方法については説明しません。サンプル コードは Developer’s Kit の image サブディレクトリに収められています。

このセクションでは次の項目について説明します。

- 概要
- エントリ ポイント
- 必須のエントリ ポイント
- オプションのエントリ ポイント
- ライブラリ関数
- 機能設定
- データ構造
- プラグインのコンパイル

イメージ ファイル フォーマット プラグインを書き込むと、これをコンパイルして、Maya にロードできる共有オブジェクトを作成する必要があります。gcc コンパイラを使用したサンプルを構築するための、Makefile と buildconfig が Developer’s Kit に用意されています。Windows では、Visual C++ でイメージ プラグインを構築するためのソリューションとプロジェクト ファイルが用意されています。イメージ プラグインのサンプルを構築する前に、最初に MAYA_LOCATION を設定する必要があります。構築するプラグインは、Maya が新しいイメージ フォーマットにアクセスする前に、$MAYA_LOCATION/bin/plug-ins/image ディレクトリにコピーしてください。イメージ プラグインは、Maya にロードできるように用意されたコンパイラとリンカーのフラグを使用して構築する必要があります。

概要

Maya は、主にイメージ ファイルの読み取りと書き込みのためにイメージ プラグインから関数を起動します。これが発生する場所には、レンダリング ウィンドウなどがあります。このウィンドウでは、特定のフォーマットとしてイメージを保存することを選択できます。さらに、このウィンドウに既存のレンダリング イメージをロードすることも可能です。このウィンドウの読み取り操作および書き込み操作用に定義したカスタム フォーマットを選択することができます。

エントリ ポイント

各プラグインには、定義数のエントリ ポイントがあります。Maya はこれらのエントリ ポイントを使用して、イメージ プラグインがサポートする機能を定義します。

エントリ ポイントは変数や関数などです。たとえば、プラグインの名前は変数エントリ ポイント imageName で定義され、読み取り用のイメージ ファイルを開く関数は、関数エントリ ポイント imageReadOpen で定義されます。

エントリ ポイントには必須とオプションのものがあります。必須のエントリ ポイントについては次のセクションで説明します。オプションのエントリ ポイントについては「オプション エントリ ポイント」で説明します。

ヒント:

作成するプラグインに Maya との互換性を持たせる場合、必須のエントリ ポイントを実装するだけです。作成するプラグインのオプションのエントリ ポイントは、Maya で起動できない場合があるため、必須ではありません。

必須のエントリ ポイント

次のエントリ ポイントは定義する必要があります。

- program
- type
- version
- imageKey
- imageIsFile
- imageName
- imageReadOpen およびこれとコネクトされるルックアップ テーブルの読み取り、スキャンラインの読み取り、終了関数(プラグインが imageAccess エントリ ポイントによって指定されたように読み取ることができない場合)
- imageWriteOpen およびこれとコネクトされるスキャンラインの書き込みと終了関数( imageAccess エントリ ポイントと一緒に指定されていない場合)

必須のエントリ ポイントが削除されると、プラグインがロードされないため、その名前はメニューに表示されません。

program

定義

  char *program

説明

  このエントリ ポイントは、プラグインを使用できるアプリケーションを指定します。すべてのアプリケーションがこのプラグインでサポートされるイメージ ファイルの読み取りと書き込みを実行できるようにするには、これに Wavefront を設定します。

  注:

  このエントリ ポイントの定義は必須です。

例

  char *program = "Wavefront";

type

定義

  char *type

説明

  このエントリ ポイントは、構築するプラグインのタイプを示します。Maya のイメージ ファイル プラグインのタイプは、image です。

  注:

  このエントリ ポイントの定義は必須です。

例

  char *type = "image";

version

定義

  char *version

説明

  このエントリ ポイントは、プラグインを記述したプロトコルのバージョンを示します。常に IMF_PROTOCOL_CURRENT を使用します。

  注:

  このエントリ ポイントの定義は必須です。

例

  char *version = IMF_PROTOCOL_CURRENT;

imageKey

定義

  char *imageKey

説明

  このエントリ ポイントは、プラグインを特定するための固有のキーを指定します。

  注:

  このエントリ ポイントの定義は必須です。

例

  char *imageKey = "myFormat";

imageName

定義

  char *imageName

説明

  このエントリ ポイントは、メニューに表示されるプラグインの名前を定義します。ユーザが区別できるように固有の名前を定義する必要があります。

  注:

  このエントリ ポイントの定義は必須です。

例

  char *imageName = "My Image Format";

imageReadOpen

定義

  int imageReadOpen

  (

  IMF_OBJECT *imf

  }

  パラメータ | 型 | 説明
  --- | --- | ---
  imf | Modified | イメージ ファイル ヘッダ
  戻り値 |  | IMF_C_NORMAL イメージが正常に開かれた場合。IMF_C_ エラーが発生した場合。

説明

  この関数は、読み取り用にファイルを開くときにコールされます。

  imf パラメータには、ファイルの読み取りに必要なすべての情報が含まれます。imageReadOpen をコールする前に、ここにファイル名を含めます。このルーチンの実行後、ここにファイルにアクセスするルーチンへのポインタ、サイズの情報、読み取るイメージの他のアトリビュート、イメージの走査線を読み込むバッファなども含める必要があります。

  この関数を記述する基本手順を以下に示します。

- ファイルを開きます。
- ファイルからヘッダを読み取ります。ファイルにルックアップ テーブルを含める場合、このときに読み取ります。
- close、scanline read、および LUT read ルーチンを imf に割り当てます。
- imf->info.image[0] でイメージのパラメータを定義します。
- 走査線を収めるバッファを配分します。
- ファイル記述子などを定義するプライベート データを配分し、imf->data とコネクトします。

  複数のイメージ(フル イメージやサムネール表示など)を含むイメージ ファイルもあります。ここでは、ファイルからメイン イメージのみを読み取る場合について説明しています。

  詳細な手順を次に示します。

1. ファイル名が完全でない場合は補完します。次に、指定したファイルを開きます。正常に開かれた場合にのみ続行します。失敗した場合は、ERR_printf を使用してメッセージを生成し、imf__err に IMF_C_CANNOT_OPEN を設定して、FALSE を返します。
2. イメージ カウントを 1 に設定して、1 つのイメージ構造を配分および初期化して、このイメージに関する情報を含めます。

       imf->info.count = 1;
       imf->info.image = malloc( sizeof( IMF_IMAGE ) );
       (void) imf__init_ifd( imf );

3. malloc を使用して、配分した固有のデータ構造に、ファイルを記述するフォーマット固有の情報を保存します。このプライベート データ構造には、現在のファイル記述子、最新のスキャンラインの読み取り、アクティブ ウィンドウなどの項目を含めることができます。

       private = malloc( sizeof( PRIVATE ) );
       private->... = ...;
       imf->data = malloc( sizeof( POINTER ) );
       imf->data[0] = private;

4. イメージ アクセス ルーチンを imf->scan と imf->close に割り当てます。イメージ ファイルがルックアップ テーブルを含む場合は、imf->lut_read にルックアップ テーブルを読み取るルーチンも指定します。
5. ファイル フォーマットが入力機能を定義する場合、imf->info.settings から抽出します (詳細については、IMF_CAPABILITY を参照してください)。
6. ファイルからヘッダ情報を読み取り、プライベート データ構造にこれを格納します。さらに、imf->info と imf->info.image[0] データ構造に各種フィールドを定義する必要があります。

   imf->info 構造では、イメージがルックアップ テーブルを含むかどうかに応じて、lut_exists field を設定します。

   ファイル自体に格納する場合は、program、machine、user、date、time、frame 番号、job_num、および色度情報(red_pri、green_pri、blue_pri、white_pt)を設定することもできます。

   また、imf->info.image[0] にすべてのフィールドを設定する必要があります。aux_format、aux_count、aux_type、および aux_bits フィールドは z チャネル情報を示します。curve.gamma フィールドには、ファイルに定義したガンマか、またはIMF_def_input_gamma をコールして既定ガンマを設定する必要があります。

7. スキャンラインの読み取りルーチンが 1 行のピクセルを読み取るスキャンライン バッファを配分します。

       private_data_ptr->buffer = IMF_chan_alloc(
       imf->info.image, image_width,
       imf->info.key, NULL );

8. 関数が正常に開き、イメージ ファイル ヘッダを読み取った場合は TRUE、エラーが発生した場合は FALSE を返します。
   注:

   このエントリ ポイントの定義は必須です。

スキャンライン読み取り関数

定義

  int your_scan_read_func

  (

  POINTER data,

  int scan,

  POINTER **line_buff

  )

  パラメータ | 型 | 説明
  --- | --- | ---
  data | 入力 | イメージにコネクトするプライベート データ
  scan | 入力 | 読み取るスキャンライン
  line_buff | 出力 | imageReadOpen に配分されるスキャンライン バッファ。読み取られたピクセル行を含みます。
  戻り値 |  | IMF_C_BAD_SCAN スキャンがイメージの範囲外である場合。IMF_C_NORMAL スキャンラインが正常に読み取られた場合。および IMF_C_READ_ERR エラーが発生した場合。

説明

  この関数は Maya によってコールされ、イメージ ファイルからスキャンラインを読み取ります。イメージ ファイルはイメージの方向に基づいて、下から上または上から下のいずれかの方向に読み取られます。

  以下の手順に従って、スキャンライン読み取り関数を作成します。

1. 指定したスキャンラインを読み取ります。スキャンライン番号は下から上の順序に基づきます。たとえば、イメージ サイズが 480 ラインで、方向が IMF_C_TOP_LEFT である場合、スキャンラインは 479 (一番上)、47 (上から 2 番目)、477、... 0 (一番下)の順序で読み取られます。順序が IMF_C_BOT_LEFT である場合、0 (一番下)、1 (下から 2 番目)、2、...479 (一番上)の順序で読み取られます。
2. imageReadOpen に配分されたバッファにスキャンラインを転送します。IMF_chan_alloc によって配分されたバッファには、ファイルのチャネル単位のビット数に応じて、8、16、32 ビットの符号なしの数字が含まれます (チャネル単位のビット数はニアレストの数字に切り上げられます)。

   スキャンラインの各成分は個別の隣接しているバッファに格納されます。これらはパラメータ line_buff に返され、配分した成分へのポインタの配列になります。

   /*

   * 符号なし char は 1 ～ 8 ビットの値に使用されます。

   * 符号なし short は 8 ～ 16 ビットの値に使用されます。

   * 符号なし long は 17 ～ 32 ビットの値に使用されます。

   */

   *line_buff = data->buffer;

   pr = (unsigned char *) data->buffer[0];

   pg = (unsigned char *) data->buffer[1];

   pb = (unsigned char *) data->buffer[2];

   pm = (unsigned char *) data->buffer[3];

   for ( i = 0; i < data->image_width; ++i )

   {

   *(pr++) = red_values[i];

   *(pg++) = green_values[i];

   *(pb++) = blue_values[i];

   *(pm++) = matte_values[i];

   }

   ファイルにルックアップ テーブルが含まれる場合は、line_buff でルックアップ テーブルにインデックスではなく、RGB データを返す必要があります。

3. 適宜、IMF_C_BAD_SCAN、IMF_C_NORMAL、または IMF_C_READ_ERR を返します。

   スキャンライン読み取り関数は、イメージの最新のスキャンラインを読み取るとは限りません。これは Maya が読み取る必要のない最新のスキャンラインをスキップする場合があるためです。プラグインでは、imageReadOpen のコール後、いつでも終了関数のコールが許可される必要があります。

終了関数

定義

  int your_close_func

  (

  IMF_OBJECT *imf

  )

  パラメータ | 型 | 説明
  --- | --- | ---
  imf | Modified | イメージ ファイル記述子
  戻り値 |  | IMF_C_NORMAL ファイルが閉じられ、メモリの再配分が成功した場合。IMF_C_failure_code エラーが発生した場合(IMF_C_WRITE_ERR など)。

説明

この関数は、Maya でイメージ ファイルの読み取りまたは書き込みが完了するたびにコールされます。以下の手順に従って、終了関数を作成します。

1. イメージ ファイルを閉じます。
2. imf->data に示されるプライベート データの配分を解除して、imf->data に NULL を設定します。imageReadOpen または imageWriteOpen のスキャンライン バッファの配分を解除するには、IMF_chan_free を使用します。
3. ファイルが閉じられ、メモリのクリーンアップに成功した場合は、IMF_C_NORMAL を返します。失敗した場合は、IMF_C_failure_code を返します。

imageWriteOpen

定義

  int imageWriteOpen

  (

  IMF_OBJECT *imf

  )

  パラメータ | 型 | 説明
  --- | --- | ---
  imf | Modified | イメージ ファイル記述子
  戻り値 |  | TRUE イメージが正常に開かれた場合。FALSE エラーが発生した場合。

説明

  この関数は、書き込み用にファイルを開くときにコールされます。

  imf パラメータには、ファイルの書き込みに必要なすべての情報が含まれます。imageWriteOpen をコールする前に、ここにファイル名を含めます。このルーチンの実行後、ファイルにアクセスするルーチンのポインタ、サイズの情報、および書き込むイメージの他のアトリビュートなども含める必要があります。

  この関数を作成する基本手順を以下に示します。

- ファイルを開きます。
- ヘッダを書き込みます。ファイルにルックアップ テーブルを含める場合、このときに必要に応じて書き込んでください。
- close および scanline write ルーチンを imf に割り当てます。
- ファイル記述子などを定義するプライベート データを配分し、imf->data とコネクトします。

詳細な手順を次に示します。

1. 指定したファイルを開きます。正常に開かれた場合にのみ続行します。失敗した場合は、ERR_printf を使用してメッセージを生成し、imf__err に IMF_C_CANNOT_OPEN を設定して、FALSE を返します。
2. imf->info および imf->info.image[0] を使用して、書き込むファイルに関するアトリビュートを抽出します。
3. malloc を使用して、配分した固有のデータ構造に、ファイルを記述するフォーマット固有の情報を保存します。このプライベート データ構造には、現在のファイル記述子、アクティブ ウィンドウなどの項目を含めることができます。

       private = malloc( sizeof( PRIVATE ) );
       private->... = ...;
       imf->data = malloc( sizeof( POINTER ) );
       imf->data[0] = private;

4. イメージ アクセス ルーチンを imf->scan および imf->close に指定します。
5. ファイル フォーマットが出力機能を定義する場合、imf->info.settings から抽出します (詳細については、IMF_CAPABILITY を参照してください)。
6. 定義する場合は、ファイル ヘッダとルックアップ テーブルを書き込みます。
7. 関数が正常に開き、イメージ ファイル ヘッダを読み取った場合は IMF_C_NORMAL を返します。エラーが発生した場合は、IMF_C_failure_code を返します。

   イメージ ファイルを開くのに失敗した場合、imf__free_obj ( imf がコールされ、imageWriteOpen に渡された IMF_OBJECT が解放されます。したがって、エラー処理コードで imf__free_obj をコールしないでください。

   注:

   このエントリ ポイントの定義は必須です。

スキャンライン書き込み関数

定義

  int your_scan_write_func

  (

  POINTER data,

  int scan,

  POINTER *line_buff

  )

  パラメータ | 型 | 説明
  --- | --- | ---
  data | 入力 | イメージにコネクトするプライベート データ
  scan | 入力 | 書き込むスキャンライン
  line_buff | 出力 | 現在のスキャンラインのピクセルを含むバッファ
  戻り値 |  | IMF_C_BAD_SCAN スキャンがイメージの範囲外である場合。IMF_C_NORMAL スキャンラインが正常に書き込まれた場合。IMF_C_WRITE_ERR エラーが発生した場合。

説明

  この関数は Maya によってコールされ、スキャンラインをイメージ ファイルに書き込みます。イメージ ファイルはイメージの方向に基づいて、下から上または上から下のいずれかの方向に書き込まれます。

  以下の手順に従って、スキャンライン書き込み関数を作成します。

1. 指定したスキャンラインを書き込みます。スキャンライン番号は下から上の順序に基づきます。たとえば、イメージ サイズが 480 ラインで、方向が IMF_C_TOP_LEFT である場合、スキャンラインは 479 (一番上)、478 (上から 2 番目)、477、... 0 (一番下)の順序で書き込まれます。順序が IMF_C_BOT_LEFT である場合、0 (一番下)、1 (下から 2 番目)、2、...479 (一番上)の順序で書き込まれます。
2. line_buff が Maya によって渡されたスキャンライン バッファである場合、line_buff[0] からは赤、line_buff[1] からは緑、line_buff[2] からは青のカラー チャネル情報を読み出します。マット チャネルは、line_buff[3] にあります(存在する場合)。z チャネルは、line_buff[4] にあります(存在する場合)。ピクセルは左から右に格納されます。

       pr = (unsigned char *) line_buff[0];
       pg = (unsigned char *) line_buff[1];
       pb = (unsigned char *) line_buff[2];
       pm = (unsigned char *) line_buff[3];
       for ( i = 0; i < data->image_width; ++i )
       {
            red_values[i] = *(pr++);
            green_values[i] = *(pg++);
            blue_values[i] = *(pb++);
            matte_values[i] = *(pm++);
       }

   ファイル フォーマットで使用されるフォーマットに値を変換して、スキャンラインをファイルに書き込みます。

3. IMF_C_BAD_SCAN、IMF_C_NORMAL、または IMF_C_READ_ERR を返します。

オプションのエントリ ポイント

いくつかの追加のエントリ ポイントが存在します。オプションのエントリ ポイントが定義されていない場合、既定値が使用されます。使用するファイル フォーマットが機能をサポートしていない場合、無視されるオプションのエントリ ポイントもあります。

imageAccess

定義

  unsigned int imageAccess

説明

  この変数はプラグインがサポートする読み取りおよび書き込みメソッドを指定します。記述する定数はビット フィールドです。

- IMF_C_LUT_READ は、プラグインがファイルからのパレットの読み取りをサポートすることを示します。LUT 読み取り関数は、imageReadOpen ルーチンの imf->lut_read に定義して割り当てる必要があります。
- IMF_C_LUT_WRITE は、プラグインがファイルへのパレットの書き込みをサポートすることを示します。
- IMF_C_READ は、プラグインが走査線の連続読み取りをサポートすることを示します。
- IMF_C_READ RANDOM は、プラグインが走査線のランダム読み取りをサポートすることを示します。
- IMF_C_WRITE は、プラグインが走査線の連続書き込みをサポートすることを示します。
- IMF_C_WRITE RANDOM は、プラグインが走査線のランダム書き込みをサポートすることを示します。

  既定値は IMF_C_READ|IMF_C_WRITE です。

  例

    この例は、ルックアップ テーブルをサポートするファイル用です。

        unsigned int imageAccess
        = IMF_C_LUT_READ | IMF_C_LUT_WRITE | IMF_C_READ | IMF_C_WRITE;

imageBitsPerChannel

定義

  unsigned int imageBitsPerChannel

説明

  この変数は、サポートされるカラー チャネル単位のビット数を定義します。これは赤、緑、および青のチャネルにのみ適用されます。

  この変数はビット フィールドであり、各チャネルがサポートできるビット数(1 ～ 32)を定義するために使用します。最も低いビットを設定すると、フォーマットはカラー チャネル単位に 32 ビットをサポートします。最も高いビットを設定すると、フォーマットはカラー チャネル単位に 32 ビットをサポートします。フォーマットがサポートするすべてのチャネル単位のビット数に基づいて、この変数にビットを設定する必要があります。

  既定値は 0x00000080、つまりカラー チャネル単位に 8 ビットです。

例

  この 1 番目の例は、カラー チャネル単位に 8 ビットのみをサポートします。2 番目の例 は 8、10、および 16 ビットをサポートします。

  unsigned int imageBitsPerChannel = 0x00000080;

  unsigned int imageBitsPerChannel = 0x00008280;

imageBitsPerMatte

定義

  unsigned int imageBitsPerMatte;

説明

  この変数は、マット チャネルによってサポートされるビット数を記述する点を除いては、imageBitsPerChannel と同じです。

  既定値は 0x00000000、つまりフォーマットはマット チャネルをサポートしません。

例

  この 1 番目の例は、マット チャネルに 8 ビットのみをサポートします。2 番目の例は 8、10、および 16 ビットをサポートします。

  unsigned int imageBitsPerMatte = 0x00000080;

  unsigned int imageBitsPerMatte = 0x00008280;

imageBitsPerZChannel

定義

  unsigned int imageBitsPerZChannel

説明

  この変数は、z チャネルによってサポートされるビット数を記述する点を除いては、imageBitsPerChannel と同じです。

  既定値は 0x00000000、つまりフォーマットは z チャネルをサポートしません。

例

  この 1 番目の例は、z チャネルに 8 ビットのみをサポートします。2 番目の例は 8、10、および 16 ビットをサポートします。

  unsigned int imageBitsPerZChannel = 0x00000080;

  unsigned int imageBitsPerZChannel = 0x00008280;

imageCapability

定義

  void imageCapability

  (

  IMF_CAPABILITY **capabilities,

  int *num_input,

  int *num_output,

  int *total

  )

  パラメータ | 型 | 説明
  --- | --- | ---
  capabilities | 出力 | このファイル タイプの機能のポインタを返します。
  num_input | 出力 | ファイルの読み取りに適用可能な機能数
  num_output | 出力 | ファイルの書き込みに適用可能な機能数
  total | 出力 | 機能の総数

説明

  この関数は、Maya でメニューに表示する機能を定義する場合、初期化時にコールされます。この機能の詳細については、IMF_CAPABILITY を参照してください。

例

  この汎用コード フラグメントは、機能のプラグインのリストをループします。

  int i;

  *capabilities = your_capabilities;

  for ( *num_input = *num_output = *total = i = 0;

  i < number_elements_in( your_capabilities );

  ++i )

  {

  if ( your_capabilities[i].imc_when_avail

  & IMF_CAPABILITY_WHEN_INPUT )

  {

  ++( *num_input );

  }

  if ( your_capabilities[i].imc_when_avail

  & IMF_CAPABILITY_WHEN_OUTPUT )

  {

  ++( *num_output );

  }

  if ( your_capabilities[i].imc_when_avail

  & ( IMF_CAPABILITY_WHEN_INPUT

  | IMF_CAPABILITY_WHEN_OUTPUT ) )

  {

  ++( *total );

  }

  }

imageDescription

定義

  char *imageDescription

説明

  この変数は、ファイル フォーマットの詳細を記述するための文字列です。メニューに表示されるときに imageName を補足します。

  既定値は NULL、つまり追加の記述は存在しません。

例

  char *imageDescription = "Version 2";

imageDone

定義

  void imageDone( void )

説明

  このオプション ルーチンは、Maya の終了時にコールされます。プラグインが特別なライセンス発行を必要とする場合、このポイントでライセンスをリリースする必要があります。

imageExtension

定義

  char *imageExtension

説明

  この変数は、プラグインのファイル名を生成するときの既定拡張子を定義します。前にピリオドを含める必要があります。既定値は NULL、つまりフォーマットは通常、拡張子を使用しません。

  この変数は、ファイル タイプに Determine from extension が定義されている場合に、イメージ ファイルのフォーマットを定義するために使用します。

例

  char *imageExtension = ".gif";

imageFormatString

定義

  char *imageFormatString

説明

  この変数は、ファイル名の既定フォーマットを定義し、ルートの名前、フレーム番号、および拡張子を含みます。sprintf と同じ表記法を使用します。

  変数の 1 番目の %s はルートの名前に使用します。%d はフレーム番号に使用します。2 番 目の %s は拡張子に使用します。既定値は %s.%04.4d.%s です。

例

  この例は、ルートの名前の直後にゼロ パディングされていないフレーム番号、その後にピリオドで分離された拡張子が続く構文を定義します。

  char *imageFormatString = "%s%d.%s";

imageHardLinkDuplicates (UNIX のみ)

定義

  BOOLEAN imageHardLinkDuplicates

説明

  この変数は、Maya がシーケンスに作成される同じファイルにハード リンクを作成するかどうかを示します。たとえば、image.1.ext、image.2.ext、および image.3.ext が同じである場合、この変数に TRUE を設定すると、Maya は 1 つのファイルしか作成できませんが、他の 2 つのファイルから新規作成したファイルにハード リンクを作成できます。この変数が FALSE である場合、3 つのファイルは分離しますが、同じファイルが作成されます。

  既定値は TRUE です。

例

  BOOLEAN imageHardLinkDuplicates = FALSE;

imageInit

定義

  int imageInit( void )

説明

  これを定義すると、このルーチンはプラグインの機能が Maya に追加される前に起動します。戻り値が TRUE の場合、プラグインは通常どおりにロードされます。ただし、戻り値が FALSE の場合、プラグインはアンロードされます。

  この初期化ルーチンを imageDone ルーチンと一緒に使用すると、実装するライセンス発行スキームの開始と終了の方法を取得できます。プラグインが複数の言語サポートを提供する場合、このルーチンでは、任意の言語の文字列を使用できます。このコールでは、imageExtension と imageNameSyntax の既定値を設定することもできます。

imageIsFile

定義

  BOOLEAN imageIsFile(

  char *fn,

  FILE *fp

  }

  パラメータ | 型 | 説明
  --- | --- | ---
      fn
  | char* | ファイル名(fp が NULL の場合にのみ使用されます)。
      fp
  | FILE* | ファイル ポインタ。
  戻り値 |  | TRUE fn または fp がこのプラグインによってサポートされるファイルを示す場合。

説明

  ファイル名またはポインタがこのプラグインでサポートされるタイプに一致するかどうかをチェックします。

  注:

  このエントリ ポイントの定義は必須です。

例

  if ( fp == NULL )

  {

  fp = fopen( fn, "r" ) );

  }

  /* fp からヘッダを読み取り、このプラグインとの一致をチェックします。*/

  fread( &magic, 1, sizeof( magic ), fp );

  return ( magic & FORMATS_MAGIC_NUMBER )

imageNameSyntax

定義

  char *imageNameSyntax

説明

  この変数は、ファイル名の既定フォーマットを定義し、ルートの名前、フレーム番号、および拡張子を含みます。

  名前の構文は、次の 4 つの文字列を認識します。

- Name。ファイルのルートの名前を示します。
- Ext。拡張子を示します。
- #。フレーム番号を示します。
- ピリオド(.)、コンマ(,)、ハイフン(-)などの句読点

これらは目的のファイル名を生成するために、自由に組み合わせることができます。名前、フレーム番号、および拡張子はそれぞれ 1 回しか使用されませんが、# は繰り返してフレーム番号のゼロ パディングに使用できます。

既定値は NULL です。

この文字列指定は Maya に認識されません。

例

  この例はフレーム番号に使用される最低 2 桁を含む名前を生成します。名前とフレーム番号の間に句読点はありませんが、フレーム番号と拡張子の間にピリオドが配置されています。

  char *imageNameSyntax = "Name##.Ext";

imageNumberOfChannels

定義

  int imageNumberOfChannels

説明

  この変数は、ファイル フォーマットがサポートするカラー チャネルの最大数を定義します。マット チャネルは含まれません。通常、RGB イメージでは 3、グレースケールのみをサポートするフォーマットでは 1 です。

  既定値は 3 です。

例

  int imageNumberOfChannels = 3;

imageNumberOfMattes

定義

  int imageNumberOfMattes;

説明

  この変数は、ファイル フォーマットがサポートするマット チャネルまたはアルファ チャネルの最大数を定義します。通常、フォーマットがマットをサポートする場合は 1、サポートしない場合は 0 です。

  既定値は 0 です。

例

  int imageNumberOfMattes = 1;

imageNumberOfZChannels

定義

  int imageNumberOfZChannels

説明

  この変数は、ファイル フォーマットがサポートする z チャネルまたは深度チャネルの最大数を定義します。通常、フォーマットが z をサポートする場合は 1、サポートしない場合は 0 です。

  既定値は 0 です。

例

  int imageNumberOfZChannels = 1;

imageSupportRemoteAccess

定義

  BOOLEAN imageSupportRemoteAccess

説明

  この変数は、プラグインがリモート ファイル アクセスをサポートするかどうかを定義します。サポートする場合は、TRUE に設定します。サポートしない場合は、Maya は可能な場合にリモート ファイル アクセスを実行し、ファイル名から先頭の remotehost: を除去してからプラグインに渡します。

  既定値は FALSE です。

例

  BOOLEAN imageSupportRemoteAccess = TRUE;

imageSupportsActiveWindow

定義

  int imageSupportsActiveWindow

説明

  この変数は、フォーマットがアクティブ ウィンドウをサポートするかどうかを定義します。既定値は FALSE です。

例

  int imageSupportsActiveWindow = FALSE;

ルックアップ テーブル(LUT)読み取り関数

定義

  int your_lut_read_func

  (

  POINTER data,

  IMF_LUT **imf_lut

  )

  パラメータ | 型 | 説明
  --- | --- | ---
      data
  | 入力 | イメージにコネクトするプライベート データ
      imf_lut
  | 出力 | 新しく配分されるルックアップ テーブルのポインタ
  戻り値 |  | TRUE LUT が正常に配分され、読み取られた場合。FALSE エラーが発生した場合。

説明

  Maya では、この関数をコールしてイメージ ファイルのカラー ルックアップ テーブルを読み取ります。LUT は通常、容量が少ないため、imageReadOpen で読み取り、イメージにコネクトされるプライベート データに格納することをお勧めします。したがって、your_lut_read_func では新しい IMF_LUT を配分して格納した LUT データにコピーするだけです。

- 次のように LUT を配分します。

      if ( ( *imf_lut = IMF_lut_alloc( data->your_color_map_size ) ) == NULL )
      {
           return( FALSE );
      }

- (*imf_lut)->imu_maximum を各 LUT エントリの最大値に設定します。たとえば、ファイル フォーマットが各 LUT エントリを赤 12 ビット、緑 12 ビット、青 12 ビットとして格納する場合、imu_maximum には 4095 を使用します。
- (*imf_lut)->imu_maximum を、カラー ルックアップ テーブルがファイルに格納される場合は、そのガンマに設定するか、あるいは FMT_def_input_gamma を使用して既定入力ガンマ値を設定します。これは LUT エントリが書き込まれたときに適用されたガンマであることが必要です。
- それぞれの (*imf_lut)->imu_lut[i].ile_red、(*imf_lut)->imu_lut[i].ile_green などのエントリを塗り潰します。IMF_LUT 構造については、IMF_LUT を参照してください。各 LUT エントリの範囲は、0 から手順 2 で設定したimu_maximum エントリ セットの間であることが必要です。
- 成功した場合は TRUE、エラーが発生した場合は FALSE を返します。

ライブラリ関数

imf__build_handle

定義

  char *imf__build_handle

  (

  char *path,

  char *handle,

  char *ext

  )

  パラメータ | 型 | 説明
  --- | --- | ---
  path | 入力 | 使用する検索パス
  handle | 入力 | ファイル名
  ext | 入力 | ファイル名の拡張子
  戻り値 |  | 完全なファイル名

説明

  この関数は、path、handle、および ext からファイル名を構成します。ファイルを開くときに返される文字列を使用します。

例

  char *filename;

  FILE *fp = NULL;

  ...

  *info = &imf->info;

  if ( info->handle_complete )

  {

  filename = info->handle;

  }

  else

  {

  filename = imf__build_handle( NULL, info->handle,

  info->ext );

  if ( ( fp = fopen( filename, "rb" ) ) == NULL )

  {

  filename = imf__build_handle( getenv(

  "WF_IMG_DIR" ),

  info->handle, info->ext );

  }

  }

  if ( fp == NULL )

  {

  fp = fopen( filename, "rb" );

  }

IMF_chan_alloc

定義

  POINTER *IMF_chan_alloc

  (

  IMF_IMAGE *image,

  int res,

  char *key,

  int *size

  )

  パラメータ | 型 | 説明
  --- | --- | ---
  image | 入力 | イメージ情報は、配分されるチャネル数、たとえば、カラー チャネル数、マット チャネル数、Z チャネル数などを指定します。
  res | 入力 | ピクセル単位のスキャンラインの幅
  key | 入力 | プラグインのキー。エラー メッセージに使用します。
  size | 出力 | 配分されるスキャンラインのサイズ
  戻り値 |  | メモリが不足している場合は NULL、それ以外は、スキャンライン バッファのポインタが返されます。

説明

  この関数は、スキャンライン データを Maya とスキャンラインの読み取りおよび書き込み関数間で渡すために使用されるスキャンライン バッファ セットを配分します。このバッファは、スキャンライン バッファのポインタの配列としてセットアップされます。1 番目の行にはカラー チャネル データ(赤、緑、青)、続いてマット チャネルおよび z チャネル(プラグインで定義されている場合)が含まれます。この関数は、imageReadOpen ルーチンからコールします。

  IMF_chan_alloc は、プラグイン コードの上部に定義する imageBitsPerPaletteEntry、imageBitsPerChannel、imageBitsPerMatte、および imageBitsPerZChannel エントリ ポイントに応じて異なります。エントリ ポイントがチャネル単位に 1 ～ 8 ビットを定義する場合、バイト サイズのピクセルが配分されます。チャネル単位に 9 ～ 16 ビットを定義する場合、16 ビットのショート ピクセルが配分されます。チャネル単位に 17 ～ 32 ビットを定義する場合、32 ビットのロング ピクセルが配分されます。すべての値は符号なし形式です。スキャンラインの読み取り関数と書き込み関数には、チャネル データの解釈を 8 ビットの符号なし文字、16 ビットのショート、あるいは 32 ビットのロングのどれで行うかを知らせておく必要があります。

例

  このサンプル コード フラグメントはスキャンライン バッファを配分し、IMF_chan_alloc によって配分されたスキャンライン バッファにアクセスする方法を示します。ピクセル単位に 8 ビットのカラー チャネルが 3 つ、ピクセル単位に 12 ビットのマット チャネルが 1 つ、ピクセル単位に 32 ビットの z チャネルが 1 つ存在します。imf は IMF_OBJECT 構造であり、imageReadOpen 関数に渡されます。imageWriteOpen は IMF_chan_alloc をコールしません。これは、Maya アプリケーションでスキャンライン書き込み関数に渡されるスキャンライン バッファが配分されるためです。

  POINTER *p_buffer;

  p_buffer = IMF_chan_alloc( imf->info.image,

  image_width, imf->info.key, NULL);

  スキャンライン読み取り関数では、以下のようにデータをバッファに格納します。

  unsigned char *p_red = p_buffer[0];

  unsigned char *p_blue = p_buffer[1];

  unsigned char *p_green = p_buffer[2];

  unsigned short *p_matte = p_buffer[3];

  unsigned long *p_z = p_buffer[4];

  for ( i = 0; i < image_width; ++i )

  {

  p_red[i] = red_values[i];

  p_blue[i] = blue_values[i];

  p_green[i] = green_values[i];

  p_matte[i] = matte_values[i];

  p_z[i] = z_values[i];

  }

  スキャンライン書き込み関数では、同様の方法でバッファにアクセスします。

関連関数

  IMF_chan_free

IMF_chan_free

定義

  int IMF_chan_free

  (

  POINTER *chan_data

  )

  パラメータ | 型 | 説明
  --- | --- | ---
      chan_data
  | Modified | IMF_chan_alloc によって配分されるスキャンライン バッファのポインタのアドレス
  戻り値 |  | 未使用

説明

  この関数は、以前に IMF_chan_alloc によって配分されたスキャンライン バッファ セットの配分を解除します。

例

  data->buffer がスキャンライン バッファを示す場合、次を使用してバッファを解放します。

      IMF_chan_free( data->buffer );

関連関数

  IMF_chan_alloc

imf__free_obj

定義

  int imf__free_obj

  (

  IMF_OBJECT *imf

  )

  パラメータ | 型 | 説明
  --- | --- | ---
  imf | Modified | 幅や高さなどのイメージ特性を格納する構造
  戻り値 |  | 未使用

説明

  この関数は、IMF_OBJECT 構造によって占有された空間の配分を解除します。この関数は終了関数でコールします。

  imf->data が NULL でない場合、imf__free_obj は imf->data[0] によって示される空間を解放し、imf->data を解放します。したがって、imf->data[1] または他の追加の空間を配分した場合、imageReadOpen と imageWriteOpen の終了関数およびエラー処理ルーチンはこの空間の配分を解除して、メモリ リークを防止する必要があります。

  イメージ ファイルを開くのに失敗した場合、imf__free_obj ( imf ) がコールされ、imageReadOpen に渡された IMF_OBJECT が解放します。したがって、エラー処理コードで imf__free_obj をコールしないでください。終了関数をコールしてエラー処理とクリーンアップを実行する場合、終了関数はファイルを開くのに失敗した後の閉じる処理と、イメージ ファイルの読み取りに成功したあとの閉じる処理を区別する必要があります。終了関数は、イメージ ファイルが正常に読み取られた場合にのみ imf__free_obj をコールする必要があります。

例

  imf__free_obj( imf );

関連関数

  imf__init_ifd

imf__init_ifd

定義

  int imf__init_ifd

  (

  IMF_OBJECT *imf

  )

  パラメータ | 型 | 説明
  --- | --- | ---
      imf
  | Modified | 幅や高さなどのイメージ特性を格納する構造
  戻り値 |  | 未使用

説明

  この関数は imf->info.image によって示されるイメージ ファイル記述子の構造を初期化します。この関数は imageReadOpen 関数でコールします。imf->info.image フィールドは imf__init_ifd を起動する前に、関数によって配分しておく必要があります。

  次のように、IMF_IMAGE 構造の既定値を定義します。

- usage: IMF_C_GENERIC
- curve.usage: IMF_C_CORRECTION_GAMMA
- curve.gamma: fmt_def_gamma
- curve.info.name: NULL
- curve.info.count: 1
- curve.info.elems: 256
- curve.info.type: IMF_C_INTEGER
- curve.info.bits: LOG( fmt__gamma_tab_res ) / LOG( 2.0 )
- curve.response: NULL
- aspect.name: NULL
- chan_format: NULL
- matte_format: NULL
- aux_format: NULL
- index_format: NULL
- chan_config: IMF_C_PLANAR_SEPARATE
- chan_orient: IMF_C_BOT_LEFT
- chan_count: 0
- chan_type: IMF_C_INTEGER
- chan_bits: 8
- matte_count: 0
- matte_type: IMF_C_INTEGER
- matte_bits: 8
- aux_count: 0
- aux_type: IMF_C_INTEGER
- aux_bits: 8
- index_count: 0
- index_type: IMF_C_INTEGER
- index_bits: 8
  例

    imf__init_ifd( imf );

  関連関数

    imf__free_obj

機能設定

イメージ プラグインを実装する場合、プラグインがサポートするファイル フォーマット機能を定義し、ユーザがイメージ ファイルにアクセスするためにファイル ブラウザでこれらの機能を指定できるようにするか、およびその指定方法を定義する必要があります。Maya はファイルにアクセスするときに、これらの機能を自動的にイメージ プラグインに渡します。これは機能設定と呼ばれます。たとえば、ディスクにイメージを書き込むとき、ユーザは使用する圧縮タイプを選択できます。ファイル フォーマットに特別な機能がなく、機能設定が必要でない場合もあります。

ユーザ インタフェースは次の 2 つの定義済み機能タイプをサポートします。

- List- は名前(文字列)のリストを含むオプション メニューを提供します。
- Number- は数値フィールドとバインドされていない数値用のサムホイール、または数値フィールドとバインドされた数値用のスライダを表示します。

  詳細については、imageCapability と IMF_CAPABILITY を参照してください。

データ構造

IMF_CAPABILITY

定義

  typedef struct imf_capability

  {

  U_SHORT imc_code;

  char *imc_name;

  MSGCAT_DEFN imc_name_msg;

  U_CHAR imc_type;

  POINTER imc_value;

  U_CHAR imc_when_avail;

  } IMF_CAPABILITY;

用途

  特別なタイプ固有のパラメータを持つイメージ ファイルでは、IMF_CAPABILITY 構造を使用してドライバのタイプ固有の機能を定義します。機能は配列として格納され、機能単位に 1 つのエントリが含まれます。たとえば、SGI ドライバは 2 つの機能を備えています。1 つは圧縮モード用(未処理と RGB)で、もう 1 つは、ファイルにマット チャネルを作成するかどうかを定義するための機能です。

説明

  次の表は、各フィールドについて説明したものです。

  フィールド | 説明
  --- | ---
      imc_code
  | IMF_CAPABILITY 配列に定義されるすべての機能の中で固有の 16 ビット数
  imc_name | 機能を説明するユーザ インタフェースに表示される文字列
  imc_name_msg | imc_name の国際化バージョン
  imc_type | 機能タイプ。現在、IMF_CAPABILITY_TYPE_LIST または IMF_CAPABILITY_TYPE_NUMBER のいずれかです。
  imc_value | IMF_CAPABILITY_LIST または IMF_CAPABILITY_NUMBER 構造のいずれかのポインタ。imc_type に応じて異なります。
  imc_when_avail | この機能が有効な場合に定義します。イメージの読み取りと書き込みの両方を行う場合は、IMF_CAPABILITY_WHEN_ALWAYS に設定します。イメージの読み取りを行う場合は、IMF_CAPABILITY_WHEN_INPUT に設定します。イメージの書き込みを行う場合は、IMF_CAPABILITY_WHEN_OUTPUT に設定します。

  capabilities は汎用パラメータです。imageReadOpen または imageWriteOpen がコールされると、機能の特定のユーザ定義インスタンスが settings として渡されます。このサンプル コード フラグメントはこれらの設定の意味を抽出する方法を示します。

    static BOOLEAN your_get_capability_settings
    (
     IMF_OBJECT			*imf,
     int			*mode
    )
    {
         IMF_CAPABILITY			*capability;
         IMF_CAP_SETTING			*setting;
         IMF_CAP_SETTING			**settings;
         if ( ( settings = imf->info.settings ) == NULL )
         {
             return( TRUE );
         }
         for ( /* Nothing */; setting = *settings; ++settings )
         {
              /*
              * Lookup the capability by code.
              */
             	for ( capability = your__capabilities; capability->imc_name_msg.mcd_set!= 0; ++capability )
              {
                  if ( capability->imc_code == setting->imcs_code )
                  {
                      break;
                  }
              }
              if ( capability->imc_name_msg.mcd_set == 0 )
              {
                  ERR_printf( "Bad capability found." );
                  return( FALSE );
              }
              switch ( capability->imc_code )
              {
                  case YOUR_CAPABILITY_IMC_CODE:
                      *mode =setting->imcs_value.imcs_list;
                      break;
                  case ANOTHER_CAPABILITY_IMC_CODE:
                      ...;
                      break;
                  case ...:
                  default:
                      ERR_printf( "Bad capability found.");
                  return( FALSE );
             }
         }
         return( TRUE );
    }

IMF_CAPABILITY_ENTRY

定義

  typedef struct imf_capability_entry

  {

  U_SHORT ice_code;

  char *ice_name;

  MSGCAT_DEFN ice_name_msg;

  } IMF_CAPABILITY_ENTRY;

用途

  この構造は IMF_CAPABILITY_LIST の単一のエントリを定義するために使用します。

説明

  次の表は、各フィールドについて説明したものです。

  フィールド | 説明
  --- | ---
      imc_code
  | IMF_CAPABILITY LIST に定義されるすべての機能エントリの中で固有の 16 ビット数。この数字は imageReadOpen と imageWriteOpen コードで使用され、ユーザが選択したリスト エントリを定義します。
  imc_name | このリスト項目用にユーザ インタフェースに表示されるキャラクタ文字列
  imc_name_msg | ice_name の国際化バージョン

IMF_CAPABILITY_LIST

定義

  typedef struct imf_capability_list

  {

  int icl_default;

  int icl_n_entries;

  IMF_CAPABILITY_ENTRY *icl_entries;

  } IMF_CAPABILITY_LIST;

用途

  IMF_CAPABILITY レコードが IMF_CAPABILITY_TYPE_LIST タイプである場合、imc_value フィールドは、IMF_CAPABILITY_ENTRY レコードの配列である icl_entries ポインタの IMF_CAPABILITY_LIST レコードを示します。

説明

  次の表は、各フィールドについて説明したものです。

  フィールド | 説明
  --- | ---
      icl_default
  | 既定リスト エントリの ice_code
  icl_n_entries | リスト内のエントリ数
  icl_entries | エントリのリスト

IMF_CAPABILITY_NUMBER

定義

  typedef struct imf_capability_number

  {

  float icn_default;

  BOOLEAN icn_minimum_dfnd;

  float icn_minimum;

  BOOLEAN icn_maximum_dfnd;

  float icn_maximum;

  floay icn_increment;

  } IMF_CAPABILITY_NUMBER;

用途

  IMF_CAPABILITY レコードが IMF_CAPABILITY_TYPE_NUMBER タイプを含む場合に、この構造は既定値と機能で許可される値の範囲を定義するために使用します。

説明

  次の表は、各フィールドについて説明したものです。

  フィールド | 説明
  --- | ---
      icn_default
  | この番号の機能の既定値
  icn_minimum_dfnd | 最小値を定義するかどうかを示します。定義する場合は TRUE、定義しない場合は FALSE です。
  icn_minimum | 最小値。icn_minimum_dfnd に TRUE が設定されている場合にのみ適用されます。
  icn_maximum_dfnd | 最大値を定義するかどうかを示します。定義する場合は TRUE、定義しない場合は FALSE です。
  icn_maximum | 最大値。icn_maximum_dfnd に TRUE が設定されている場合にのみ適用されます。
  icn_increment | スライダまたはサムホイールによって使用されるインクリメント

  icn_minimum_dfnd と icn_maximum_dfnd が両方とも TRUE である場合、テキスト フィールドの横にスライダが表示されます。それ以外は、サムホイールが表示されます。

IMF_CAP_SETTING

定義

  typedef struct imf_cap_setting

  {

  U_SHORT imcs_code;

  union

  {

  float imcs_number;

  int imcs_list;

  } imcs_value;

  } IMF_CAP_SETTING;

用途

  この構造は、ファイルを開くときに機能の現在の設定をプラグインに渡すために使用します。

  フィールド | 説明
  --- | ---
      imcs_code
  | 設定の imc_code。
  imcs_number | 機能が IMF_CAPABILITY_TYPE_NUMBER である場合の値。
  imcs_list | 機能が IMF_CAPABILITY_TYPE_LIST である場合の値。これはリストのゼロベースのインデックスです。

IMF_IMAGE

定義

  typedef struct

  {

  int usage;

  IMF_COLOR_RESPONSE curve;

  FMT_ASPECT_INFO aspect;

  WINDOW_I window;

  WINDOW_I active;

  int chan_config;

  int chan_orient;

  char *chan_format;

  int chan_count;

  int chan_type;

  int chan_bits;

  char *matte_format;

  int matte_count;

  int matte_type;

  int matte_bits;

  char *aux_format;

  int aux_count;

  int aux_type;

  int aux_bits;

  char *index_format;

  int index_count;

  int index_type;

  int index_bits;

  } IMF_IMAGE;

用途

  IMF_IMAGE はファイルから単一のイメージの内容を定義します。

説明

  次の表は、各フィールドについて説明したものです。

  フィールド | 説明
  --- | ---
      usage
  | イメージ タイプを記述するビット フィールド: 任意のイメージ タイプの場合は IMF_C_IMAGE_ANY。汎用イメージの場合は IMF_C_GENERIC (imf__init_ifd で設定される既定セット)。ルックアップ テーブルベースのイメージの場合は IMF_C_INDEX_LUT。
  curve | カラー補正情報
  aspect | イメージのアスペクト情報
  window | ゼロベースの数字を使用するイメージ ウィンドウの境界
  active | アクティブ ウィンドウの境界
  chan_config | チャネル平面。このフィールドは、スキャンラインの読み取り関数と書き込み関数にスキャンライン データを渡す方法に影響を与えます。2 つのオプションがあります。 赤、緑、および青の IMF_C_PLANAR_CONTIGUOUS は、1 つの大規模なスキャンライン バッファに収められます。値は、R、G、B、R、G、B という順序で配置されます。または、 赤、緑、青の IMF_C_PLANAR_SEPARATE は個別の配列収められます(標準使用)。
  chan_orient | チャネル方向: 下から上の順序の場合は IMF_C_ORIENT_BOT_LEFT。上から下の順序の場合は IMF_C_ORIENT_TOP_LEFT。
  chan_format | カラー チャネルのフォーマット
  chan_count | カラー チャネルの数
  chan_type | カラー チャネルの格納タイプ: 正の整数の場合は IMF_C_INTEGER (imf__init_ifd によって割り当てられた既定値)。単精度 float 値の場合は IMF_C_FLOAT。倍精度 double 値の場合は IMF_C_DOUBLE。
  chan_bits | カラー チャネル値単位のビット数
  matte_format | マット チャネルのフォーマット
  matte_count | マット チャネルの数
  matte_type | マット チャネルの格納タイプ: 正の整数の場合は IMF_C_INTEGER (imf__init_ifd によって割り当てられた既定値)。単精度 float 値の場合は IMF_C_FLOAT。倍精度 double 値の場合は IMF_C_DOUBLE。
  matte_bits | マット チャネル値単位のビット数
  aux_format | 補助(z)チャネルのフォーマット
  aux_count | (z)補助チャネルの数
  aux_type | 補助(z)チャネルの格納タイプ: 正の整数の場合は IMF_C_INTEGER (imf__init_ifd によって割り当てられた既定値)。単精度 float 値の場合は IMF_C_FLOAT。倍精度 double 値の場合は IMF_C_DOUBLE。
  aux_bits | 補助(z)チャネル値単位のビット数
  index_format | カラー インデックスのフォーマット
  index_count | カラー インデックス イメージ データのチャネルの数
  index_type | カラー インデックス データ チャネルの格納タイプ: 正の整数の場合は IMF_C_INTEGER (imf__init_ifd によって割り当てられた既定値)。単精度 float 値の場合は IMF_C_FLOAT。倍精度 double 値の場合は IMF_C_DOUBLE。
  index_bits | パレット インデックスのピクセル単位のビット数

IMF_INFO

定義

  typedef struct

  {

  char *key;

  char *handle;

  BOOLEAN handle_complete;

  char *name;

  char *ext;

  char *desc;

  char *program;

  char *machine;

  char *user;

  char *date;

  char *time;

  char *filter;

  char *compress;

  IMF_CAP_SETTING **settings;

  BOOLEAN lut_exists;

  IMF_LUT *write_lut;

  int job_num;

  int frame;

  int field;

  U_LONG init_flag;

  COLOR_XYZ_3F red_pri;

  COLOR_XYZ_3F green_pri;

  COLOR_XYZ_3F blue_pri;

  COLOR_XYZ_3F white_pt;

  int count;

  IMF_IMAGE *image;

  int track_num_frames;

  float track_frame_rate;

  int track_start_frame;

  int num_audio_tracks;

  int num_video_tracks;

  } IMF_INFO;

用途

  イメージ ファイルを記述する情報を含みます。

説明

  次の表は、各フィールドについて説明したものです。

  フィールド | 説明
  --- | ---
      key
  | プラグインの固有の識別子キー
  handle | イメージのファイル名
  handle_complete | handle を完全に構築するかどうかを示します。FALSE の場合は、プラグインが imf__build_handle を使用してファイル名の完全なパスを構築する必要があります。
  name | イメージ ファイルの名前
  ext | ファイル名の拡張子
  desc | イメージ ファイル タイプの説明
  program | イメージを作成したプログラム
  machine | イメージが作成されたマシン
  user | イメージを作成したユーザ
  date | イメージの作成日付
  time | ファイルの作成所要時間
  filter | イメージで使用されるフィルタ機能
  compress | イメージで使用される圧縮機能
  settings | ユーザが設定した機能設定
  lut_exists | ルックアップ テーブル(LUT)がスキャンライン バッファのイメージ データに使用される場合は TRUE です。データが RGB の場合は FALSE です。
  write_lut | LUT のポインタ。パレットベースのイメージ ファイルを書き込むときにのみ使用されます。
  job_num | ジョブのアカウント情報を処理します。
  frame | フレーム番号
  field | フィールド レンダリング フラグ
  init_flag | コール側が IMF_info_init を起動したかどうかを示します。
  red_pri | 赤の彩度
  green_pri | 緑の彩度
  blue_pri | 青の彩度
  white_pt | 白の彩度
  count | イメージ フィールドによって示されるイメージ サブ ヘッダの数
  image | 詳細なイメージ情報を含むイメージ サブ ヘッダの配列
  track_num_frames | 現在のトラックのフレーム番号
  track_frame_rate | トラックのフレーム数/秒
  track_start_frame | 現在のトラックの 1 番目のフレーム番号
  num_audio_tracks | 現在のファイルのオーディオ トラックの番号
  num_video_tracks | 現在のファイルのビデオ トラックの番号

IMF_LUT

定義

  typedef struct imf_lut

  {

  IMF_LUT_ENTRY *imu_lut;

  int imu_maximum;

  int imu_n_entries;

  float imu_gamma;

  } IMF_LUT;

用途

  この構造はルックアップ テーブル(LUT)を定義します。

説明

  次の表は、各フィールドについて説明したものです。

  フィールド | 説明
  --- | ---
      imu_lut
  | ルックアップ テーブルのエントリ
  imu_maximum | 各 LUT エントリが含むことができる最大値
  imu_n_entries | imu_lut によって示される LUT エントリの数
  imu_gamma | LUT エントリのガンマ値

IMF_LUT_ENTRY

定義

  typedef struct imf_lut_entry

  {

  U_SHORT ile_red;

  U_SHORT ile_green;

  U_SHORT ile_blue;

  U_CHAR ile_mode:7;

  U_CHAR ile_transparent:1;

  } IMF_LUT_ENTRY;

用途

  この構造はルックアップ テーブルのエントリを定義します。

説明

  次の表は、各フィールドについて説明したものです。

  フィールド | 説明
  --- | ---
      ile_red
  | このエントリの赤の値。
  ile_green | このエントリの緑の値。
  ile_blue | このエントリの青の値。
  ile_mode | IMF_LUT_MODE_FREE エントリが未使用である場合。IMF_LUT_MODE_LOCKED エントリがロックされ、使用不可である場合。IMF_LUT_MODE_RESERVED エントリが予約され、使用不可である場合。IMF_LUT_MODE_USED エントリが使用中で、修正可能である場合。
  ile_transparent | エントリが透明でない(たとえば不透明)場合は 0 に設定し、透明な場合は 1 に設定します。

IMF_OBJECT

定義

  typedef struct imf_object

  {

  POINTER *data;

  IMF_INFO info;

  int access;

  IMF_lutReadProc lut_read;

  IMF_scanProc scan;

  IMF_closeProc close;

  IMF_playbackBindProc playback_bind;

  IMF_playbackGotoProc playback_goto;

  IMF_playbackPlayProc playback_play;

  IMF_playbackParamsProc playback_params;

  IMF_playbackStopProc playback_stop;

  IMF_getFrameProc get_frame;

  IMF_getRasterProc get_raster;

  IMF_getRegionProc get region;

  IMF_setFrameProc set_frame;

  } IMF_OBJECT;

用途

  この構造は、imageReadOpen と imageWriteOpen をコールするときに使用します。

説明

  次の表は、各フィールドについて説明したものです。

  フィールド | 説明
  --- | ---
      data
  | イメージにコネクトするプライベート データ
  info | イメージ ファイル情報
  access | イメージ アクセス タイプ
  lut_read | イメージ ファイルからルックアップ テーブル情報を読み出す関数
  scan | スキャンライン アクセス関数
  close | イメージ終了関数
  playback_bind | NULL を設定します。
  playback_goto | NULL を設定します。
  playback_play | NULL を設定します。
  playback_params | NULL を設定します。
  playback_stop | NULL を設定します。
  get_frame | NULL を設定します。
  get_raster | NULL を設定します。
  get_region | NULL を設定します。
  set_frame | NULL を設定します。

プラグインのコンパイル

イメージ ファイル フォーマット プラグインを書き込むと、これをコンパイルして、Maya にロードできる共有オブジェクトを作成する必要があります。gcc コンパイラを使用したサンプルを構築するための、Makefile と buildconfig が Developer’s Kit に用意されています。Windows では、Visual C++ でイメージ プラグインを構築するためのソリューションとプロジェクト ファイルが用意されています。イメージ プラグインのサンプルを構築する前に、最初に MAYA_LOCATION を設定する必要があります。構築するプラグインは、Maya が新しいイメージ フォーマットにアクセスする前に、$MAYA_LOCATION/bin/plug-ins/image ディレクトリにコピーしてください。イメージ プラグインは、Maya にロードできるように用意されたコンパイラとリンカーのフラグを使用して構築する必要があります。