IDL遥感应用入门(16):使用IDL生成动画(GIF图)
在之前的文章中,我介绍了一种使用IDL自带的XINTERANIMATE函数生成动画的方法,但是这种方法有一种致命的缺点,没有colorbar和经纬度,这对于一幅遥感图像来说是不完整的。
针对上面的问题,我做了如下的思考。
- 动画可以用GIF图片展示,参照:分享一个IDL写GIF的方法
- 所有对象图形法绘制的图像可以存为文件,参照:IDL保存图像(对象图形法)
基于上面的两点思考,我结合分享一个IDL写GIF的方法一文中所给的过程,重新写了教程15的代码
全部代码
;Author:Sailor
;2014-01-17
PRO Course_14
;定义文件路径
MyRootDir='D:\10\'
;遍历文件夹
filearr = file_search(MyRootDir,'*.nc',count=num)
sstdisplay=intarr(4096,2048,num)
FOR fileindex=0,num-1,1 DO BEGIN
nid = ncdf_open(filearr[fileindex], /nowrite )
; inquire about this file; returns structure
file_info = ncdf_inquire(nid)
; print out the dimensions of this file
FOR dimid=0, file_info.ndims -1 DO BEGIN
ncdf_diminq, nid, dimid, name, size
print, ' ---> dimension ' + name + ' is: ', size
ENDFOR
FOR varid=0, file_info.nvars-1 DO BEGIN
; inquire about the variable; returns structure
var = ncdf_varinq( nid, varid )
print,var
print,'========================'
;read all attributes
FOR var_att_id=0,var.natts -1 DO BEGIN
att_name = ncdf_attname( nid, varid, var_att_id )
print,att_name
ncdf_attget, nid, varid, att_name, tematt
print,string(tematt)
ENDFOR
ENDFOR
;read sst
sstid = ncdf_varid(nid, 'analysed_sst')
ncdf_varget, nid, sstid, sst
sst=sst*0.01+273.150
print,size(sst)
landindex=where(sst eq min(sst))
sst[landindex]=max(sst)+1
print,max(sst),min(sst)
sst=shift(sst,2048)
Img=image(sst,rgb_table=39,title=filearr(fileindex),grid_units=1,POSITION=[0.1,0.2,0.9,0.9])
xaxis=axis(TARGET=Img,'X',LOCATION=[0,0],AXIS_RANGE=[-180,180],MINOR=0, MAJOR=19,COORD_TRANSFORM=[-180,360.0/4096.0],title='Longitude(°)')
yaxis=axis(TARGET=Img,'Y',LOCATION=[0,0],AXIS_RANGE=[-90,90],MINOR=0, MAJOR=7,COORD_TRANSFORM=[-90,180.0/2048.0],title='Latitude(°)')
c1 = COLORBAR(rgb_table=39,RANGE=[-2+273.15,34+273.15],ORIENTATION=0,TITLE='(K) ',POSITION=[0.1,0.1,0.9,0.15])
Img.save,MyRootDir+strtrim(string(fileindex),2)+'a.jpg'
ENDFOR
;读取所有的图像
gifarr = file_search(MyRootDir,'*a.jpg',count=num)
in_filenamelist=gifarr
outfname=MyRootDir+'a.gif'
delay_time=20
create_gif_animation,gifarr,outfname,delay_time
spawn,outfname
END
PRO create_gif_animation,in_filenamelist, outfname, delay_time
COMPILE_OPT IDL2
;Get the number of input files.
file_nums = N_ELEMENTS(in_filenamelist)
IF (file_nums GT 0) AND ~STRCMP(in_filenamelist[0], '') THEN BEGIN
FOR i = 0, file_nums - 1 DO BEGIN
img = READ_IMAGE(in_filenamelist[i], red, green, blue)
;Get the size information.
img_s = SIZE(img)
;If the dimension of the img is 3-D, then convert it to a index image first.
IF (img_s[0] EQ 3) THEN BEGIN
img_idx = COLOR_QUAN(img[0, *, *], img[1, *, *], img[2, *, *], tbl_r, tbl_g, tbl_b)
;Reverse array in the second dimension.
img_idx = REFORM(img_idx)
WRITE_GIF, outfname, img_idx, tbl_r, tbl_g, tbl_b, $
DELAY_TIME = delay_time, /MULTIPLE, REPEAT_COUNT = 0
ENDIF
;If the dimension of the img is 2-D, then write it to the gif file directly.
IF (img_s[0] EQ 2) THEN BEGIN
img =REFORM(img)
IF (N_ELEMENTS(red) GT 0) AND (N_ELEMENTS(green) GT 0) AND (N_ELEMENTS(blue) GT 0) THEN BEGIN
WRITE_GIF, outfname, img, red, green, blue, DELAY_TIME = delay_time, /MULTIPLE, REPEAT_COUNT = 0
ENDIF
ENDIF
ENDFOR
;Close the file.
WRITE_GIF, outfname, /CLOSE
ENDIF
END
效果图

一些说明
本文所用的数据依然是教程15的数据,你可以从
此处内容已被隐藏
为了防止资源恶意爬取被和谐,关注微信公众号即可免费解锁
微信扫一扫关注
1. 微信扫码关注公众号,回复 资源下载 获取验证码
2. 在下方输入验证码并提交查看隐藏内容:
也可在微信搜索公众号“麻辣GIS”关注获取
如有问题,欢迎留言。
相关阅读
声明
1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。
2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。
手机阅读
公众号关注
知识星球
手机阅读
最新GIS干货
私享圈子
下一篇:没有下文
已有 29 条评论
评论已提交,审核通过后显示。

































Variable is undefined: IN_FILENAMELIST.
Execution halted at: CREATE_GIF_ANIMATION 88 C:\Users\Administrator\IDLWorkspace82\Default\create_gif_animation.pro
意思是IN_FILENAMELIST这个变量未定义,我不知道哪里出错了,希望指导,非常感谢!
IF (file_nums GT 0) AND ~STRCMP(in_filenamelist[0], '') THEN BEGIN