IDL-程序設計筆記_第1頁
IDL-程序設計筆記_第2頁
IDL-程序設計筆記_第3頁
IDL-程序設計筆記_第4頁
IDL-程序設計筆記_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、目錄Part one:文件讀寫操作11、格式化輸入與輸出(readprint)12、ASCII文件讀寫23、二進制文件讀寫54、圖像格式文件讀寫75、科學數(shù)據(jù)格式讀寫*8Part two:圖形繪制11(一)plot過程繪制11(二)plotg()函數(shù)繪制12(三)散點圖12(四)柱狀圖、條形圖15(五)繪制顏色條colorbar18Part three: ENVI二次開發(fā)201、自定義波段運算函數(shù)202、IDL中常見波段運算213、ENVI classic 創(chuàng)建自定義菜單224、ENVI classic+IDL 二次開發(fā)23 Part one:文件讀寫操作1、格式化輸入與輸出(readprin

2、t)1) Read:該函數(shù)用于從鍵盤鍵入數(shù)據(jù),默認數(shù)據(jù)類型為浮點型,若要輸入其他類型數(shù)據(jù),需要先定義數(shù)據(jù)類型。Eg:2) Print:該函數(shù)用于將數(shù)據(jù)輸出打印到控制臺,這里主要講格式化控制輸出format關鍵字。表01 常用格式化控制符格式代碼輸出效果aN字符或者字符串按照N個字符寬度輸出fn.m浮點型數(shù)組按照N個字符寬度輸出,小數(shù)點保留M位dn.mdouble型數(shù)組按照N個字符寬度輸出,小數(shù)點保留M位en.m按照N個字符寬度的科學計數(shù)法輸出,小數(shù)點后精確到M位Nx輸出N個空格字符串/H直接引用字符串輸出或者用H直接輸出字符串c( )用于輸出日期數(shù)據(jù)Eg:2、ASCII文件讀寫 常見ASCII

3、文件:txt、matlab程序文件(*.m)、c程序文件(*.c)、遙感影像頭文件(如ENVI格式的頭文件*.hdr)1) 選擇文件:fn = dialog_pickfile(title='選擇ASCII文件:',get_path = work_dir)cd,work_dir ;用于跳轉到當前工作路徑2) 查詢文件:file_search()函數(shù)Eg:查找當前工作路徑下所有的txt文件,并返回文件數(shù)目*: File_lines(fname)函數(shù)用于查詢文本文件的行數(shù)。3) 打開文件:在IDL中讀寫ASCII碼或者二進制文件,首先需要將文件與一個邏輯設備號關聯(lián)起來。語法:open

4、r/openw/openu, lun, fname, /get_lun, width=10,/append4) 讀寫操作:IDL中利用readf函數(shù)讀取文本文件、利用printf函數(shù)寫入ASCII文件 Readf, lun, var01, var02. printf, lun, var01, var02.5) 文件關閉:在對文件操作完成之后,需要關閉文件的邏輯設備號,eg: freee_lun,lunEG:*如何獲取某個文件你的列數(shù):先讀取一行數(shù)據(jù),然后利用空格進行字符串拆分;最后利用n_elements()計算元素個數(shù)即為ns對于某些遙感數(shù)據(jù)的頭文件前面幾行是說明文件,后一部分才是數(shù)據(jù)的,讀

5、取有兩種方式:1) 定義一個臨時變量temp,將說明文字用該變量存儲2) 直接跳行:skip_lun, lun, 3, /lines ;跳過文件的前三行3、二進制文件讀寫多數(shù)遙感數(shù)據(jù)的數(shù)據(jù)文件都是二進制文件。1) 函數(shù)readu, lun, var01, var02.用于讀取二進制文件*:對于某些數(shù)據(jù)文件開頭是說明信息,讀取時可以用point_lun, lun, position直接按字節(jié)跳過。Eg:讀取IDL文件下的envi.img數(shù)據(jù)2) 函數(shù)writeu, lun, var01, var02用于寫入二進制文件。Eg01:將上面讀取的envi.img計算其NDVI并保存為二進制文件Eg02

