c# - 当索引不在范围之外时,Bitmap Palette会抛出索引超出范围的异常

时间:2011-04-14 15:47:47

标签: c# arrays image-processing for-loop palette

我知道你必须在这里加载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;

1 个答案:

答案 0 :(得分:1)

您的循环变量ipalette.Length限制,但您尝试分配给palette1。我无法保证palette1的长度与palette相同,我的猜测是它没有 - 因此是您的问题。