1

私が改善したい別のプログラマーによって書かれたコードがあります。このモジュールの目的は、カメラからライブ画像ストリームを取得し、画像ウィンドウに表示することです。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でこれを処理する他の効率的な方法はありますか?

4

1 に答える 1

1

TCP ストリームを介して画像データと画像データの長さを渡す方法を指定する完全なプロトコルに同意する必要があります。

レシーバーでは、ヘッダーを含めるのに十分なデータが得られるまで、データをバッファーに読み込み始めます。この時点で、データ長を解析し、少なくともその量のデータになるまで、データ バッファーへのデータの読み取りを続けることができます。最終的にすべてのデータを取得したら、画像データをデコードして保存し、ストリームを閉じるか (1 回限りの場合)、最初から開始してファイル ヘッダーを解析します。

#VB wikiでもう少し詳しい情報を見つけることができます。

于 2013-03-08T08:52:39.860 に答える