6、:Eg03:;讀取cha06下的風云02衛(wèi)星數(shù)據(jù)pro read_AWX file = 'E:zengskIDLCha06dataFY2C_TBB_IR1_OTG_20061130_AOAD.AWX' openr, lun, file, /get_lun ;跳過前20個字節(jié) point_lun,lun,20 Headline = indgen(3);定義三個整型數(shù)據(jù),分別讀取記錄長度、頭文件記錄數(shù)、數(shù)據(jù)記錄數(shù) readu, lun, Headline print,headline0, headline1,headline2 ;定位到第58個字節(jié),讀取數(shù)據(jù)日期 point_lun

7、, lun, 58 Begindate = indgen(5);記錄開始日期 readu, lun, Begindate Enddate = indgen(5);記錄結束日期 readu, lun, Enddate lat_long = indgen(4);記錄網格左上和右上角的經緯度 readu, lun, lat_long print,Begindate print,Enddate print,lat_long ;基于Headline信息數(shù)組,定義字節(jié)數(shù)組,其行列數(shù)分別為記錄長度和數(shù)據(jù)記錄數(shù) data = bytarr(Headline2,Headline0) ;定位到數(shù)據(jù)部分,其頭文件結

8、束的字節(jié)位置為“頭文件記錄數(shù)*記錄長度” point_lun, lun, Headline0 * Headline1 print,Headline0 * Headline1 ;讀取數(shù)據(jù)部分 readu, lun, data help,data ;顯示數(shù)據(jù) window, 0, xsize = 500, ysize = 500 tv, congrid(data, 500, 500)end4、圖像格式文件讀寫IDL自帶了豐富的多種圖像讀寫函數(shù),如BMP,JPG,PNG, JPEG2000, DICOM,TIFF等相關函數(shù):文件查詢:query_image(fname, dimensions = d

9、imensions, channels = nb ) ;channels返回波段數(shù)、dimensions返回圖像的行列數(shù) 讀取圖像:read_image ( fname );結果返回圖像數(shù)組 寫入圖像:write_image, fname(可帶路徑), jpg/bmp/tiff ,data, /order ; order關鍵字用于設置圖像的縱坐標從上往下算起,默認為從下往上。*注: I、以上三個函數(shù)對于IDL支持的圖像格式都適用。 II、顯示圖像時:tv用法:tv, data, true = 1/2/3 ;其中關鍵字true = 1表示數(shù)據(jù)格式為(3, m, n)、true = 2表示數(shù)組格式

10、為(m, 3, n)、true = 3表示格式為(m, n, 3) III、tvrd:屏幕拷貝函數(shù),返回當前直接圖形窗口或設備的指定矩形部分的內容。IV、對遙感圖像而言,其數(shù)據(jù)存放方式有BSQBIPBIL,以一個三維m列n行的遙感數(shù)據(jù)為例:BSQ的表示方式為m, n, 3、BIP表達方式為3, m ,n、BIL的表達方式為m, 3, n,常用的圖像文件一般是BIP方式存儲,遙感文件一般是BSQ。1) JPEG格式:讀read_jpeg寫write_jpegEg01:Eg02:2) BMP格式:(不采用任何壓縮),數(shù)據(jù)存儲量一般很大讀:read_imge(fname) or read_bmp(f

11、name, /rgb)寫:write_bmp, fname, data, /rgb3) TIFF格式: TIFF可以存儲多波段圖像,還可以包含投影信息,如landsat-7就是直接用.tiff存儲的。Eg01: 5、科學數(shù)據(jù)格式讀寫*IDL中支持的科學數(shù)據(jù)格式包括CDF、HDF、HDF5、HDF-EOS、NetCDF等等。1) HDF4文件: 目前國內外的多種衛(wèi)星傳感器都是將HDF作為標準數(shù)據(jù)格式,包括EOS/MODIS、EOS/OMI、HJ-01/HSI、FY-3/MERSI。EG01:;讀取E:ENVIIDL下的MODIS數(shù)據(jù)的經緯度以及其1KM的反射率數(shù)據(jù)集pro test_hdf fn

