值转换HEX (u16)到RGB565(每种颜色为Int32)



我正在使用一个带有RGB565彩色显示器的旧设备。我们没有问题显示颜色的单位,但我们希望创建一些新的功能,所以我们想要模拟我们的测试程序的显示。这意味着,而不是从颜色转换到U16十六进制值…我们正在尝试将颜色转换为相同的U16十六进制值。

不幸的是,处理位移位的人不在我们身边,因为我对颜色和位移位很垃圾……我希望这里有人能看到下面的函数,并确切地知道如何做相反的。

THANKS IN ADVANCE

下面是从RGB565(每种颜色为Int32)到HEX (u16)的代码:

private byte[] ConvertRGB888COLORtoU16HEXasRGB565COLOR(Color color)
{
byte[] ReturnByte = new byte[2];
Int32 red;
Int32 green;
Int32 blue;

red = (Int32)Math.Floor(color.R * 31.0 / 255.0);
green = (Int32)Math.Floor(color.G * 63.0 / 255.0);
blue = (Int32)Math.Floor(color.B * 31.0 / 255.0);

byte byte0 = (byte)(((red & 0xFF) << 3) | ((green & 0xFF) >> 3));
byte byte1 = (byte)(((green & 0xFF) << 5) | (blue & 0xFF));
ReturnByte[0] = byte0;
ReturnByte[1] = byte1;    
return ReturnByte;
}

我需要另一种方式的帮助,因为这个Bit Shift的东西对我来说像是胡言乱语。

我不知道如何将上面的内容翻转为备用,以填补下面不完整功能中明显的空白:

private Color ConvertU16HEXasRGB565COLORtoRGB888COLOR(byte BinaryLow, byte BinaryHigh)
{
** // HELP** ================
// BinaryLow & BinaryHigh (somehow)
// BinaryLow & BinaryHigh and form a U16 16-Bit RGB565 value!!
// I NEED PRIMARILY NEED HELP WITH THE OPPOSITE OF:
// byte BinaryLow = (byte)(((Red565 & 0xFF) << 3) | ((Green565 & 0xFF) >> 3));
// byte BinaryHigh = (byte)(((Green56 & 0xFF) << 5) | (R5 & 0xFF));
// TO GET THE BELOW:
// Int32 Red565 = OPPOSITE ABOVE;
// Int32 Green565 = OPPOSITE ABOVE;
// Int32 Blue565 = OPPOSITE ABOVE;
** // HELP** ================
int Red888 = (int) floor(Red565 * 255.0 / 31.0 + 0.5);
int Green888 = (int) floor(Green56 * 255.0 / 63.0 + 0.5);
int Blue888 = (int) floor(Red565 * 255.0 / 31.0 + 0.5);
Color ReturnColor = Color.FromArgb(Red888, Green888, Blue888);
return ReturnColor;
}

你说你不懂位移位。这方面很容易解释:它只是移动二进制值中的字节。

例如,如果我们在a中从0010开始,那么我们得到以下结果:

tbody> <<tr>
Op Result Result as Decimal
00102
& lt; & lt;101004
& lt; & lt;210008
祝辞;比;100011
祝辞;比;200000

相关内容

  • 没有找到相关文章

最新更新