summaryrefslogtreecommitdiff
path: root/ipl/gprogs/autotile.icn
diff options
context:
space:
mode:
Diffstat (limited to 'ipl/gprogs/autotile.icn')
-rw-r--r--ipl/gprogs/autotile.icn87
1 files changed, 87 insertions, 0 deletions
diff --git a/ipl/gprogs/autotile.icn b/ipl/gprogs/autotile.icn
new file mode 100644
index 0000000..631e9b6
--- /dev/null
+++ b/ipl/gprogs/autotile.icn
@@ -0,0 +1,87 @@
+############################################################################
+#
+# 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