2017-04-04 3 views
1

私はPS2ゲームのエディタを作成しています。 そして、このゲームは色の2つの "システム"を持っています。 0〜255C#5bitRGBのtextBoxにcolorDialog値を送る方法は?

そしてまたはそれが5bitRGB Rだと思う:

"正常" RGB R:0 G〜255:0〜255 B 0 G 31:31 B 0:0 31.

に、ゲームの色変化を作るために、 Iは、例えば16進で colorDialogで選択された値を変換する必要があり:R:255、G:176、B:15 進数ではFFB00Fスタンド。

その後、これらの値をHexで3バイトの「スロット」に変更します。

ビューティはこれまでのところとても良いですが、5bitRGBは2バイトの「スロット」しか持っていません。

例:5bitRGB R:31 G:0 B:0 Hex 1F80。

これは私が何をすべきかわからないところです。なぜなら通常のRGBの色は なので、16進で値をtextBoxに送ることができるからです。

次に、これらの値textBoxをHex経由で3バイトの「スロット」に保存しました。

5bitRGBのスロットは、Hexで変更します 2バイトの「スロット」のみです。

変換されたcolorDialogの値を5bitRGB に2バイトで送る必要がありますが、これは本当に可能ですか?

答えて

0

だから私は変換されたcolorDialog値をtextboxの2bitで5bitRGBに送る必要がありますが、これは本当に可能ですか?

確かに! 5ビット×3フィールド= 15ビット、2バイト= 16ビットである。あなたは余裕を残していますが、それほど多くはありません。

各フィールドの解像度の低下を処理するのと同じように思えます。これは、8ビットの各フィールドを5ビットのフィールドに減らすビット単位のシフト操作で行うことができます。

ストレージの値を5ビットのフィールドとして右にシフトする必要があります。また、Colorプロパティを設定するための8ビット(バイト)フィールドとして使用する値を左シフトすることもできますが、これは5ビット値の8ビット表現であり、解像度の損失は5にシフトすることに注意してくださいビットは維持されます。解決策の喪失に対処するための大会を決める必要があります。何もすることはできません。例えば

// 8-bit color values 
byte rValue = 255; 
byte gValue = 127; 
byte bValue = 63; 

// set color 
pictureBox1.BackColor = Color.FromArgb(rValue, gValue, bValue); 

// 5-bit color values 
var rBits = new BitArray(5, false); 
var gBits = new BitArray(5, false); 
var bBits = new BitArray(5, false); 

// bit position comparison operator 
byte op = 0x80; 

// convert to 5-bit arrays 
for (int i = 0; i < 5; i++) 
{ 
    if (rValue > op) { rBits[i] = true; rValue -= op; } 
    if (gValue > op) { gBits[i] = true; gValue -= op; } 
    if (bValue > op) { bBits[i] = true; bValue -= op; } 
    op >>= 1; 
} 

byte rRetrieved = 0; 
byte gRetrieved = 0; 
byte bRetrieved = 0; 

// bit position comparison operator 
op = 0x80; 

// convert back to 8-bit bytes 
for (int i = 0; i < 5; i++) 
{ 
    if (rBits[i]) { rRetrieved += op; } 
    if (gBits[i]) { gRetrieved += op; } 
    if (bBits[i]) { bRetrieved += op; } 
    op >>= 1; 
} 

// set color - note loss of resolution due to shifting 
pictureBox1.BackColor = Color.FromArgb(rRetrieved, gRetrieved, bRetrieved); 
関連する問題