Silicon Graphics Image ( SGI ) またはRGB ファイル形式は、 Silicon Graphicsワークステーションのネイティブラスタグラフィックス ファイル形式です。[ 4 ]この形式はPaul Haeberliによって発明されました。[ 4 ]ランレングスエンコード(RLE)が可能です。FFmpegやImageMagickなどがこの形式をサポートしています。
一般的なファイル拡張子は次のとおりです。
.sgiまたは.rgb.rgba.bwまたは.int.intaこのフォーマットは元々IRIX用に開発されました。SVT High Definition Multi Format Test SetのマスターファイルはSGI です。[ 6 ] [ 7 ] [ 8 ]このセットのParkJoyシーケンスのフレーム 200 (15722.sgi、3840×2160、47.4 MB) がWebP 比較に使用されました。
SGIイメージフォーマットはビッグエンディアン方式を採用しています。画像データは左から右、下から上へと順にスキャンされます。
ファイル署名/マジックナンバー
0x010xdaSGIファイルの場合、同じ値になるはずです。
圧縮
0ファイルが非圧縮の場合。RLE1圧縮の場合。
ピクセルあたりのバイト数(チャンネル)
値は、18ビット/チャンネルの場合です 。162ビット/チャンネルの場合は、この値になります。
寸法
この値は、11チャンネル1スキャンライン画像、21チャンネル複数スキャンライン画像、3複数チャンネル複数スキャンライン画像(最も一般的)のいずれかです。
Xサイズ
スキャンラインの幅(ピクセル単位)。
Yサイズ
画像内の走査線の数。
チャンネル数
画像内のチャンネル数。値はグレースケール画像1の場合、 RGBの場合、RGBAの場合です。SGIは4チャンネル以上をサポートしています。34
最小ピクセル値
すべてのチャンネルの中で最小のピクセル値。SGI はチャンネルにunsigned char または short 型を使用するため、可能な最小値は通常 です0。
最大ピクセル値
全チャンネルにおける最大のピクセル値。SGIはチャンネルにunsigned charまたはshort型を使用するため、最大値は通常、0xff8ビット/チャンネルと0xffff16ビット/チャンネルでそれぞれ異なります。
ダミー
4バイトが未使用です。
画像名
画像名、80バイト(最大79文字≠ 0x00)のC言語文字列。名前が79文字より短い場合、以降のすべてのバイトは0x0080バイトの領域を埋めるために使用されます。
カラーマップID
SGIは4種類のカラーマッピングをサポートしています。
0x00通常: 画像には、1チャンネル(グレースケール)、3チャンネル(RGB)、または4チャンネル(RGBA)があります。0x01ディザリング処理済み:画像はパックされたRGBデータです。最初の3ビットはRチャンネル、次の3ビットはGチャンネル、最後の2ビットはBチャンネルを表します。0x02画面:画像はカラーマップを使用します。ピクセルデータはカラーマップ内のインデックスであり、画像は1つのチャンネルのみを持ちます。0x03カラーマップ:このファイルには1つのカラーマップのデータのみが含まれています(別の画像ファイルに使用できます)。このファイルには画像データは含まれていません。ダミー
404バイト。通常は使用されません。ヘッダーを512バイトの長さに拡張します。
圧縮なし
画像データはファイル内の512バイト目から始まります。データ長は以下のように計算できます。
(Xサイズ)×(Yサイズ)×(チャンネル数)×(チャンネルあたりのバイト数)
データは各チャンネルごとに分離されています。たとえば、画像がRGBAを使用している場合、最初のスキャンラインのセットはRチャンネルを表し、次のスキャンラインのセットはGチャンネル、次にBチャンネル、最後にAチャンネルを表します。したがって、各スキャンラインのセットには、次の式を使用して直接アクセスできます(Cはチャンネルインデックスです)。
(Xサイズ)×(Yサイズ)×(C ÷チャンネル数)×(チャンネルあたりのバイト数)
RLE圧縮
オフセットテーブルは512バイト目から始まります。その長さは以下のように計算できます。
(Yサイズ) × (チャンネル数) × 4バイト長
テーブル内の各符号なし整数は、ファイル先頭からのオフセット値で、各チャンネルの各スキャンラインの圧縮データの開始位置を示します。データは各チャンネルのスキャンラインごとに分離されています。画像がRGBAチャンネルの場合、順序はR、G、B、Aのままです。
次に、データ長テーブルを示します。これも以下の式で計算できます。
(Yサイズ) × (チャンネル数) × 4バイト長
このテーブルには、各スキャンラインの圧縮データのサイズ(符号なし整数)が格納されます。このサイズは、オフセットテーブル内の数値の差と等しくなければなりません。
最後のデータブロックには、RLE圧縮された画像データが格納されます。チャネルあたりのバイト数がの場合1、圧縮データは符号なし文字型になります。それ以外の場合、チャネルあたりのバイト数がの場合2、圧縮データは符号なしショート型になります。圧縮されたスキャンラインデータの最後のバイトの値はです0。
符号なし文字型または符号なしショート型のいずれの場合も、下位7ビットがカウント値を表します。ビット8が0の場合、カウント値はカウントの後の値をコピーした数に掛けた値になります。ビット8が1の場合、カウント値はカウントバイトの後の値をコピーした数に掛けた値になります。2バイト/チャンネルの画像の場合、カウント値と値は符号なしショート型であり、カウント値の最上位バイトは常に0になります。