索引超出了关于位图的数组范围

时间:2014-02-18 17:50:07

标签: c# arrays bitmap indexing

我有将字节数组转换为位图的代码..(在我的项目中我不能使用MemoryStream或其他位图转换器。)

这是我的代码。

public static Bitmap ConvertBitMap(int width, int height, byte[] imageData)
        {
            var data = new byte[width * height * 4];
            int o = 0;

            for (var i = 0; i < width * height ; i++)
            {
                var value = imageData[i];


                data[o++] = value;
                data[o++] = value;
                data[o++] = value;
                data[o++] = 0;
            }
           ...
           ...
           ..
           ..
}

当我运行应用程序时,我说“System.IndexOutOfRangeException:索引超出了数组的范围。”

这是arrayData信息:

data   ------>     {byte[614400]}

imageData --->     {byte[105212]}

请问有人帮我解决这个问题吗?我该如何处理这个外界问题?

2 个答案:

答案 0 :(得分:1)

我不确定为什么会这样,但问题是imageData大小不等于width*height

这段代码应该修复它(虽然它可能不是你想要它做的)

public static Bitmap ConvertBitMap(int width, int height, byte[] imageData)
        {
            var data = new byte[imageData.Length * 4];
            int o = 0;

            for (var i = 0; i < imageData.Length ; i++)
            {
                var value = imageData[i];


                data[o++] = value;
                data[o++] = value;
                data[o++] = value;
                data[o++] = 0;
            }
           ...
           ...
           ..
           ..
}

答案 1 :(得分:1)

此处的问题是imageData的长度小于height * width。因此,您最终会在此行上获得例外,因为i大于imageData.Length

var value = imageData[i];

考虑您在问题中发布的尺寸

  • 数据:614400
  • imageData:105212

data的大小计算为height * width * 4,因此我们可以通过除以height * width来计算4,最后得到height * width == 153600。这明显大于105212,因此您最终会访问数组边界

相关问题