我有将字节数组转换为位图的代码..(在我的项目中我不能使用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]}
请问有人帮我解决这个问题吗?我该如何处理这个外界问题?
答案 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];
考虑您在问题中发布的尺寸
data
的大小计算为height * width * 4
,因此我们可以通过除以height * width
来计算4
,最后得到height * width == 153600
。这明显大于105212
,因此您最终会访问数组边界