2013-03-05 134 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找到更多信息。