在ENVIIDL代码:以下代码:PRO remote_sensing_gui
; 主程序入口
; 声明全局变量存储图像数据和控件ID
COMMON RS_DATA_COMMON, rs_data, personal_img, scenery_img, rs_display, rs_info
main_base = WIDGET_BASE(/COLUMN, TITLE=‘遥感软件开发大作业’, XSIZE=1200, YSIZE=800)
; 第一行:个人信息区(行布局)
info_row = WIDGET_BASE(main_base, /ROW, SPACING=20, MARGIN=20)
; 左侧个人信息面板(列布局)
personal_panel = WIDGET_BASE(info_row, /COLUMN, XSIZE=300)
WIDGET_LABEL, personal_panel, VALUE=‘个人信息’, FONT=‘{微软雅黑,16,BOLD}’
WIDGET_LABEL, personal_panel, VALUE=‘姓名:王彦哲’, FONT=‘{宋体,14}’
WIDGET_LABEL, personal_panel, VALUE=‘学号:20222703132’, FONT=‘{宋体,14}’
WIDGET_LABEL, personal_panel, VALUE=‘班级:遥感科学与技术22班’, FONT=‘{宋体,14}’
WIDGET_LABEL, personal_panel, VALUE=‘兴趣爱好:遥感影像处理、无人机测绘、摄影’, FONT=‘{宋体,14}’
; 右侧个人肖像区
portrait_area = WIDGET_BASE(info_row, XSIZE=200, YSIZE=200)
WIDGET_LABEL, portrait_area, VALUE=‘个人肖像’, FONT=‘{微软雅黑,14,BOLD}’
personal_img = WIDGET_IMAGE(portrait_area, XSIZE=200, YSIZE=200, /RETURN_ID)
; 第二行:图像显示区(行布局)
display_row = WIDGET_BASE(main_base, /ROW, SPACING=10, MARGIN=10)
; 左侧遥感影像区(列布局)
rs_panel = WIDGET_BASE(display_row, /COLUMN, XSIZE=600)
WIDGET_LABEL, rs_panel, VALUE=‘专业遥感影像’, FONT=‘{微软雅黑,14,BOLD}’
rs_display = WIDGET_IMAGE(rs_panel, XSIZE=600, YSIZE=400, /RETURN_ID)
rs_info = WIDGET_LABEL(rs_panel, VALUE=‘影像说明:请加载遥感影像’, FONT=‘{宋体,12}’)
; 右侧家乡美景区(列布局)
scenery_panel = WIDGET_BASE(display_row, /COLUMN, XSIZE=400)
WIDGET_LABEL, scenery_panel, VALUE=‘家乡美景’, FONT=‘{微软雅黑,14,BOLD}’
scenery_img = WIDGET_IMAGE(scenery_panel, XSIZE=400, YSIZE=400, /RETURN_ID)
; 第三行:功能按钮区(行布局)
button_row = WIDGET_BASE(main_base, /ROW, SPACING=20, MARGIN=20)
load_portrait_btn = WIDGET_BUTTON(button_row, VALUE=‘加载个人肖像’, UVALUE=‘portrait’)
load_scenery_btn = WIDGET_BUTTON(button_row, VALUE=‘加载家乡美景’, UVALUE=‘scenery’)
load_rs_btn = WIDGET_BUTTON(button_row, VALUE=‘加载遥感影像’, UVALUE=‘remote’)
mode_combo = WIDGET_COMBOBOX(button_row, ITEMS=[‘原始影像’, ‘假彩色合成’, ‘NDVI计算’], SELECTED=0)
; 注册事件处理过程
XWINDOW, EVENT_HANDLER=‘LOAD_HANDLER’, /BUTTON, ID=load_portrait_btn
XWINDOW, EVENT_HANDLER=‘LOAD_HANDLER’, /BUTTON, ID=load_scenery_btn
XWINDOW, EVENT_HANDLER=‘LOAD_HANDLER’, /BUTTON, ID=load_rs_btn
XWINDOW, EVENT_HANDLER=‘MODE_CHANGE_HANDLER’, /COMBOBOX, ID=mode_combo
; 显示界面
WIDGET_CONTROL, main_base, /REALIZE
XMANAGER, ‘遥感大作业界面’, main_base, /NO_BLOCK
END
PRO LOAD_HANDLER, event
; 图像加载事件处理过程
COMMON RS_DATA_COMMON, rs_data, personal_img, scenery_img, rs_display, rs_info
SWITCH event.UVALUE OF
‘portrait’: BEGIN ; 加载个人肖像
file = DIALOG_PICKFILE(TITLE=‘选择个人肖像’, FILTER=‘.jpg;.png;*.bmp’)
IF (file NE ‘’) THEN BEGIN
img = READ_IMAGE(file)
WIDGET_CONTROL, personal_img, SET_VALUE=img
ENDIF
END
'scenery': BEGIN ; 加载家乡美景
file = DIALOG_PICKFILE(TITLE='选择家乡美景', FILTER='*.jpg;*.png;*.bmp')
IF (file NE '') THEN BEGIN
img = READ_IMAGE(file)
WIDGET_CONTROL, scenery_img, SET_VALUE=img
ENDIF
END
'remote': BEGIN ; 加载遥感影像
file = DIALOG_PICKFILE(TITLE='选择遥感影像', FILTER='*.tif;*.img;*.hdr')
IF (file NE '') THEN BEGIN
rs_data = READ_IMAGE(file) ; 读取遥感数据
WIDGET_CONTROL, rs_display, SET_VALUE=BYTSCL(rs_data)
; 更新影像说明
dims = SIZE(rs_data, /DIMENSIONS)
type = SIZE(rs_data, /TYPE)
info_str = '影像说明:' + FILE_BASENAME(file) + $
', 尺寸:' + STRTRIM(dims[0] + 'x' + dims[1] + 'x' + dims[2], 2) + $
', 数据类型:' + STRTRIM(STR(type), 2)
WIDGET_CONTROL, rs_info, SET_TEXT=info_str
ENDIF
END
ENDSWITCH
END
PRO MODE_CHANGE_HANDLER, event
; 显示模式切换事件处理过程
COMMON RS_DATA_COMMON, rs_data, personal_img, scenery_img, rs_display, rs_info
IF (N_ELEMENTS(rs_data) EQ 0) THEN RETURN ; 未加载影像时不处理
SWITCH event.INDEX OF
0: BEGIN ; 原始影像
WIDGET_CONTROL, rs_display, SET_VALUE=BYTSCL(rs_data)
END
1: BEGIN ; 假彩色合成(假设为4波段数据)
dims = SIZE(rs_data, /DIMENSIONS)
IF (dims[2] GE 4) THEN BEGIN
rgb = [rs_data[*,*,3], rs_data[*,*,2], rs_data[*,*,1]] ; 4-3-2波段合成
WIDGET_CONTROL, rs_display, SET_VALUE=BYTSCL(rgb)
ENDIF
END
2: BEGIN ; NDVI计算(归一化植被指数)
dims = SIZE(rs_data, /DIMENSIONS)
IF (dims[2] GE 4) THEN BEGIN
nir = FLOAT(rs_data[*,*,3]) ; 近红外波段
red = FLOAT(rs_data[*,*,2]) ; 红波段
ndvi = (nir - red) / (nir + red + 1E-10) ; 防止除零
ndvi_img = BYTSCL(ndvi)
WIDGET_CONTROL, rs_display, SET_VALUE=ndvi_img
ENDIF
END
ENDSWITCH
END,有错误:IDL> remote_sensing_gui
COMMON RS_DATA_COMMON, rs_data, personal_img, scenery_img, rs_display, rs_info
^
% Attempt to extend common block: RS_DATA_COMMON
At: C:\Users\DELL\IDLWorkspace\Default\remote_sensing_gui.pro, Line 5
personal_img = WIDGET_IMAGE(portrait_area, XSIZE=200, YSIZE=200, /RETURN_ID)
^
% Syntax error.
At: C:\Users\DELL\IDLWorkspace\Default\remote_sensing_gui.pro, Line 23
rs_display = WIDGET_IMAGE(rs_panel, XSIZE=600, YSIZE=400, /RETURN_ID)
^
% Syntax error.
At: C:\Users\DELL\IDLWorkspace\Default\remote_sensing_gui.pro, Line 31
scenery_img = WIDGET_IMAGE(scenery_panel, XSIZE=400, YSIZE=400, /RETURN_ID)
^
% Syntax error.
At: C:\Users\DELL\IDLWorkspace\Default\remote_sensing_gui.pro, Line 37
% 5 Compilation error(s) in module REMOTE_SENSING_GUI.
COMMON RS_DATA_COMMON, rs_data, personal_img, scenery_img, rs_display, rs_info
^
% Attempt to extend common block: RS_DATA_COMMON
At: C:\Users\DELL\IDLWorkspace\Default\remote_sensing_gui.pro, Line 59
% 2 Compilation error(s) in module LOAD_HANDLER.
COMMON RS_DATA_COMMON, rs_data, personal_img, scenery_img, rs_display, rs_info
^
% Attempt to extend common block: RS_DATA_COMMON
At: C:\Users\DELL\IDLWorkspace\Default\remote_sensing_gui.pro, Line 97
% 2 Compilation error(s) in module MODE_CHANGE_HANDLER.
COMMON RS_DATA_COMMON, rs_data, personal_img, scenery_img, rs_display, rs_info
^
% Attempt to extend common block: RS_DATA_COMMON
At: C:\Users\DELL\IDLWorkspace\Default\remote_sensing_gui.pro, Line 5
personal_img = WIDGET_IMAGE(portrait_area, XSIZE=200, YSIZE=200, /RETURN_ID)
^
% Syntax error.
At: C:\Users\DELL\IDLWorkspace\Default\remote_sensing_gui.pro, Line 23
rs_display = WIDGET_IMAGE(rs_panel, XSIZE=600, YSIZE=400, /RETURN_ID)
^
% Syntax error.
At: C:\Users\DELL\IDLWorkspace\Default\remote_sensing_gui.pro, Line 31
scenery_img = WIDGET_IMAGE(scenery_panel, XSIZE=400, YSIZE=400, /RETURN_ID)
^
% Syntax error.
At: C:\Users\DELL\IDLWorkspace\Default\remote_sensing_gui.pro, Line 37
% Attempt to call undefined procedure: ‘REMOTE_SENSING_GUI’.
% Execution halted at: $MAIN$
,请进行改正
最新发布