vnc
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時其它位都置0b)
右二:包含背景色資料:標誌位之後需要接收背景色資料
c)右三:包含前景色資料:背景色之後需要接收前景色資料
d)右四:是否含有子塊:只要該塊中含有兩種及兩種以上顏色,則此位置1e)
右五:子塊的顏色:如果含有兩種顏色,此位置
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,否則置0g)
傳送標誌位,傳送矩形色塊個數,然後傳送各矩形塊資料,塊中顏色數為
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.參考文件
a)vnc
協議簡單分析
vnc協議編碼方式
1.功能 在本機顯示和控制別一台計算機的桌面,就像直接用那台計算機一樣 2.vnc的編碼方式主要有 a raw 0 不進行編碼,直接傳送資料,是最慢的一種 b copyrect 1 對於客戶端,在已經有了相同象素數據的時候比較有效,比如移動或視窗內容滾動時 c rre 2 將象素顏色相同的某乙個矩形...
JSP Servlet的編碼原理
關鍵字 jsp,servlet編碼 首先,說說 jsp servlet 中的幾個編碼的作用 在 jsp servlet 中主要有以下幾種設定編碼的方式 pageencoding utf 8 contenttype text html charset utf 8 request.setcharacte...
JSP Servlet的編碼原理
首先,說說jsp servlet中的幾個編碼的作用 在jsp servlet中主要有以下幾種設定編碼的方式 pageencoding utf 8 contenttype text html charset utf 8 request.setcharacterencoding utf 8 respon...