VNC的Hextile編碼原理及實現

2021-04-27 22:21:35 字數 2262 閱讀 9620

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...