<> <> <> <<>> DIRECTORY ImagerColorDefs USING [Color, ColorOperator, ConstantColor, SampledColor], ImagerPixelArrayDefs USING [PixelArray], ImagerTransformation USING [Transformation], Rope USING [ROPE]; ImagerColor: CEDAR DEFINITIONS ~ BEGIN Color: TYPE ~ ImagerColorDefs.Color; ConstantColor: TYPE ~ ImagerColorDefs.ConstantColor; SampledColor: TYPE ~ ImagerColorDefs.SampledColor; ColorOperator: TYPE ~ ImagerColorDefs.ColorOperator; PixelArray: TYPE ~ ImagerPixelArrayDefs.PixelArray; Transformation: TYPE ~ ImagerTransformation.Transformation; ROPE: TYPE ~ Rope.ROPE; <> CIE: TYPE ~ RECORD [X, Y, Z: REAL]; <> <> CIEChromaticity: TYPE ~ RECORD [x, y: REAL]; <> <<>> illuminantC: CIEChromaticity ~ [x: 0.310, y: 0.317]; <> ChromaticityFromCIE: PROC [CIE] RETURNS [CIEChromaticity]; <> CIEFromChromaticity: PROC [c: CIEChromaticity, Y: REAL] RETURNS [CIE]; <> <<>> RGBCalibration: TYPE ~ REF RGBCalibrationRep; RGBCalibrationRep: TYPE ~ RECORD [ type: ATOM, -- identifying name red: CIEChromaticity, -- CIE chromaticity of red phosphor green: CIEChromaticity, -- CIE chromaticity of green phosphor blue: CIEChromaticity, -- CIE chromaticity of blue phosphor white: CIEChromaticity, -- CIE chromaticity of white (RGB[1, 1, 1]) YMax: REAL, -- maximum luminance, typically 100 impl: REF RGBCalibrationImplRep -- implementation data (matrices relating RGB and XYZ) ]; RGBCalibrationImplRep: TYPE; <> <<>> GetDefaultCalibration: PROC RETURNS [RGBCalibration]; <> <<>> CreateCalibration: PROC [type: ATOM, red, green, blue: CIEChromaticity, white: CIEChromaticity, YMax: REAL _ 100] RETURNS [RGBCalibration]; <> <<>> RGB: TYPE ~ RECORD [R, G, B: REAL]; <> <<>> CIEFromRGB: PROC [rgb: RGB, calibration: RGBCalibration _ NIL] RETURNS [CIE]; <> <<>> RGBFromCIE: PROC [cie: CIE, calibration: RGBCalibration _ NIL] RETURNS [RGB]; <> <> RGBMaxY: PROC [c: CIEChromaticity, calibration: RGBCalibration _ NIL] RETURNS [Y: REAL]; <> <<[x, y, Y] is inside the device's gamut iff Y<=RGBMaxY[[x, y], calibration].>> <<>> YIQ: TYPE ~ RECORD [Y, I, Q: REAL]; <> <> <> <<>> YIQFromRGB: PROC [RGB] RETURNS [YIQ]; RGBFromYIQ: PROC [YIQ] RETURNS [RGB]; <> HSV: TYPE ~ RECORD [H, S, V: REAL]; <> <> <> HSVFromRGB: PROC [RGB] RETURNS [HSV]; RGBFromHSV: PROC [HSV] RETURNS [RGB]; <> HSL: TYPE ~ RECORD [H, S, L: REAL]; <> <> <> HSLFromRGB: PROC [RGB] RETURNS [HSL]; RGBFromHSL: PROC [HSL] RETURNS [RGB]; <> <<>> <> Find: PROC [name: ROPE] RETURNS [ConstantColor]; <> <<>> ColorFromAtom: PROC [atom: ATOM] RETURNS [ConstantColor]; <> <> <<$White $Gray $Black $Invert $Clear>> <<$Red $Green $Blue $Cyan $Magenta $Yellow>> <<$Pink $Orange $Brown $Olive $YellowGreen $Purple>> ColorFromGray: PROC [f: REAL] RETURNS [ConstantColor]; <> <> ColorFromRGB: PROC [rgb: RGB, calibration: RGBCalibration _ NIL] RETURNS [ConstantColor]; <> <<>> ColorFromCIE: PROC [cie: CIE] RETURNS [ConstantColor]; <> <<>> GrayFromColor: PROC [color: ConstantColor] RETURNS [REAL]; <> AtomFromColor: PROC [color: ConstantColor] RETURNS [ATOM]; <> <> MakeSampledBlack: PROC [pa: PixelArray, um: Transformation, clear: BOOL _ FALSE] RETURNS [SampledColor]; MakeSampledColor: PROC [pa: PixelArray, um: Transformation, colorOperator: ColorOperator] RETURNS [SampledColor]; END.