问题描述
||
我知道您必须在这里IndexIndexOfOfBoundsException加载,并且我通常不会发布有关它的内容,但是我在尝试使用以下代码将数组解析为调色板时遇到了它。当i = 0且palette.Length = 768时,它将引发异常,我看不到原因,并且我确定此代码之前可以工作:
ColorPalette palette1 = bmp.Palette;
for (int i = 0; i < palette.Length; i += 3)
{
if (i != 0)
{
Color b = Color.FromArgb(255,palette[i],palette[i + 1],palette[i + 2]);
palette1.Entries[i/3] = b;
}
else
{
Color b = Color.FromArgb(255,palette[i + 2]);
palette1.Entries[i] = b;
}
}
bmp.Palette = palette1;
以下代码可以工作,但是在单独的函数中使用了较小的调色板:
ColorPalette palette1 = bmp.Palette;
for (int i = 0; i < 48; i += 3)
{
if (i != 0)
{
Color b = Color.FromArgb(255,palette[i + 2]);
palette1.Entries[i / 3] = b;
}
else
{
Color b = Color.FromArgb(255,palette[i + 2]);
palette1.Entries[i] = b;
}
}
bmp.Palette = palette1;
解决方法
您的循环变量
i
受palette.Length
限制,但是您正在尝试分配给palette1
。不能保证palette1
与palette
具有相同的长度,我的猜测是长度不一样-因此您遇到了问题。