将纹理格式保存为655

时间:2013-05-28 01:23:54

标签: image format textures pixel rgb

的Bonjour,

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

在我第一次重拍的视频游戏中,我遇到了格式为16 bbp RGB655(不,不是565,655!)的纹理。我发现这是IrfanView中原始数据的try和错误的格式。所以IrfanView可以正常阅读,但不能保证格式化。 > :(&lt ;-( 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格式。 但是,当然,我最需要做的实际操作是相反的。拥有这种“比特操纵器”会更加多元化。在未来中肯定会有许多其他问题可以通过这样的软件解决。 (顺便说一句,十六进制编辑器,我没有像那样远程做任何事情。)

提前致谢。

1 个答案:

答案 0 :(得分: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...
    }
}