c#-当索引不超出范围时,位图调色板会抛出索引超出范围的异常

问题描述

|| 我知道您必须在这里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
具有相同的长度,我的猜测是长度不一样-因此您遇到了问题。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...