Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 索引超出了位图数组的边界_C#_Arrays_Bitmap_Indexing - Fatal编程技术网

C# 索引超出了位图数组的边界

C# 索引超出了位图数组的边界,c#,arrays,bitmap,indexing,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;

我有把字节数组转换成位图的代码。。(在我的项目中,我不能使用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;
            }
           ...
           ...
           ..
           ..
}

你能帮我解决这个问题吗?我如何处理这个越界问题

我不确定为什么会发生这种情况,但问题是imageData大小不等于
width*height

这段代码应该可以修复它(尽管它可能不是您希望它做的事情)

公共静态位图转换位图(整数宽度、整数高度、字节[]图像数据)
{
var data=新字节[imageData.Length*4];
INTO=0;
对于(var i=0;i
这里的问题是
imageData
的长度小于
height*width
。因此,您最终会在此行中得到一个异常,因为
i
大于
imageData.Length

var value = imageData[i];
考虑一下你在问题中发布的尺寸

  • 数据:614400
  • 图像数据:105212

数据的大小
被计算为
高度*宽度*4
,因此我们可以通过除以
4
来计算
高度*宽度
,结果是
高度*宽度==153600
。这显然大于
105212
,因此每次执行o++时,都会访问数组边界之外的对象。您将超出数据范围。您正试图访问数据[o^4]@AMR,但imageData比data?大6倍。。那么我该如何解决这个问题呢?我应该删除o++?在每次o++之后,写出o的值,看看它最终爆炸时的大小。我认为这与数据是6x imageData,而不是您设置的4x有关。我认为图像数据不等于宽度*高度。。。我认为当访问imageData[I]而不是data[o++]时会发生异常。我认为imageData在105.212,但我的值会增加到153.600。。。。我想这就是问题所在。。
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;
            }
           ...
           ...
           ..
           ..
}
var value = imageData[i];