Image Format
- このページは
- 圧縮アルゴリズム
- dxtc
- 3dc
- clut
- vq
- ファイルフォーマット
- ppm
- pgm
- pbm
- pfm
- ppm 変換
- ppm サンプルコード
- JPEG
- bitmap
- png
- png
- tga
- dds(direct draw surface)
- 用語
- 参考文献・参考ウェブページ
- 履歴
画像フォーマットについてのメモ。
DXTC はテクスチャ圧縮技術。
本当はs3tc というべきだが、デファクトスタンダードな用語のdxtc で統一する。
MSDNの日本語訳は一部わかりにくいために良く注意する必要がある。例えばボリューム、スライス、3D という用語がが入り乱れているように見える。
- 圧縮率は1/4 から 1/6
- 4x4 の量子化単位
- 2次圧縮が可能
- DirectX の標準の圧縮形式
- OpenGL でもローダがサンプルコードとして出ている。
- カラー補間擬似コード(DXT012345)
color0, color1 は16bit のRGB(5:6:5)
if(color0>color1)
{
// dxt0
color2 = (color0*1 + color1*2)/3;
color3 = (color0*2 + color1*1)/3;
}
else
{
// dxt1
color2 = (color0 + color1)/2;
color3 = 0.0f;
}
- アルファ補間擬似コード(DXT45)
alpha0, alpha1 は8bit
if(alpha0>alpha1)
{
alpha2 = (alpha0*6 + alpha1*1)/7;
alpha3 = (alpha0*5 + alpha1*2)/7;
alpha4 = (alpha0*4 + alpha1*3)/7;
alpha5 = (alpha0*3 + alpha1*4)/7;
alpha6 = (alpha0*2 + alpha1*5)/7;
alpha7 = (alpha0*1 + alpha1*6)/7;
}
else
{
alpha2 = (alpha0*4 + alpha1*1)/5;
alpha3 = (alpha0*3 + alpha1*2)/5;
alpha4 = (alpha0*2 + alpha1*3)/5;
alpha5 = (alpha0*1 + alpha1*4)/5;
alpha6 = 0.0f;
alpha7 = 1.0f;
}
種 | サイズ | 内容 | 用途 |
DXT0 | 64bit |
1bit alpha。4 段階補間。通常これはDXT1 に含まれる。 |
アルファ値を0か1でもつテクスチャ用 |
DXT1 | 64bit |
1bit alpha。3 段階補間。アルファ値が0を持つ。 |
アルファ値を0か1でもつテクスチャ用 |
DXT2 | 128bit |
4bit alpha をPerPixel でもつ。RGBにアルファが適用済みとみなされる。 |
アルファ値が急激に変化するフォント向け。
DXT3 でアルファを普通に適用する方が使いやすい。 |
DXT3 | 128bit |
4bit alpha をPerPixel でもつ。 |
アルファ値が急激に変化するフォント向け。 |
DXT4 | 128bit |
アルファ値を補間して使う。
アルファ値は8bitx2を補間して8つにする。
RGBにアルファが適用済みとみなされる。 |
アルファ値がゆっくり変化するグラデーション画像など。
DXT5 でアルファを普通に適用する方が使いやすい。 |
DXT5 | 128bit |
アルファ値を補間して使う。
アルファ値は8bitx2を補間して8つにする。 |
アルファ値がゆっくり変化するグラデーション画像など。
もっとも汎用的なDXT フォーマット。 |
- データ配置(カラー)
color0 rgb 565 bit, color1 rgb 565 bit, index 2bit x 16
- データ配置(DXT23アルファ)
alpha 4bit x 16
- データ配置(DXT45アルファ)
alpha0 8bit, alpha1 8bit, alpha index 3bit x 16
参考ウェブページ
3DC は法線マップのための圧縮技術。
2006年現在、ATI のみの技術。
Color look Up Table の略。
4bit CLUT は16色のコードブックもち、index は1 テクセル4bit。
8bit CLUT は256色のコードブックをもち、index は1 テクセル8bit。
基本的にレガシーのフォーマット。
VQ(VectorQuantalization) 圧縮はCLUT のコードブックが1x1 ではなく2x2 や4x4 などに取れる拡張版。
木目などのパターンが続く画像に有効。
PPM とはportable pixmap の略。
ppm は単純なファイルフォーマット。ascii またはraw フォーマットに幅、高さと色深度が加わった程度のもの。
シンプルなのでとても使いやすい。
6 種のバリエーションがある。
ヘッダ
|
データ種類
|
内容
|
拡張子
|
P1
|
アスキー
|
2 値
|
pbm
|
P2
|
char x 1
|
pgm
|
P3
|
char x 3
|
ppm
|
P4
|
バイナリ
|
2 値
|
pbm
|
P5
|
char x 1
|
pgm
|
P6
|
char x 3
|
ppm
|
PGM とはPortable GrayMap の略。
グレイスケール画像など。
PBM とはPortable BitMap の略。
PFM とはPortable Float Map の略。
http://local.wasp.uwa.edu.au/~pbourke/dataformats/pbmhdr/
他のフォーマットにしたいときにはImage Magic のconvert を使うと便利。
$ convert test.ppm test.bmp
$ convert test.ppm test.jpg
ppm を生成するための簡単なC のシンプルなサンプルコード。
これを使うと、いろんなリファレンスの画像を簡単に作るのに便利。
グラデーションの画像が出るようにしている。
[Download] ppm-generate.cpp
参考ウェブページ
http://www.mm2d.net/c/c-08.shtml
http://en.wikipedia.org/wiki/Portable_pixmap
参考http://www02.so-net.ne.jp/~koujin/jpeg/jpeg.html
DeviceIndependentBitmap の代表的なフォーマット。
扱う際の注意点としては32bit の対応はまちまちで
24bit までしか保障されていない場合がある。
# Windows などそうらしい。
参考ウェブページ
http://www.kk.iij4u.or.jp/~kondo/bmp/
Portable Network Graphics
参考ウェブページ
http://www.jah.ne.jp/~naoyuki/Writings/MngPng.html
http://www5.cds.ne.jp/~kato/png/
Multiple-image Network Graphics
png のアニメーション形式。フォーマットが複雑らしい。
参考ウェブページ
http://www.jah.ne.jp/~naoyuki/Writings/MngPng.html
TGA (Targa) 形式はTruevison社のグラフィックボードで使用されていた画像形式。
TGA形式はフルカラー用だが、いくつか異なるタイプがあるようだ。
おもに24bit RGB と32bit RGBA。
アルファチャネルが扱えることからよく3D で使う。
18 バイト目からデータが始まるので決め打ちで18バイト目からデータを見たりできる。
# 24bit 32bit の違いなどをヘッダから読み取って処理をわけたほうがよい。
参考ウェブページ
デコード資料
仕様
Direct Draw Surface
- T.B.D.
- 2006/08/05 追記
- 2006/03/11 修正
- 2004/00/00 初版作成
|