DIRECTORY ConstantColors, ColorModels, ColorNames, ImagerBasic USING [ConstantColor, ColorRep], Rope USING [ROPE], Real; ConstantColorsImpl: CEDAR PROGRAM IMPORTS Real, ColorNames, ColorModels EXPORTS ConstantColors ~ BEGIN OPEN ConstantColors; ConstantColor: TYPE ~ ImagerBasic.ConstantColor; black: PUBLIC ConstantColor _ MakeRep[x: 0.3101, y: 0.3163, Y: 0]; white: PUBLIC ConstantColor _ MakeRep[x: 0.3101, y: 0.3163, Y: 1]; IntensityToColor: PUBLIC PROC [intensity: REAL, cal: Calibration _ NIL] RETURNS [ConstantColor] ~ { IF intensity <= 0 THEN RETURN [black]; IF intensity >= 1 THEN RETURN [white]; RETURN [MakeRep[x: 0.3101, y: 0.3163, Y: intensity]]; }; HSVToColor: PUBLIC PROC[h,s,v: REAL, cal: Calibration _ NIL] RETURNS[ConstantColor] = { x,y,Y: REAL; r,g,b: REAL; [r: r,g: g,b: b] _ ColorModels.HSVToRGB[h: h, s: s, v: v]; [x: x,y: y,Y: Y] _ ColorModels.RGBToCIE[r: r, g: g, b: b, calibration: Cal[cal]]; RETURN[MakeRep[x: x, y: y,Y: Y]]; }; HSLToColor: PUBLIC PROC[h,s,l: REAL, cal: Calibration _ NIL] RETURNS[ConstantColor] = { x,y,Y: REAL; r,g,b: REAL; [r: r,g: g,b: b] _ ColorModels.HSLToRGB[h: h, s: s, l: l]; [x: x,y: y,Y: Y] _ ColorModels.RGBToCIE[r: r, g: g, b: b, calibration: Cal[cal]]; RETURN[MakeRep[x: x, y: y,Y: Y]]; }; RGBToColor: PUBLIC PROC[r,g,b: REAL, cal: Calibration _ NIL] RETURNS[ConstantColor] = { x,y,Y: REAL; [x: x,y: y,Y: Y] _ ColorModels.RGBToCIE[r: r, g: g, b: b, calibration: Cal[cal]]; RETURN[MakeRep[x: x, y: y,Y: Y]]; }; CIEToColor: PUBLIC PROC [x,y,Y: REAL] RETURNS [ConstantColor] = { RETURN[MakeRep[x: x, y: y,Y: Y]]}; NameToColor: PUBLIC PROC[name: Rope.ROPE, cal: Calibration _ NIL] RETURNS[ConstantColor] = { h,s,l: REAL; names: ColorNames.Names _ ColorNames.ParseColorName[name]; [h: h,s: s,l: l] _ ColorNames.NamesToHSL[names]; RETURN[HSLToColor[h: h,s: s,l: l, cal: cal]]; }; ColorToIntensity: PUBLIC PROC[color: ConstantColor, cal: Calibration _ NIL] RETURNS[intensity: REAL] = { RETURN[CardToReal[color.Y]]; }; ColorToHSV: PUBLIC PROC[color: ConstantColor, cal: Calibration _ NIL] RETURNS[h, s, v: REAL] = { x,y,Y: REAL; r,g,b: REAL; x _ CardToReal[color.x]; y _ CardToReal[color.y]; Y _ CardToReal[color.Y]; [r: r,g: g,b: b] _ ColorModels.CIEToRGB[x: x, y: y,Y: Y, calibration: Cal[cal]]; [h: h,s: s,v: v] _ ColorModels.RGBToHSV[r: r, g: g, b: b]; RETURN[h: h,s: s,v: v]; }; ColorToHSL: PUBLIC PROC[color: ConstantColor, cal: Calibration _ NIL] RETURNS[h, s, l: REAL] = { x,y,Y: REAL; r,g,b: REAL; x _ CardToReal[color.x]; y _ CardToReal[color.y]; Y _ CardToReal[color.Y]; [r: r,g: g,b: b] _ ColorModels.CIEToRGB[x: x, y: y,Y: Y, calibration: Cal[cal]]; [h: h,s: s,l: l] _ ColorModels.RGBToHSL[r: r, g: g, b: b]; RETURN[h: h,s: s,l: l]; }; ColorToRGB: PUBLIC PROC[color: ConstantColor, cal: Calibration _ NIL] RETURNS[r, g, b: REAL] = { x,y,Y: REAL; x _ CardToReal[color.x]; y _ CardToReal[color.y]; Y _ CardToReal[color.Y]; [r: r,g: g,b: b] _ ColorModels.CIEToRGB[x: x, y: y,Y: Y, calibration: Cal[cal]]; RETURN[r: r, g: g, b: b]; }; ColorToCIE: PROC [color: ConstantColor, cal: Calibration _ NIL] RETURNS [x,y,Y: REAL] = { x _ CardToReal[color.x]; y _ CardToReal[color.y]; Y _ CardToReal[color.Y]; }; ColorToName: PUBLIC PROC [color: ConstantColor, cal: Calibration _ NIL] RETURNS [name: Rope.ROPE] = { h,s,l: REAL; [h: h,s: s,l: l] _ ColorToHSL[color,cal]; name _ ColorNames.NamesToRope[ColorNames.HSLToNames[h: h,s: s,l: l]]; RETURN[name]; }; Card: PROC [real: REAL] RETURNS [card: CARDINAL] ~ { int: INT _ Real.RoundLI[real*LAST[CARDINAL]]; card _ MAX[MIN[int, LAST[CARDINAL]], 0]; }; CardToReal: PROC [card: CARDINAL] RETURNS [real: REAL] ~ { RETURN[card*LAST[CARDINAL]]; }; MakeRep: PROC[x,y,Y: REAL] RETURNS[ConstantColor] = { RETURN [NEW[ImagerBasic.ColorRep[constant] _ [constant[x: Card[0.3101], y: Card[0.3163], Y: Card[Y]]]]]; }; Cal: PROC[cal: ColorModels.Calibration] RETURNS [ColorModels.Calibration] = { RETURN[IF cal=NIL THEN ColorModels.GetDefaultCalibration[] ELSE cal]; }; END. ŽConstantColorsImpl.mesa Michael Plass, August 1, 1983 11:43 am Last Edited by: Stone, February 10, 1984 6:17:37 pm PST format utilities ΚQ˜J™J™&J™7šΟk ˜ Jšœ˜J˜ J˜ Jšœ œ˜,Jšœœœ˜Jšœ˜—J˜šœ ˜!Jšœ˜%Jšœ˜Jšœœœ˜—Jšœœ˜0Jšœœ/œ˜BJšœœ/œ˜Bš Οnœœœ œœœ˜cJšœœœ ˜&Jšœœœ ˜&Jšœ œ˜5Jšœ˜—procš ž œœœœœœ˜WKšœœœ˜ Kšœœ˜ Kšœ;˜;Kšœ œC˜RKšœœœ˜!Kšœ˜—š ž œœœœœœ˜WKšœœœ˜ Kšœœ˜ Kšœ;˜;Kšœ œC˜RKšœœœ˜!Kšœ˜—š ž œœœœœœ˜WKšœœœ˜ Kšœ œC˜RKšœ˜!Kšœ˜—š ž œ œœœœ˜AJšœœœ˜"—š ž œœœ œœœ˜\Kšœœ˜ K˜:Kšœ1˜1Kšœ'˜-Kšœ˜—K˜K˜š žœœœ*œœ œ˜hKšœ˜Kšœ˜—š ž œœœ*œœ œ˜`Kšœœœ˜ Kšœœ˜ Kšœ2œœ˜JKšœ3œœ˜PKšœ:˜:Kšœ˜Kšœ˜—K˜š ž œœœ*œœ œ˜`Kšœœœ˜ Kšœœ˜ Kšœ2œœ˜JKšœ3œœ˜PKšœ:˜:Kšœ˜Kšœ˜—š ž œœœ*œœ œ˜`Kšœœœ˜ Kšœ2œœ˜JKšœ3œœ˜PKšœ˜Kšœ˜K˜—š ž œœ+œœœœ˜YKšœ2œœ˜JJ˜—š ž œ œ+œœ œ˜eKšœœ˜ Jšœ)˜)JšœE˜EJšœ˜ J˜—J˜Kšœ™š žœœœœœ˜4Jšœœœœ˜-Jš œœœœœ˜(Jšœ˜—š ž œœœœœ˜:Jšœœœ˜Jšœ˜—šžœœœœ˜5KšœœNœ˜hKšœ˜—šžœœœ˜MKš œœœœ%œ˜EK˜—Jšœ˜J˜—…—„c