This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these messages)
|
| 「ILBM」IFFインターリーブビットマップ | |
|---|---|
| ファイル名拡張子 | .iff、.lbm |
| インターネットメディアタイプ | image/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]
| 型 | 名前 | 説明 |
|---|---|---|
| FOURCC | チャンクID | "FORM" |
| UINT32BE | lenChunk | チャンクデータの長さ(バイト単位)。パッドバイトは含まれません。ファイルサイズから8バイトを引いた値と同じになります(このフィールドはchunkIDカウントに含まれません)。
|
| FOURCC | フォーマットID | 「ILBM」または「PBM」 |
| バイト[長さチャンク - 12] | コンテンツ | チャンクの実際のデータ。下にある他のサブチャンクで構成されます。 |
| バイト | パッド | オプションのパディングバイト。2lenChunkの倍数でない
場合にのみ存在します |
BMHD:ビットマップヘッダー
BMHDチャンクは画像の表示方法を指定し、通常はFORM内の最初のチャンクです。画像の高さと幅だけでなく、画面上の描画位置、様々な画面解像度での表示方法、画像が圧縮されているかどうかも定義します。このチャンクの内容は次のとおりです。[4]
| 型 | 名前 | 説明 |
|---|---|---|
| UINT16BE | 幅 | 画像の幅(ピクセル単位) |
| UINT16BE | 高さ | 画像の高さ(ピクセル単位) |
| INT16BE | xOrigin | 画面上の画像の左上隅の位置(ピクセル単位)。画像が大きな画像の一部であるか、フルスクリーンでない限り、値は通常0,0です |
| INT16BE | yOrigin | |
| UINT8 | numPlanes | ビットマップ内のプレーン数。モノクロの場合は1、16色の場合は4、256色の場合は8、カラーマップのみで画像データがない場合は0です(つまり、このファイルはカラーマップのみです)。 |
| UINT8 | マスク | 1 = マスク、2 = 透明色、3 = 投げ縄選択(MacPaint用)。マスクデータはビットプレーンとはみなされません |
| UINT8 | 圧縮 | 0の場合、非圧縮。1の場合、画像データはRLE圧縮されています。2の場合、Atari ST用Deluxe Paintの「Vertical RLE」です。他の圧縮方法を表す他の値も理論的には可能です |
| UINT8 | パッド1 | 読み取り時は無視、書き込み時は将来の互換性のために0に設定 |
| UINT16BE | transClr | 透明色。2mask以上
の場合にのみ有効です |
| UINT8 | xAspect | ピクセルアスペクト、幅:高さの比率。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]
- [最終長さ] バイト分のデータ (画像サイズから計算された最終長さ) になるまでループします。
- [解凍されたデータの長さ] < [最終的な長さ]の場合:
- 1バイトを読み取る [値]
- [値] > 128 の場合:
- 次のバイトを読み取り、それを(257 - [値])回出力します。
- 2 バイト前進し、手順 1 に戻ります。
- それ以外の場合、[値] < 128 の場合は次のようになります。
- 次の[値+1]バイトを読み取って出力する
- [値 + 2] バイト前進し、手順 1 に戻ります。
- それ以外の場合、[値] = 128、ループを終了(解凍を停止)
圧縮ルーチンでは、2バイトの繰り返しランは、前後にリテラルランが続く場合を除き、繰り返しランとしてエンコードするのが最適です。リテラルランが続く場合は、3つのリテラルランを1つのリテラルランにまとめるのが最善です。3バイトを超える繰り返しは、常に繰り返しランとしてエンコードしてください。[4]
CAMG:Amigaモード
CAMGチャンクは、コモドールAmigaコンピュータ専用です。LONGの「ビューポートモード」を保存します。これにより、「デュアルプレイフィールド」や「ホールド&モディファイ」といったAmigaの表示モードを指定できます。当然のことながら、Amigaゲーム以外ではあまり見られません。[要出典]
| 型 | 名前 | 説明 |
|---|---|---|
| UINT32BE | ビューポートモード | ビットフラグ。Amigaハードウェアによって直接解釈されます。 |
意味のある CAMG チャンクが含まれている可能性があるファイルを変換または表示する必要がある場合は、以下の「ILBM ファイルの操作に関する注意事項」を参照してください。
CMAP: パレット
CMAPチャンクには画像のパレットが含まれており、使用される各色の3バイトのRGB値で構成されています。各バイトは0から255までの値を持ちます。チャンクの3 × numColours長さは バイトです。パレットに含まれる色の数は です2 ^ numBitplanes。このチャンクはオプションであり、存在しない場合はデフォルトのパレットが使用されます。エントリ数が予想よりも少ない場合もあります(例えば、4プレーンの「16色」ビットマップの場合は7色)。奇数色の場合には、IFF仕様に従って、チャンクの長さを偶数バイトにするために1バイトがパディングされますが、パディングバイトはチャンクの長さフィールドには含まれません。[4]
CRNG:色範囲
色範囲チャンクは「非標準」です。エレクトロニック・アーツのデラックスペイントプログラムでは、連続した色レジスタの範囲、つまり「シェード範囲」と色循環を識別するために使用されます。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 | 高 | この範囲に含まれるカラーマップの最後のエントリのインデックス。 |
CCRT:カラーサイクリング
CommodoreのGraphicraftプログラムは、Colour Cycling Range and Timing(色彩サイクル範囲とタイミング)にCCRTを使用しています。このチャンクにはCycleInfo構造体が含まれています。CRNGと同様に、非標準チャンクです。[4]
| 型 | 名前 | 説明 |
|---|---|---|
| INT16BE | 方向 | サイクル方向: 0=サイクルなし、1=前進、-1=後進 |
| UINT8 | 低 | 最も低いカラーレジスタが選択されました |
| UINT8 | 高 | 最高色レジスタが選択されました |
| INT32BE | delaySec | 色の変化間隔(秒) |
| INT32BE | delayuS | 色の変化間隔(遅延時間の合計を取得するために delaySecに追加されます) |
| INT16BE | パディング | 0x0000 |
このデータはCRNGチャンクに似ています。プログラムはおそらく、カラーサイクルデータを表現するのにこれら2つの方法のうちどちらか一方だけを使用するでしょう。もしこの情報をDeluxePaintとGraphicraftの両方に伝えたい場合は、両方を書き出すことができます。[4]
DEST:ビットプレーンの結合
オプションのプロパティDESTは、0個以上のソースビットプレーンをより深い宛先画像にどのように分散させるかを制御する方法です。読者の中にはDESTを無視する人もいるかもしれません。[4]
| 型 | 名前 | 説明 |
|---|---|---|
| UINT8 | numPlanes | ソース画像のビットプレーン数 |
| 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:ホットスポット
オプションのGRABチャンクは、マウスカーソルや「ペイントブラシ」として使用する場合など、画像の左上隅を基準とした「ハンドル」または「ホットスポット」の位置を指定します。これはオプションです。[4]
| 型 | 名前 | 説明 |
|---|---|---|
| INT16BE | × | 画像の左上隅を基準としたホットスポットのX座標(ピクセル単位) |
| INT16BE | y | 画像の左上隅を基準としたホットスポットのY座標(ピクセル単位) |
SPRT:Zオーダー
SPRTチャンクは、画像がスプライトであることを示します。したがって、マスクプレーンまたは透明色を持つ必要があり、フルスクリーン表示はできません。この処理方法は、画像を使用するプログラムによって異なります。ここに格納されるデータはスプライトの順序のみです。多くのプログラムでは、スプライトをフォアグラウンドに配置するためにこの順序が使用されます(順序1のスプライトは順序0のスプライトの後ろに表示されるなど)。これはオプションです。[4]
| 型 | 名前 | 説明 |
|---|---|---|
| UINT16BE | 順序 | 画像のZ順序(0は前景に最も近く、数字が大きいほど後ろ) |
TINY:サムネイル
TINYチャンクには、デラックスペイントを含む様々なグラフィックプログラム用の小さなプレビュー画像が含まれています。圧縮されており、BODYチャンクと形式は似ています。[要出典]
| 型 | 名前 | 説明 |
|---|---|---|
| UINT16BE | 幅 | サムネイルの幅(ピクセル単位) |
| UINT16BE | 高さ | サムネイルの高さ(ピクセル単位) |
| BYTE[] | データ | ピクセルデータ。BODYチャンクと全く同じ方法で保存されます。BMHDチャンクから取得した幅と高さをTINYチャンクから 取得した値に置き換え、全く同じアルゴリズムを使用します |
ILBMの使用に関する注意事項
カラーマップ
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(エクストラハーフブライト)モードを使用することを想定しています。カラーマップのエントリ数は32以下ですが、画像は6つのビットプレーンを持ちます。最上位ビットプレーンはフラグとみなされ、セットされていない場合は、通常どおり下位5ビットをカラーマップのインデックスとして使用します。フラグがセットされている場合は、下位5ビットをカラーマップのインデックスとして使用しますが、実際に使用される色は半分の明るさになります。これは、色のRGB成分を1ビット右にシフトすることで実現できます。または、64エントリのカラーマップを作成し、下位32エントリを上位半分にコピーして半分の明るさに変換し、6つのビットプレーンすべてをカラーインデックスとして使用します。[4]
PBM画像はエクストラハーフブライトモードでは存在できません。[引用が必要]
ホールド&モディファイ
ILBMファイルにビット11がセットされたCAMGチャンク(16進数で0x800)が含まれている場合、ファイルは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イメージは保留モードおよび変更モードでは存在できません。[引用が必要]
ユーティリティ
MacPaintやDeluxe Paintなど、ILBMおよびPBMファイルを扱うユーティリティのほとんどは、やや時代遅れです。IrfanViewはファイルの閲覧が可能で、非商用利用は無料で、Linuxでも動作します。[要出典] Netpbmは、ILBMから独自のPPM形式[5]への画像変換と、その逆が可能です。[6] Deluxe PaintにインスパイアされたGrafX2 ピクセルアートグラフィックエディターは、ILBMファイルの読み込みと保存が可能ですが、最大256色に制限されているため、HAMまたは24ビットのILBM画像ではすべての色が表示されません。Netpbmのilbmtoppmおよびppmtoilbmユーティリティがインストールされている 場合、 ImageMagickとGraphicsMagickもILBM画像を表示および変換できます
参照
参考文献
- ^ Jerry Morrison (1985年1月14日). 「EA IFF 85:交換フォーマットファイルの標準」. Electronic Arts . 2014年3月6日閲覧
- ^ Jerry Morrison (1986年1月17日). 「"ILBM" IFF Interleaved Bitmap」. Electronic Arts . 2014年6月13日時点のオリジナルよりアーカイブ。 2014年3月6日閲覧。
- ^ James D. Murray、 William vanRyper(1996年4月)。『グラフィックスファイルフォーマット百科事典 第2版』O'Reilly。ISBN 1-56592-161-52014年2月27日。
- ^ abcdefghijklmnopqrstu vwxyz 「ILBM IFFインターリーブビットマップ」2012年6月8日。 2018年7月30日閲覧
- ^ ジェフ・ポスカンザー;インゴ・ウィルケン(2014年11月12日)。 "ilbmtoppm" 。2019年6月13日に取得。
- ^ ジェフ・ポスカンザー;インゴ・ウィルケン(2015年6月28日)。 「ppmtoilbm」。2019年6月13日に取得。
外部リンク
- PNG2ILBMはPNGファイルをILBMおよびACBM形式に変換します。アルファチャンネル付きPNGやチャンネルあたり16ビット深度のPNGなど、あらゆるPNGファイルを変換できます。エクストラハーフブライトやホールドアンドモディファイを含む、1~8のビットプレーンにおけるリサンプリング、量子化、ディザリング、カラーレジスタの保持またはオーバーライドをサポートします
- 1990年代半ばのGraphics Workshop 1.1Yは、ILBMファイルのあらゆるバリエーションを相互に変換でき、その他様々な画像ファイル形式をサポートしています。古いバージョンではありますが、Windows XP互換モードで実行すればWindows 10でも動作します。Graphics Workshop Professionalという新しい商用バージョンもあり、こちらはよりモダンなUIを備えています(2000年代半ばのようです)。しかし、これも今日の基準からすると時代遅れです。
- Ultimate Paint は、パレットのカラー サイクル アニメーションを読み取り、書き込み、表示できます。
- XnView の nconvert は、無料の最新のコマンド ライン コンバータです。
- Image Converter Plusは、ILBMファイルを様々な形式に変換できるプログラムです。フルバージョンは有料ですが、デモ版では削除可能な透かしが追加されます。
- Paint Shop Pro 7.04 および他の旧バージョンの PSP は ILBM の読み書きは可能ですが、PBM ファイルの読み取りのみ可能です。PSP7 は特に注目すべき点です。シェアウェア版にはバグがあり、ファイルを開くだけで評価版のシャットダウンをスキップできてしまうためです(つまり、ショートカットを常にファイルを開くように変更すれば、この問題は発生しません)。