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