12、ame=dialog_pickfile(title ='選擇數(shù)據(jù)文件:',get_path=cur_dir) cd, cur_dir hdf_id=hdf_sd_start(fname);打開hdf文件,返回一個文件id hdf_sd_fileinfo,hdf_id,sd_nums,attribute;用于獲取HDF文件的數(shù)據(jù)集數(shù)目和屬性數(shù)目 print,sd_nums,attribute ;讀取經度 lat_index=hdf_sd_nametoindex(hdf_id,'Latitude');根據(jù)數(shù)據(jù)集名稱來獲取數(shù)據(jù)集的索引號 lat_id=hdf_sd_s

13、elect(hdf_id,lat_index);利用索引號選擇數(shù)據(jù)集,返回一個數(shù)據(jù)集的id hdf_sd_getinfo,lat_id,name=name,unit=unit;查詢已打開的數(shù)據(jù)集的基本信息 print,name," ", unit hdf_sd_getdata,lat_id,lat;讀取數(shù)據(jù),參數(shù)lat用于返回讀取的數(shù)據(jù) hdf_sd_endaccess,lat_id;關閉已經打開的數(shù)據(jù)集 help,lat ;讀取緯度 lon_index=hdf_sd_nametoindex(hdf_id,'Longitude') lon_id=hdf_sd

14、_select(hdf_id,lon_index) hdf_sd_getinfo,lon_id,name=name,unit=unit print,name," ", unit hdf_sd_getdata,lon_id,lon hdf_sd_endaccess,lon_id help,lon ;讀取1KM反射率數(shù)據(jù) ref_index=hdf_sd_nametoindex(hdf_id,'EV_1KM_RefSB') ref_id=hdf_sd_select(hdf_id,ref_index) hdf_sd_getinfo,ref_id,name=name

15、,unit=unit print,name," ", unit hdf_sd_getdata,ref_id,ref_value hdf_sd_endaccess,ref_id help,ref_value hdf_sd_end, hdf_id;關閉打開的文件 end運行效果2)*.h5、*.hdf5、*.he5格式的讀取:;下面介紹一個讀取環(huán)境衛(wèi)星*.h5數(shù)據(jù)格式的例子pro read_hdf5 fname=dialog_pickfile(title ='選擇數(shù)據(jù)文件:',get_path=cur_dir) cd, cur_dir ;打開一個圖形用戶界面查看

16、h5文件 result=h5_browser(fname) ;h5_message=h5_parse(fname);查詢文件的基本信息,返回一個結構體變量 ;print,h5_message h5_id=h5f_open(fname);打開一個h5文件,返回一個文件的id sd_id=h5d_open(h5_id,'ImageData/BandData');打開相應的數(shù)據(jù)集,數(shù)據(jù)集名稱可帶路徑 Bandata=h5d_read(sd_id);讀取數(shù)據(jù) ;關閉文件 h5d_close,sd_id h5f_close,h5_id help,Bandata ;將Bandata轉成BI

17、P格式存儲 Bandata_BIP = transpose(Bandata, 2,0,1) help,Bandata_BIP write_tiff,'E:ENVIIDLHJ-1.tif', Bandata_BIPend2) netCDF文件讀?。簄etCDF(network Common Data Form, 網絡通用數(shù)據(jù)格式),常用于氣象科學數(shù)據(jù)存儲。;下面介紹一個讀取ECMWF數(shù)據(jù)的例子,ECMWF為*.nc格式數(shù)據(jù);pro test_nc fname=dialog_pickfile(title ='選擇數(shù)據(jù)文件:',get_path=cur_dir) cd

18、, cur_dir nc_id=ncdf_open(fname);打開netCDF文件 nc_message=ncdf_inquire(nc_id);對打開的文件進行查詢,返回文件基本信息 help,nc_message ;變量查詢 ;后一個參數(shù)為變量索引號或者名稱;這里我讀取的是它的第四個變量'V10' var_message=ncdf_varinq(nc_id,4) help,var_message var_id=ncdf_varid(nc_id, 'v10');根據(jù)變量名稱獲取對應變量的索引號 print,var_id ;ncdf_varget獲取數(shù)據(jù) n

