如何将 ASCII 数组(图像)转换为单个字符串
How to convert ASCII array (image) to a single string
我的元数据存储在 HDF5 文件中的 8 位无符号数据集中。导入DM后,变成1*length维度的2D图像。每个"pixel"存储对应值的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
}
这种逐像素操作真的很慢!有没有其他更快的方法来完成这项工作?
是的,有更好的方法。你真的想看看原始数据流的章节:
如果您将原始数据保存在 "stream" 对象中,您可以以任何您喜欢的形式读取和写入它。所以你的问题的解决方案是
- 创建流
- 将"image"添加到流中(写入二进制数据)
- 将蒸汽位置重置为开始
- 读出二进制数据一个字符串
这是代码:
{
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)
}
请注意,您可以创建链接到光盘文件的流,并且如果您知道以字节为单位的起始位置,也可以直接从文件中读取。
我的元数据存储在 HDF5 文件中的 8 位无符号数据集中。导入DM后,变成1*length维度的2D图像。每个"pixel"存储对应值的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
}
这种逐像素操作真的很慢!有没有其他更快的方法来完成这项工作?
是的,有更好的方法。你真的想看看原始数据流的章节:
如果您将原始数据保存在 "stream" 对象中,您可以以任何您喜欢的形式读取和写入它。所以你的问题的解决方案是
- 创建流
- 将"image"添加到流中(写入二进制数据)
- 将蒸汽位置重置为开始
- 读出二进制数据一个字符串
这是代码:
{
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)
}
请注意,您可以创建链接到光盘文件的流,并且如果您知道以字节为单位的起始位置,也可以直接从文件中读取。