1

我的元数据存储在 HDF5 文件中的 8 位无符号数据集中。导入DM后,变成1*length维度的2D图像。每个“像素”存储字符对应值的 ASCII 值。为了进一步处理,我必须将 ASCII 数组转换为单个字符串,然后再转换为 TagGroup。这是我目前做的愚蠢方法(逐个像素):

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
}

这种逐像素操作真的很慢!有没有其他更快的方法来完成这项工作?

4

1 回答 1

1

是的,有更好的方法。您真的想查看原始数据流的章节:

帮助文档

如果您将原始数据保存在“流”对象中,则可以以您喜欢的任何形式对其进行读写。所以你的问题的解决方案是

  • 创建流
  • 将“图像”添加到流中(写入二进制数据)
  • 将蒸汽位置重置为开始
  • 读出二进制数据一个字符串

这是代码:

{
    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)
}

请注意,您可以创建一个链接到磁盘上文件的流,并且如果您知道以字节为单位的起始位置,也可以直接从文件中读取。

于 2016-09-27T11:11:46.780 回答