【发布时间】:2025-11-28 20:20:15
【问题描述】:
我有将字节数组转换为位图的代码。(在我的项目中,我不能使用 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]}
能否请任何人帮助我解决此问题?我该如何处理这个外部边界问题?
【问题讨论】:
-
每次你做 o++ 它都会增加。您将超出数据范围。您正在尝试访问数据[o^4]
-
@AMR 但 imageData 比 data 大 6 倍? ..那么我该如何解决它应该删除o++?
-
每次 o++ 后写出 o 的值,看看最后爆炸的时候是什么大小。
-
我认为这与 data 是 6x imageData 的事实有关,而不是您设置的 4x。我认为 imageData 不等于 width*height ...我认为访问 imageData[i] 而不是 data[o++] 时发生异常
-
它认为我的 ImageData 超过 105.212 但我正在递增到 153.600 .... 所以这是我猜的问题..