2013-11-27 4 views
1

Я хочу преобразовать строку в растровое изображение или что-то, что я могу показать в пиксельном ящике.Преобразование строки в растровое изображение в C#

Моя строка выглядит следующим образом:

string rxstring = "010010010020020020030030030040040040050050050060060060070070070080080080090090090100100100110110110120120120130130130140140140150150150160160160“ 

Это не проблема, чтобы стереть код RGB в строке

("01002003004005060070080090100110120130140150160"); 

Я только это нужно, чтобы показать, то не важно, [так]

IDE: VS2010 C#

+1

Как вы получаете данные строчки вашего изображения? –

+0

Я прочитал его через последовательный порт COM от моего Arduino –

+0

Является ли это базой? –

ответ

1

при продолжении обзора, я понял, что строка ваш получать не байт ar лучей. Это создает квадрат растрового изображения и позволяет устанавливать значения пикселей по пикселям.

List<string> splitBytes = new List<string>(); 
string byteString = ""; 
foreach (var chr in rsstring) 
     { 
      byteString += chr; 

      if (byteString.Length == 3) 
      { 
       splitBytes.Add(byteString); 
       byteString = ""; 
      } 
     } 

     var pixelCount = splitBytes.Count/3; 
     var numRows = pixelCount/4; 
     var numCols = pixelCount/4; 

     System.Drawing.Bitmap map = new System.Drawing.Bitmap(numRows, numCols); 

     var curPixel = 0; 
     for (int y = 0; y < numCols; y++) 
     { 
      for (int x = 0; x < numRows; x++) 
      { 
       map.SetPixel(x, y, System.Drawing.Color.FromArgb(
        Convert.ToInt32(splitBytes[curPixel * 3]), 
        Convert.ToInt32(splitBytes[curPixel * 3 + 1]), 
        Convert.ToInt32(splitBytes[curPixel * 3 + 2]))); 

       curPixel++; 
      } 
     } 
     //Do something with image 

EDIT: внесены исправления в последовательности строк/столбцов в соответствии с изображением, показанным выше.

+0

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

+0

Спасибо, что этот код работает без ошибок с моим жало. –

+0

Имейте в виду, что чем больше, тем сложнее изображение, тем дольше этот код будет выполняться. –

1

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

List<byte> splitBytes = new List<byte>();    
string byteString = ""; 

foreach (var chr in testString) 
{ 
    byteString += chr; 

    if (byteString.Length == 3) 
    { 
     splitBytes.Add(Convert.ToByte(byteString)); 
     byteString = ""; 
    } 
} 

if (byteString != "") 
    splitBytes.AddRange(Encoding.ASCII.GetBytes(byteString)); 

using (var ms = new MemoryStream(splitBytes.ToArray())) 
{ 
    var img = System.Drawing.Image.FromStream(ms); 

    //do something with image. 
} 

EDIT: Добавлен обновленный код. Это было протестировано путем загрузки собственного изображения и преобразования байтов в строку, а затем преобразования их обратно в массив байтов с использованием вышеуказанного кода, и я успешно загрузил изображение из строки.

string testString = "255216255224000016074070073070000001001001000096000096000000255225000104069120105102000000077077000042000000000008000004001026000005000000000001000000000062001027000005000000000001000000000070001040000003000000000001000002000000001049000002000000000018000000000078000000000000000000000096000000000001000000000096000000000001080097105110116046078069084032118051046053046049049000255219000067000002001001002001001002002002002002002002002003005003003003003003006004004003005007006007007007006007007008009011009008008010008007007010013010010011012012012012007009014015013012014011012012012255219000067001002002002003003003006003003006012008007008012012012012012012012012012012012012012012012012012012012012012012012012012012012012012012012012012012012012012012012012012012012012012012012012012012255192000017008000004000004003001034000002017001003017001255196000031000000001005001001001001001001000000000000000000000000001002003004005006007008009010011255196000181016000002001003003002004003005005004004000000001125001002003000004017005018033049065006019081097007034113020050129145161008035066177193021082209240036051098114130009010022023024025026037038039040041042052053054055056057058067068069070071072073074083084085086087088089090099100101102103104105106115116117118119120121122131132133134135136137138146147148149150151152153154162163164165166167168169170178179180181182183184185186194195196197198199200201202210211212213214215216217218225226227228229230231232233234241242243244245246247248249250255196000031001000003001001001001001001001001001000000000000000000001002003004005006007008009010011255196000181017000002001002004004003004007005004004000001002119000001002003017004005033049006018065081007097113019034050129008020066145161177193009035051082240021098114209010022036052225037241023024025026038039040041042053054055056057058067068069070071072073074083084085086087088089090099100101102103104105106115116117118119120121122130131132133134135136137138146147148149150151152153154162163164165166167168169170178179180181182183184185186194195196197198199200201202210211212213214215216217218226227228229230231232233234242243244245246247248249250255218000012003001000002017003017000063000252225248089251085248195193031007060033030133127054137107121166121143107103121116176043069052182202085076167111238224143056234193152252204073040162128063255217"; 

EDIT: добавлен образец строки изображения, который я использовал для проверки вышеуказанного кода.

+0

Это будет работать, но все же будет его бессмысленный образ. – woutervs

+1

Из того, что я могу сказать, преобразование массива байтов изображений в строку - это то, что искажает данные. Теоретически вышеуказанный код должен работать, но при тестировании сама строка при преобразовании в массив байтов не является допустимым массивом байтов, который может загружать класс Image. –

+0

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

8

Боюсь, что данные, которые вы получаете, не являются значимым изображением. Если вы разделите данные на группы по три. Вы получаете следующее:

010 
010 
010 
020 
020 
020 
030 
030 
030 
040 
040 
040 
050 
050 
050 
060 
060 
060 
070 
070 
070 
080 
080 
080 
090 
090 
090 
100 
100 
100 
110 
110 
110 
120 
120 
120 
130 
130 
130 
140 
140 
140 
150 
150 
150 
160 
160 
160 

Если посмотреть на эти данные, нет никакого способа, вы можете преобразовать это изображение, которое будет на самом деле что-то значат для нас. Это будет коллекция из 48 пикселей. Содержащий вид градиента, как изображение (так как ниже числа следуют образцу, который постоянно растет.

Нам бы нужно больше информации для отладки это. (Как и то, что компонент предоставляет данные и т.д.)

Update Это то, что я получаю, когда я конвертировать ваши данные в пикселях (принять во внимание я уже увеличен каждый пиксель 16x16)

Result when assembling the data

+0

Кроме того, преобразование указанной строки в текст дает вам: (((222 <<< FFFPPPZZZdddnnnxxx – woutervs

+0

это piture с 4x4 пиксельной ведьмой, которые хотят показать серым цветом на пиксельном ящике i знаю, что вы не можете много увидеть, но через какое-то время будет больше пикселей, тогда я получу лучший termal camara. –

+0

Я обновил свой ответ с помощью масштабированного изображения результата ваших данных. Это должно быть в 16 раз меньше, поэтому оно невидимо для – woutervs

Смежные вопросы