- 精华
- 0
- 帖子
- 35
- 威望
- 0 点
- 积分
- 35 点
- 种子
- 5 点
- 注册时间
- 2014-11-24
- 最后登录
- 2022-8-3
|
楼主 |
发表于 2014-11-26 08:09 · 江苏
|
显示全部楼层
xjsxjs197 发表于 2014-11-25 21:10
Wii方面的图像处理代码我都了解,但是GVR格式的就不懂了。
估计需要看源代码了,我家里得先下个VS2014,不 ...
VS2012就能打开PUYOTOOL的代码。
我看了下它的ENCODE和DECODE似乎有点不同。我贴出来。
我调试了viewer的decode过程。原文件是的数据段编码应该是Intensity 4-bit with Alpha。
public override byte[] Decode(byte[] input, int offset, int width, int height, VrPixelCodec PixelCodec)
{
byte[] output = new byte[width * height * 4];
for (int y = 0; y < height; y += 4)
{
for (int x = 0; x < width; x += 8)
{
for (int y2 = 0; y2 < 4; y2++)
{
for (int x2 = 0; x2 < 8; x2++)
{
output[((((y + y2) * width) + (x + x2)) * 4) + 3] = (byte)(((input[offset] >> 4) & 0x0F) * 0xFF / 0x0F);
output[((((y + y2) * width) + (x + x2)) * 4) + 2] = (byte)((input[offset] & 0x0F) * 0xFF / 0x0F);
output[((((y + y2) * width) + (x + x2)) * 4) + 1] = (byte)((input[offset] & 0x0F) * 0xFF / 0x0F);
output[((((y + y2) * width) + (x + x2)) * 4) + 0] = (byte)((input[offset] & 0x0F) * 0xFF / 0x0F);
offset++;
}
}
}
}
return output;
}
public override byte[] Encode(byte[] input, int width, int height, VrPixelCodec PixelCodec)
{
int offset = 0;
byte[] output = new byte[width * height];
for (int y = 0; y < height; y += 4)
{
for (int x = 0; x < width; x += 8)
{
for (int y2 = 0; y2 < 4; y2++)
{
for (int x2 = 0; x2 < 8; x2++)
{
int loc = ((y + y2) * width) + (x + x2);
byte entry = (byte)(((0.30 * input[loc + 2]) + (0.59 * input[loc + 1]) + (0.11 * input[loc + 0])) * 0x0F / 0xFF);
entry = (byte)(((((input[loc + 3]) * 0x0F / 0xFF) & 0x0F) << 4) | (entry & 0x0F));
output[offset] = entry;
offset++;
}
}
}
}
return output;
}
} |
|