我想用全色图像创建一个文件图像,新图像= IDL中的全色* 0.05678345。但是,结果有错误:%无法分配内存:生成数组。 没有足够的空位 %执行暂停于:Q_RAD_SIXSIN_GEN_P_221936 35 这是我的代码:
PRO q_rad_sixsin_gen_p_221936
ENVI, /RESTORE_BASE_SAVE_FILES
ENVI_BATCH_INIT, LOG_FILE='batch.txt'
input_dir = 'D:\BA34\Panchromatic\BA34_pan_221936_10oct25'
input_dir_name_lenght=STRLEN(input_dir)
imagelist=FILE_SEARCH('D:\BA34\Panchromatic\BA34_pan_221936_10oct25\*.tif',COUNT=count)
;imagelistt=FILE_SEARCH('D:\quickbird\test.tif', COUNT=count)
;envi_open_file, imagelistt, r_fid=tfid,NO_REALIZE=1
;map_info=envi_get_map_info(fid=tfid)
COMPILE_OPT IDL2
FORWARD_FUNCTION ENVI_GET_DATA, ENVI_GET_MAP_INFO
FOR h=0, count-1 Do Begin
path_filename=imagelist[h]
K_pan= 0.05678345
Pan_Width= 0.2846000
envi_open_file, imagelist[h], r_fid=fid,NO_REALIZE=1
ENVI_FILE_QUERY,fid,DIMS=dims,NS=ns,NL=nl,sname=sname
map_info=envi_get_map_info(fid=fid)
filenamelength=STRLEN(sname)
outname=STRMID(sname,0,filenamelength-4)
dims=[-1L, 0, ns-1, 0, nl-1]
pan = ENVI_GET_DATA(FID=fid,dims=dims,pos=0)
br=fltarr(ns,1,nl)
br = (pan *(K_pan)/(Pan_Width))*0.1
envi_write_envi_file, br, map_info=map_info, out_name=outname+'_rad.dat', r_fid=fid, interleave=1
envi_file_mng, id=fid, /remove
ENDFOR
END
非常感谢您帮助纠正代码。
连
答案 0 :(得分:0)
从上下文不清楚这是从第一个循环实例还是在后续迭代中发生的。释放内存的一种方法是使用temporary()函数:它释放了数组使用的内存空间。在您的情况下,您可以使用:
br = temporary(pan) * 0.1* K_pan)/Pan_Width
以后
envi_write_envi_file, temporary(br), map_info=map_info, out_name=outname+'_rad.dat', r_fid=fid, interleave=1