pam - Netpbm共通の2次元ビットマップ形式
全般
PAM画像形式は、最も基本的な2次元マップ形式です。
これは、さまざまな種類のグラフィックスに使用することを目的としていますが、理論的には、2次元の長方形の配列として配置されたあらゆる種類のデータに使用できます。 実際、別の視点から見ると、これは3次元配列としてデータが配置された形式と見なすこともできます。
「PAM」という名前は、「Portable Arbitrary Map」という語の頭文字を取ったものです。 この語源は、他のNetpbm形式名(PBM、PGM、PPM)と関連付けて考えると、より理解しやすくなります。
この形式は、配列内の特定の場所のデータの意味を定義しません。 これは、視覚画像を表現する赤、緑、青の光の強度である可能性があり、または赤、緑、青のコンポーネントに加えて透明度コンポーネントを含めることもでき、または地球の表面上の場所の年間降水量を含むこともできます。 PAM形式を使用するすべてのプロセスは、さらに形式を定義して、データの意味を指定する必要があります。
PAM画像は、2次元グリッドのタプルを記述します。 タプルは行と列に配置されます。 画像の幅は列の数です。 画像の高さは行の数です。 すべての行は同じ幅であり、すべての列は同じ高さです。 タプルは任意の次数を持つ可能性がありますが、すべてのタプルは同じ次数を持ちます。 タプルの次数は、画像の深度と呼ばれます。 各タプルのメンバーはサンプルと呼ばれます。 サンプルは、ゼロから始まり、ある最大値と呼ばれるmaxvalで終わるスケールに沿った位置を表す符号なし整数です。 maxvalは、画像内のすべてのサンプルで同じです。 すべてのN番目のサンプルの2次元配列は、画像のN番目のプレーンまたはN番目のチャネルと呼ばれます。
基本的な形式はタプルの値を意味的に割り当てませんが、その意味を記述するオプションの文字列が含まれています。 この文字列の内容は、タプルのタイプと呼ばれます。 PAM形式の基本的には、タプルのタイプの内容は任意ですが、形式のユーザーは、特定のPAM形式の実装を識別できるように、慣例によって意味を割り当てることができます。 一部のタプルのタイプは、PAMの公式サブ形式として定義されています。 定義済みのタプルのタイプ を参照してください。
Netpbm形式の複雑な世界
PAM形式とPBM、PGM、PPM、PNMの関係について混乱する場合があります。 そこで、少し説明します。
「PNM」は、実際には形式ではありません。 これは、PBM、PGM、PPM形式をまとめて表現する略称です。 また、これら3つの形式のすべてを処理できる一連のライブラリ関数にもその名前が付けられています。
「PAM」は実際には 4 番目の形式です。しかし、非常に汎用的であるため、PAM 画像で表現できる情報は、PBM、PGM、または PPM 画像で表現できる情報と同じです。実際、Netpbm ライブラリの最新バージョンを使用して PBM、PGM、または PPM を読み取るように設計されたプログラムは、同等の PAM 画像を問題なく読み取ることができ、プログラムは違いに気付くことはありません。
さらに混乱を招くことに、PAM 形式を読み書きするだけでなく、PBM、PGM、および PPM 形式も読み書きする一連のライブラリルーチンが「pam」関数と呼ばれています。これは、後者の形式の方がはるかに古く、一般的であるため、新しいプログラムでもそれらと互換性を持たなければならないためです。ライブラリですべての形式を処理することで、新しいプログラムで最新の PAM 形式を使用することも便利になります。
レイアウト
PAM 形式を正確に読み書きするための便利な方法は、libnetpbm(1) C サブルーチンライブラリを使用することです。
PAM ファイルは、1 つまたは複数の PAM 画像のシーケンスで構成されます。画像の前、後、または間にデータ、区切り文字、またはパディングはありません。
各 PAM 画像は、ヘッダーの後にラスタが続きます。
以下にヘッダーの例を示します。
P7
WIDTH 227
HEIGHT 149
DEPTH 3
MAXVAL 255
TUPLTYPE RGB
ENDHDR
ヘッダーは、改行で終わる ASCII 文字「P7」で始まります。これはマジックナンバーです。
注:xv のサムネイル画像も「P7」マジックナンバーで始まります。(これと PAM は、Netpbm 形式に対する独立した拡張でした)。残りの形式は、PAM と区別しやすいです。
ヘッダーは、任意の数の ASCII テキスト行で続きます。各行は、改行文字で終わり、区切られます。
各ヘッダー行は、ゼロ個以上の空白で区切られたトークンで構成されるか、または「#」で始まります。 「#」で始まる場合、それはコメントであり、この仕様の残りの部分は適用されません。
トークンがゼロ個のヘッダー行は有効ですが、意味はありません。
ヘッダー行のタイプは、最初のトークンによって識別されます。最初のトークンは 8 文字以下です。
ENDHDR これはヘッダーの最後の行です。ヘッダーには、このヘッダー行が正確に 1 つ含まれている必要があります。
HEIGHT 2 番目のトークンは、画像の高さ(行数)を表す 10 進数です。ヘッダーには、このヘッダー行が正確に 1 つ含まれている必要があります。
WIDTH 2 番目のトークンは、画像の幅(列数)を表す 10 進数です。ヘッダーには、このヘッダー行が正確に 1 つ含まれている必要があります。
DEPTH 2 番目のトークンは、画像の深さ(プレーンまたはチャネルの数)を表す 10 進数です。ヘッダーには、このヘッダー行が正確に 1 つ含まれている必要があります。
MAXVAL 2 番目のトークンは、画像の値の最大値 (maxval) を表す 10 進数です。ヘッダーには、このヘッダー行が正確に 1 つ含まれている必要があります。
TUPLTYPE
ヘッダーには、このヘッダー行を任意数だけ含めることができます(ゼロ個も含まれます)。行の残りの部分は、タプルタイプの一部です。行の残りの部分はトークン化されませんが、タプルタイプには、TUPLTYPE トークンの直後または行の最後に空白を含めることはできません。空白以外のものが TUPLTYPE トークンの後に存在する必要があります。
複数の TUPLTYPE ヘッダー行がある場合、タプル型は、各行の値が、ヘッダーに現れる順序で、1つの空白で区切られて連結されたものになります。TUPLTYPE ヘッダー行がない場合、タプル型は空の文字列になります。
ラスターは、画像の各行が、上から下へ順番に連続して配置され、行の前後、または行間に区切り文字がない状態で構成されます。
各行は、行内のすべてのタプルが、左から右へ順番に連続して配置され、タプルの前後、またはタプル間に区切り文字がない状態で構成されます。
各タプルは、タプル内のすべてのサンプルが、順番に連続して配置され、サンプルの前後、またはサンプル間に区切り文字がない状態で構成されます。
各サンプルは、最上位バイトが最初にくる純粋なバイナリ形式の符号なし整数で構成されます。バイト数は、画像の maxval を表現するために必要な最小バイト数です。
ここで言う「改行」とは、ASCII でいうところのラインフィード(LF)のことです。
制約
高さ、幅、奥行き、および maxval は、少なくとも 1 である必要があります。
高さ、幅、および奥行きに定義された最大値はありませんが、画像プロセッサやジェネレータは通常、独自の制限を持っています。
画像の maxval は、65535 を超えることはありません。(この制限が設けられたのは、画像プロセッサを構築する際に、中間演算値が 31 ビットまたは 32 ビットに収まるようにするためです。)2005 年 10 月以前には、特定の制限はありませんでしたが、事実上すべての実装において、常にこの制限が守られてきました。
定義されたタプル型
この仕様では、PAM の特に一般的なアプリケーション向けの公式サブフォーマットを指定するために、いくつかのタプル型が定義されています。フォーマットのユーザーは、独自のタプル型(および独自のサブフォーマット)を定義することもできます。
タプル型は、画像内のタプルのサンプルの意味(符号なし整数)にのみ影響します。サンプルのエンコード方法やタプルのエンコード方法には影響しません。タプル型は、タプルの配列内のタプルの位置の意味に影響を与える場合があります(例:視覚画像では、行 1 のタプルが行の最上部にあることを示す場合があります)。
タプル型は、タプル内のサンプルの数を決定することはありません(これは、代わりに DEPTH ヘッダー行によって決定されます)。タプル型は、特定の DEPTH 値との組み合わせでのみ有効な特定のタプル型があるため、奥行き(タプルあたりのサンプルの数)を暗示すると言えるかもしれません。ただし、ラスターをデコードする際には DEPTH を奥行きとして使用し、奥行きがタプル型と一貫しているかどうかを別途検証するのが良いプログラミングプラクティスです。また、大きすぎる奥行きを許容し、より高い番号のプレーンを無視するのも良いプラクティスです。
PAMは、視覚画像の表現に使用されます。
PAM画像は、通常、より古いPBM、PGM、およびPPM形式で表現される視覚画像を表すために使用されます。
白黒
白黒画像(PBM画像で表現されるもの)は、「BLACKANDWHITE」というタプル型を持ちます。このようなPAM画像は、深さ1、maxval 1を持ち、各タプルには1つのサンプルが含まれ、そのサンプルは0であれば黒、1であれば白のピクセルを表します。maxval、高さ、幅、およびラスター内のタプルの順序は、対応するPBM画像と明確な関係を持ちます。
PBM形式では、サンプル値0は白を意味しますが、PAMでは0は黒を意味することに注意してください。
グレースケール
グレースケール画像(PGM画像で表現されるもの)は、「GRAYSCALE」というタプル型を持ちます。そのようなPAM画像は、深さ1を持ちます。maxval、高さ、幅、およびラスターは、対応するPGM画像と明確な関係を持ちます。
カラー
カラー画像(PPM画像で表現されるもの)は、「RGB」というタプル型を持ちます。そのようなPAM画像は、深さ3を持ちます。maxval、高さ、幅、およびラスターは、対応するPPM画像と明確な関係を持ちます。最初の平面は赤、2番目は緑、3番目は青を表します。
透明度
上記の視覚画像形式には、それぞれ透明度情報を含むバリエーションがあります。そのバリエーションでは、タプル型に「_ALPHA」が追加され(例:RGB_ALPHA)、さらに1つの平面が追加されます。最も番号が大きい平面が、不透明度平面(またはアルファ平面、透明度平面とも呼ばれます)。
この種の画像では、ピクセルで表現される色は、明示的に指定された前景色の組み合わせと、後で識別される背景色の組み合わせです。
不透明度平面以外の平面は、前景色を表します。不透明度平面のサンプルは、ピクセルの光の割合が前景色から来るかを示すことで、ピクセルがどれだけ不透明であるかを示します。残りのピクセルの光は、指定されていない背景色から来ます。
たとえば、GRAYSCALE_ALPHA画像では、平面0が60%の白のグレー色を示し、平面1が25%の不透明度を示すと仮定します。前景色は60%のグレーであり、そのうち25%がピクセルの最終的な色に寄与します。残りの75%は、何らかの背景色から来ます。さらに、ピクセルの背景色が完全な白であると仮定します。次に、ピクセルの色は、90%の白になります。前景の60%の25%と、背景の100%の75%です。
サンプル値は、上記の不透明度割合であり、maxvalに対する割合です。前景色のサンプルとは異なり、ガンマ補正されていないことに注意してください。
インターネットメディアタイプ
PAMのインターネットメディアタイプ(別名:MIMEタイプ、コンテンツタイプ)はIANAに登録されていませんが、この仕様では、より古いNetpbm形式の従来の形式に一貫性を持たせるために、非公式の値image/x-portable-arbitrarymapが割り当てられています。
ファイル名
PAMファイルの名の慣例的な接尾辞は".pam"です。ただし、これは必須ではありません。
関連項目
Netpbm(1), pbm(1), pgm(1), ppm(1), pnm(1), libnetpbm(1)
ドキュメントソース
このマニュアルページは、Netpbmツール'makeman'によってHTMLソースから生成されました。マスタードキュメントは次の場所にあります。
http://netpbm.sourceforge.net/doc/pam.html