home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.cs.arizona.edu
/
ftp.cs.arizona.edu.tar
/
ftp.cs.arizona.edu
/
icon
/
historic
/
v941.tgz
/
icon.v941src.tar
/
icon.v941src
/
ipl
/
gprogs
/
autotile.icn
next >
Wrap
Text File
|
2000-07-29
|
2KB
|
88 lines
############################################################################
#
# File: autotile.icn
#
# Subject: Program to produce tile from XBM image
#
# Author: Ralph E. Griswold
#
# Date: January 3, 1994
#
############################################################################
#
# This file is in the public domain.
#
############################################################################
#
# This program creates a tile of a specified size by processing an
# XBM image file. The tile grid is "laid over" the image to form squares.
#
# The non-white pixels in each square of the image are counted. If the
# percentage of non-white pixels exceeds a specified threshold, the
# corresponding bit in the tile is set.
#
# The supported options are:
#
# -h i tile height, default 32
# -w i tile width, default 32
# -t r threshold, default 0.50
#
############################################################################
#
# Links: options, patutils
#
############################################################################
link options
link patutils
global pixmap
procedure main(args)
local x, y, pixels, i, j, size, rows, wcell, hcell
local opts, input, w, h, t, xoff, yoff
opts := options(args, "t.h+w+")
input := open(args[1]) | stop("*** cannot open input file")
pixmap := [] # image array
every put(pixmap, xbm2rows(input))
w := \opts["w"] | 32
h := \opts["h"] | 32
t := \opts["t"] | 0.50
wcell := *pixmap[1] / w
hcell := *pixmap / h
size := real(wcell * hcell)
rows := list(h, repl("0", w)) # tile
x := 0
every i := 1 to w do {
y := 0
every j := 1 to h do {
pixels := 0
xoff := x + 1
every 1 to wcell do {
yoff := y + 1
every 1 to hcell do {
every pixels +:= pixmap[yoff, xoff]
yoff +:= 1
}
xoff +:= 1
}
if pixels / size > t then rows[j, i] := "1"
y +:= hcell
}
x +:= wcell
}
write(rows2pat(rows))
end