2016-07-14 3 views
1

各カラーチャンネルを別々に処理するとうまくいく処理アルゴリズムがあります。しかし、私がピクセル値全体を処理しようとすると、物事が忘れられました。結果は良くありません。 3つのカラーチャンネルをピクセル値(アルファを除外)から分離し、新しい値(3つのチャンネル)を処理したいと考えています。 C++でどうすればいいですか?良い解決策ではないRGB_565ビットマップ形式を試したことを知っています。私はRGBを24ビットの変数にマージしたいと思っています。NDK - ARGB_8888ビットマップのアルファのないRGB値を処理する

+0

すでに試したコードを投稿できますか? – gregn3

答えて

1

各チャネルに別々にアクセスできます。正確な方法は、実際のピクセル形式に依存します。

ANDROID_BITMAP_FORMAT_RGBA_8888:各ピクセルは4バイト長で、レイアウトパターンはRGBARGBA ...、つまり1番目のピクセルバイトは赤色コンポーネント、2-dは緑色、3-dは青色、 thはアルファ成分です。

ANDROID_BITMAP_FORMAT_RGB_565

red = (u16_pix >> 11) & 0x1f; 
green = (u16_pix >> 5) & 0x3f; 
blue = (u16_pix >> 0) & 0x1f; 

ANDROID_BITMAP_FORMAT_RGBA_4444:色成分は次のように抽出することができるように、各画素は、ネイティブエンディアンに格納され、2バイトの長さである が原因で低品質で廃止され、あなたはいけませんこれについても考えてください

ANDROID_BITMAP_FORMAT_A_8: は1バイトあたり1バイトで、アルファ専用またはグレースケールの画像用に設計されています。おそらくあなたが探しているものではありません。

Androidは24bppフォーマットではないため、32bppまたは16bppのいずれかを選択する必要があります。あなたのアルゴについて:パックされたピクセル値の中で個々のコンポーネントにコードがアクセスするか、パックされたピクセルをいくつかのプレーン、つまり配列にデインターリーブする2つの方法があります。処理後、サポートされているフォーマットの1つに再度インターリーブしたり、興味のある他のフォーマットに変換したりすることができます。

関連する問題