0

Я пытаюсь отладить код и запустить его в этом System.IndexOutOfRangeException. Может ли кто-нибудь помочь мне, как его решить. Посмотрите на изображение, где происходит исключение. Он успешно считывает первую строку «Линейный массив», но когда дело доходит до исключения второй строки. Исключение происходит, когда я = 1 и у = 0.
Здесь:как обращаться с System.IndexOutOfRangeException

(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; 
     } 

    } 
} 
+0

кажется линии [1] = string.Empty –

+1

Нет, потому что '.RemoveEmptyEntries'. Я думаю, 'lines.Length == 1' –

+0

Я согласен с @HenkHolterman. Это может произойти, например, если в строке 'text' есть -------' \ r \ n \ r \ n' (обратите внимание на пустое пространство) – Pikoh

ответ

1

Попробуйте заменить

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]; - вы можете увидеть его на втором изображении

+0

Это, вероятно, связано с Сплитом, но это всего лишь косметическое изменение. –

+0

Это не помогло. говорит неверный аргумент. –

+0

@EhsanUlHaq, могу ли я получить значение текстовой переменной от вас? На ваших вторых линиях изображения [0] есть много строк, может быть, проблема есть? строки [0] должны быть первой строкой в ​​изображении, строки [1] - второй ... –