Targaファイルについて

Targaファイルについて、特にαチャンネル付き32bitフォーマットについてのメモ.(98/11/19)

とりあえず今回はフォトショップに習って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まで☆