2013-03-05 89 views
1

另一位程序员编写了一个我想改进的代码。该模块的目的是从相机获取实时图像流并将其显示在图片窗口中。它通过TCP IP连接进行。下面是它是如何做 获取如何在VB6中读取图像文件流的末尾

Private Sub DataArrival(ByVal bytes As Long) 

Dim str As String 
' check the socket for data 
camera.GetData str 
Dim str As String 

While InStr(str, Terminator) <> 0 

**Do some processing and put only the data in the variable str 

str = Mid(str, index, 1000) 
lImgSize = lImgSize + Len(str) 
strImg = strImg + str 

    If lImageSize >= 1614414 Then 
      Dim fileno As Integer 
      fileno = FreeFile() 
      Open ".\Imagefile.txt" For Output As #intFileNo 
      Print #fileno , strImg 
      Close #fileno 

    End If 

End Sub 

我有一个输入图像流来并将其转换为字符串,我计算的大小来检查图像的末端将其写入到一个文件中。但硬编码值并不能保证文件总是结束。有时如果图像尺寸略小于尺寸,我的图片框不会更新实时图像。编辑: 这是image.txt文件包含的内容。

1 
1575020 // file size header 
424D36040C0000000000360400002800000000040000000300000100080000000000000000000000 
--data-- 
--data-- 
020303030203010302010202030002030203020302020302030202030102 
3BFB 

在VB6中有没有其他有效的方法来处理这个问题?

+0

似乎是一种危险的方式来确定图像是否完整。没有办法完成信号。图像数据如何传输给您? – Rob 2013-03-05 11:23:52

+0

编辑包括完整的代码,请不要忽略。 – Motes 2013-03-05 16:09:49

+1

字符串中的数据通常被认为是文本,您也正在使用文本I/O操作。 Unicode和ANSI之间的转换可能会导致各种数据对二进制信息的影响,并且充其量只会以这种方式为图像数据消耗两倍的内存。 – Bob77 2013-03-05 23:00:35

回答

1

您需要同意一个完整的协议,指定您将如何通过TCP流传输图像数据和图像数据长度。

在接收器中,您将开始将数据读入缓冲区,直到获得足够的数据以包含标题。此时,您可以解析出数据长度,然后继续将数据读入数据缓冲区,直到至少获得该数据量为止。 当你最终获得所有的数据时,你可以解码并保存图像数据,然后关闭流(如果它是一个关闭的)或从头开始解析出文件头。

你可以在#VB wiki找到更多信息。