在我正在编写的程序中,我正在从二进制文件中解析颜色数据,然后将数据添加到Frame对象数组(我自己的类)中。但是,从for
主循环的第75次迭代开始,写入一个临时颜色数组,然后再添加到下一个Frame中,将覆盖Frames数组中的某些现有颜色。
这是写入临时颜色数组的for
循环:
for (int i = 0; i < 16; i++)
{
if (Utils.GetBit(bitMask, 15 - i))
{
ushort stC = 0;
stC |= Convert.ToUInt16(byteArray[byteIndex++] << 8);
stC |= Convert.ToUInt16(byteArray[byteIndex++]);
tcolors[i] = Utils.ST2RGB(stC); //converts Atari ST color to ARGB. when this runs on the 75th iteration of the main for loop, it starts overwriting existing color data in the Frame array
}
}
Utils.ST2RGB
是
public static Color ST2RGB(ushort stC)
{
try
{
byte blue = Convert.ToByte(((stC & 0x007) & 0xff) << 5);
byte green = Convert.ToByte((((stC & 0x070) >> 4) & 0xff) << 5);
byte red = Convert.ToByte((((stC & 0x700) >> 8) & 0xff) << 5);
return Color.FromArgb(red, green, blue);
}
catch
{
return Color.Black;
}
}
这是将临时值添加到数组的新Frame中的代码:
Frame tmpFrame = new Frame();
tmpFrame.clearScreen = tclearScreen;
tmpFrame.colorIndex = tcolorIndex;
tmpFrame.colors = tcolors; // <-------
tmpFrame.hasPalette = thasPalette;
tmpFrame.isIndexed = tisIndexed;
tmpFrame.numOfPolys = tnumOfPolys;
tmpFrame.polygonVerts = tpolygonVerts;
tmpFrame.vertexID = tvertexID;
tmpFrame.vertices = tvertices;
frames[f] = tmpFrame; //'f' is the main for loop iterator
我还将包括一些调试数据。
第75个主循环之后的第一个Frame的颜色数据,用于循环迭代:
首先,临时变量和数组的名称与Frame类中的名称相同,因此我认为这是问题所在,并在临时变量的开头添加了t
。但这并没有改变任何东西。
我非常困惑,因为这不应该发生。关于原因的任何提示或想法?