如何从 dm-script 中的长字符串数据中获取图像
How to get an image from a long string data in dm-script
我想从字符串数据数组中获取图像数据。
下面的脚本运行良好,但速度很慢。
(字符串数据的实际长度比下例中的要长得多。)
我想 for 循环中的像素寻址会花费一些时间。
image str2img(string str)
{
image img:=RealImage("",4,10,1)
string tempstr=str
for(number i=0;i<10;i++)
{
if(find(tempstr,",")!=-1)
{
img[i,0]=tempstr.left(find(tempstr,",")).val()
tempstr=tempstr.right(tempstr.len()-find(tempstr,",")-1)
result(tempstr+"\n")
}else
{
img[i,0]=tempstr.val()
}
}
return img
}
string input="1,2,3,4,5,6,7,8,9,10"
image output=str2img(input)
output.showimage()
然后我写了下面的脚本来使用stream。
但是我得到了错误信息 'Non-numeric text encountered'.
image str2img(string str)
{
TagGroup Tg=NewTagGroup()
Tg.TagGroupSetTagAsString("data",str)
object fstream=NewStreamFromBuffer(0)
TagGroupWriteTagDataToStream(Tg,"data",fstream,0)
fstream.StreamSetPos(0,0)
number bLinesAreRows=1
number bSizeByCount=1
number dtype=2 //2 for real4 (float)
object imgSizeObj = Alloc( "ImageData_ImageDataSize" )
image img := ImageImportTextData( "Imag Name " , fstream , dtype , imgSizeObj , bLinesAreRows , bSizeByCount )
return img
}
string input="1,2,3,4,5,6,7,8,9,10"
image output=str2img(input)
output.showimage()
“ImageImportTextData()”函数是否只对读取保存的文件有效?
或者有什么有效的方法可以从长字符串数据中获取图像?
很好的问题,我喜欢他们的处理方式。
不,ImageImportTextData()
适用于任何流,您将在下面的示例中看到。
但是,如果您希望它计数,该命令要求文本行以换行符结束,并且字符串标签流似乎存在问题。我从不使用它,因为有专门的命令来流式传输文本。
因此,您的固定脚本如下所示:
image str2img(string str)
{
object fstream=NewStreamFromBuffer(0)
fStream.StreamWriteAsText(0,str) // Write text to stream directly
fstream.StreamSetPos(0,0)
number bLinesAreRows=1
number bSizeByCount=1
number dtype=2 //2 for real4 (float)
object imgSizeObj = Alloc( "ImageData_ImageDataSize" )
image img := ImageImportTextData( "Imag Name " , fstream , dtype , imgSizeObj , bLinesAreRows , bSizeByCount )
return img
}
string input="1,2,3,4,5,6,7,8,9,10\n" // Note final line-break if you want to count.
image output=str2img(input)
output.showimage()
我想从字符串数据数组中获取图像数据。 下面的脚本运行良好,但速度很慢。 (字符串数据的实际长度比下例中的要长得多。) 我想 for 循环中的像素寻址会花费一些时间。
image str2img(string str)
{
image img:=RealImage("",4,10,1)
string tempstr=str
for(number i=0;i<10;i++)
{
if(find(tempstr,",")!=-1)
{
img[i,0]=tempstr.left(find(tempstr,",")).val()
tempstr=tempstr.right(tempstr.len()-find(tempstr,",")-1)
result(tempstr+"\n")
}else
{
img[i,0]=tempstr.val()
}
}
return img
}
string input="1,2,3,4,5,6,7,8,9,10"
image output=str2img(input)
output.showimage()
然后我写了下面的脚本来使用stream。 但是我得到了错误信息 'Non-numeric text encountered'.
image str2img(string str)
{
TagGroup Tg=NewTagGroup()
Tg.TagGroupSetTagAsString("data",str)
object fstream=NewStreamFromBuffer(0)
TagGroupWriteTagDataToStream(Tg,"data",fstream,0)
fstream.StreamSetPos(0,0)
number bLinesAreRows=1
number bSizeByCount=1
number dtype=2 //2 for real4 (float)
object imgSizeObj = Alloc( "ImageData_ImageDataSize" )
image img := ImageImportTextData( "Imag Name " , fstream , dtype , imgSizeObj , bLinesAreRows , bSizeByCount )
return img
}
string input="1,2,3,4,5,6,7,8,9,10"
image output=str2img(input)
output.showimage()
“ImageImportTextData()”函数是否只对读取保存的文件有效?
或者有什么有效的方法可以从长字符串数据中获取图像?
很好的问题,我喜欢他们的处理方式。
不,ImageImportTextData()
适用于任何流,您将在下面的示例中看到。
但是,如果您希望它计数,该命令要求文本行以换行符结束,并且字符串标签流似乎存在问题。我从不使用它,因为有专门的命令来流式传输文本。
因此,您的固定脚本如下所示:
image str2img(string str)
{
object fstream=NewStreamFromBuffer(0)
fStream.StreamWriteAsText(0,str) // Write text to stream directly
fstream.StreamSetPos(0,0)
number bLinesAreRows=1
number bSizeByCount=1
number dtype=2 //2 for real4 (float)
object imgSizeObj = Alloc( "ImageData_ImageDataSize" )
image img := ImageImportTextData( "Imag Name " , fstream , dtype , imgSizeObj , bLinesAreRows , bSizeByCount )
return img
}
string input="1,2,3,4,5,6,7,8,9,10\n" // Note final line-break if you want to count.
image output=str2img(input)
output.showimage()