VC數(shù)字圖像處理編程講座之四_第1頁
VC數(shù)字圖像處理編程講座之四_第2頁
VC數(shù)字圖像處理編程講座之四_第3頁
VC數(shù)字圖像處理編程講座之四_第4頁
VC數(shù)字圖像處理編程講座之四_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、VC數(shù)字圖像處理編程講座之四BMP圖像顯示的特效操作上期講座中我們主要講述了BMP圖像數(shù)據(jù)的存取、圖像的顯示和調(diào)色板的操作等內(nèi)容,在上面的學(xué)習(xí)基礎(chǔ)上,我們可以進(jìn)一步深化,學(xué)習(xí)并掌握圖像特效顯示技術(shù)。有了這種技術(shù),可以用來在今后的項目開發(fā)中美化我們的軟件界面,提高軟件的視覺效果。在如今的商業(yè)軟件中,幾乎每一幅圖像的顯示都采用了圖像特效顯示,例如讀者比較熟悉的Windows的屏幕保護(hù)程序就采用了各種各樣的圖像特效顯示,使人感到眼花繚亂和耳目一新。專業(yè)圖像處理軟件更是提供了豐富的顯示方式供用戶使用,可以方便的在程序中實現(xiàn)圖像的特效顯示,如PhotoShop 、Authorware等。本節(jié)主要介紹如何

2、實現(xiàn)圖像的浮雕、雕刻、百頁窗、旋轉(zhuǎn)、掃描、柵條、馬賽克、和漸顯漸隱顯示等效果。通過這期講座的學(xué)習(xí),讀者朋友們也可以自己動手制作擁有特效顯示效果的軟件了圖像的顯示我們講過主要有BitBlt()、SetDIBitsToDevice()和StretchDIBits()等函數(shù)。需要讀者注意的是,在特效顯示時,并不是每個顯示函數(shù)都適宜,BitBlt()函數(shù)主要是用來顯示設(shè)備無關(guān)位圖(DDB),后兩個函數(shù)用來顯示設(shè)備無關(guān)位圖(DIB)。由于我們講座里處理的是設(shè)備無關(guān)位圖,所以我們主要關(guān)心的是后兩個函數(shù)的應(yīng)用,其中SetDIBitsToDevice()使用起來較死板,遠(yuǎn)不如StretchDIBits()用的

3、靈活,并且對大多數(shù)的特效顯示無能為力,所以為了實現(xiàn)圖像的特效顯示效果,需要使用StretchDIBits()函數(shù)來顯示圖像,具體什么原因,我想可能是微軟在實現(xiàn)這些函數(shù)時使用的方法不同吧。這些函數(shù)如何使用,各個參數(shù)的含義,可以參考微軟的MSDN。實現(xiàn)圖像的特殊效果的顯示的基本思路是要么是操作圖像的像素,要么是對圖像分塊按一定的方向或次序,分階段的顯示或擦除對應(yīng)的圖像塊。對于第二種顯示的思路,其中的要點(diǎn)是:1.劃分圖像塊;2.確定圖像塊的操作次序;3.顯示或清除對應(yīng)的圖像塊;4.在兩個連續(xù)顯示的圖像塊之間插入一個固定的延遲。其中圖像塊的劃分決定了圖像的顯示方式,圖像塊的顯示順序決定了顯示的方向和細(xì)

4、分的依據(jù)。不同的效果決定了不同的分塊方法和顯示次序,我們將在后面的各種特效顯示中介紹如何分塊和決定次序。為了使圖像的顯示過程明顯的表現(xiàn)出來,實現(xiàn)顯示的特效,就需要在圖像塊的依此顯示中插入固定的延遲。也許讀者朋友會想到利用sleep()函數(shù)或用Settime()來實現(xiàn)延遲,由于Windows是個基于消息的多任務(wù)操作系統(tǒng),這些方法所產(chǎn)生的延遲時間對于圖像的顯示來說是不精確的,為了實現(xiàn)與機(jī)器無關(guān)的更精確的時間延遲,可以采用timeGetTime()函數(shù)來產(chǎn)生微秒級的延遲。使用這個函數(shù)時為了編譯不產(chǎn)生錯誤,要在連接設(shè)置中引入“Winmm.lib”庫,并要包含頭文件“Mmsystem.h”。這里我們首先

