У меня есть этот код:Как я могу найти, что делает исключение: IndexOutOfRangeException?
private void FindPoints()
{
try
{
GraphicsPath gp = new GraphicsPath();
int x, y, p, j, wdthHght;
int bytes;
byte[] rgbValuesWithClouds;
byte[] rgbValuesWithoutClouds;
IntPtr ptr;
Rectangle rect;
BitmapData bitmap_Data;
Bitmap bmpWithClouds; //No memory is allocated
Bitmap bmpWithoutClouds; //No memory is allocated
gp.AddEllipse(new RectangleF(73, 72, 367, 367));
using (bmpWithClouds = new Bitmap(mymem))
{
rect = new Rectangle(0, 0, bmpWithClouds.Width, bmpWithClouds.Height);
wdthHght = bmpWithClouds.Width;
bitmap_Data = bmpWithClouds.LockBits(rect, ImageLockMode.ReadWrite, bmpWithClouds.PixelFormat);
ptr = bitmap_Data.Scan0;
bytes = bitmap_Data.Stride * bmpWithClouds.Height;
rgbValuesWithClouds = new byte[bytes];
System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValuesWithClouds, 0, bytes);
bmpWithClouds.UnlockBits(bitmap_Data);
}
su = System.IO.Directory.GetCurrentDirectory();
using (bmpWithoutClouds = new Bitmap(su + "\\WithoutClouds.bmp")) //24 bit bitmap
{
rect = new Rectangle(0, 0, bmpWithoutClouds.Width, bmpWithoutClouds.Height);
bitmap_Data = bmpWithoutClouds.LockBits(rect, ImageLockMode.ReadWrite, bmpWithoutClouds.PixelFormat);
ptr = bitmap_Data.Scan0;
bytes = bitmap_Data.Stride * bmpWithoutClouds.Height;
rgbValuesWithoutClouds = new byte[bytes];
System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValuesWithoutClouds, 0, bytes);
bmpWithoutClouds.UnlockBits(bitmap_Data);
}
cloudPoints = new List<Point>();
for (y = 0; y < wdthHght; y++)
{
j = 0;
for (x = 0; x < wdthHght; x++)
{
p = y * wdthHght * 3 + j;
if (rgbValuesWithClouds[p] != rgbValuesWithoutClouds[p])
{
cloudPoints.Add(new Point(x, y));
}
j += 3;
}
}
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
}
Исключение составляет от номера строки 393:
if (rgbValuesWithClouds[p] != rgbValuesWithoutClouds[p])
я попробовать и поймать, но я не могу видеть, что значения p
и rgbValuesWithClouds
и rgbValuesWithoutClouds
есть.
А также что может сделать это исключение?
System.IndexOutOfRangeException был пойман HResult = -2146233080 Message = Индекс находился вне границ массива. Источник = Моя метеостанция StackTrace: at mws.ScanningClouds.FindPoints() в d: \ C-Sharp \ Download File \ Download-File-Project-Version-012 \ Загрузка файла \ ScanningClouds.cs: строка 393 InnerException :
Возможно, вы захотите сравнить 'p' с размером' bytes', посмотреть на шаг и т. Д. Вы говорите, что не видите значения 'p' и т. Д. - не отображаются ли они в отладчике? –
Установите точку останова в строке 392 (эта строка: p = y * wdthHght * 3 + j;) и запустите в режиме отладки, теперь найдите значение p, а затем значение rgbValuesWithClouds.length (размер байта array rgbValuesWithClouds) и rgbValuesWithoutClouds.length (размер байтового массива rgbValuesWithoutClouds). Это должно предоставить больше информации. –
[Отлаживайте этот код для меня вопросы] (http://meta.stackexchange.com/questions/125384/debug-this-code-for-me-questions) – MickyD