FUNCTION mycolor,color,gval,bval,rvalret=rvalret,gvalret=gvalret,bvalret=bvalret IF NOT(IS_DEF(color)) OR (IS_DEF(gval) AND NOT(IS_DEF(bval))) THEN bEGIN print,'Usage: mycolor(index) with index [0,255]' print,' or: mycolor(r,g,b) with r,g,b [0,1]' return,0 END tvlct,r,g,b,/get ; Device is TRUE COLOR IF (!D.N_COLORS GT 256) THEN BEGIN ; Color is giveb by r,g,b val IF IS_DEF(gval) THEN BEGIN rvalret=color gvalret=gval bvalret=bval col=color+256L*(gval+256L*bval) ; Color is given by index, so read r,g,b from the defined PALETTE END ELSE BEGIN IF max(color) LT 256 THEN BEGIN col=r(color)+256L*(g(color)+256L*b(color)) rvalret=r(color) gvalret=g(color) bvalret=b(color) END ELSE BEGIN col=color END END ; Deviced has a PALETTE END ELSE BEGIN ; Color is giveb by r,g,b val, so find best match within the given PALETTE IF IS_DEF(gval) THEN BEGIN ; Explicitly account for the posibility to operate on vectors ss=SIZE(color) sss=SIZE(ss) n=ss(sss(1)-1) col=LONARR(n) FOR i=0L,n-1 DO BEGIN dist=(r-color(i))^2.0+(g-gval(i))^2.0+(b-bval(i))^2.0 jj=SORT(dist) col(i)=jj(0) END rvalret=r(col) gvalret=g(col) bvalret=b(col) ; Color is given by index, so just return the index END ELSE BEGIN col=color(0) IF col LT 256 THEN BEGIN rvalret=r(color) gvalret=g(color) bvalret=b(color) END END END return,col END