如何处理 System.IndexOutOfRangeException
how to handle System.IndexOutOfRangeException
我正在尝试将代码和 运行 调试到此 System.IndexOutOfRangeException 中。有人可以帮助我如何解决它。请查看发生异常的图像。它成功读取了 "Line Array" 的第一行,但是当涉及到第二行时发生异常。当 i =1 且 j= 0 时出现异常。
这里是:
(Image of Exception)(Image of Line Array)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Drawing.Imaging;
namespace Handwriting.SVMs
{
static class Features
{
/// <summary>
/// Extracts an image from a text containing the
/// image representation as binary 0s and 1s.
/// </summary>
///
public static Bitmap Extract(string text)
{
Bitmap bitmap = new Bitmap(32, 32, PixelFormat.Format32bppRgb);
string[] lines = text.Split(new String[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < 32; i++)
{
for (int j = 0; j < 32; j++)
{
if (lines[i][j] == '0')
bitmap.SetPixel(j, i, Color.White);
else bitmap.SetPixel(j, i, Color.Black);
}
}
return bitmap;
}
/// <summary>
/// Extracts a feature vector representation from
/// an image, "flattening" a binary image into an
/// array of 0s and 1s.
/// </summary>
///
public static double[] Extract(Bitmap bmp)
{
double[] features = new double[32 * 32];
for (int i = 0; i < 32; i++)
for (int j = 0; j < 32; j++)
features[i * 32 + j] = (bmp.GetPixel(j, i).R == 255) ? 0 : 1;
return features;
}
/// <summary>
/// Converts a feature vector containing 0s and 1s
/// representing each pixel in the image back into
/// an image.
/// </summary>
///
public static Bitmap Export(double[] features)
{
Bitmap bitmap = new Bitmap(32, 32, PixelFormat.Format32bppRgb);
for (int i = 0; i < 32; i++)
for (int j = 0; j < 32; j++)
{
double v = features[i * 32 + j];
v = 255 - Math.Max(0, Math.Min(255, Math.Abs(v) * 255));
bitmap.SetPixel(j, i, Color.FromArgb((int)v, (int)v, (int)v));
}
return bitmap;
}
public static double[] Preprocess(Bitmap bitmap)
{
double[] features = new double[64];
for (int m = 0; m < 8; m++)
{
for (int n = 0; n < 8; n++)
{
int c = m * 8 + n;
for (int i = m * 4; i < m * 4 + 4; i++)
{
for (int j = n * 4; j < n * 4 + 4; j++)
{
Color pixel = bitmap.GetPixel(j, i);
if (pixel.R == 0x00) // white
features[c] += 1;
}
}
}
}
return features;
}
}
}
尝试替换
string[] lines = text.Split(new String[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
来自
string[] lines = text.Split(Environment.NewLine, StringSplitOptions.RemoveEmptyEntries);
此外,您必须确保 text
至少包含 32 个非空行,每行 32 个字符。如果 Split
的更改对您没有帮助,那么它是 text
变量中的问题。
从你的描述来看好像没有lines[1];
你所有的线都放在 lines[0];
- 你可以在第二张图片中看到它
我正在尝试将代码和 运行 调试到此 System.IndexOutOfRangeException 中。有人可以帮助我如何解决它。请查看发生异常的图像。它成功读取了 "Line Array" 的第一行,但是当涉及到第二行时发生异常。当 i =1 且 j= 0 时出现异常。
这里是:
(Image of Exception)(Image of Line Array)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Drawing.Imaging;
namespace Handwriting.SVMs
{
static class Features
{
/// <summary>
/// Extracts an image from a text containing the
/// image representation as binary 0s and 1s.
/// </summary>
///
public static Bitmap Extract(string text)
{
Bitmap bitmap = new Bitmap(32, 32, PixelFormat.Format32bppRgb);
string[] lines = text.Split(new String[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < 32; i++)
{
for (int j = 0; j < 32; j++)
{
if (lines[i][j] == '0')
bitmap.SetPixel(j, i, Color.White);
else bitmap.SetPixel(j, i, Color.Black);
}
}
return bitmap;
}
/// <summary>
/// Extracts a feature vector representation from
/// an image, "flattening" a binary image into an
/// array of 0s and 1s.
/// </summary>
///
public static double[] Extract(Bitmap bmp)
{
double[] features = new double[32 * 32];
for (int i = 0; i < 32; i++)
for (int j = 0; j < 32; j++)
features[i * 32 + j] = (bmp.GetPixel(j, i).R == 255) ? 0 : 1;
return features;
}
/// <summary>
/// Converts a feature vector containing 0s and 1s
/// representing each pixel in the image back into
/// an image.
/// </summary>
///
public static Bitmap Export(double[] features)
{
Bitmap bitmap = new Bitmap(32, 32, PixelFormat.Format32bppRgb);
for (int i = 0; i < 32; i++)
for (int j = 0; j < 32; j++)
{
double v = features[i * 32 + j];
v = 255 - Math.Max(0, Math.Min(255, Math.Abs(v) * 255));
bitmap.SetPixel(j, i, Color.FromArgb((int)v, (int)v, (int)v));
}
return bitmap;
}
public static double[] Preprocess(Bitmap bitmap)
{
double[] features = new double[64];
for (int m = 0; m < 8; m++)
{
for (int n = 0; n < 8; n++)
{
int c = m * 8 + n;
for (int i = m * 4; i < m * 4 + 4; i++)
{
for (int j = n * 4; j < n * 4 + 4; j++)
{
Color pixel = bitmap.GetPixel(j, i);
if (pixel.R == 0x00) // white
features[c] += 1;
}
}
}
}
return features;
}
}
}
尝试替换
string[] lines = text.Split(new String[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
来自
string[] lines = text.Split(Environment.NewLine, StringSplitOptions.RemoveEmptyEntries);
此外,您必须确保 text
至少包含 32 个非空行,每行 32 个字符。如果 Split
的更改对您没有帮助,那么它是 text
变量中的问题。
从你的描述来看好像没有lines[1];
你所有的线都放在 lines[0];
- 你可以在第二张图片中看到它