2016-09-27 5 views
1

Мои метаданные хранятся в 8-битном беззнакомом наборе данных в файле HDF5. После импорта в DM он становится двумерным размером 1 * длины. Каждый «пиксель» сохраняет значение ASCII соответствующего значения символу. Для дальнейшей обработки я должен преобразовать массив ASCII в одну строку и далее в TagGroup. Вот глупый метод (пиксель за пикселем) Я в настоящее время делают:Как преобразовать массив ASCII (изображение) в одну строку

String Img2Str (image img){ 
    Number dim1, dim2 
    img.getsize(dim1,dim2) 
    string out = "" 
    for (number i=0; i<dim1*dim2; i++) 
     out += img.getpixel(0,i).chr() 
    Return out 
} 

Этот пиксель-накрест операция действительно очень медленно! Есть ли какой-либо другой более быстрый метод для выполнения этой работы?

ответ

1

Да, есть лучший способ. Вы действительно хотите, чтобы смотреть в главе потокового необработанные данные:

HelpDocumentation

Если удерживать необработанные данные в «поток» объекта, вы можете прочитать и записать его в любой форме вы любите. Таким образом, решение вашей проблемы является

  • Создать поток
  • Добавить в «образ» в потоке (записи двоичных данных)
  • Сброс положения пара начала
  • Считывание двоичного кода данные строка

Это код:

{ 
    number sx = 10 
    number sy = 10 
    image textImg := IntegerImage("Text", 1, 0 , sx, sy) 
    textImg = 97 + random()*26 
    textImg.showimage() 

    object stream = NewStreamFromBuffer(0) 
    ImageWriteImageDataToStream(textImg, stream, 0) 
    stream.StreamSetPos(0,0) 
    string asString = StreamReadAsText(stream, 0, sx*sy) 
    Result("\n as string:\n\t"+asString) 
} 

Обратите внимание, что вы можете создать поток, связанный с файлом на диске, и, если вы знаете начальную позицию в байтах, также читайте из файла.

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

  • Нет связанных вопросов^_^