<> <> <> DIRECTORY ImagerBasic USING [PixelArray, PixelBuffer, Transformation], ImagerBrick USING [Brick], ImagerPixelMaps USING [PixelMap]; ImagerHalftone: CEDAR DEFINITIONS ~ BEGIN <> Transformation: TYPE ~ ImagerBasic.Transformation; PixelArray: TYPE ~ ImagerBasic.PixelArray; PixelBuffer: TYPE ~ ImagerBasic.PixelBuffer; Brick: TYPE ~ ImagerBrick.Brick; PixelMap: TYPE ~ ImagerPixelMaps.PixelMap; DeviceBrick: TYPE ~ REF DeviceBrickRep; DeviceBrickRep: TYPE ~ RECORD [ fMin, sMin: INTEGER, fPeriod: NAT, phase: NAT, seq: SEQUENCE sPeriod: NAT OF PixelBuffer ]; <> MakeDeviceBrick: PROC [brick: Brick, maxPixelValue: CARDINAL] RETURNS [d: DeviceBrick]; MakeSquareBrick: PROC [size: NAT, p, q: INTEGER, pModulation, qModulation: REAL, maxPixelValue: CARDINAL] RETURNS [DeviceBrick]; < 0, a line screen if one of these is zero, otherwise something in between a dot and line screen. The screen angle will be arctan (p/q), and the period will be size/sqrt(p*p+q*q).>> Halftone: PROC [dest: PixelMap, runs: PROC[run: PROC[sMin, fMin: INTEGER, fSize: NAT]], source: PixelArray, transformation: Transformation, deviceBrick: DeviceBrick, invertOutput: BOOLEAN _ FALSE, transparent: BOOLEAN _ FALSE]; <> DotScreen: PROC [x, y: REAL] RETURNS [fvalue: REAL]; LineScreen: PROC [x, y:REAL] RETURNS [fvalue: REAL]; END.