| 「ILBM」IFFインターリーブビットマップ | |
|---|---|
| ファイル名拡張子 | .iff、.lbm |
| インターネットメディアの種類 | 画像/x-ilbm |
| 開発者 | エレクトロニック・アーツ |
| 初回リリース | 1985年1月14日 (1985-01-14) |
| フォーマットの種類 | 画像ファイル形式 |
| 含まれるもの | 交換ファイル形式 |
| 標準 | EA IFF 85: 交換フォーマットの標準[ 1 ] [ 2 ] [ 3 ] |
| オープンフォーマット? | パブリックドメインのソースコード |
インターリーブド・ビットマップ(ILBM)は、Interchange File Format(IFF)規格に準拠した画像ファイル形式です。この形式はAmigaプラットフォームで開発され、IBM互換機では、この形式または関連するPBM(Planar Bitmap)形式のファイルは、1980年代後半から1990年代初頭にかけてAmigaに移植されたゲーム、またはAmigaマシンでグラフィックアセットが設計された ゲームでよく見られます。
このフォーマットの特徴は、ビットマップをインターリーブされたビットプレーン形式で保存することです。これがフォーマット名の由来です。これは、Amigaのグラフィックハードウェアがメモリからグラフィックデータをネイティブに読み取る方法を反映しています。ILBMファイルをよりコンパクトにするために、 PackBitsというシンプルな圧縮形式がサポートされています。[ 4 ]
Amiga では、これらのファイルは特定のファイル拡張子に関連付けられていませんが、拡張子が体系的に使用される PC システムで使用されるようになったため、.lbm拡張子、または場合によっては.pbm拡張子が採用されました。
ILBMは、 IFFファイル形式の実装であり、連続する複数のチャンクで構成されます。チャンクの順序はある程度変更できます。各チャンクは異なる機能を持ちますが、基本的なフォーマットは同じです。つまり、プログラムはファイル内のすべてのチャンクを読み込んだりデコードしたりする必要はなく、処理したいチャンク、または理解できるチャンクだけを読み込んだりデコードしたりすればよいのです。[ 4 ]
ILBMファイルは通常、画像サイズ、パレット、ピクセルデータなど、画像編集プログラムで表示するために必要な情報を含んでいます。一部のファイルは、ペイントプログラムのパレットとして機能するように(ピクセルデータは空白のまま)、または別の画像に合成するように設計されています。そのため、ILBMファイルはBMPなどの他の形式に比べて柔軟性が高い一方で、複雑性も高くなります。
ILBMの場合、BMHD(ビットマップヘッダー)チャンクとその他の「重要な」チャンクは、BODYチャンクの前に配置する必要があります。BODYの後にあるチャンクは「余分な」チャンクとみなされ、多くのプログラムはそれらを読み込まず、変更せずに残します。[ 4 ]
| タイプ | 名前 | 説明 |
|---|---|---|
| フォーCC | チャンクID | "形状" |
| UINT32BE | レンチャンク | チャンクデータの長さ(バイト単位)。パッドバイトは含まれません。ファイルサイズから8バイトを引いた値と同じになります(このフィールドはchunkIDカウントに含まれません)。 |
| フォーCC | フォーマットID | 「ILBM」または「PBM」 |
| バイト[lenChunk - 12] | コンテンツ | チャンクの実際のデータ。その下の他のサブチャンクから構成されます。 |
| バイト | パッド | オプションのパディング バイト。2lenChunkの倍数でない場合にのみ存在します。 |
BMHDチャンクは画像の表示方法を指定するもので、通常はFORM内の最初のチャンクです。画像の高さと幅だけでなく、画面上の描画位置、様々な画面解像度での表示方法、そして画像が圧縮されているかどうかも定義します。このチャンクの内容は以下のとおりです。[ 4 ]
| タイプ | 名前 | 説明 |
|---|---|---|
| UINT16BE | 幅 | 画像の幅(ピクセル単位) |
| UINT16BE | 身長 | 画像の高さ(ピクセル単位) |
| INT16BE | xOrigin | 画面上の画像の左上隅の位置(ピクセル単位)。画像が大きな画像の一部である場合、またはフルスクリーンでない場合、値は通常 0,0 になります。 |
| INT16BE | yOrigin | |
| UINT8 | 平面数 | ビットマップ内のプレーンの数。モノクロの場合は 1、16 色の場合は 4、256 色の場合は 8、カラーマップのみでイメージ データがない場合には 0 になります (つまり、このファイルはカラーマップのみです)。 |
| UINT8 | マスク | 1 = マスク、2 = 透明色、3 = lasso(MacPaint用)。マスクデータはビットプレーンとはみなされません。 |
| UINT8 | 圧縮 | 0の場合、非圧縮。1の場合、画像データはRLE圧縮されています。2の場合、Atari ST用Deluxe Paintの「Vertical RLE」です。他の圧縮方式を表す他の値も理論的には可能です。 |
| UINT8 | パッド1 | 読み取り時は無視し、書き込み時は将来の互換性のために 0 に設定します |
| UINT16BE | トランスクレア | 透明色。2mask以上 の場合にのみ有効です。 |
| UINT8 | xアスペクト | ピクセルアスペクト、幅:高さの比率。320x200、5:6、10:11など、さまざまな画面解像度で画像を表示するために使用されます。 |
| UINT8 | yアスペクト | |
| INT16BE | ページ幅 | 画像が表示される画面のサイズ(ピクセル単位、通常は320×200) |
| INT16BE | ページの高さ |
BODYチャンクは通常、ファイル内の最後のチャンクであり、[ 4 ]最も大きいチャンクです 。
ILBMファイルでは、BODYチャンクは実際の画像データを行ごとにインターリーブされたビットプレーン(およびオプションでマスク)として格納します。ビットプレーンは最初に1からnまで出現し、その後にマスクプレーンが続きます。画像が圧縮されていない場合、各行は(width + 15) / 1616ビット値(つまり、1ピクセルあたり1ビットで、16ビットの倍数に切り上げられます)で構成されます。圧縮されている場合、各行は個別に圧縮され、圧縮後も常に16ビットの倍数の長さになります。[ 4 ]
PBM ファイルでは、BODYチャンクは圧縮されていないため、イメージ データを含むバイトの連続ストリームに過ぎず、より単純です。
画像が圧縮されている場合、各データ行(ビットプレーンごとではない)は、マスクデータが存在する場合はマスクデータも含めて個別に圧縮されます。この圧縮は、フラグを用いたRLE圧縮の一種です。デコード方法は以下のとおりです。[ 4 ]
圧縮ルーチンでは、2バイトの繰り返しランは、前後にリテラルランが続く場合を除き、繰り返しランとしてエンコードするのが最適です。リテラルランが続く場合は、3つのリテラルランを1つのリテラルランにまとめるのが最善です。3バイトを超える繰り返しは、常に繰り返しランとしてエンコードしてください。[ 4 ]
CAMGチャンクはCommodore Amigaコンピュータ専用です。LONG(長い)サイズの「ビューポートモード」を格納します。これにより、「デュアルプレイフィールド」や「ホールド&モディファイ」といったAmigaの表示モードを指定できます。当然ながら、Amigaゲーム以外ではあまり見かけません。
| タイプ | 名前 | 説明 |
|---|---|---|
| UINT32BE | ビューポートモード | ビットフラグ。Amigaハードウェアによって直接解釈されます。 |
意味のある CAMG チャンクが含まれている可能性があるファイルを変換または表示する必要がある場合は、以下の「ILBM ファイルの操作に関する注意事項」を参照してください。
CMAPチャンクには画像のパレットが含まれており、使用される各色の3バイトのRGB値で構成されています。各バイトは0から255までの値を持ちます。チャンクの3 × numColours長さは バイトです。パレットに含まれる色の数は です2 ^ numBitplanes。このチャンクはオプションであり、存在しない場合はデフォルトのパレットが使用されます。予想よりも少ないエントリを持つこともできます(たとえば、4プレーンの「16色」ビットマップの場合は7色)。奇数色の場合には、IFF仕様に従ってチャンクは1バイトパディングされて偶数バイト長になりますが、パディングバイトはチャンクの長さフィールドには含まれません。[ 4 ]
カラーレンジチャンクは「非標準」です。エレクトロニック・アーツのデラックスペイントプログラムでは、連続したカラーレジスタの範囲、つまり「シェードレンジ」とカラーサイクルを識別するために使用されます。ILBMファイルには0個以上のCRNGチャンクを含めることができますが、すべてBODYチャンクの前に記述する必要があります。デラックスペイントは通常、ユーザーが「画像を保存」すると、ILBMに4つのCRNGチャンクを書き込みます。[ 4 ]
| タイプ | 名前 | 説明 |
|---|---|---|
| INT16BE | パディング | 0x0000 |
| INT16BE | レート | カラーサイクルレート。単位は、1秒あたり60ステップのレートが2 14 = 16384と表されるようなものです。より低いレートは線形スケーリングによって得られます。1秒あたり30ステップの場合、レートは8192です。 |
| INT16BE | 旗 | パレット内の色の循環を制御するフラグです。ビット0が1の場合、色は循環します。それ以外の場合、この色レジスタ範囲は非アクティブであり、効果はありません。ビット1が0の場合、色は上方向に循環します。つまり、各色はカラーマップ内の次のインデックス位置に移動し、範囲内の最上位の色が最下位の位置に移動します。ビット1が1の場合、色は逆方向に循環します。カラーマップの 下位エントリと上位エントリの間にある色のみが循環します。 |
| UINT8 | 低い | この範囲の一部であるカラーマップの最初のエントリのインデックス。 |
| UINT8 | 高い | この範囲の一部であるカラーマップ内の最後のエントリのインデックス。 |
CommodoreのGraphicraftプログラムは、Colour Cycling Range and Timing(色彩サイクリング範囲とタイミング)にCCRTを使用しています。このチャンクにはCycleInfo構造体が含まれています。CRNGと同様に、非標準チャンクです。[ 4 ]
| タイプ | 名前 | 説明 |
|---|---|---|
| INT16BE | 方向 | サイクル方向: 0=サイクルなし、1=前進、-1=後進 |
| UINT8 | 低い | 最も低いカラーレジスタが選択されました |
| UINT8 | 高い | 最高のカラーレジスタが選択されました |
| INT32BE | 遅延秒 | 色の変化間隔(秒) |
| INT32BE | 遅延S | 色の変化間隔(遅延時間の合計を取得するために delaySecに追加されます) |
| INT16BE | パディング | 0x0000 |
このデータはCRNGチャンクに似ています。プログラムはおそらく、カラーサイクルデータを表現するのにこれら2つの方法のうちどちらか一方だけを使用するでしょう。もしこの情報をDeluxePaintとGraphicraftの両方に伝えたい場合は、両方を書き出すことができます。[ 4 ]
オプションプロパティDESTは、0個以上のソースビットプレーンをより深い宛先画像に分散させる方法を制御する方法です。読者の中にはDESTを無視する人もいるかもしれません。[ 4 ]
| タイプ | 名前 | 説明 |
|---|---|---|
| UINT8 | 平面数 | ソースイメージ内のビットプレーンの数 |
| UINT8 | パッド1 | 未使用。一貫性を保つために 0 を使用します。 |
| UINT16BE | 飛行機ピック | 飛行機を選んで目的地イメージに散りばめる方法 |
| UINT16BE | 飛行機オンオフ | 平面ピックのデフォルトデータ |
| UINT16BE | 平面マスク | どのビットプレーンに保存するかを選択します |
planePick、planeOnOff、planeMaskの下位ビットの深さは、出力先のビットプレーンと1対1で対応します。ビット0はビットプレーン0に対応し、上位ビットは無視されます。[ 4 ]
planePickの「1」ビットは「次のソースビットプレーンをこのビットプレーンに配置する」ことを意味するため、「1」ビットの数はnumPlanesと等しくなければなりません。「0」ビットは「planeOnOffの対応するビットをこのビットプレーンに配置する」ことを意味します。[ 4 ]
プレーンマスクゲート内のビットは、宛先ビットプレーンへの書き込みを表します。「1」ビットは「このビットプレーンに書き込む」ことを意味し、「0」ビットは「このビットプレーンに何も書き込まない」ことを意味します。通常のケース(DESTチャンクがない場合)は、以下のようになりますplanePick = planeMask = (2 ^ numPlanes) - 1。[ 4 ]
色番号はソースビットマップ(numPlanesプレーンの深さ)ではなく、デスティネーションビットマップ(depthプレーンの深さ)のピクセルによって形成されることに注意してください。[ 4 ]
オプションのGRABチャンクは、画像の左上隅を基準とした「ハンドル」または「ホットスポット」の位置を指定します。例えば、マウスカーソルや「ペイントブラシ」として使用する場合などです。これはオプションです。[ 4 ]
| タイプ | 名前 | 説明 |
|---|---|---|
| INT16BE | × | 画像の左上隅を基準としたホットスポットのX座標(ピクセル単位) |
| INT16BE | y | 画像の左上隅を基準としたホットスポットのY座標(ピクセル単位) |
SPRTチャンクは、画像がスプライトであることを示します。したがって、マスクプレーンまたは透明色を持つ必要があり、フルスクリーン表示はできません。この処理方法は、画像を使用するプログラムによって異なります。ここに格納されるデータはスプライトの順序のみです。多くのプログラムでは、この順序に基づいてスプライトをフォアグラウンドに配置します(順序1のスプライトは順序0のスプライトの後ろに表示されるなど)。これはオプションです。[ 4 ]
| タイプ | 名前 | 説明 |
|---|---|---|
| UINT16BE | 注文 | 画像の Z オーダー (0 は前景に最も近く、数字が大きいほど遠く/後ろになります) |
TINYチャンクには、 Deluxe Paintを含む様々なグラフィックプログラム用の小さなプレビュー画像が含まれています。圧縮されており、BODYチャンクと形式は似ています。
| タイプ | 名前 | 説明 |
|---|---|---|
| UINT16BE | 幅 | サムネイルの幅(ピクセル単位) |
| UINT16BE | 身長 | サムネイルの高さ(ピクセル単位) |
| バイト[] | データ | ピクセルデータはBODYチャンクと全く同じ方法で保存されます。BMHDチャンクから取得した幅と高さをTINYチャンクから取得した値に置き換え、全く同じアルゴリズムを使用します。 |
ILBMファイルには、カラーマップのみが含まれており、画像データが含まれていない場合があります。これは、画像に個別に適用できるカラーパレットを格納するためによく使用されます。この場合、BODYチャンクは空で、BMHDチャンクのnumPlanesフィールドは0になります。[ 4 ]
一部のILBMファイルは、インデックスカラーではなく「トゥルーカラー」情報を含んでいます。これらのいわゆる「ディープイメージ」ファイルはCMAPチャンクを持たず、通常24または32のビットプレーンを持ちます。ビットプレーンの標準的な順序付けでは、赤色成分の最下位ビットが先頭に配置されます。[ 4 ]
R0 R1 R2 R3 R4 R5 R6 R7 G0 G1 G2 G3 G4 G5 G6 G7 B0 B1 B2 B3 B4 B5 B6 B7
32 ビット プレーンがある場合、最後の 8 ビット プレーンはアルファ チャネルになります。
R0 R1 ... R7 G0 ... G7 B0 ... B6 B7 A0 A1 A2 A3 A4 A5 A6 A7
カラーマップを含まず、8 つのビットプレーンのみを含む画像は、グレースケール画像である可能性があります。
I0 I1 I2 I3 I4 I5 I6 I7
ILBMファイルにビット7がセットされたCAMGチャンク(16進数で0x80)が含まれている場合、ファイルはAmigaチップセットのEHB(Extra Half-Brite)モードを使用することを想定しています。カラーマップのエントリ数は32以下ですが、画像は6つのビットプレーンを持ちます。最上位ビットプレーンはフラグとみなされ、セットされていない場合は、通常通り下位5ビットをカラーマップのインデックスとして使用します。フラグがセットされている場合は、下位5ビットをカラーマップのインデックスとして使用しますが、実際に使用される色の明るさは半分になります。これは、色のRGB成分を1ビット右にシフトすることで実現できます。あるいは、64エントリのカラーマップを作成し、下位32エントリを上位半分にコピーして明るさを半分に変換し、6つのビットプレーンすべてをカラーインデックスとして使用します。[ 4 ]
PBM イメージは、エクストラ ハーフ ブライト モードでは存在できません。
ILBMファイルにビット11(16進数で0x800)がセットされたCAMGチャンクが含まれている場合、ファイルはAmigaチップセットのHAM(ホールド・アンド・モディファイ)モードを使用することを想定しています。HAM6形式では、カラーマップは最大16エントリですが、画像は6ビットプレーン(場合によっては5ビットプレーン)になります。HAM8形式では、カラーマップは最大64エントリですが、画像は8ビットプレーン(場合によっては7ビットプレーン)になります。[ 4 ]
最後の2つのビットプレーン(ビットプレーンの数が奇数の場合は、常に0となる追加のビットプレーンを想定)は、最初の4つ(または6つ)のビットプレーンの使用方法を示す制御フラグです。[ 4 ]
| 制御フラグ | 説明 |
|---|---|
| 00 | 通常通り、ビットプレーン0〜3(または0〜5)をカラーマップのインデックスとして使用します。 |
| 10 | 前のピクセルの色を使用しますが、青の成分をビットプレーン0〜3(または0〜5)のビットに置き換えます。 |
| 01 | 前のピクセルの色を使用しますが、赤の成分をビットプレーン0〜3(または0〜5)のビットに置き換えます。 |
| 11 | 前のピクセルの色を使用しますが、緑のコンポーネントをビットプレーン0〜3(または0〜5)のビットに置き換えます。 |
走査線の最初のピクセルが修正ピクセルである場合は、修正して画像の境界色を使用します。[ 4 ]
4ビットを使用して色成分を変更する場合、その4ビットを成分の上位4ビットと下位4ビットの両方で使用する必要があることに注意してください(全体の色域が狭まるのを避けるため)。6ビットを使用する場合はこの点はそれほど重要ではありませんが、変更ビットの最上位2ビットを色成分の最下位2ビットに配置することは可能です。[ 4 ]
PBM イメージは、保留モードおよび変更モードでは存在できません。
ILBMおよびPBMファイルで機能するユーティリティのほとんどは、 MacPaintやDeluxe Paintなど、かなり時代遅れです。IrfanViewはファイルを表示でき、非商用で無料で、Linuxで動作します。Netpbmは、ILBMから独自のPPM形式[ 5 ]に画像を変換したり、その逆を行うことができます。[ 6 ] Deluxe Paintに触発されたGrafX2 ピクセルアートグラフィックエディタは、ILBMファイルの読み込みと保存ができますが、最大256色に制限されているため、HAMまたは24ビットのILBM画像ではすべての色が表示されません。ImageMagickとGraphicsMagickは、 Netpbmの ilbmtoppmおよびppmtoilbmユーティリティがインストールされていれば、ILBM画像を表示および変換することもできます。