很抱歉,这是一个无助但原始海报的问题,但我正在尝试将 Ultima 4 的 SHAPES.EGA 转换为 Texture2D。SHAPES.EGA 中的每个字节代表 2 个像素,共有 256 个 16x16 图形。我需要将它们放在一个正方形中,因为 XNA 的 Reach 配置文件不支持高于 2048 的图像尺寸,无论实际图像大小如何。下面的代码让我得到了我想要的第一行,但所有其他行都不能正常工作。(假设它继续这种模式,第 17 行看起来就像第 2 行应该看起来的样子。)我已经为此工作了几个小时,但此时我一无所获。
int cur_size = 16;
GFX.SHAPES_EGA = new Texture2D(GraphicsDevice, cur_size * 16, cur_size * 16);
Color[] temparray = new Color[(cur_size * 16) * (cur_size * 16)];
int CurrentIndex = 0, foo;
for (int Vertical = 0; Vertical < cur_size * 16; Vertical++) //16
{
for (int Horizontal = 0; Horizontal < 16; Horizontal++)
{
for (int CurByte = 0; CurByte < 8; CurByte++)
{
//foo = (Vertical * (cur_size / 2)) + (Horizontal * 8 * cur_size) + CurByte;
foo = (Vertical * (cur_size / 2)) + (Horizontal * 8 * cur_size) + CurByte;
//Console.WriteLine((CurrentIndex * 2) + "+" + foo);
temparray[(CurrentIndex*2)] = Basic.EgaToColor((File_SHAPES_EGA[foo] >> 4) & 0x0F);
temparray[(CurrentIndex*2) + 1] = Basic.EgaToColor(File_SHAPES_EGA[foo] & 0x0F);
CurrentIndex++;
}
}
}
GFX.SHAPES_EGA.SetData(temparray);