0

你好,

简单但不容易的问题——我想——对你们来说,伙计们。

在我第一次重制的视频游戏中,我遇到了 16 bbp RGB655 格式的纹理(不,不是 565、655!)。我通过对 IrfanView 中的原始数据进行尝试和错误发现这是格式。所以 IrfanView 可以正常阅读,但不能以那种格式保存。>:( <-(WTF)

因此,我最近一直在尝试寻找可以以该格式保存/导出图像文件的任何东西;

GIMP 和 Photoshop 甚至可以很好地解释原始数据,并且导出选项同样糟糕。

在谷歌方面,我似乎得到的只是一些随机的 BS,在我的问题的同一主题中模糊不清(以及一个很酷的多色激光设备)。

所以我最不需要的是可以以那种格式(RGB 655)保存/导出的东西?

或者......如果它存在,则可能......在一个操作中大量操作位,例如:

从 [R5 R4 R3 R2 R1 R0 G4 G3 G2 G1 G0 B4 B3 B2 B1 B0] 到 [R5 R4 R3 R2 R1 R0 0 0] [G4 G3 G2 G1 G0 0 0 0] [B4 B3 B2 B1 B0 0 0 0]

在这种情况下,输入格式是奇数 RGB655 格式,输出是非常标准的 24bpp RGB 格式。但当然,我最需要做的实际操作是相反的。拥有这个“位操纵器”会更加多价。未来肯定会有许多其他问题可以用这样的软件来解决。(顺便说一句,我所拥有的十六进制编辑器并没有像那样远程做任何事情。)

提前致谢。

4

1 回答 1

0

为什么不自己转换数据?您可以通过执行以下操作将 RGB655 转换为每通道 8 位 RGB:

uint16_t* nextPixel = dataPtr; // dataPtr is a pointer to the first 655 pixel
for (y = 0; y < imageHeight; y++)
{ 
    for (x = 0; x < imageWidth; x++)
    {
        uint16_t inPixel = *nextPixel;
        nextPixel++;
        uint8_t red = ((inPixel & 0xFC00) >> 10) & 0x003F;
        uint8_t green = ((inPixel & 0x03E0) >> 5) & 0x001F;
        uint8_t blue = (inPixel & 0x001F);
        //... do whatever you need to to store the new pixel...
    }
}
于 2013-05-28T02:50:43.393 回答