5、給出一個延遲函數(shù),它用來實現(xiàn)固定時間的延遲:void DelayTime(DWORD time)DWORD BeginTime ,EndTime;BeginTime=timeGetTime();/得到當(dāng)前的系統(tǒng)時間、單位為微秒;doEndTime=TimeGetTime();/再次得到當(dāng)前的系統(tǒng)時間;while(EndTime-BeginTime) <time)/判斷延遲時間是否已經(jīng)結(jié)束;一、操作位圖的像素實現(xiàn)顯示的特效我們首先介紹直接操作圖像中的像素的灰度值來實現(xiàn)圖像顯示的特效、這里我們主要介紹如何實現(xiàn)圖像的浮雕和雕刻效果。經(jīng)??措娨暤呐笥褌儾恢⒁獾?jīng)]有,有些電視連續(xù)劇在每集片頭或片

6、尾部分都有顯示一些特殊效果的圖像,比如前一陣子中央一套放的長征和康熙王朝,這些特效稱為"圖像的浮雕效果"和"圖像的雕刻效果",經(jīng)過這些特效處理后的圖像增強(qiáng)了觀眾們的視覺效果,它們看上去仿佛是使用3D技術(shù)作的,這也許就是為什么這種技術(shù)那么流行的原因吧。其實,我們完全可以用一些簡單的數(shù)字圖像處理算法來實現(xiàn)這些看似復(fù)雜高深的顯示效果。下面以一個標(biāo)準(zhǔn)的Lena灰度圖像為原圖,給出了處理后的效果圖,同時給出了VC開發(fā)平臺上的部分實現(xiàn)源代碼。1"浮雕"圖像"浮雕"圖象效果是指圖像的前景前向凸出背景。所謂的"浮雕&qu

7、ot;概念是指標(biāo)繪圖像上的一個像素和它左上方的那個像素之間差值的一種處理過程,為了使圖像保持一定的亮度并呈現(xiàn)灰色,我在處理過程中為這個差值加了一個數(shù)值為128的常量。需要讀者注意的是,當(dāng)設(shè)置一個像素值的時候,它和它左上方的像素都要被用到,為了避免用到已經(jīng)設(shè)置過的像素,應(yīng)該從圖像的右下方的像素開始處理,下面是實現(xiàn)的源代碼:void CDibView:OnFDImage() /產(chǎn)生"浮雕"效果圖函數(shù)HANDLE data1handle;/用來存放圖像數(shù)據(jù)的句柄;LPBITMAPINFOHEADER lpBi;/圖像的信息頭結(jié)構(gòu);CDibDoc *pDoc=GetDocument

8、();/得到文擋指針;HDIB hdib;/用來存放圖像數(shù)據(jù)的句柄;unsigned char *pData;/指向原始圖像數(shù)據(jù)的指針;unsigned char *data;/指向處理后圖像數(shù)據(jù)的指針;hdib=pDoc->m_hDIB;/拷貝存放已經(jīng)讀取的圖像文件數(shù)據(jù)句柄;lpBi=(LPBITMAPINFOHEADER)GlobalLock(HGLOBAL)hdib);/獲取圖像信息頭pData=(unsigned char*)FindDIBBits(LPSTR)lpBi);/FindDIBBits是我定義的一個函數(shù)、根據(jù)圖像的結(jié)構(gòu)得到位圖的灰度值數(shù)據(jù)、pDoc->SetMo

