16.數據的有損壓縮:對多媒體數據進行有損壓縮時,通常是以少量數據丟失作為代價的,比如對某8bit量化的數據壓縮為6bit量化,其算法可簡單表示為:逐一刪除各個字節的后2bit,將刪除除后的6bit數據首尾相連,然后重新按照8bit一組構建字節,以十六進制顯示. 例如,壓縮前的原始數據為: 1111 1100 0101 1010 1011 0000 可表示為十六進制:FC 5A B0 刪除每字節的后2bit: 1111 1100 0101 1010 1011 0000 首尾相連構建新的數據: 11 1111 0101 1010 1100 表示為十六進制:…F5AC 自此,原數據進行了有損壓縮.程序運行界面如圖所示: 實現上述算法的VB程序如下,但程序中加框處有誤,請改正. Dim a(1To 100)As Integer Const code=“0123456789ABCDEF“ Const n=100 Private Sub Form_Load ( )‘以隨機數模擬讀取原始數據 s=““ Randomize For i=1To n a(i)=Int(Rnd*16) Text1.Text=Text1.Text+ ① Next i End Sub Private Sub Command1_Click ( ) For i=1To n t=t+HtoB(a(i)) Next i For j=1To n*4Step 8'每8位一組,取前6個字符 s=s+Mid(t,j,6) Next j For i=1To 4*(n-1)Step 4'每4位一組轉為十六進制顯示 Text2.Text=Text2.Text+BtoH(Mid(s,i,4)) Next i End Sub Function HtoB(x As Integer) As String'十六進制轉為二進制函數 t=““ m=0 Do While ② r=x Mod 2 m=m+1 t=Trim(r)+t'trim ( )用于刪除前導空格 x=x\2 Loop HtoB=Mid(“0000“,1,4-m)+t End Function Function BtoH(y As String) As String'二進制轉為十六進制函數 t1=Val(Mid(y,4,1)) t2=Val(Mid(y,3,1)) t3=Val(Mid(y,2,1)) t4=Val(Mid(y,1,1)) s=t1+t2*2+t3*4+t4*8 BtoH=Mid(code,s+1,1) End Function.
.(填數字序號) ①H2?N64Aj②[26wv9,Q③$14G/uv④zX}rb!T&}d2 (2)請在橫線處填入合適的代碼. Private Sub Command1_Click ( ) Dim t As Integer Dim a(1To 4)As Integer flag=True n=0 pwd=““ Randomize Do While flag t=
①'隨機生成33-126的ASCII碼 pwd=pwd+Chr(t)
② s=0 For i=1To 4 s=s+a(i) Next i n=n+1 If n>=6And s=4Then
③ Loop Text1.Text=pwd End Sub
‘獲取字符類型:1-小寫字母,2-大寫字母,3-阿拉伯數字,4-符號 Function check(x As Integer) As Integer If x>=97And x<=122Then check=1 ElseIf x>=65And x<=90Then check=2 ElseIf x>=48And x<=57Then check=3 Else check=4 End If End Function.