【问题标题】:Why do I get an Index out of Range exception when copying a Byte array into a Struct array? [duplicate]将 Byte 数组复制到 Struct 数组时,为什么会出现 Index out of Range 异常? [复制]
【发布时间】:2014-01-04 08:41:17
【问题描述】:

我有以下代码用于将字节数组的内容复制到结构数组中。但是,当我使用它时,我收到“索引超出范围异常”。怎么了?

public struct pix 
{ 
    public byte b; 
    public byte g; 
    public byte r;
};

namespace ConsoleApplication4
{ 
    class Program
    {
       static  byte[] bmp = File.ReadAllBytes("D:\\x.bmp"); 
       static pix[,] img; 
       static void Main(string[] args)
       {
           int wi = 320; 
           int hi = 240; 
           int i=54; 
           img = new pix[wi-1, hi-1];

           Console.Write(bmp.Length-54); 

           for (int y = hi-1; y > 0; y--)
           {
               for (int x = wi-1; x > 0; x--)
               {
                   img[x,y].b = bmp[i]; 
                   img[x,y].g = bmp[i + 1]; 
                   img[x,y].r = bmp[i + 2];

                   i = i + 3; 
               }       
          } 

    }
}

【问题讨论】:

  • bmp[i + 1]; -- i 在哪里?
  • @Digital_Reality int hi 在同一行之后
  • 调试代码的时候出现在哪一行的异常?
  • @jamesakadamingo 在这行:"img[x,y].b = bmp[i];"

标签: c# arrays struct bmp


【解决方案1】:

您似乎对 i 的值有疑问

实际上,您的循环从 320/240 减少,并且每次将 i 增加 3!从 54 开始。所以看起来它很快就会超出 img 的范围

for (int y = hi-1; y > 0; y--)
{
    for (int x = wi-1; x > 0; x--)
    {
        i = i + 3;
    }    
}

另外,img 分配更改为以下。

img = new pix[wi, hi];

【讨论】:

  • 他好像在读位图,所以i 不太可能越界,我猜
【解决方案2】:

您创建一个长度为 wi - 1hi - 1 的数组

img = new pix[wi-1, hi-1];

此数组的有效索引分别为 0 - wi-20 - hi-2

然后你在wi-1hi-1 开始你的循环,从而访问刚好在其边界之外的数组。可能您只是想将数组分配更改为new pix[wi, hi]

【讨论】:

    猜你喜欢
    • 2022-08-20
    • 1970-01-01
    • 2023-03-27
    • 2015-02-11
    • 2022-11-28
    • 1970-01-01
    • 1970-01-01
    • 2019-12-30
    • 1970-01-01
    相关资源
    最近更新 更多