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]; 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. ōImagerHalftone.mesa Michael Plass, January 16, 1984 2:48 pm Edited by Doug Wyatt, November 22, 1983 12:57 pm Data types Operations Makes a square device brick with zero phase. Will return a dot screen if pModulation = qModulation > 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). The transformation takes PixelArray space to device space: [x y 1] T = [s f 1]. Ęē˜J™J™'J™0J˜šĪk ˜ Jšœ œ+˜