; $Id: hsv.pro,v 1.1 1993/04/02 19:43:31 idl Exp $ Pro HSV, Vlo, Vhi, Satlo, Sathi, Hue, Loops, Colr ;+ ; NAME: ; HSV ; ; PURPOSE: ; Make a color table based on the HSV (Hue, Saturation, and Value) ; color system. ; ; CATEGORY: ; Z4 - Image processing, color table manipulation ; ; CALLING SEQUENCE: ; HLS, Vlo, Vhi, Satlo, Sathi, Hue, Loops [, Colr] ; ; INPUTS: ; Vlo: Starting value, from 0 to 100%. ; ; Vhi: Ending value, from 0 to 100%. ; ; Satlo: Starting saturation, from 0 to 100%. ; ; Sathi: Ending saturation, from 0 to 100%. ; ; Hue: Starting Hue, from 0 to 360 degrees. Red = 0 degs, ; green = 120, blue = 240. ; ; Loops: The number of loops through the color spiral. This ; parameter does not have to be an integer. A negative value ; causes the loops to traverse the spiral in the opposite ; direction. ; ; OUTPUTS: ; No required outputs. ; ; OPTIONAL OUTPUT PARAMETERS: ; Colr: A (256,3) integer array containing the R, G, and B values ; that were loaded into the color tables. ; Red = colr(*, 0), green = colr(*, 1), blue = colr(*, 2). ; ; COMMON BLOCKS: ; COLORS: Contains the red, green and blue color vectors on exit. ; ; SIDE EFFECTS: ; The color tables are loaded. ; ; RESTRICTIONS: ; None. ; ; PROCEDURE: ; Adapted from a program on page 616, Fundamentals of Interactive ; Computer Graphics, Foley and Van Dam. ; ; Using the input parameters, a spiral through the single-ended HSV ; cone is traced. Points along the cone are converted from HLS to RGB. ; ; MODIFICATION HISTORY: ; Written, DMS, Jan, 1983. ; Added common block COLORS, DMS, Dec, 1983 and Apr, 1987. ;- common colors,red,green,blue,cur_red,cur_green,cur_blue on_error,2 ;Return to caller if an error occurs S = (sathi-satlo)/25600.*findgen(256)+satlo/100. V = (Vhi-Vlo)/25600.*findgen(256)+vlo/100. H = Loops*360./256.*findgen(256)+ Hue Hmin = Min(H)/360. IF HMIN LT 0. THEN HMIN = FIX(HMIN)-1 ELSE $ HMIN =FIX(HMIN) H= ((H - Hmin*360.) mod 360.)/60. ;Sector, 0 to 5. IH = FIX(H) f=h-ih ;fractional part x = FIX(255.*[[v*(1.-s)],[v*(1.-s*f)],[v*(1.-s*(1.-f))],[v]]);4 choices mat = [[3,2,0],[1,3,0],[0,3,2],[0,1,3],[2,0,3],[3,0,1]] ;selector ; colr = intarr(256,3) ;define tables for i=0,255 do $ if s(i) eq 0. then colr(i,*)=255.*v(i) else $ for j=0,2 do colr(i,j)=x(i,mat(j,ih(i))) red = colr(*,0) & green = colr(*,1) & blue = colr(*,2) tvlct,red,green,blue cur_red = red & cur_green = green & cur_blue = blue ;save current clrs return end