<> <> <> <<>> DIRECTORY Basics USING [RawWords]; ColorTransforms: CEDAR DEFINITIONS ~ BEGIN Buffer: TYPE ~ REF BufferRep; BufferRep: TYPE ~ RECORD [SEQUENCE length: NAT OF INTEGER]; Transform: TYPE ~ ARRAY [0..4) OF ARRAY [0..3) OF REAL _ ALL[ALL[0.0]]; <> <> <> <> <<>> CCT: TYPE ~ ARRAY [0..3) OF ARRAY [0..3) OF Buffer; --Color correction transform UCR: TYPE ~ RECORD [ black, remove: Buffer, invert: WORD ]; TRC: TYPE ~ REF TRCRep; TRCRep: TYPE ~ RECORD [SEQUENCE length: NAT OF REAL]; RawBytes: TYPE ~ RECORD [PACKED SEQUENCE COMPUTED CARDINAL OF [0..256)]; BuildCCT: PROC [t: Transform, trc: ARRAY [0..3) OF TRC] RETURNS [cct: CCT]; BuildCCTForMaskedApply: PROC [old: CCT] RETURNS [cct: CCT]; <> <> ApplyCCT: UNSAFE PROC [cct: CCT, x0, x1, x2, y0, y1, y2: LONG POINTER TO Basics.RawWords, count: LONG CARDINAL]; <> ApplyCCTToBytes: UNSAFE PROC [cct: CCT, x0, x1, x2, y0, y1, y2: LONG POINTER TO RawBytes, count: LONG CARDINAL]; <> ApplyCCTToSample: PROC [cct: CCT, x0, x1, x2: CARDINAL] RETURNS [y0, y1, y2: INTEGER]; BuildUCR: PROC [threshold, gamma, fractionRemoved: REAL, invertResult: BOOLEAN _ TRUE, bufferSize: NAT _ 256] RETURNS [ucr: UCR]; ApplyUCR: UNSAFE PROC [ucr: UCR, x0, x1, x2, y0, y1, y2, y3: LONG POINTER TO Basics.RawWords, count: LONG CARDINAL]; <> ApplyUCRToBytes: UNSAFE PROC [ucr: UCR, x0, x1, x2, y0, y1, y2, y3: LONG POINTER TO RawBytes, count: LONG CARDINAL]; <> ApplyUCRToSample: PROC [ucr: UCR, x0, x1, x2: CARDINAL] RETURNS [y0, y1, y2, y3: CARDINAL]; END.