From: Matthew Flatt <mflatt@cs.utah.edu> To: plt-scheme@list.cs.brown.edu Date: Wed, 4 Jun 2003 09:57:51 -0600 Subject: [plt-scheme] 204.4 The exp-tagged code in CVS for Mzscheme and MrEd is now version 204.4. Changes: * PNG image files can be loaded and saved via bitmap%, making PNG the preferred format for working with raster images in PLT Scheme. If a PNG file contains a mask or alpha channel, then loading it as ’png/mask (or ’unknown/mask) creates a mask bitmap that will be accessible from the loaded bitmap using `get-loaded-mask’. The mask bitmap is monochrome if the file contains a mask or an alpha channel with only extreme values; otherwise, the mask bitmap contains shades of gray reprsenting inverted alpha values. (See also the change to `draw-bitmap’ below.) If the PNG file contains a mask or alpha channel and ’png or ’unknown is used, then the mask or alpha channel is applied during loading, and no mask bitmap is generated. The `load-bitmap’ method and bitmap% constructor accept an optional background color to use for this load-time alpha blending. When saving a bitmap% as ’png, if a mask bitmap is installed via `set-loaded-mask’ (or if one was put there when loading a file), the mask bitmap is saved in the output file as the alpha channel. Loading a 1-bit grayscale PNG without a mask or alpha channel produces a monochrome bitmap% object. Similarly, saving a monochrome bitmap without a "mask" creates a 1-bit graysacle PNG. Thus, PNGs can be used for efficient storage of monochrome bitmaps. See the manual for further information, including information on gamma correction. The `configure’ script looks for a pre-installed libpng and zlib to use when building MrEd. If it doesn’t find them, then `make’ will build the copy that is included with the MrEd source. Use --disable-libpng to avoid using a pre-installed libpng and zlib. * JPEG image files can be saved via bitmap%. (Loading has been supported for years.) The `save-file’ method of bitmap% takes an optional quality argument, a number between 0 and 100. Just as for libpng, `configure’ now looks for a pre-installed libjpeg for linking, and --disable-libjpeg disables this search. * The `draw-bitmap’ method of dc<%> now accepts a non-monochrome mask bitmap. The new behavior generalizes the old mask behavior: a non-monochrome mask acts as an inverted alpha channel. Thus, a mask bitmap that corresponds to a PNG alpha channel can be used with `draw-bitmap’ to achieve the intended alpha blending. In certain impoverished environments, a non-monchrome mask is treated like a monochrome mask (converting all non-white pixels to black): Windows 95 and NT without winimg32.dll, and X where the RENDER extension is not available at run time or when <X11/extensions/Xrender.h> is not available at build time. * image-snip% now uses a mask bitmap associated with its bitmap for drawing the image, and the mask bitmap is preserved when saving or copying the snip. (Saving applies only to a mask attached to the bitmap, and not to a separately supplied mask bitmap.) In graphical-format files, bitmaps are saved via embedded PNG instead of embedded XBM/XPM. * Mac OS Classic: a `file-size’ result no longer includes the file’s resource-fork size. * Added `custodian-managed-list’, which returns the objects managed by a custodian, but only when given a super-custodian. * Changed `vector-set-performance-stats!’ to accept an optional thread argument to obtain thread-specific stats. Matthew