IDLnetJPIP Example
The following example uses the IDLnetJPIP object class to access and display JPEG2000 data from a remote server. Please note that before you compile the code (below) in your IDL Workbench, you must edit two lines in the PRO code for jpip_kakadu_server_test
to provide the correct information for the remote JPIP server (the sections that need input are noted in the code comments).
;;-------------------------------------------
FUNCTION jpip_progressive_updates, img, data
compile_opt idl2
ON_ERROR, 2 ; Return errors to caller.
; Catch all errors and display an error dialog.
CATCH, errorStatus
IF (errorStatus ne 0) THEN BEGIN
CATCH, /CANCEL
PRINT, !error_state.msg
r = DIALOG_MESSAGE(!error_state.msg, TITLE='JPIP Error', $
DIALOG_PARENT=cwBase, /ERROR)
RETURN, 1
ENDIF
PRINT, 'progressive update
;;HELP, img
IF (data NE 3) THEN BEGIN
TV, img
ENDIF
IF (data EQ 3) then begin
TV, img, TRUE=1
ENDIF
RETURN, 1
END
;;------------------------------------------------
FUNCTION jpip_status_msgs, msg, data
compile_opt idl2
ON_ERROR, 2 ; Return errors to caller.
; Catch all errors and display an error dialog.
CATCH, errorStatus
IF (errorStatus NE 0) THEN BEGIN
CATCH, /CANCEL
PRINT, !error_state.msg
r = Dialog_Message(!error_state.msg, TITLE='JPIP Error', $
DIALOG_PARENT=cwBase, /ERROR)
RETURN, 1
ENDIF
PRINT, msg
RETURN, 1
end
;;-------------------------------------------------
PRO jpip_img_props, oJpip
compile_opt idl2
; Catch all errors and display an error dialog.
CATCH, errorStatus
IF (errorStatus NE 0) THEN BEGIN
CATCH, /CANCEL
PRINT, !error_state.msg
r = DIALOG_MESSAGE(!error_state.msg, TITLE='JPIP Error', $
DIALOG_PARENT=cwBase, /ERROR)
RETURN
ENDIF
PRINT, ''
oJpip->GetProperty, BIT_DEPTH = BIT_DEPTH
PRINT, 'BIT_DEPTH =', STRTRIM(STRING(BIT_DEPTH), 2)
oJpip->GetProperty, COLOR_SPACE = COLOR_SPACE
PRINT, 'COLOR_SPACE =', COLOR_SPACE
oJpip->GetProperty, DIMENSIONS = DIMENSIONS
PRINT, 'DIMENSIONS =', STRTRIM(STRING(DIMENSIONS), 2)
oJpip->GetProperty, N_COMPONENTS = N_COMPONENTS
PRINT, 'N_COMPONENTS =', STRTRIM(STRING(N_COMPONENTS), 2)
oJpip->GetProperty, N_LAYERS = N_LAYERS
PRINT, 'N_LAYERS =', STRTRIM(STRING(N_LAYERS), 2)
oJpip->GetProperty, N_LEVELS = N_LEVELS
PRINT, 'N_LEVELS =', STRTRIM(STRING(N_LEVELS), 2)
oJpip->GetProperty, N_TILES = N_TILES
PRINT, 'N_TILES =', STRTRIM(STRING(N_TILES), 2)
oJpip->GetProperty, PROGRESSION = PROGRESSION
PRINT, 'PROGRESSION =', PROGRESSION
oJpip->GetProperty, REVERSIBLE = REVERSIBLE
PRINT, 'REVERSIBLE =', STRTRIM(STRING(REVERSIBLE), 2)
oJpip->GetProperty, SIGNED = SIGNED
PRINT, 'SIGNED =', STRTRIM(STRING(SIGNED), 2)
oJpip->GetProperty, TILE_DIMENSIONS = TILE_DIMENSIONS
PRINT, 'TILE_DIMENSIONS =', STRTRIM(STRING(TILE_DIMENSIONS), 2)
oJpip->GetProperty, TILE_RANGE = TILE_RANGE
PRINT, 'TILE_RANGE =', STRTRIM(STRING(TILE_RANGE ), 2)
oJpip->GetProperty, YCC = YCC
PRINT, 'YCC =', STRTRIM(STRING(YCC), 2)
PRINT, ''
end
;;----------------------------------------------
PRO jpip_kakadu_server_test
compile_opt idl2
; To make this example work you must provide a
; valid JPIP server url and port number;
; valid path to an image on the server.
; Catch all errors and display an error dialog.
CATCH, errorStatus
IF (errorStatus NE 0) THEN BEGIN
CATCH, /CANCEL
PRINT, !error_state.msg
r = DIALOG_MESSAGE(!error_state.msg, TITLE='JPIP Error', $
DIALOG_PARENT=cwBase, /ERROR)
RETURN
ENDIF
oJpip = OBJ_NEW('IdlNetJpip')
; *********************************************
; YOU MUST EDIT THE NEXT TWO LINES
; You must provide a valid JPIP server url and port number.
oJpip->SetProperty, SERVER_NAME = '10.17.2.13'
oJpip->SetProperty, SERVER_PORT = 82
oJpip->SetProperty, STATUS_CALLBACK_FUNCTION = 'jpip_status_msgs'
oJpip->SetProperty, STATUS_CALLBACK_DATA = 1001
oJpip->SetProperty, PROGRESSIVE_CALLBACK_FUNCTION = 'jpip_progressive_updates'
; Open a dataset on the JPIP server.
;**********************************************
; YOU MUST EDIT THIS LINE
; You must provide a valid path to an image on the server.
oJpip->Open, 'jp2/utm.jp2
region = [0, 0, 511, 511]
jpip_img_props, oJpip
oJpip->GetProperty, N_COMPONENTS = ncomps
oJpip->GetProperty, N_LAYERS = nlayers
oJpip->SetProperty, PROGRESSIVE_CALLBACK_DATA = ncomps
img = oJpip->GetData(REGION=region, DISCARD_LEVELS=0, $
MAX_LAYERS=nlayers, STREAM_DIMENSIONS=strmdims)
IF (ncomps NE 3) THEN BEGIN
TV, img
ENDIF
IF (ncomps EQ 3) THEN BEGIN
TV, img, TRUE=1
ENDIF
oJpip->GetStatistics, AVAILABLE_BYTES=ab, BIT_RATE=br, BYTES_STREAMED=bs
msg = 'Stats: Available Bytes = ' + STRTRIM(ab, 2) + ', Bit Rate = ' + STRTRIM(br, 2) + ', Bytes Streamed = ' + STRTRIM(bs, 2)
PRINT, msg
OBJ_DESTROY, oJpip
PRINT, 'done'
See Also
CATCH, DIALOG_MESSAGE, IDLnetJPIP, OBJ_DESTROY, OBJ_NEW, STRTRIM, TV