9、difiedFlag(TRUE);/設(shè)置文檔修改標(biāo)志為“真”、為后續(xù)的修改存盤作準(zhǔn)備;data1handle=GlobalAlloc(GMEM_SHARE,WIDTHBYTES(lpBi->biWidth*8)*lpBi->biHeight);/聲明一個緩沖區(qū)用來暫存處理后的圖像數(shù)據(jù);data=(unsigned char*)GlobalLock(HGLOBAL)data1handle);/得到該緩沖區(qū)的指針;AfxGetApp()->BeginWaitCursor();int i,j,buf;for( i=lpBi->biHeight; i>=2; i-)/從圖

10、像右下角開始對圖像的各個像素進(jìn)行“浮雕”處理;for( j=lpBi->biWidth; j>=2; j-)/浮雕處理buf=*(pData+(lpBi->biHeight-i)*WIDTHBYTES(lpBi->biWidth*8)+j)-*(pData+(lpBi->biHeight-i+1)*WIDTHBYTES(lpBi->biWidth*8)+j-1)+128;if(buf>255) buf=255;if(buf<0)buf=0; *(data+(lpBi->biHeight-i)*WIDTHBYTES(lpBi->biWi

11、dth*8)+j)=(BYTE)buf;for( j=0; jbiHeight; j+)for( i=0; ibiWidth; i+)/重新寫回原始圖像的數(shù)據(jù)緩沖區(qū);*(pData+i*WIDTHBYTES(lpBi->biWidth*8)+j)=*(data+i*WIDTHBYTES(lpBi->biWidth*8)+j);AfxGetApp()->EndWaitCursor();pDoc->m_hDIB =hdib/將處理過的圖像數(shù)據(jù)寫回pDoc中的圖像緩沖區(qū);GlobalUnlock(HGLOBAL)hdib);/解鎖、釋放緩沖區(qū);GlobalUnlock(HGL

12、OBAL)data1handle);GlobalFree(HGLOBAL)hdib);GlobalFree(HGLOBAL)data1handle);Invalidate(TRUE);/顯示圖像2"雕刻"圖像上面講述了通過求一個像素和它左上方像素之間的差值并加上一個常數(shù)的方法生成"浮雕"效果的灰度圖像,"雕刻"圖像與之相反,它是通過取一個像素和它右下方的像素之間的差值并加上一個常數(shù),這里我也取128,經(jīng)過這樣處理,就可以得到"雕刻"圖像,這時候圖像的前景凹陷進(jìn)背景之中。同樣需要讀者注意的是為了避免重復(fù)使用處理過的圖

13、像像素,處理圖像時要從圖像的左上方的像素開始處理。實現(xiàn)代碼如下:void CDibView:OnDKImage() / TODO: Add your command handler code hereHANDLE data1handle;/這里的內(nèi)部變量與前面的含義一致、這里不再贅述;LPBITMAPINFOHEADER lpBi;CDibDoc *pDoc=GetDocument();HDIB hdib;unsigned char *pData;unsigned char *data;hdib=pDoc->m_hDIB;/拷貝圖像數(shù)據(jù)的句柄;lpBi=(LPBITMAPINFOHEAD

14、ER)GlobalLock(HGLOBAL)hdib);pData=(unsigned char*)FindDIBBits(LPSTR)lpBi);pDoc->SetModifiedFlag(TRUE);data1handle=GlobalAlloc(GMEM_SHARE,WIDTHBYTES(lpBi->biWidth*8)*lpBi->biHeight);/申請緩沖區(qū);data=(unsigned char*)GlobalLock(HGLOBAL)data1handle);/得到新的緩沖去的指針;AfxGetApp()->BeginWaitCursor();int

15、i,j,buf;for( i=0;i<=lpBi->biHeight-2; i+)/對圖像的各個像素循環(huán)進(jìn)行"雕刻"處理;for( j=0;j<=lpBi->biWidth-2; j+)buf=*(pData+(lpBi->biHeight-i)*WIDTHBYTES(lpBi->biWidth*8)+j)-*(pData+(lpBi->biHeight-i-1)*WIDTHBYTES(lpBi->biWidth*8)+j+1)+128;/“雕刻”處理;if(buf>255) buf=255;if(buf<0)bu

16、f=0;*(data+(lpBi->biHeight-i)*WIDTHBYTES(lpBi->biWidth*8)+j)=(BYTE)buf;for( j=0; jbiHeight; j+) for( i=0; ibiWidth; i+)/重新將處理后的圖像數(shù)據(jù)寫入原始的圖像緩沖區(qū)內(nèi);*(pData+i*WIDTHBYTES(lpBi->biWidth*8)+j)=*(data+i*WIDTHBYTES(lpBi->biWidth*8)+j);pDoc->m_hDIB =hdib/將處理過的圖像數(shù)據(jù)寫回pDoc中的圖像緩沖區(qū);GlobalUnlock(HGLOBA

17、L)hdib);/解鎖、釋放緩沖區(qū);GlobalUnlock(HGLOBAL)data1handle);GlobalFree(HGLOBAL)hdib);GlobalFree(HGLOBAL)data1handle);Invalidate(TRUE);/顯示圖像3圖像的旋轉(zhuǎn)根據(jù)圖像像素的位置來調(diào)節(jié)該位置的灰度可以實現(xiàn)許多顯示的特效,例如圖像的鏡像、翻轉(zhuǎn)等?;叶葓D像旋轉(zhuǎn)就是根據(jù)這一個思想實現(xiàn)的,它是指把定義的圖像繞某一點(diǎn)以逆時針或順時針方向旋轉(zhuǎn)一定的角度,通常是指繞圖像的中心以逆時針方向旋轉(zhuǎn)。首先根據(jù)旋轉(zhuǎn)的角度、圖像對角線的長度計算旋轉(zhuǎn)后的圖像的最大寬度、高度,根據(jù)旋轉(zhuǎn)后圖象最大的寬度、高度生成

18、新的緩沖區(qū),假設(shè)圖像的左上角為(left, top),右下角為(right, bottom),則圖像上任意點(diǎn)(x, y)繞其中心(xcenter, ycenter)逆時針旋轉(zhuǎn)angle角度后,新的坐標(biāo)位置(x1, y1)的計算公式為:xcenter = (width+1)/2+left;ycenter = (height+1)/2+top;x1 = (x-xcenter) cos - (y - ycenter) sin+xcenter;y1 = (x-xcenter) sin+ (y- ycenter) cos+ ycenter;與圖像的鏡像變換相類似,下一步就是把原圖中的(x,y)處象素的灰

19、度值讀入新緩沖區(qū)的(x1,y1)點(diǎn)處。注意在新緩沖區(qū)中與原圖沒有對應(yīng)的象素點(diǎn)的值用白色或指定的灰度代替。二、圖像的分塊顯示和清除1 圖像的掃描顯示和清除掃描顯示圖像是最基本的特效顯示方法,它表現(xiàn)為圖像一行行(或一列列)地顯示出來或從屏幕上清除掉,有種大戲院種的拉幕效果。根據(jù)掃描的方向的不同,可以分為上、下、左、右、水平平分和垂直平分等六種掃描。這里以向下移動為例,分別介紹顯示和清除的實現(xiàn)。其余的掃描效果可以依次類推。向下掃描顯示的實現(xiàn)方法是:從圖像的底部開始將圖像一行一行的復(fù)制到目標(biāo)區(qū)域的頂部。每復(fù)制一行后,復(fù)制的行數(shù)便要增加一行,并加上一些延遲;向下移動清除的實現(xiàn)方法是圖像向下移動顯示,并在

20、顯示區(qū)域的上部畫不斷增高的矩形。1)掃描顯示的代碼:CdibView:OnImageDownScan()CDibDoc *pDoc=GetDocument();HDIB hdib;CClientDC pDC(this);hdib=pDoc->m_hDIB;/獲取圖像數(shù)據(jù)句柄;BITMAPINFOHEADER *lpDIBHdr;/位圖信息頭結(jié)構(gòu)指針;BYTE *lpDIBBits;/指向位圖像素灰度值的指針;HDC hDC=pDC.GetSafeHdc();/獲取當(dāng)前設(shè)備上下文的句柄;lpDIBHdr=( BITMAPINFOHEADER *)GlobalLock(hdib);/得到圖像