19、cdf_varget,nc_id,var_id,value ;文件關閉 ncdf_close, nc_id help,valueend4)Grid格式讀取:Part two:圖形繪制(一)plot過程繪制1、plot過程:1)plot, xdata, ydata, /nodata 2)oplot, xdata, ydata ;用于在現(xiàn)有窗口中添加新曲線2、線形符號設置:1)關鍵字psym修改數(shù)據(jù)點的符號,直方圖線形psym=10, psym= - a表示除顯示各數(shù)據(jù)點的符號外,還將各數(shù)據(jù)點連接起來。2)linestyle關鍵字設置曲線線形,0為實線、2為虛線、3為點劃線。3、 坐標軸設置:xy

20、title設置標題;xycharsize設置字體大??;xyrange用于設置坐標軸范圍,注意加上xystyle=1來強行設定坐標軸范圍xyticks和xyminor分別設置主刻度和最小刻度間隔數(shù)目xytickname設置刻度的名稱4、 顏色設置:color: 設置圖像顏色;一般用十六進制來表示顏色;FFFFFFxl表示白色;000000xl為黑色background:設置背景顏色5、 添加標注: xyouts過程用于在圖像窗口中添加標注信息。示例:xyouts, 0.18, 0.80, RMSE=, color=FFFFFFxl, charsize=1.2, /normal6、 圖形保存為文件

21、:一般方法為利用TVRD函數(shù)拷貝圖形窗口的內容,在寫入圖像文件。img = tvrd(x, y, channel=value, true=123, /order)(二)plotg()函數(shù)繪制1、plot函數(shù):curve=plot(x, y, /buffer, /current, dimensions=width, height, margin=num, title= , name= , /overplot, window_title= , /nodata)*notice:/buffer指將圖形保存在緩存中/current設置在當前窗口中繪制圖形dimensions設置窗口的大小 title設置

22、圖形標題,name設置圖像對象的名稱*函數(shù)plot的返回結果為一個圖像對象,具有多種對象和方法2、符號、線形設置:symbol、linestyle、thick用于改變曲線線寬3、坐標軸設置:見plot過程4、添加標注:函數(shù)text用于在圖形窗口中添加標注信息,結果返回一個圖形對象Eg: label=text(x, y, 標注內容, target=curve, color=red, font_size=1.2)5、添加圖例:函數(shù)legend用于在圖形窗口中添加標注信息,該函數(shù)只適用于圖形對象(三)散點圖Eg01:讀取文本文件中的數(shù)據(jù)并利用plot過程繪制相應的散點圖;利用過程plot繪制散點圖p

23、ro plot_scatter ;*讀取數(shù)據(jù)* fname=dialog_pickfile(title='選擇數(shù)據(jù):', get_path=work_dir) cd, work_dir nl=file_lines(fname) print, nl temp_var= '' data=fltarr(2, nl-1) openr,lun,fname,/get_lun result=fstat(lun) help,result readf, lun, temp_var readf, lun, data free_lun, lun print,temp_var prin

24、t,data ;*繪制散點圖* ; x = data0,*;觀測數(shù)據(jù) y = data1,*;估算數(shù)據(jù) plot, x, y, psym=2,xrange=5,15,yrange=5,15,$ xtitle='Observed value', ytitle='Estimated value', $ background='FFFFFF'xl, color='oooooo'xl, $ xstyle=1, ystyle=1, $ charsize=1.3, /nodata oplot, x, y, psym=5, color='

25、;000000'xl ;繪制基準線 x2=5, 15 & y2=5, 15 oplot, x2, y2, color='FF0000'xl ;*計算MAE與RMSE并在散點圖中添加標注* ; MAE=mean(abs(x-y);MAE平均絕對誤差 RMSE=sqrt(mean(x-y)2);均方根誤差 MAE_label='MAE='+string(MAE, format='(f5.2)') RMSE_label='RMSE='+string(RMSE, format='(f5.2)') ;添加標注

