TImage 放置JPEG 問題 |
答題得分者是:malanlk
|
jimlee
一般會員 發表:16 回覆:13 積分:5 註冊:2005-07-20 發送簡訊給我 |
搜尋過了相關討論串,但都沒找到有幫助的文章,
所以提出來看有沒有版友能幫我解決,謝謝。 我寫了一個監控遠端桌面的小程式。
在client端我是用TImage來顯示收到的畫面。
接受封包並顯示圖片的程式碼如下:
tBytes:= Socket.ReceiveLength;
Socket.receiveBuf(buf, tBytes);
Socket.SendText('test');
stream.Write(buf, tBytes);
if tBytes < 1460 then
begin
stream.Position:= 0;
try
jpegscreen.LoadFromStream(stream);
Image1.Picture.Bitmap.Assign(jpegscreen);
except
end;
stream.Clear ;
end; 一開始抓畫面都很正常,但幾秒後就會出現下列錯誤訊息:
JPEG ERROR #53
然後顯示的TImage圖片會變成不完整的圖…
我查了一下是屬於…Insufficient Memory。
但我不曉得怎麼樣才能知道是什麼原因導致這樣的錯誤產生。
我猜是不是因為被監控端丟過來的封包並不是一個完成的jpeg檔?
而導致我無法將它塞進去TImage裡呢? 麻煩各位指教了…謝謝。
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
|
jimlee
一般會員 發表:16 回覆:13 積分:5 註冊:2005-07-20 發送簡訊給我 |
引言: Note: ReceiveLength is not guaranteed to be accurate for streaming socket connections. 這是 ReceiveLength 的解說, 給個足夠大的 tBytes_Max tByte := Socket.receiveBuf(buf, tBytes_Max); 1460 是怎樣算出來的?1460並不是我用算的而設的,純粹是因為我想說一個封包才1.5k,扣除protocal header的部份,我sniffer了一下封包,所挾帶的資料為1460 bytes。 所以我才想將buffer設為同樣大小… 我一開始是將buffer設為2000,但依舊是同樣的情況。 所以才會設為1460…我並沒有很特意去計算這個值@@|| 還是要將圖先存下來看容量,然後再將buffer設為此大小? 但…這樣的用意是?我先試試看好了…一有結果馬上回覆。 感謝你的回答,謝謝。 |
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |