關於圖形失真 |
尚未結案
|
nise777
一般會員 發表:5 回覆:6 積分:2 註冊:2004-10-29 發送簡訊給我 |
各位前輩你們好 小弟正用,http://delphi.ktop.com.tw/topic.php?TOPIC_ID=25914
RaynorPao大哥所發表的「TServerSocket & TClientSocket 傳輸檔案範例(Server)」 來傳送圖檔,並模擬傳送中有某個pack遺失而無法送達Server端 圖一是原圖 圖二是用jpeg傳輸的失真 圖三是轉成bmp後傳輸的失真 紅色框框是失真的部分 可是小弟將來想應用到無線網路上(如:利用GPRS Modem傳圖片到電腦上) 必須考量其傳輸檔案的大小 也就是說,小弟想用jpeg的格式傳,但在電腦上看到的是圖三那種失真現象 有什麼辦法可以做到呢? 請各位前輩不吝指教,謝謝! 發表人 - nise777 於 2004/11/07 15:19:55
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 各位前輩你們好 小弟正用,http://delphi.ktop.com.tw/topic.php?TOPIC_ID=25914 RaynorPao大哥所發表的「TServerSocket & TClientSocket 傳輸檔案範例(Server)」 來傳送圖檔,並模擬傳送中有某個pack遺失而無法送達Server端 圖一是原圖 圖二是用jpeg傳輸的失真 圖三是轉成bmp後傳輸的失真 紅色框框是失真的部分 可是小弟將來想應用到無線網路上(如:利用GPRS Modem傳圖片到電腦上) 必須考量其傳輸檔案的大小 也就是說,小弟想用jpeg的格式傳,但在電腦上看到的是圖三那種失真現象 有什麼辦法可以做到呢? 請各位前輩不吝指教,謝謝! nise777 你好: (1)如果是使用 TServerSocket/TClientSocket 來傳輸圖片的話,應該會需要自 行切割封包,因為 TServerSocket/TClientSocket 之間傳輸的封包大小,每 一次傳輸最好不要超過 1024 Bytes (1KB)。所以,假設你要傳輸的圖片大小 為 3.5 KB 的話,傳送端就要分成四成傳送,接收端再把收到的封包重組回 來。可是,如果傳送跟接收的資料不相符的話,就會造成你所說的情況,因 此,建議你可以自行設計要傳輸的資料結構 (例如: checksum 或 hash),讓 接收端可以檢查得出所收到封包是否正確,如果不正確的話,就要求傳送端 再重新傳送一次,這樣才可以確保接收到的封包都是正確的,也自然不會發 生你所說的情況 (假設你切割跟重組的過程都正確無誤) (2)另外,如果你覺得自行切割封包很麻煩的話,也可以考慮使用 BCB 內附的 TNMStrm/TNMStrmServ 元件,或者是 Indy TIdTCPServer/TIdTCPClient 元 件,這些元件使用起來比較方便,不需要自己切割封包,它們都已經幫你完 成 (3)例如: 這裡有一個 Indy TIdTCPServer/TIdTCPClient 元件的範例,你可以 先參考看看 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=36068 (4)至於 TNMStrm/TNMStrmServ 元件的範例,建議你可依照關鍵字,在本站搜尋 ,就可以找到很多這方面的相關討論文章及範例-- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
nise777
一般會員 發表:5 回覆:6 積分:2 註冊:2004-10-29 發送簡訊給我 |
引言:RaynorPao兄您好: (1)TServerSocket/TClientSocket 來傳輸,每一次封包大小不超過1KB,這點在讀過您發表的文章後,我有注意到! ( > 發表人 -nise777 你好: (1)如果是使用 TServerSocket/TClientSocket 來傳輸圖片的話,應該會需要自 行切割封包,因為 TServerSocket/TClientSocket 之間傳輸的封包大小,每 一次傳輸最好不要超過 1024 Bytes (1KB)。所以,假設你要傳輸的圖片大小 為 3.5 KB 的話,傳送端就要分成四成傳送,接收端再把收到的封包重組回 來。可是,如果傳送跟接收的資料不相符的話,就會造成你所說的情況,因 此,建議你可以自行設計要傳輸的資料結構 (例如: checksum 或 hash),讓 接收端可以檢查得出所收到封包是否正確,如果不正確的話,就要求傳送端 再重新傳送一次,這樣才可以確保接收到的封包都是正確的,也自然不會發 生你所說的情況 (假設你切割跟重組的過程都正確無誤) (2)另外,如果你覺得自行切割封包很麻煩的話,也可以考慮使用 BCB 內附的 TNMStrm/TNMStrmServ 元件,或者是 Indy TIdTCPServer/TIdTCPClient 元 件,這些元件使用起來比較方便,不需要自己切割封包,它們都已經幫你完 成 (3)例如: 這裡有一個 Indy TIdTCPServer/TIdTCPClient 元件的範例,你可以 先參考看看 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=36068 (4)至於 TNMStrm/TNMStrmServ 元件的範例,建議你可依照關鍵字,在本站搜尋 ,就可以找到很多這方面的相關討論文章及範例-- Enjoy Researching & Developing -- |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |