0

我知道您必须在此处加载 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;
4

1 回答 1

1

您的循环变量i以 为界palette.Length,但您试图分配给palette1. 不能保证与palette1具有相同的长度palette,我的猜测是它没有 - 因此你的问题。

于 2011-04-14T15:54:08.953 回答