我的最终目标是多次写入图像数据文件和花费的时间。这可用于生成时间与强度的关系图。
为此,我试图使用ImageWriteImageDataToStream()
函数将一维图像及时地重复写入文件流。为此,我将一个Listener对象附加到正在读取的相机视图上,然后该侦听器执行一个函数,该函数每次数据更改(ImageWriteImageDataToStream()
时,使用messagemap = "data_changed:MyFunctiontoExecute"
将图像写入文件流。
我的问题是,是否可以将时间戳记写入同一文件流?
我能找到的是StreamWriteAsText(),它采用String数据类型。我可以将数字类型的时间转换为字符串类型吗?
有人有更好的方法吗?
目前我的解决方案是同时创建一个单独的文件,并使用WriteFile()记录时间,因此不使用文件流。
//MyFunctiontoExecute, where Img is the 1D image at the current time
My_file_stream.StreamSetPos(2,0)
ImageWriteImageDataToStream(Img, My_file_stream, 0)
//Write the time to the same file
Number tmp_time = GetHighResTickCount() - start_time
My_file_stream.StreamSetPos(2,0)
My_file_stream.StreamWriteAsText(0,tmp_time) //does not work
//instead using a different file
WriteFile(My_extrafileID,tmp_time+"/n")
答案 0 :(得分:1)
我认为您的流媒体概念是错误的。当流传输到文件时,在toStream()
命令的末尾,流位置已经在末尾 em>。因此,您无需设置位置。
您的脚本实质上是告诉计算机将流 back 设置到该起始位置,然后写入文本-覆盖数据。
在阅读过程中要跳过某些部分时,仅需要使用“ StreamSetPos()”命令(例如,在为特定文件格式定义导入脚本时很有用。或者仅从文件中提取特定子集。 )。
如果您要做的只是“流出一些原始数据” ,则您可以这样做:只需依次调用命令即可:
void WriteDataPlusDateToStream( object fStream, image img, string dateStr )
{
number endian = 0
number encoding = 0
img.ImageWriteImageDataToStream(fStream,endian)
fStream.StreamWriteAsText(encoding,dateStr)
}
类似地,您只需按照相同的顺序“流式” :
void ReadDataPlusDateFromStream( object fStream, image img, string &dateStr )
{
number endian = 0
number encoding = 0
img.ImageReadImageDataFromStream(fStream,endian)
fStream.StreamReadTextLine(encoding,dateStr)
}
这里有两点很重要:
ImageReadImageDataFromStream
中的是图像img
的大小和数据类型,它定义了从流中读取多少字节以及如何解释它们。因此,img
必须已经预先创建并且大小和文件类型合适。
StreamReadTextLine
中的流将继续以文本形式 读取,直到遇到行尾字符({{1} })或流的结尾。因此,在流式传输时,请确保写该行结束符。另外,您可以确保字符串始终具有特定大小,然后使用\n
并指定适当的长度。
使用上述两种方法,您可以使用以下测试脚本作为起点:
StreamReadAsText
请注意,像这样流式传输“二进制数据”时,定义文件格式的是 you 。您必须确保读写代码匹配。