Растровая палитра выбрасывает исключение индекса за пределами границ, когда индекс не выходит за пределы - PullRequest
0 голосов
/ 14 апреля 2011

Я знаю, что вы должны загрузить здесь исключение 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 Ответ

1 голос
/ 14 апреля 2011

Ваша переменная цикла i ограничена palette.Length, но вы пытаетесь присвоить palette1. Нет никакой гарантии, что palette1 имеет ту же длину, что и palette, и я предполагаю, что это не так, поэтому ваша проблема.

...