2016-08-21 10 views
0

デコードしようとしているパレットがありますが、特定のビット値を正しく引き算する方法を理解できないため、常に失敗します。私はいつも狂った価値観で終わります。私は必要なコンポーネント上の2つのバイトを分割することができますどのようにABBBBBGG GGGRRRRRの2バイト形式から色成分を読み取る方法は?

enter image description here

PS:答えが言語に依存しないため、C++タグを追加しました。

答えて

3

たとえば、byte b1byte b0の2バイトを取得します。次のように

これはおそらく行われることになります。もちろん

byte b0 = clr_bytes[0]; 
byte b1 = clr_bytes[1]; 

このすべては、あなたのパレットのエンディアンに依存します。

byte b0 = clr_bytes[1]; 
byte b1 = clr_bytes[0]; 

次のように次に、あなたのコンポーネントを計算することができます:

byte a = b1 >> 7; 
byte b = (b1 >> 2) & 0x1f; 
byte g = ((b1 & 0x3) << 3) | (b0 >> 5); 
byte r = b0 & 0x1f; 
+0

ありがとうございました、それはあなたが反対のことをしようとする必要があるかもしれません。これは少なくとも0〜255の値を与えます。しかし、私がエンディアンを切り替えるときでさえ、イメージはまだ間違った色をしています。 – Kosmos

+0

これは他の問題が原因である可能性があります。例えば、私は 'colors.Add(px); 'で何を達成しようとしているのか分かりません。あなたは一度に1つの問題に取り組むことをお勧めします。まず、ABBBBBGG GGGRRRRRフォーマットを 'a'、' b'、 'g'、' r'に正しくデコードできることを確認してください。その後、それ以降に起こることをトラブルシューティングします。 –

+1

入手しました。これで、デコードされた色をリストに追加するだけです。後で私は8bppインデックスカラーであるビットマップを読むでしょう。 256色のパレット。そこで何が起こるのか理解しようとします。 – Kosmos

関連する問題