DIRECTORY ImagerColorDefs USING [ColorOperator, ConstantColor], ImagerSample USING [Sample, SampleBuffer]; ImagerColorOperator: CEDAR DEFINITIONS ~ BEGIN ConstantColor: TYPE ~ ImagerColorDefs.ConstantColor; Sample: TYPE ~ ImagerSample.Sample; SampleBuffer: TYPE ~ ImagerSample.SampleBuffer; ColorOperator: TYPE ~ ImagerColorDefs.ColorOperator; GetColorOperatorClass: PROC [ColorOperator] RETURNS [ATOM]; PixelProc: TYPE ~ PROC [i: NAT] RETURNS [Sample]; ColorFromPixel: PROC [op: ColorOperator, pixel: PixelProc] RETURNS [ConstantColor]; ColorFromSamples: PROC [op: ColorOperator, s0, s1, s2, s3: Sample _ 0] RETURNS [ConstantColor]; Mapper: TYPE ~ REF MapperRep; MapperRep: TYPE ~ RECORD [ op: ColorOperator, component: ATOM, maxIn, maxOut: Sample, MapPixel: PROC [mapper: Mapper, pixel: PixelProc] RETURNS [Sample], MapPixels: PROC [mapper: Mapper, pixels: SampleBuffer, j: NAT _ 0, buffer: SampleBuffer, bi, bj: NAT _ 0, count: NAT], data: REF ]; NewMapper: PROC [op: ColorOperator, component: ATOM, maxIn, maxOut: Sample] RETURNS [Mapper]; MapPixel: PROC [mapper: Mapper, pixel: PixelProc] RETURNS [Sample]; MapSamples: PROC [mapper: Mapper, s0, s1, s2, s3: Sample _ 0] RETURNS [Sample]; MapPixels: PROC [mapper: Mapper, pixels: SampleBuffer, j: NAT _ 0, buffer: SampleBuffer, bi, bj: NAT _ 0, count: NAT]; BlackColorModel: PROC [clear: BOOL] RETURNS [ColorOperator]; GrayLinearColorModel: PROC [sWhite, sBlack: REAL, maxSampleValue: Sample _ 0, sampleMap: PROC [Sample] RETURNS [REAL] _ NIL ] RETURNS [ColorOperator]; GrayDensityColorModel: PROC [sWhite, sBlack, dBlack: REAL, maxSampleValue: Sample _ 0, sampleMap: PROC [Sample] RETURNS [REAL] _ NIL ] RETURNS [ColorOperator]; GrayVisualColorModel: PROC [sWhite, sBlack: REAL, maxSampleValue: Sample _ 0, sampleMap: PROC [Sample] RETURNS [REAL] _ NIL ] RETURNS [ColorOperator]; MapColorModel: PROC [maxSampleValue: Sample, map: PROC [Sample] RETURNS [ConstantColor] ] RETURNS [ColorOperator]; RGBLinearColorModel: PROC [maxSampleValue: Sample] RETURNS [ColorOperator]; END. JImagerColorOperator.mesa Copyright c 1985 by Xerox Corporation. All rights reserved. Doug Wyatt, May 17, 1985 10:37:55 am PDT Basic Operations Returns an ATOM that identifies the ColorOperator. Applies op to [pixel[0], pixel[1], ... , pixel[op.samplesPerPixel-1]]. Applies op to [s0, s1, ...]. Creates a pixel-to-sample mapper for the named component. The currently understood names are $Intensity, $Red, $Green, $Blue. Eventually, we will provide proper facilities for calibration. Maps a single pixel into a sample value IN[0..mapper.maxSampleValue]. Like MapPixel, but convenient to call from the interpreter. FOR k: NAT IN[0..count) DO pixel: PROC [i: NAT] RETURNS [Sample] ~ { RETURN[pixels.GetSample[i, j+k]] }; buffer.PutSample[bi, bj+k, MapPixel[mapper, pixel]]; ENDLOOP; Color Model Operators ... the color model operator implicitly used by MakeSampledBlack. The resulting ColorOperator has the following effect for a single sample s0 IN[0..1]: IF s0=1 THEN RETURN[MakeGray[1]]; -- if s0=1, the result is black IF NOT clear THEN RETURN[MakeGray[0]]; -- if s0=0 AND NOT clear, the result is white RETURN[NIL]; -- if s0=0 AND clear, the result is "no color" ... colorModelOperators/Xerox/GrayLinear, as specified in the Raster Encoding Standard. The resulting ColorOperator maps a single sample s0 into MakeGray[f], where: s _ IF maxSampleValue=0 THEN s0 ELSE sampleMap[s0]; f _ MIN[MAX[(s-sWhite)/(sBlack-sWhite), 0.0], 1.0]; ... colorModelOperators/Xerox/GrayDensity, as specified in the Raster Encoding Standard. The resulting ColorOperator maps a single sample s0 into MakeGray[f], where: s _ IF maxSampleValue=0 THEN s0 ELSE sampleMap[s0]; d _ ((s-sWhite)/(sBlack-sWhite))*dBlack; f _ MIN[MAX[1-10**d, 0.0], 1.0]; -- 10**d means 10 to the power d ... colorModelOperators/Xerox/GrayVisual, as specified in the Raster Encoding Standard. The resulting ColorOperator maps a single sample s0 into MakeGray[f], where: s _ IF maxSampleValue=0 THEN s0 ELSE sampleMap[s0]; L _ (s-sBlack)/(sWhite-sBlack); Y _ IF L<=0.09 THEN L/0.09 ELSE ((L+0.16)/0.25)**3; -- x**3 means x cubed f _ MIN[MAX[1-0.01*Y, 0.0], 1.0]; ... colorModelOperators/Xerox/Map, as specified in the Raster Encoding Standard. The resulting ColorOperator maps a single sample s0 into the ConstantColor map[s0]. ... a simple color model for red, green, blue separations; expects samplesPerPixel=3. ΚX˜codešœ™Kšœ Οmœ1™K˜—š œžœ$žœ ˜CKšœ(žœ™EK˜—š  œžœ.žœ ˜OK™;K˜—š   œžœ+žœ%žœ žœ˜wšžœžœžœ ž™Kš œžœžœžœžœ™MKšœ4™4Kšžœ™—K™——™š œžœ žœžœ˜