C# RGB 16位精灵(按位)

C# RGB 16位精灵(按位),c#,bitwise-operators,C#,Bitwise Operators,我们正在改装一个16位的旧游戏机墨盒。我们希望在游戏中注入一些我们自己的精灵,让我们的脚趾浸入水中 为此,我们正在开发一个应用程序,既可以显示精灵,也可以将新精灵转换为十六进制(以便于注入) 游戏将单个像素存储为两位十六进制值(0x0~0xFFFF)。游戏使用逐位移位来建立单独的红色、绿色和蓝色。为了证实这一点,我们不得不从Sprite资源社区返回一些旧文档。这证实使用了两个口罩 我们的显示功能工作得很好。函数接收十六进制,然后返回一个包含3个值的数组:R、G、B 在小组中,我们没有任何人特别擅

我们正在改装一个16位的旧游戏机墨盒。我们希望在游戏中注入一些我们自己的精灵,让我们的脚趾浸入水中

为此,我们正在开发一个应用程序,既可以显示精灵,也可以将新精灵转换为十六进制(以便于注入)

游戏将单个像素存储为两位十六进制值(0x0~0xFFFF)。游戏使用逐位移位来建立单独的红色、绿色和蓝色。为了证实这一点,我们不得不从Sprite资源社区返回一些旧文档。这证实使用了两个口罩

我们的显示功能工作得很好。函数接收十六进制,然后返回一个包含3个值的数组:R、G、B

在小组中,我们没有任何人特别擅长按位移位。我们正在寻求帮助将3“int”颜色转换回原来的单2位十六进制


回答!!谢谢

首先,您确定要在计算中使用
~

colorRGB0R=~((HexPixelValue>>11)和PixelMask1>5)和PixelMask2)=256)
抛出新ArgumentOutOfRangeException(nameof(绿色));
如果(蓝色<0 | |蓝色>=256)
抛出新ArgumentOutOfRangeException(nameof(blue));
//红色&0xF8切断要保存的底部3位
//绿色&0xFC切断底部2位
//无论如何,蓝色需要向右移动,所以我们用它来切断3位
返回((红色和0xF8)3);
}

是的,[code]~[code]必须反转每一位。存储在保存数据中的大多数游戏值/值是反向的(aka FF是0而不是255)。如原主题中所述,上述按位读取盒带中的精灵是100%正确的。该公式已经从游戏的来源以及为该系列制作精灵表的各种人那里得到了确认。这是非选择性的。