implement Bit2mask;
include "draw.m";
include "sys.m";
Bit2mask: module {
init: fn (ctxt: ref Draw->Context, argv: list of string);
};
init(ctxt: ref Draw->Context, argv: list of string)
{
sys := load Sys Sys->PATH;
stderr := sys->fildes(2);
draw := load Draw Draw->PATH;
Image, Display, Rect, Point : import draw;
display := ctxt.display;
img := display.readimage(sys->fildes(0));
if (img == nil) {
sys->fprint(stderr, "bit2mask: cannot read image: %r\n");
raise "fail:error";
}
if (img.ldepth != 3) {
sys->fprint(stderr, "bit2mask: can only deal with 8 bit images\n");
raise "fail:error";
}
bits := array[img.r.dx() * img.r.dy()] of byte;
img.readpixels(img.r, bits);
for (i := 0; i < len bits; i++)
if (bits[i] != byte 0)
bits[i] = byte 255;
img.writepixels(img.r, bits);
mask := display.newimage(img.r, 0, 0, 0);
mask.draw(mask.r, img, display.ones, img.r.min);
display.writeimage(sys->fildes(1), mask);
}
|