アットウィキロゴ

非圧縮 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