1. 功能
在本機顯示和控制別一台計算機的桌面,就像直接用那台計算機一樣
2. vnc的編碼方式主要有
a) raw(0):不進行編碼,直接傳送資料,是最慢的一種
b) copyrect(1):對於客戶端,在已經有了相同象素數據的時候比較有效,比如移動或視窗內容滾動時
c) rre(2):將象素顏色相同的某乙個矩形區域作為乙個整體傳輸
d) hextile(5):是rre編碼的變種,把螢幕分成16x16象素的小塊,每塊用raw或rre方式轉送
e) zrle(16):它結合了zlib壓縮
二、hextile原理
通過解釋hextile演算法,說明了簡單而常用的螢幕傳送和壓縮演算法,希望對螢幕監測、傳送相關的工作有所啟發
1. 分割
a) 傳送的影象區域被分為若干個大小為16×16象素的塊,如果整個矩形不是16的倍數,則最後1行(或列)的塊寬度(或高度)變小
b) 這些塊按從左到右,從上到下的順序排列,螢幕中變化的塊被傳送,不變的不被傳送
c) 由於塊大小是16x16,所以塊內座標xy可用一位元組表示,wh可用乙個位元組表示
2. 標誌位:
傳送每塊資料的之前,先要傳送乙個位元組的標誌位,標記出該塊的傳送的格式,它的每一位意義如下
a) 右一:raw資料:不壓縮,直接傳送,一般此位置1時其它位都置0
b) 右二:包含背景色資料:標誌位之後需要接收背景色資料
c) 右三:包含前景色資料:背景色之後需要接收前景色資料
d) 右四:是否含有子塊:只要該塊中含有兩種及兩種以上顏色,則此位置1
e) 右五:子塊的顏色:如果含有兩種顏色,此位置0,子塊顏色用前景色;若該塊中含有兩種以上的顏色,此位置1,子塊顏色需要單獨指明
3. 塊內部的編碼:
a) 計算塊內部的顏色數:一種、兩種、多種,並記錄出現頻率最多的顏色為背景色,如果僅有兩種顏色,則另一顏色記為前景色
b) 判斷塊內顏色數是否為一種,如果是,則先修改傳送標誌位,然後傳送整塊大小(0,0,w,h)和背景色,此塊傳送即完成
c) 如果不是一種,則把塊拆分成顏色不同的小矩形,方法如下:
i. 先把塊複製到一塊記憶體區中,以免破壞原始資料,暫稱tmpbuf
ii. 從第乙個象素開始判斷,該點顏色是否與背景色相同
iii. 如果不同,則分別向右和向下求得與該點顏色連續的色塊
iv. 對比右色塊和下色塊,取出其中較大的乙個,做為乙個矩形色塊
v. 在tmpbuf中把此矩形填成背景色,以避免重複判斷
vi. 繼續判斷下一象素點……
d) 記錄各個矩形色塊的位置(x,y,w,h),如果塊內含兩種以上顏色,還要記錄矩形色塊的顏色值
e) 一邊取得矩形色塊,一邊判斷矩形色塊描述資料的總長是否大於原始資料,如果大於原始資料,則放棄取色塊,標誌位元組raw位(右一)置1,以raw方式直接傳送原始資料,此塊傳送完成
f) 如果塊含兩種以上顏色,則將標誌位的子塊位(右五)置1,否則置0
g) 傳送標誌位,傳送矩形色塊個數,然後傳送各矩形塊資料,塊中顏色數為2時不需要傳送每個矩形塊的顏色資料,只傳位置即可
h) 注意:如果背景色或前景色與前一塊(16x16塊)相同,則可以不傳送背景色或前景色,客戶端會預設延用前一塊的
三、參考例項
1. 原始碼:
a) 原始碼包:tightvnc-1.2.9.orig.tar.gz
b) 編碼程式:tightvnc-1.2.9.orig/xvnc/programs/xserver/hw/vnc/hextile.c
c) 解碼程式:rightvnc-1.2.9.orig/vncviewer/hextile.c
2. 參考文件
b)
通過VNC協議Windows遠端Mac OS X
支援mac10.5 10.7 mac os x vnc服務設定 mac os x 已經增加支援了由vnc viewer訪問的功能,設定如下 系統偏好設定 共享 勾選 螢幕共享 然後在電腦設定 vnc顯示程式可以使用密碼控制螢幕輸入8位密碼,並輸入登入使用的密碼允許設定,這樣就可以通過其它pc或mac...
VNC的Hextile編碼原理及實現
vnc 1.功能 在本機顯示和控制別一台計算機的桌面,就像直接用那台計算機一樣 2.vnc 的編碼方式主要有 a raw 0 不進行編碼,直接傳送資料,是最慢的一種 b copyrect 1 對於客戶端,在已經有了相同象素數據的時候比較有效,比如移動或視窗內容滾動時 c rre 2 將象素顏色相同的...
協議編碼壓縮
幾種壓縮演算法原理介紹 數字壓縮編碼技術 無失真壓縮比較常見和有效的是 lzw,霍夫曼和算術編碼 lzw演算法 參考文章 lzw資料壓縮演算法的原理分析 lzw演算法 lempel ziv welch lzw演算法 講了編碼和解碼 各種語言的實現原始碼 兩個靠譜的c和c 原始碼實現 基本思想 建立乙...