如何ASCII阵列(图像)转换为一个字符串(How to convert ASCII array (

2019-09-29 06:49发布

我的元数据存储在一个HDF5文件中的8位无符号的数据集。 导入到DM后,成为1×长度尺寸的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
}

这逐个像素的操作实在是有点慢! 是否有任何其他更快的方法做这项工作?

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

请注意,您可以创建链接到光盘文件流和,只要你知道字节的起始位置,从文件中读取直接为好。



文章来源: How to convert ASCII array (image) to a single string