2012-06-26 2 views
1

может кто-нибудь помочь написать метод, который преобразует массив байтов в двумерный массив int ?!конвертировать bytearray в 2-мерный intarray

Я написал, что:

internal int[][] byteToInt(byte[] byteArray) 
    { 
     int width = (int)Math.Sqrt(byteArray.Length); 
     int[][] tmp = new int[width][]; 
     for (int i = 0; i < width; i++) 
     { 
      tmp[i] = new int[width]; 
     } 
     for (int i = 0; i < width; i++) 
     { 
      for (int j = 0; j < width; j++) 
      { 
       tmp[i][j]=(int)byteArray[(i*width+j)]; 
      } 
     } 
     return tmp; 
    } 

, но это не работает должным образом ....

+0

Каковы условия размещения байтового массива в массив 2D int после того, сколько байтов? как управлять номерами строк/номеров столбцов? – Habib

+0

Что происходит, и что вы ожидаете, что это должно произойти? – Dialecticus

+0

Я использую декодер QRCode, который преобразует Bitmap-файл в массив int. Но в WPF Class Bitmap не известен, поэтому я преобразовал Bitmap в bytearray, и теперь я хочу преобразовать bytearray в массив int, чтобы моя программа продолжалась ... – davidOhara

ответ

0

OK Я думаю, это будет делать то, что вы хотите.

Если я правильно понял, вы хотите взять изображение и преобразовать его в двумерный массив значений int RGB.

internal int[,] JpgToInt(String fileName) 
{ 
    Bitmap Bitmap = new Bitmap(fileName); 

    int[,] ret = new int[Bitmap.Width,Bitmap.Height]; 

    for (int i = 0; i < Bitmap.Width; i++) 
    { 
     for (int j = 0; j < Bitmap.Height; j++) 
     { 
      ret[i, j] = Bitmap.GetPixel(i, j).ToArgb(); 
     } 
    } 
    return ret; 
} 

Хотя он не отвечает на главный вопрос, он действительно решает проблему, и решение вопроса не будет иметь.

В ответ на главный вопрос нет возможности произвольно взять массив байтов и превратить его в двумерный массив int, поскольку вы не представляете, каковы будут размеры двумерного массива.

Код, используемый для получения изображения из файла, является правильным способом получить исходный двоичный файл jpg, но он не получает изображение самостоятельно. (см. wikipedia for how jpeg files are formated)

+0

Привет, Alex, yeee, который работает как шарм ... но я не могу использовать класс Bitmap, потому что WPF не знает его ... :( – davidOhara

+0

Как вы его пытаетесь использовать? вам нужно будет иметь ссылку на System.Drawing. –

+0

В WPF у вас нет System.Drawing ... Это моя проблема! – davidOhara

0

Кодекс для преобразования JPG в ByteArray:

public byte[] FileToByteArray(string _FileName) 
    { 
     byte[] _Buffer = null; 

     try 
     { 
      // Open file for reading 
      System.IO.FileStream _FileStream = new System.IO.FileStream(_FileName, System.IO.FileMode.Open, System.IO.FileAccess.Read); 

      // attach filestream to binary reader 
      System.IO.BinaryReader _BinaryReader = new System.IO.BinaryReader(_FileStream); 

      // get total byte length of the file 
      long _TotalBytes = new System.IO.FileInfo(_FileName).Length; 

      // read entire file into buffer 
      _Buffer = _BinaryReader.ReadBytes((Int32)_TotalBytes); 

      // close file reader 
      _FileStream.Close(); 
      _FileStream.Dispose(); 
      _BinaryReader.Close(); 
     } 
     catch (Exception _Exception) 
     { 
      // Error 
      Console.WriteLine("Exception caught in process: {0}", _Exception.ToString()); 
     } 

     return _Buffer; 
    } 
Смежные вопросы