Targaファイルについて
Targaファイルについて、特にαチャンネル付き32bitフォーマットについてのメモ.(98/11/19)
- TGAには2種類あって、Version2.0はフッターが付いている。αチャンネルは本当はVersion2.0でだけサポートされてて、更にエクステンションエリア(フッター)でそれを示す事が必要。旧Targaファイルの32bitフォーマットは本来、Truevisionのビデオカードで24bitRGBを高速表示するためのインタリーブ形式だった。
しかし、Media Studio PROのVideo Paintは旧版の只の32bitをαチャンネル付き、として使用している。0は透明で255が不透明。
フォトショップ4.0.1は、αチャンネルは全て0の32bit Targa Version2.0ファイルを作る。ただし、エクステンションエリアは付いていない。
- Version2.0 資料の入手先はTruevisionのFTPサイト配下のこの辺
しかし、ここから入手したTGA_FFS.RTFは何故かWindows98のワードパッドでは読めなかった。クイックビューワーやWindows95のワードパッドでは読める。95のワードパッドでセーブし直すと98のワードパッドでも読める様になる。
- 因みにTARGAフォーマットはランレングス圧縮もサポートしているが、圧縮TARGAを出力するアプリケーションを見たことは無い。
- 画像データは画面左下から始まり右上で終わる。上下逆なので注意(いやホントは左上→右下も有り、だけど、実際には余り使われてないので上下逆が安全)。
- ヘッダーフッターで意味不明な所はとりあえず0で埋めるといいらしいぞ。
- AnimeStudioIIは32bitαチャンネル付きTARGAを扱えるらしい。実績があるのはAnilaPaintが出力する32bitTARGA。問題はAnilaPaintの使い方が謎な事
- 意外なことに、一番まともに透明度付きTargaを扱えるのはウルトラキッドVer2.0だった。但し読みこみだけ。
- 1ピクセル内のデータの並び、ドキュメントではARGBだが、フォトショップ、ビデオペイントの出力をバイナリエディタで除くとBGRAになっている様に見える。ま〜実際作って見れば分かることだけど。キーカラーも同様かもしれない。
とりあえず今回はフォトショップに習ってVer2.0のフッター付き、エクステンションフッター無しにした。以下の構造体を使ってプログラムした所、一応Video Paint,ウルトラキッド V2.0,フォトショップ 4.0で読み込めるTargaファイルの出力に成功した。
#ifndef DEF_TRHEAD
#define DEF_TRHEAD
/* TGAファイルの構造 vesion2.0 (1.0はイメージデータのベタで終了)
ヘッダー
カラーマップ(今回は無し.パレット)
イメージデータ の ベタ
デヴェロッパーエリア(今回は無し.開発情報)
エクステンションエリア
スキャンラインテーブル(今回はなし.プログレッシブ表示の時使用)
ポステージスタンプイメージ(今回はなし.プレビュー用の小さい画像データ)
カラーコレクションテーブル(今回はなし.色修正用48ビットカラーデータ)
フッター
*/
/* エクステンションエリアで使用する日付構造体 */
typedef struct{
short month; /* 月 1-12 */
short day; /* 日 1-31 */
short year; /* 年 1999とか4桁 */
short hour; /* 時 0-23 */
short minute; /* 分 0-59 */
short second; /* 秒 0-59 */
} TGADATE;
/* エクステンションエリアで使用する時刻構造体 */
typedef struct{
short hours; /* 時 0-65536 */
short minute; /* 分 0-59 */
short second; /* 秒 0-59 */
} TGATIME;
/* TARGA Ver2.0 (32bit 無圧縮 αチャンネル付き) ヘッダ−構造体 */
typedef struct {
unsigned char No_ID; /* 0=イメージID無し*/
unsigned char CMap_Type;/* 0=カラーマップ無し */
unsigned char Image_Type;/* 2=無圧縮RGBタイプ 10=圧縮RGBタイプ */
unsigned char CMap_Spec[5]; /* スキップされる*/
unsigned short Ox; /* 画面 左上 X 0固定 */
unsigned short Oy; /* 画面 左上 Y 0固定 */
unsigned short Width; /* 幅 (dot)*/
unsigned short Hight; /* 高さ (dot)*/
unsigned char Pixel; /* Pixel Size. 32=32bit */
unsigned char IDesc_Type; /* 8=TGA32 アトリビュート */
} TGAHEAD;
/* イメージデータ */
typedef struct{
unsigned char blue;
unsigned char green;
unsigned char red;
unsigned char attr; /* 普通は0 */
} TGADAT;
/* エクステンションフッターエリア */
typedef struct {
unsigned short len; /* このエクステンションエリアの長さ 495固定 */
char author[41]; /* 作者名(ASCII NULL STOP必須 使わないなら0で埋める事*/
char comment[81][4]; /* 作者のコメント(80バイト毎にNULLが必要) 使わないなら0で埋める事*/
TGADATE date; /* 作成日付 使わないなら0で埋める事*/
char job[41]; /* 仕事名 (作者名に同じ)*/
TGATIME time; /* 作成時刻 使わないなら0で埋める事*/
char soft[41]; /* ソフトウェアのID (作者名に同じ)
short verNunber; /* バージョンナンバー * 100(1.01なら101) 使わないなら0で埋める事*/
char verLot; /* ロット(ASCII) 使わないならスペースをセット*/
unsigned char keyA; /* キーカラー.画像が無い時のα 全部0なら黒が使われる */
unsigned char keyR; /* キーカラー.画像が無い時の赤 */
unsigned char keyG; /* キーカラー.画像が無い時の青 */
unsigned char keyB; /* キーカラー.画像が無い時の緑 */
unsigned short aspectX; /* ドットのアスペクト比X 0なら無視される*/
unsigned short aspectY; /* ドットのアスペクト比Y 0なら無視される*/
unsigned short gammaN; /* ガンマ値.0.0-10.0*/
unsigned short gammaD; /* ガンマ値.0をセットするとガンマ値指定なしとなる*/
long color_ofs; /* カラーコレクションテーブルの位置.省略なら0 */
long stamp_ofs; /* 省略なら0 */
long scan_ofs; /* 省略なら0 */
char att_type; /* 0:αデータなし 1,2:αデータ無効 3:αチャンネル有効 4:pre-multipliedなαデータ */
} TGAEXT;
/* フッター3 TGAファイルフッターエリア */
typedef struct {
unsigned long Ext_Ofs; /* 0=エクステンションエリアなし それ以外はファイル先頭から、エクステンションエリアまでのバイト数*/
unsigned long Dev_Ofs; /* 0=デヴェロッパーエリアなし 今回は0固定*/
unsigned char Sign[16];/* "TRUEVISION-XFILE"固定 */
unsigned char RFU1; /* "."固定 */
unsigned char RFU2; /* NULL.0 固定 */
} TGAFOOT;
#endif
フリーソフトウェアへ戻る
ホームページへ戻る
お手紙はnekora@mapletown.netまで☆