ILBM

「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: ビットマップヘッダー

BMHDチャンク画像の表示方法を指定するもので、通常はFORM内の最初のチャンクです。画像の高さと幅だけでなく、画面上の描画位置、様々な画面解像度での表示方法、そして画像が圧縮されているかどうかも定義します。このチャンクの内容は以下のとおりです。[ 4 ]

タイプ名前説明
UINT16BE画像の幅(ピクセル単位)
UINT16BE身長画像の高さ(ピクセル単位)
INT16BExOrigin画面上の画像の左上隅の位置(ピクセル単位)。画像が大きな画像の一部である場合、またはフルスクリーンでない場合、値は通常 0,0 になります。
INT16BEyOrigin
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以上 の場合にのみ有効です。
UINT8xアスペクトピクセルアスペクト、幅:高さの比率。320x200、5:6、10:11など、さまざまな画面解像度で画像を表示するために使用されます。
UINT8yアスペクト
INT16BEページ幅画像が表示される画面のサイズ(ピクセル単位、通常は320×200)
INT16BEページの高さ

本文: 画像データ

BODYチャンクは通常、ファイル内の最後のチャンクであり、[ 4 ]最も大きいチャンクです

ILBMファイルでは、BODYチャンクは実際の画像データを行ごとにインターリーブされたビットプレーン(およびオプションでマスク)として格納します。ビットプレーンは最初に1からnまで出現し、その後にマスクプレーンが続きます。画像が圧縮されていない場合、各行は(width + 15) / 1616ビット値(つまり、1ピクセルあたり1ビットで、16ビットの倍数に切り上げられます)で構成されます。圧縮されている場合、各行は個別に圧縮され、圧縮後も常に16ビットの倍数の長さになります。[ 4 ]

PBM ファイルでは、BODYチャンクは圧縮されていないため、イメージ データを含むバイトの連続ストリームに過ぎず、より単純です。

圧縮

画像が圧縮されている場合、各データ行(ビットプレーンごとではない)は、マスクデータが存在する場合はマスクデータも含めて個別に圧縮されます。この圧縮は、フラグを用いたRLE圧縮の一種です。デコード方法は以下のとおりです。[ 4 ]

  • [最終長さ] バイト分のデータ (画像サイズから計算された最終長さ) になるまでループします。
  • [解凍されたデータの長さ] < [最終的な長さ]の場合:
    1. 1バイトを読み取る [値]
    2. [値] > 128 の場合:
      • 次のバイトを読み取り、それを(257 - [値])回出力します。
      • 2 バイト前進し、手順 1 に戻ります。
    3. それ以外の場合、[値] < 128 の場合は次のようになります。
      • 次の[値+1]バイトを読み取って出力する
      • [値 + 2] バイト前進し、手順 1 に戻ります。
    4. それ以外の場合、[値] = 128、ループを終了(解凍を停止)

圧縮ルーチンでは、2バイトの繰り返しランは、前後にリテラルランが続く場合を除き、繰り返しランとしてエンコードするのが最適です。リテラルランが続く場合は、3つのリテラルランを1つのリテラルランにまとめるのが最善です。3バイトを超える繰り返しは、常に繰り返しランとしてエンコードしてください。[ 4 ]

CAMG: アミガモード

CAMGチャンクはCommodore 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遅延秒色の変化間隔(秒)
INT32BE遅延S色の変化間隔(遅延時間の合計を取得するために delaySecに追加されます)
INT16BEパディング0x0000

このデータはCRNGチャンクに似ています。プログラムはおそらく、カラーサイクルデータを表現するのにこれら2つの方法のうちどちらか一方だけを使用するでしょう。もしこの情報をDeluxePaintとGraphicraftの両方に伝えたい場合は、両方を書き出すことができます。[ 4 ]

DEST: ビットプレーン結合

オプションプロパティ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: ホットスポット

オプションのGRABチャンクは、画像の左上隅を基準とした「ハンドル」または「ホットスポット」の位置を指定します。例えば、マウスカーソルや「ペイントブラシ」として使用する場合などです。これはオプションです。[ 4 ]

タイプ名前説明
INT16BE×画像の左上隅を基準としたホットスポットのX座標(ピクセル単位)
INT16BEy画像の左上隅を基準としたホットスポットのY座標(ピクセル単位)

SPRT: Zオーダー

SPRTチャンク、画像がスプライトであることを示します。したがって、マスクプレーンまたは透明色を持つ必要があり、フルスクリーン表示はできません。この処理方法は、画像を使用するプログラムによって異なります。ここに格納されるデータはスプライトの順序のみです。多くのプログラムでは、この順序に基づいてスプライトをフォアグラウンドに配置します(順序1のスプライトは順序0のスプライトの後ろに表示されるなど)。これはオプションです。[ 4 ]

タイプ名前説明
UINT16BE注文画像の Z オーダー (0 は前景に最も近く、数字が大きいほど遠く/後ろになります)

TINY: サムネイル

TINYチャンクには Deluxe Paintを含む様々なグラフィックプログラム用の小さなプレビュー画像が含まれています。圧縮されており、BODYチャンクと形式は似ています。

タイプ名前説明
UINT16BEサムネイルの幅(ピクセル単位)
UINT16BE身長サムネイルの高さ(ピクセル単位)
バイト[]データピクセルデータは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(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ファイルで機能するユーティリティのほとんどは、 MacPaintDeluxe Paintなど、かなり時代遅れです。IrfanViewファイルを表示でき、非商用で無料で、Linuxで動作します。Netpbm、ILBMから独自のPPM形式[ 5 ]に画像を変換したり、その逆を行うことができます。[ 6 ] Deluxe Paintに触発されたGrafX2 ピクセルアートグラフィックエディタは、ILBMファイルの読み込みと保存ができますが、最大256色に制限されているため、HAMまたは24ビットのILBM画像ではすべての色が表示されません。ImageMagickとGraphicsMagickは Netpbmの ilbmtoppmおよびppmtoilbmユーティリティがインストールされていれば、ILBM画像を表示および変換することもできます。

参照

参考文献

  1. ^ Jerry Morrison (1985年1月14日). 「EA IFF 85: 交換フォーマットファイルの標準」 .エレクトロニック・アーツ. 2014年3月6日閲覧
  2. ^ジェリー・モリソン (1986年1月17日) .「ILBM」IFFインターリーブビットマップエレクトロニック・アーツ。 2014年6月13日時点のオリジナルよりアーカイブ。 2014年3月6日閲覧
  3. ^ James D. Murray、William vanRyper 1996年4月)。『Encyclopedia of Graphics File Formats, Second EditionO'Reilly。ISBN 1-56592-161-5. 2014年2月27日閲覧
  4. ^ a b c d e f g h i j k l m n o p q r s t u v w x y z「ILBM IFFインターリーブドビットマップ」 2012年6月8日。 2018年7月30日閲覧
  5. ^ジェフ・ポスカンザー;インゴ・ウィルケン(2014年11月12日)。"ilbmtoppm" 2019年6月13日に取得
  6. ^ジェフ・ポスカンザー;インゴ・ウィルケン(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 は特に注目すべき点です。シェアウェア版にはバグがあり、ファイルを開くだけで評価版のシャットダウンをスキップできてしまうためです(つまり、ショートカットを常にファイルを開くように変更すれば、この問題は発生しません)。