26、 xyouts, 6, 13.0, MAE_label, color='000000'xl, charsize=1.2, /data xyouts, 6, 12.3, RMSE_label, color='000000'xl, charsize=1.2, /data ;保存散點圖為圖像文件,格式為.png img=tvrd(true=1) ;法一: o_fn=dialog_pickfile(title='文件保存為:');鍵入的文件名要包含后綴名 write_png, o_fn, img ;法二 ;write_png, 'E:ENVIsc

27、atter.png', imgendEg02: 讀取文本文件中的數(shù)據(jù)并利用plot函數(shù)繪制相應的散點圖;plot函數(shù)繪制散點圖pro plot_scatter02 ;讀取數(shù)據(jù) file=dialog_pickfile(title='選擇數(shù)據(jù):',get_path=work_dir) cd, work_dir var='' nl=file_lines(file) data=fltarr(2, nl-1) openr, lun, file, /get_lun readf, lun, var readf, lun, data free_lun, lun pri

28、nt, data ;繪圖 ob=data0, * Es=data1, * graphic01=plot(ob, Es, xrang=7,15,yrang=7,15, xminor=5, yminor=5, $;先數(shù)據(jù) title='scatter', xtitle='Observed Value', ytitle='Estimated Value', $;再坐標軸 symbol='X', sym_size=1.2, linestyle='none', color='black', $;然后線形 ma

29、rgin=0.1) x2=7,15 & y2=7,15 graphic02=plot(x2, y2, linestyle=1, /overplot) ;計算平均絕對誤差和均方根誤差并添加標注 MAE=mean(abs(Es-ob); RMSE=sqrt(mean(Es-ob)2) MAE_label='MAE='+string(MAE, format='(f5.2)') RMSE_label='RMSE='+string(RMSE, format='(f5.2)') t01=text(0.15, 0.8, MAE_labe

30、l, target=graphic01, font_size=12);fonts_size用于設置標注的字體大小 t01=text(0.15, 0.75, RMSE_label, target=graphic01, font_size=12) ;保存文件 o_fn=dialog_pickfile(title='圖形保存為:') graphic01.save, o_fn graphic02.save, o_fnend(四)柱狀圖、條形圖Eg01: *利用bar_plot()函數(shù)繪制柱狀圖(不建議用直接圖形法來繪制) *利用error_plot添加誤差線;barplot功能函數(shù)繪制

31、柱狀圖pro test_histogram02 ;#讀取文本文件數(shù)據(jù)# file=dialog_pickfile(title='選擇文本文件:', get_path=work_dir) cd, work_dir nl=file_lines(file) var=strarr(1,nl) openr, lun, file, /get_lun readf, lun, var free_lun, lun print, var ;拆分 area=strarr(nl) number=intarr(nl) for i=0, nl-1 do begin areai=strmid(vari, 0

32、, 8) numberi=fix(strmid(vari, 11, 3) endfor help, area print, area help, number print, number3 ;#畫柱狀圖# baselines=replicate(65,nl) His=barplot(number, $ bottom_values=baselines, xticklen=0, xrange=-0.5, 5.5, xtickname=area, $ yrange=65, 100, title='Histogram', ytitle='Impact Facter',

33、$ width=0.5, dimensions=900, 500, $ bottom_color='EEEEEE'xl, fill_color='AOAOFF'xl, $ margin=0.2) ;#繪制誤差線# error=1.7, 2.7, 2.5, 2.4, 1.2, 1.0 error_lines=errorplot(number, error, linestyle=6, errorbar_capsize=0.2, $ errorbar_color='blue', /overplot) ;#文件保存為jpg# o_fn=dialog_pi

34、ckfile(title='圖片保存為:')+'.jpg'注意后面加一個后綴名字符串更加方便 His.save, o_fn error_lines.save, o_fn end運行結果:Eg02: *在利用bar_plot()函數(shù)繪制圖像時,添加 /horizontal關鍵字用于將圖像橫過來,即繪制條形圖;bar_plot函數(shù)繪制條形圖chart;pro test_chart ;#讀取文本文件數(shù)據(jù)# file=dialog_pickfile(title='選擇文本文件:', get_path=work_dir) cd, work_dir nl=f

