;+
; NAME:  
;	GAMMASCAL
;
; PURPOSE:
;	To modify images in order to account
;       for a certain gamma-factor WITHOUT
;       changing the IDL color table.
;
; CATEGORY:
;	PICO
;
; CALLING SEQUENCE:
;	result=GAMMASCAL(image,gamma)
;
; INPUTS:
;	image:  The image to be scaled
;       gamma:  The gamma exponent to be used
;
; OPTIONAL INPUTS:
;	None
;
; KEYWORD PARAMETERS:
;	VERBOSE: Gives time indications about 
;               needed time...
;
; OUTPUTS:
;	result: The scaled image
;
; OPTIONAL OUTPUTS:
;	None
;
; EXAMPLE:
;	TVSCL,GAMMASCAL(image,.3)
;
;       The image will be displayed using a gamma
;       exponent of 0.3 without changing the IDL
;       color table
;	
; COMMON BLOCKS:
;	None
;
; SIDE EFFECTS:
;	Unknown
;
; RESTRICTIONS:
;	None
;
; PROCEDURE:
;	A lookup table is created and then each 
;       pixel value is replaced by the new one.
;       By efficient programming the procedure
;       could perhaps be speeded up slightly.
;
; MODIFICATION HISTORY:
;	V1.0 Alexander Epple 14-FEB-1996 MPAe Lindau
;-

FUNCTION gammascal,img,gamma, VERBOSE=verbose
t=systime(1)

IF (gamma EQ 1) THEN BEGIN
    IF KEYWORD_SET(verbose) THEN BEGIN
        MESSAGE,/INFO,/CONT,SC(systime(1)-t,DEC=2)+' sec'
    ENDIF
    RETURN,img 
ENDIF 

image=img

sz=SIZE(img)
data_type=sz(N_ELEMENTS(sz)-2)

mini=MIN(image)
image=image-mini

maxi=max(image)
span=maxi

IF (data_type EQ 2) THEN BEGIN
    lut=span*((FINDGEN(span)/span)^gamma)
ENDIF ELSE BEGIN
    lut=span*((FINDGEN(32000)/32000.)^gamma)
    faktor=32000./max(image)
    image=TEMPORARY(image)*faktor
ENDELSE

image=RECONVERT(lut(TEMPORARY(image))+mini,data_type)

IF KEYWORD_SET(verbose) THEN BEGIN
    MESSAGE,/INFO,/CONT,SC(systime(1)-t,DEC=2)+' sec'
ENDIF

RETURN,image

END
