DIRECTORY ImagerMasks, ImagerBasic, ImagerBrick ; ImagerHalftone: CEDAR DEFINITIONS ~ BEGIN Transformation: TYPE ~ ImagerBasic.Transformation; PixelArray: TYPE ~ ImagerBasic.PixelArray; PixelBuffer: TYPE ~ ImagerBasic.PixelBuffer; Brick: TYPE ~ ImagerBrick.Brick; Mask: TYPE ~ ImagerMasks.Mask; 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: Mask, mask: Mask, source: PixelArray, transformation: Transformation, deviceBrick: DeviceBrick]; DotScreen: PROC [x, y: REAL] RETURNS [fvalue: REAL]; LineScreen: PROC [x, y:REAL] RETURNS [fvalue: REAL]; END. ŸImagerHalftone.mesa Michael Plass, July 11, 1983 3:56 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 tranformation takes PixelArray space to device space: [x y 1] T = [s f 1]. Êx˜J™J™$J˜šÏk ˜ Jšœ%˜%J˜—J˜Jšœ˜)head2™ Jšœœ˜2Jšœ œ˜*Jšœ œ˜,Jšœœ˜ Jšœœ˜Jšœ œœ˜'šœœœ˜Jšœ œ˜Jšœ œ˜ Jšœœ˜ Jšœœ œœ ˜)Jšœ˜——™ JšÏnœœœœ˜Wšžœœœœœœœ˜€Jšœ˜™˜—šžœœh˜vJšœN™N—Jš ž œœœœ œ˜4Jš ž œœœœ œ˜4J˜—Jšœ˜J˜—…—Æ