35、ile_lines(file) var=strarr(1,nl) openr, lun, file, /get_lun readf, lun, var free_lun, lun print, var ;拆分 area=strarr(nl) number=intarr(nl) for i=0, nl-1 do begin areai=strmid(vari, 0, 8) numberi=fix(strmid(vari, 11, 3) endfor help, area print, area help, number print, number3 ;#畫柱狀圖# baselines=repli

36、cate(65,nl) His=barplot(number, bottom_values=baselines, $ yticklen=0, yrange=-0.5, 5.5, ytickname=area, $ xrange=65, 100, title='Histogram', xtitle='Impact Facter', $ width=0.5, dimensions=700, 500, $ bottom_color='EEEEEE'xl, fill_color='AOAOFF'xl, $ margin=0.2, /hor

37、izontal) ;#文件保存為jpg# o_fn=dialog_pickfile(title='圖片保存為:')+'.jpg'注意后面加一個后綴名字符串更加方便 His.save, o_fnEnd運行結果:(五)繪制顏色條colorbarEg: 1)創(chuàng)建一個快速可視化窗口IDL> w = window(dimensions=600, 400)2); 創(chuàng)建一個Colorbar,有自定義顏色表,不設置標注位置。IDL> cb = colorbar(POSITION = 0.05,0.85,0.7,0.9, RGB_TABLE= 72)3) ; 創(chuàng)建一個

38、Colorbar具有自定義顏色表,設置標標注在頂部texpos=1。IDL> cb = colorbar(POSITION = 0.05,0.85,0.7,0.9,RGB_TABLE=72, TEXTPOS=1)4) ; 創(chuàng)建Colorbar具有自定義顏色表, 設置自定義范圍自定義范圍range=*,*。 IDL> cb = colorbar(POSITION = 0.05,0.75,0.7,0.8, RGB_TABLE = 72,RANGE = 0,1)5) ; Colorbar具有自定義范圍和自定義標簽tickname= A array。IDL> cb = COLORBA

39、R(POSITION=0.05,0.55,0.7,0.6, RGB_TABLE=72, RANGE=500,1000,TICKVALUES=550,650,750,850,950, TICKNAME='A','B','C','D','E'6) ;創(chuàng)建一個colorbar,設置垂直色條orientation=1,范圍0-100range,錐形端tapar=1(左圖)。IDL> cb = COLORBAR(POSITION=0.8,0.2,0.85,0.9, TAPER=1, RGB_TABLE=72, RANG

40、E=0,100, ORIENTATION=1) *;離散色彩條垂直方向;標注在右邊textpos=1,添加輪廓線BORDER=1(見右圖)。IDL> cb = COLORBAR(POSITION=0.9,0.15,0.95,0.95, RGB_TABLE=rgb,IDL> TICKNAME=tickname, BORDER=1, TAPER=1, $> ORIENTATION=1, TEXTPOS=1) 7) ; 加載顏色表的一個子集,注意:這不是一個“離散”的色條因為每個顏色沒有刻度標簽。IDL> LOADCT, 72, RGB_TABLE = rgbIDL>

41、rgb = rgb25 + 25*INDGEN(10), *IDL> cb = COLORBAR(POSITION=0.05,0.45,0.7,0.5, RGB_TABLE=rgb)8);創(chuàng)建一個離散顏色條,顏色條的顏色數(shù)量與標注的數(shù)量匹配,標注集中在顏色之下。并且添加輪廓線BORDER=1。IDL> tickname = STRING(10*INDGEN(10), FORMAT='(I0)')IDL> cb = COLORBAR(POSITION=0.05,0.35,0.7,0.4, RGB_TABLE=rgb, $> TICKNAME=tickname, BORDER=1)9);離散色條與一個額外的標簽相比;顏色數(shù)量與這些標簽在線下方。;與填充輪廓圖中使用的類似IDL> tickname = STRING(10*INDGEN(11), FORMAT='(I0)')IDL>

溫馨提示

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

評論

0/150

提交評論