【发布时间】:2011-04-14 15:47:47
【问题描述】:
我知道您必须在此处加载 IndexOutOfBoundsException,而且我通常不会发布有关它的内容,但我只是在尝试使用以下代码将数组解析为调色板时遇到它。它在 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], palette[i + 1], 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], palette[i + 1], palette[i + 2]);
palette1.Entries[i / 3] = b;
}
else
{
Color b = Color.FromArgb(255, palette[i], palette[i + 1], palette[i + 2]);
palette1.Entries[i] = b;
}
}
bmp.Palette = palette1;
【问题讨论】:
-
代码中的
if/else是不必要的,顺便说一下,因为0/3 == 0。 -
哦,我以为它会抛出 DivideByZero 异常。
-
哪一行抛出异常?
palette和palette1是什么关系? -
@user:你不是除以 0,而是除以 3。
标签: c# arrays image-processing for-loop palette