1

ライブラリを使用せずにピクセル値からRGB チャネルを取得する 画像から読み取った各ピクセル
の RGB チャネルを取得しようとしています。イメージから各バイトを読み取って getchar を使用します。Webで少し検索した後、たとえば、36バイトの後に色データが始まるBMPを見つけました。各チャンネルは8ビットで、RGB全体は赤の8ビット、緑の8ビット、および青の 8 ビット。私の質問は、ピクセル値からそれらを抽出する方法ですか? 例えば:

pixel = getchar(image);

それらのチャネルを抽出するにはどうすればよいですか? さらに、JAVA でこの例を見ましたが、C++ で実装する方法がわかりません。

int rgb[] = new int[] {
(argb >> 16) & 0xff, //red
(argb >>  8) & 0xff, //green
(argb      ) & 0xff  //blue
};

argb は、前に述べた「ピクセル」変数だと思います。
ありがとう。

4

2 に答える 2

0

シングルバイトを読み取る場合、フォーマットのエンディアンに依存します。考えられる方法は 2 つあるため、これはもちろん常に一貫性がないため、両方の方法を記述し、読み取りは疑似関数として行います。

RGBA:

int r = readByte();
int g = readByte();
int b = readByte();
int a = readByte();

ABGR:

int a = readByte();
int b = readByte();
int g = readByte();
int r = readByte();

エンコード方法は、ファイル形式のレイアウト方法によって異なります。また、BGRA と ARGB の順序と平面 RGB も確認しました (各チャネルは、幅 x 高さのバイトの個別のバッファーです)。

ウィキペディアには、BMP ファイルがどのように見えるかについてのかなり良い概要があるようです: http://en.wikipedia.org/wiki/BMP_file_format

もう少し複雑に思えるので、自分で作成するのではなく、ライブラリを使用することを強くお勧めします。

于 2013-05-26T22:49:07.537 に答える