21、的位圖頭信息;lpDIBBits=(BYTE*)lpDIBHdr+sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD);/獲取指向圖像像素值;SetStretchBltMode(hDC,COLORONCOLOR);/顯示圖像;for(int i=0;i<lpDIBHdr->biHeight;i+) /每次循環(huán)顯示圖象的“0”到“i”行數(shù)據(jù);SetDIBitsToDevice (hDC,0,0,lpDIBHdr->biWidth, lpDIBHdr->biHeight,0, 0,0, i,lpDIBBits,(LPBITMAPINFO)

22、lpDIBHdr,DIB_RGB_COLORS);DelayTime(50);/延遲;GlobalUnlock(hdib);return;2)清除代碼:/由于篇幅的限制,省略了與上面的相同代碼Cbrush brush(crWhite);/定義一個“白色”的刷子;Cbrush *oldbrush=pDC->SelectObject(&brush);for(int i=0;i < lpDIBHdr->biHeight ;i+)/每次循環(huán)將目標(biāo)區(qū)域中的“0”到“i”行刷成“白色”;pDC->Rectangle(0,0,lpDIBHdr->biWidth,lpDI

23、BHdr->biHeight);DelayTime(50);2 百頁窗效果所謂百頁窗顯示效果,就如同關(guān)閉和開啟百頁窗一樣,圖像被分為一條條或一列列地分別顯示或清除掉,根據(jù)顯示時以行或列為單位可以將該效果分為垂直或水平兩種方式。以垂直百頁窗為例來說明如何實現(xiàn)這種特效顯示。實現(xiàn)垂直百頁窗顯示時,需要將圖像垂直等分為n部分由上向下掃描顯示,其中每一部分包括m個條、這個n可以根據(jù)具體應(yīng)用時的需要來決定、m既為圖像的高度除n。掃描顯示時,依照差值進(jìn)行掃描顯示,即第k次顯示k-1、k*m-1、k*n-1條掃描線。同樣,垂直百頁窗清除的實現(xiàn)與垂直百頁窗的顯示相似,不同的是將繪制位圖換成畫矩形而已。在下

24、面的例子中,我將圖像的分成8份。int m=8;int n=lpDIBHdr->biHeight/m;/圖像的高度能夠整除8;for(int l=1;l<=m;l+)for(int k=0;k<n;k+) /每次循環(huán)依次顯示圖像中的k-1、k*m-1、k*n-1行; StretchDIBits (hDC,0,4*k+l-1,lpDIBHdr->biWidth,1,0, lpDIBHdr->biHeight-4*k-l+1,lpDIBHdr->biWidth,1,lpDIBBits,(LPBITMAPINFO)lpDIBHdr,DIB_RGB_COLORS,S

25、RCCOPY);/juanlianxiaoguoDelayTime(50);3.柵條顯示特效柵條特效是移動特效的復(fù)雜組合,可以分為垂直柵條和水平柵條兩類。它的基本思想是將圖像分為垂直或水平的的小條,奇數(shù)條向上或向左顯示/清除,偶數(shù)條向下或向右顯示/清除。當(dāng)然也可以規(guī)定進(jìn)行相反的方向顯示/清除。下面的代碼是實現(xiàn)垂直柵條的例子:int m=8;for(int i=0;i<=lpDIBHdr->biHeight;i+)for(int j=0;j<=lpDIBHdr->biWidth;j+=m)/向下顯示偶數(shù)條;StretchDIBits (hDC,j,0,m,i,j,lpDI

26、BHdr->biHeight-i,m,i,lpDIBBits,(LPBITMAPINFO)lpDIBHdr,DIB_RGB_COLORS,SRCCOPY);/juanlianxiaoguoj=j+m;/向上顯示奇數(shù)條;StretchDIBits (hDC,j,lpDIBHdr->biHeight-i,m,i,j,0,m,i,lpDIBBits,(LPBITMAPINFO)lpDIBHdr,DIB_RGB_COLORS,SRCCOPY);/DelayTime(20);4.馬賽克效果馬賽克顯示是指圖像被分成許多的小塊,它們以隨機(jī)的次序顯示出來,直到圖像顯示完畢。實現(xiàn)馬賽克的效果主要解決

