如何在IDL中写入全色图像

时间:2014-07-31 06:44:07

标签: idl

我想用全色图像创建一个文件图像,新图像= 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

非常感谢您帮助纠正代码。

1 个答案:

答案 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