pro  image_scale,  image,  pos_dev,  $
               minvalue=min, maxvalue=max,  maxbyte=maxbyte, $
                 stitle=stitle, $
                 scale_pos=scale_pos, no_scale=no_scale, color=color


; Define  positional parameters
 if n_elements(stitle) eq 0 then stitle=''
if n_elements(color) eq 0 then color=!p.color
s = size(image)
if s(0) ne 2 then begin
  print, 'Input image in routine IMAGE_SCALE is improperly defined.'
  return
endif
sx=s(1)
sy=s(2)

if n_elements(maxbyte) eq 0 then maxbyte=!d.table_size-1
if n_elements(min) eq 0 then min=min(image)
if n_elements(max) eq 0 then max=max(image)
if n_params()  lt 2 then begin
       pos_dev = [0,0,s(1),s(2)]
       if !d.name eq 'PS' then pos_dev=pos_dev/500.*10000
endif
;print, max(image, min=m), m
xoff=pos_dev(0)
yoff=pos_dev(1)
xsize=pos_dev(2)-pos_dev(0)
ysize=pos_dev(3)-pos_dev(1)
mag_x = xsize/float(sx)
mag_y = ysize/float(sy)
im = byte((maxbyte*float(image-min)/float(max-min))<maxbyte>0)
 if  !d.name  eq 'X'  then im = congrid(im,  xsize, ysize)


tv,  im, xoff, yoff, xs=xsize, ys=ysize, /dev
if keyword_set(no_scale) then return

;  Construct Scale


if n_elements(scale_pos) eq 0 then scale_pos='r'

case scale_pos of 
     't':  begin ; 
          height = (sy/30.) 
          if n_elements(scale) eq 0 then $
               scale1 =byte(findgen(sx)/dloat(sx-1)<maxbyte>0) else $
               scale1 = congrid(scale, sx)  
          h_dev=(height*float(ysize_dev)/sy)>10.
          if !d.name eq 'PS' then  begin
          ;xyindex, fltarr(sx, height), xa, ya
          
          im1= scale1#replicate(1, sy)
          endif else begin
          xyindex, fltarr(xsize_dev, h_dev), xa, ya
          
          im1=byte(maxbyte*float(xa)/float(xsize_dev-1)<maxbyte>0)
          endelse
          tv,  im1, pos_dev(0),  pos_dev(3)+h_dev*0.75, $
                       xs=pos_dev(2)-pos_dev(0)+1, ys=h_dev, /dev
          for  k=0, 5 do begin
           xyouts,  $
           pos_dev(0)+xsize_dev/5.*k,  pos_dev(3)+h_dev*2., $
           strtrim(string((max-min)/5.*k+min, format='(g10.3)'),2) , $
               /dev,align=0.5 
           plots,  (pos_dev(0)+xsize_dev/5.*k)*[1,1],  $
           pos_dev(3)+1+[0.75,1.75]*h_dev,  /dev
           endfor
           end
    'r':  begin ; 
          
          width_dev = round( (xsize < ysize)/30.) 
          if !d.name eq 'PS' then width_dev = width_dev>500
          if !d.name eq 'X'  then width_dev = width_dev > 10
          if xsize le ysize then width = round(width_dev/mag_x) else $
                 width = round(width_dev/mag_y)
          im1= round(replicate(1, width) $
                     #(findgen(sy)/(sy-1)*maxbyte))
          if !d.name eq 'X' then im1=congrid(im1, width_dev, ysize)
          tv,  im1, xoff+xsize+width_dev*0.5, yoff, $
                       xs=width_dev, ys=ysize, /dev
          plot, [0, 1], [min, max], xst=5, yst=5, /noerase, /nodata,$
          pos=[xoff+xsize+width_dev*0.5, yoff, $
              xoff+xsize+width_dev*0.5+width_dev, yoff+ysize], /dev
     axis, yaxis=1, yst=1,yr=[min, max], yminor=1, yticklen=-0.5, /dev, $
        color=color, ytitle=stitle      
     plots, (xoff+xsize+width_dev*0.5)*[1,1],yoff+[0, ysize],$
         /dev, color=color
     plots, (xoff+xsize+width_dev*0.5)+[0, width_dev], yoff+[0,0],$
      /dev, color=color
     plots, (xoff+xsize+width_dev*0.5)+[0, width_dev], $
      yoff+ysize+[0,0],$
      /dev, color=color

           end
endcase
  
end