【问题标题】:How to read the end of image file stream in VB6如何在VB6中读取图像文件流的结尾
【发布时间】:2013-03-05 09:23:34
【问题描述】:

我想改进另一个程序员编写的代码。该模块的目的是从摄像头获取实时图像流并将其显示在图片窗口中。它是通过 TCP IP 连接进行的。这是如何完成的 获取

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 中有没有其他有效的方法来处理这个问题?

【问题讨论】:

  • 似乎是一种确定图像是否完整的危险方法。有没有办法发出完成信号。图像数据是如何传输给您的?
  • 编辑以包含完整的代码,请不要省略。
  • 字符串中的数据通常被认为是文本,并且您也在使用文本 I/O 操作。 Unicode 和 ANSI 之间的转换可能会导致二进制信息上的各种数据损坏,并且这样最多会为图像数据消耗两倍的内存。
  • 我同意发件人应该提供长度前缀标头值或一些带外信号,如连接关闭。否则你是在求魔法。
  • @Bob77 我有接收方发送的总文件大小标头。但它只包括数据的大小。

标签: image file sockets vb6


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-31
    • 1970-01-01
    • 1970-01-01
    • 2015-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多