非圧縮 RGB ビデオ サブタイプとはDirectShowでメディアタイプ構造体を利用するときに設定するための定数です。
以下の定数を指定することによって取得出来るメモリフォーマットが異なります。
| GUID |
説明 |
| MEDIASUBTYPE_RGB1 |
RGB、1 ピクセルにつき 1 ビット (1 bpp)。パレット化されている。 |
| MEDIASUBTYPE_RGB4 |
RGB、4 bpp。パレット化されている。 |
| MEDIASUBTYPE_RGB8 |
RGB、8 bpp。 |
| MEDIASUBTYPE_RGB555 |
RGB 555、16 bpp。 |
| MEDIASUBTYPE_RGB565 |
RGB 565、16 bpp。 |
| MEDIASUBTYPE_RGB24 |
RGB、24 bpp。 |
| MEDIASUBTYPE_RGB32 |
RGB、32 bpp。アルファ チャンネルなし。 |
| MEDIASUBTYPE_ARGB32 |
RGB、32 bpp。アルファ チャンネルあり。 |
ここではMEDIASUBTYPE_RGB24とMEDIASUBTYPE_ARGB32について説明します。
MEDIASUBTYPE_RGB24について
メモリに格納され方
| 型 |
バイト数 |
一つのポインタの中身 |
実際の入り方 |
| long |
4 |
0xRRGGBBCC (RGBは256階調の色データ。Cは次のピクセルのカラー) |
0xRRGGBBRR,0xGGBBRRGG |
4バイトにRGBの24bitを格納するとlongの型には1バイト余ってしまいます。
そのため、最後の1バイトには次のピクセルのカラーが詰められていると思います(予想)
また、それぞれの色にアクセスしたい場合は分解する必要があります。
サンプル
サンプルはめんどくさいので省略
欲しかったら、コメントください。書いておきます。
MEDIASUBTYPE_ARGB32について
メモリに格納され方
| 型 |
バイト数 |
一つのポインタの中身 |
実際の入り方 |
| long |
4 |
0xAARRGGBB (RGBは256階調の色データ。Aはアルファ値) |
0xAARRGGBB |
これは先ほどと違って、1つポインタをずらすと1ピクセルずれます。
↑よりもアクセスが簡単になります。
サンプル
char r,g,b,a;
long data; //既にここには何か格納されてると仮定する
for(int y=0;y<height;y++){
for(int x=0;x<width;x++){
a = (data>>24) - 0xFFFFFF00; //ずれた部分にはFが入っている
r = (data>>16) - 0xFFFF0000 - a;
g = (data>>8) - 0xFF000000 - a - r;
b = data - (a+r+g);
}
}
コメント
- ありがとう!すごく参考になります(汗) -- 荒川 (2010-05-24 22:39:25)
最終更新:2010年05月24日 22:43