27、的問題是如何定義顯示隨機(jī)序列的小方塊,這個問題的解決可以在定義過小方塊的基礎(chǔ)上,用一個數(shù)組來記錄各個方塊的左上角的坐標(biāo)的位置。顯示圖像過程中,產(chǎn)生一個隨機(jī)數(shù)來挑選即將顯示的小方塊,顯示后將該方塊的位置坐標(biāo)從數(shù)組中剔除。清除過程與之相仿。剔除顯示過的方塊的位置坐標(biāo)的方法是將該數(shù)組中的最后的一個點(diǎn)的坐標(biāo)拷貝到當(dāng)前位置,然后刪除數(shù)組中的最后點(diǎn)的坐標(biāo),經(jīng)過實現(xiàn)發(fā)現(xiàn)這樣處理有時顯示的圖像是不完整的,分析其原因是生成隨機(jī)數(shù)的過程有舍入溢出誤差。讀者可以采用其它的辦法解決這個問題,例如可以生成固定的隨機(jī)數(shù)組或采用一個動態(tài)的數(shù)組來跟蹤未顯示的圖像方塊的坐標(biāo)等方法。int m,n;int RectSize=60

28、;/方塊的寬、高尺寸為60個像素;if(lpDIBHdr->biWidth%RectSize!=0)/得到圖像水平方塊的個數(shù);m= lpDIBHdr->biWidth/RectSize+1;elsem= lpDIBHdr->biWidth/RectSize;if(lpDIBHdr->biHeight%RectSize!=0)/得到圖像垂直方塊的個數(shù);n= lpDIBHdr->biHeight/RectSize+1;elsen=lpDIBHdr->biHeight/RectSize;POINT *point=new POINTn*m;/申請一個數(shù)組用來記錄各個

29、方塊的左上角的坐標(biāo);POINT point1;for(int a=0;a<m;a+)/將各個方塊的左上角的坐標(biāo)記錄到數(shù)組中;for(int b=0;b<n;b+)point1.x=a*RectSize;point1.y=b*RectSize;*(point+a*b+b)=point1;/開始隨機(jī)的顯示各個小方塊;double fMax=RAND_MAX;/定義Rand()函數(shù)的最大值;for(int k=m*n-1;k>=0;k-)int c=(int)(double)(m*n)*rand()/fMax);int mx=pointc.x;int my=pointc.y;/顯示

30、對應(yīng)的圖像的小塊;StretchDIBits (hDC,mx,my,RectSize,RectSize,mx,lpDIBHdr->biHeight-my,RectSize,RectSize,lpDIBBits,(LPBITMAPINFO)lpDIBHdr,DIB_RGB_COLORS,SRCCOPY);pointc.x=pointk.x;pointc.y=pointk.y;DelayTime(50);5圖像的淡入淡出效果圖像的淡入淡出的顯示效果被廣泛的應(yīng)用在多媒體娛樂軟件中,是一種特別重要的特效顯示方法。淡入就是將顯示圖像的目標(biāo)區(qū)域由本色逐漸過度的圖像中的各個像素點(diǎn)的顏色;淡出就是由顯示的圖像逐漸過度到目標(biāo)區(qū)域的本色。實現(xiàn)圖像的淡入淡出有兩種辦法:一是均勻的改變圖像的調(diào)色板中的顏色索引值;另一種方法是改變圖像像素的灰度值。第一種方法實現(xiàn)起來比較繁瑣,第二種方法就比較簡單。下面是我們采用第二種方法實現(xiàn)圖像淡入效果的代碼:/申請一個與圖像緩沖區(qū)相同大小的內(nèi)存;hdibcopy=(HDIB)Global

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論