Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!usc!sdd.hp.com!decwrl!ucbvax!bloom-beacon!eru!luth!sunic!mcsun!hp4nl!nikhefk!keeshu From: keeshu@nikhefk.UUCP (Kees Huyser) Newsgroups: comp.sys.mac.wanted Subject: Re: Format for MacPaint images Keywords: MacPaint images Message-ID: <774@nikhefk.UUCP> Date: 29 Aug 90 12:00:42 GMT References: <1443@unicorn.WWU.EDU> Sender: keeshu@nikhefk.uucp (Kees Huyser) Reply-To: keeshu@nikhefk.UUCP (Kees Huyser) Organization: the National Institute for Nuclear Physics; Netherlands Lines: 66 In article <1443@unicorn.WWU.EDU> n8541751@unicorn.WWU.EDU (Where there is darkness, light) writes: #Does anyone have format documentation for MacPaint images, or know where it #can be FTP'd? #Kris Bruland This comes from TechNote 086, try to get your hands on this one for more info. =================== MacPaint documents have a file type of PNTG, and since they use only the data fork, you can ignore the resource fork. The data fork contains a 512Pbyte header followed by compressed data which represents a single bitmap (576 pixels wide by 720 pixels tall). At a resolution of 72 pixels per inch, this bitmap occupies the full 8 inch by 10 inch printable area of a standard ImageWriter printer page. Header The first 512 bytes of the document form a header of the following format: % 4Pbyte version number (default = 2) % 38*8 = 304 bytes of patterns % 204 unused bytes (reserved for future expansion) As a Pascal record, the document format could look like the following: MPHeader = RECORD Version: LONGINT; PatArray: ARRAY [1..38] of Pattern; Future: PACKED ARRAY [1..204] of SignedByte; END; If the version number is zero, the document uses default patterns, so you can ignore the rest of the header block, and if your program generates MacPaint documents, you can write 512 bytes of zero for the document header. Most programs which read MacPaint documents can skip the header when reading. Bitmap Following the header are 720 compressed scan lines of data which form the 576 pixel wide by 720 pixel tall bitmap. Without compression, this bitmap would occupy 51,840 bytes and chew up disk space pretty fast; typical MacPaint documents compress to about 10K using the _PackBits procedure to compress runs of equal bytes within each scan line. The bitmap part of a MacPaint document is simply the output of _PackBits called 720 times, with 72 bytes of input each time. To determine the maximum size of a MacPaint file, it is worth noting what Inside Macintosh says about _PackBits: The worst case would be when _PackBits adds one byte to the row of bytes when packing. If we include an extra 512 bytes for the file header information to the size of an uncompressed bitmap (51,840), then the total number of bytes would be 52,352. If we take into account the extra 720 potential bytes (one for each row) to the previous total, the maximum size of a MacPaint file becomes 53,072 bytes. ========================= /* -------------------------------------------------------------------------- */ /* keeshu@nikhefk.uucp or {..!uunet.uu.net}!mcsun!hp4nl!nikhefk!keeshu */ /* The National Institute for Nuclear Physics and High-Energy Physics */ /* P.O.Box 4395, 1009 AJ Amsterdam, The Netherlands, phone:+31205920124 */ /* -------------------------------------------------------------------------- */ /* Disregarding the metaphysical aspects of Schrodinger's cats, I must protest*/ /* at the use of (possibly live) animals for experiments such as these. I urge*/ /* readers to boycott whatever product this research is leading to. */ /* -------------------------------------------------------------------------- */