--- /dev/null
+.TH gdtclft 3tcl "Tcl Extensions"
+.HS gdtclft tcl
+.BS
+.SH NAME
+gdtclft \- render images in various bitmap formats (GD, GD2, GIF, JPEG, PNG, WBMP, XBM)
+.SH DESCRIPTION
+.PP
+.nf
+
+ TCL GD EXTENSION
+
+ Thomas Boutell's Gd package provides a convenient way to generate
+ bitmap images with a C program. If you, like me, prefer Tcl for CGI
+ applications, you'll want my TCL GD extension. You can get it by
+ anonymous FTP from ftp://guraldi.hgp.med.umich.edu/pub/gdtcl.shar.
+
+ Here's a quick overview of the package.
+ * Overview
+ * Installation
+ * Reference
+ * Examples
+ + gdsample -- sample program written in Tcl.
+ + Gddemo -- demo program written in Tcl.
+ + gdshow -- procedure to display an image.
+
+ A TCL INTERFACE TO THE GD PACKAGE
+
+ Spencer W. Thomas
+ Human Genome Center
+ University of Michigan
+ Ann Arbor, MI 48109
+
+ spencer.thomas@med.umich.edu
+
+ TrueType font support using the FreeType library was added by
+ John Ellson (ellson@graphviz.org)
+
+ Latest sources available from:
+
+ http://www.graphviz.org/pub/
+
+
+Overview
+
+ This package provides a simple Tcl interface to the gd (bitmap drawing)
+ package, version 1.1. It includes an interface to all the gd functions
+ and data structures from Tcl commands.
+
+
+
+Installation
+
+ ./configure
+ make
+ make install
+
+Reference
+
+ One Tcl command, 'gd', is added. All gd package actions are
+ sub-commands (or "options" in Tcl terminology) of this command.
+
+ Each active gd image is referred to with a "handle". The handle is a
+ name of the form gd# (e.g., gd0) returned by the gd create options.
+
+ Almost all the gd commands take a handle as the first argument (after
+ the option). All the drawing commands take a color_idx as the next
+ argument.
+
+ gd create <width> <height>
+ Return a handle to a new gdImage that is width X height.
+
+ gd createFromGD <filehandle>
+ gd createFromGD2 <filehandle>
+ gd createFromGIF <filehandle>
+ gd createFromJPEG <filehandle>
+ gd createFromPNG <filehandle>
+ gd createFromWBMP <filehandle>
+ gd createFromXBM <filehandle>
+ Return a handle to a new gdImage created by reading an
+ image in the indicate format from the file open on filehandle.
+
+ gd destroy <gdhandle>
+ Destroy the gdImage referred to by gdhandle.
+
+ gd writeGD <gdhandle> <filehandle>
+ gd writeGD2 <gdhandle> <filehandle>
+ gd writeGIF <gdhandle> <filehandle>
+ gd writeJPEG <gdhandle> <filehandle>
+ gd writePNG <gdhandle> <filehandle>
+ gd writeWBMP <gdhandle> <filehandle>
+ gd writeXBM <gdhandle> <filehandle>
+ Write the image in gdhandle to filehandle in the
+ format indicated.
+
+ gd writePNGvar <gdhandle> <varname>
+ Write the image in gdhandle to Tcl variable "varname" as a binary
+ coded PNG object.
+
+ gd interlace <gdhandle> <on-off>
+ Make the output image interlaced (if on-off is true) or not (if
+ on-off is false).
+
+ gd color new <gdhandle> <red> <green> <blue>
+ Allocate a new color with the given RGB values. Returns the
+ color_idx, or \-1 on failure (256 colors already allocated).
+
+ gd color exact <gdhandle> <red> <green> <blue>
+ Find a color_idx in the image that exactly matches the given RGB
+ color. Returns the color_idx, or \-1 if no exact match.
+
+ gd color closest <gdhandle> <red> <green> <blue>
+ Find a color in the image that is closest to the given RGB color.
+ Guaranteed to return a color idx.
+
+ gd color resolve <gdhandle> <red> <green> <blue>
+ Return the index of the best possible effort to get a color.
+ Guaranteed to return a color idx. Equivalent to:
+ if {[set idx [gd color exact $gd $r $g $b]] == \-1} {
+ if {[set idx [gd color neW $Gd $r $g $b]] == \-1} {
+ set idx [gd color closest $gd $r $g $b]
+ }
+ }
+
+ gd color free <gdhandle> <color_idx>
+ Free the color at the given color_idx for reuse.
+
+ gd color transparent <gdhandle> [<color_idx>]
+ Mark the color at <color_idx> as the transparent background color. Or,
+ return the transparent color_idx if no color_idx specified.
+
+ gd color get <gdhandle> [<color_idx>]
+ Return the RGB value at <color_idx>, or {} if it is not allocated.
+ If <color_idx> is not specified, return a list of {color_idx R G B}
+ values for all allocated colors.
+
+ gd brush <gdhandle> <brushhandle>
+ Set the brush image to be used for brushed lines. Transparent
+ pixels in the brush will not change the image when the brush is
+ applied.
+
+ gd style <gdhandle> <color_idx> ...
+ Set the line style to the list of color indices. This is
+ interpreted in one of two ways. For a simple styled line, each
+ color is applied to points along the line in turn. The
+ transparent color_idx value may be used to leave gaps in the line.
+ For a styled, brushed line, a 0 (or the transparent color_idx)
+ means not to fill the pixel, and a non-zero value means to
+ apply the brush.
+
+ gd tile <gdhandle> <tilehandle>
+ Set the tile image to be used for tiled fills. Transparent
+ pixels in the tile will not change the underlying image during
+ tiling.
+
+ In all drawing functions, the color_idx is a number, or may
+ be one of the strings styled, brushed, tiled, "styled brushed"
+ or "brushed styled". The style, brush, or tile currently in
+ effect will be used. Brushing and styling apply to lines,
+ tiling to filled areas.
+
+ gd set <gdhandle> <color_idx> <x> <y>
+ Set the pixel at (x,y) to color <color_idx>.
+
+ gd line <gdhandle> <color_idx> <x1> <y1> <x2> <y2>
+
+ gd rectangle <gdhandle> <color_idx> <x1> <y1> <x2> <y2>
+
+ gd fillrectangle <gdhandle> <color_idx> <x1> <y1> <x2> <y2>
+ Draw the outline of (resp. fill) a rectangle in color <color_idx>
+ with corners at (x1,y1) and (x2,y2).
+
+ gd arc <gdhandle> <color_idx> <cx> <cy> <width> <height> <start> <end>
+ gd fillarc <gdhandle> <color_idx> <cx> <cy> <width> <height> <start> <end>
+ gd openarc <gdhandle> <color_idx> <cx> <cy> <width> <height> <start> <end>
+ gd chord <gdhandle> <color_idx> <cx> <cy> <width> <height> <start> <end>
+ gd fillchord <gdhandle> <color_idx> <cx> <cy> <width> <height> <start> <end>
+ gd openchord <gdhandle> <color_idx> <cx> <cy> <width> <height> <start> <end>
+ gd pie <gdhandle> <color_idx> <cx> <cy> <width> <height> <start> <end>
+ gd fillpie <gdhandle> <color_idx> <cx> <cy> <width> <height> <start> <end>
+ gd openpie <gdhandle> <color_idx> <cx> <cy> <width> <height> <start> <end>
+ All describe an arc based shape in color <color_idx>, centered at (cx,cy)
+ in a rectangle width x height, starting at start degrees and ending
+ at end degrees.
+
+ arc - Just the curved line.
+ fillarc - (Intented to be a fill between the curve and chord,
+ but gd doesn't do that) - Same as pie.
+ openarc - Outline shape with curve and chord.
+ chord - Straight line chord between the ends of the curve,
+ but without showing the curve.
+ fillchord - Filled triangle between chord and center.
+ openchord - Outline triangle between chord and center.
+ pie - Filled pie segment between curve and center.
+ fillpie - Same as pie.
+ openpie - Outline pie segment between curve and center.
+
+ gd polygon <gdhandle> <color_idx> <x1> <y1> ...
+
+ gd fillpolygon <gdhandle> <color_idx> <x1> <y1> ...
+ Draw the outline of, or fill, a polygon specified by the x, y
+ coordinate list. There must be at least 3 points specified.
+
+ gd fill <gdhandle> <color_idx> <x> <y>
+
+ gd fill <gdhandle> <color_idx> <x> <y> <borderindex>
+ Fill with color <color_idx>, starting from (x,y) within a region of
+ pixels all the color of the pixel at (x,y) (resp., within a
+ border colored borderindex).
+
+ gd size <gdhandle>
+ Returns a list {width height} of the image.
+
+ gd text <gdhandle> <color_idx> <fontlist> <size> <angle> <x> <y> <string>
+ Draw text using <fontlist> in color <color_idx>,
+ with pointsize <size>, rotation in radians <angle>, with lower left
+ corner at (x,y). String may contain UTF8 sequences like: "À"
+
+ Returns 4 corner coords of bounding rectangle.
+ Use gdhandle = {} to get boundary without rendering.
+ Use negative of color_idx to disable antialiasing.
+
+ <fontlist> may contain either a full pathname of a font, including
+ ".ttf" extension, or it may contain a space-separated list of
+ alternate names for a font, without the ".ttf". e.g.
+ "Times-Roman times"
+ The file <name>.ttf corresponding to one of the alternate names
+ must be found in the built-in DEFAULT_FONTPATH, or in the
+ fontpath specified in a GDFONTPATH environment variable.
+
+ gd copy <desthandle> <srchandle> <destx> <desty> <srcx> <srcy> <w> <h>
+
+ gd copy <desthandle> <srchandle> <destx> <desty> <srcx> <srcy> \
+ <destw> <desth> <srcw> <srch> Copy a subimage from
+ srchandle(srcx, srcy) to desthandle(destx, desty), size w x h.
+ Or, resize the subimage in copying from srcw x srch to destw x
+ desth.
+
+
+
+Examples
+
+ The sample program from the gd documentation can be written thusly:
+
+
+#!/bin/sh
+# next line is a comment in tcl \
+exec tclsh "$0" ${1+"$@"}
+
+package require Gdtclft
+
+################################################################
+# Sample gdtcl program - from gdtclft man page
+#
+# Create a 64 x 64 image
+set im [gd create 64 64]
+
+# Get black and white as colors. Black is the background color because
+# it is allocated first from a new image.
+
+set black [gd color new $im 0 0 0]
+set white [gd color new $im 255 255 255]
+
+# Draw a line from upper left to lower right
+gd line $im $white 0 0 63 63
+
+# Open a file for writing (Tcl on Unix, at least, doesn't support 'wb' mode)
+set out [open test.png w]
+
+# Output the image to the disk file
+gd writePNG $im $out
+
+# Close the file
+close $out
+
+# Destroy the image in memory
+gd destroy $im
+
+
+ GDDEMO
+
+ Here's the gddemo.c program translated to tcl.
+
+#!/bin/sh
+# next line is a comment in tcl \
+exec tclsh "$0" ${1+"$@"}
+
+package require Gdtclft
+
+################################################################
+#
+# gddemo in tcl
+#
+
+# open demoin.png or die
+if {[catch {open demoin.png r} in]} {
+ puts stderr "Can't load source image; this demo is much";
+ puts stderr "more impressive if demoin.png is available";
+ exit
+}
+
+# Create output image 128 x 128
+set im_out [gd create 128 128]
+
+# First color is background
+set white [gd color new $im_out 255 255 255]
+
+# Set transparent
+gd color transparent $im_out $white
+
+# Load demoin.png and paste part of it into the output image.
+set im_in [gd createFromPNG $in]
+close $in
+
+# Copy and shrink
+gd copy $im_out $im_in 16 16 0 0 96 96 128 128
+
+# Get some colors
+set red [gd color new $im_out 255 0 0]
+set green [gd color new $im_out 0 255 0]
+set blue [gd color new $im_out 0 0 255]
+
+# Draw a rectangle
+gd line $im_out $green 8 8 120 8
+gd line $im_out $green 120 8 120 120
+gd line $im_out $green 120 120 8 120
+gd line $im_out $green 8 120 8 8
+
+# Text
+gd text $im_out $red arial 20 0 16 16 hi
+gd text $im_out $red arial 20 90 23 23 hi
+
+# Circle
+gd arc $im_out $blue 64 64 30 10 0 360
+
+# Arc
+gd arc $im_out $blue 64 64 20 20 45 135
+
+# Flood fill
+gd fill $im_out $blue 4 4
+
+# Polygon
+gd fillpolygon $im_out $green 32 0 0 64 64 64
+
+# Brush. A fairly wild example also involving a line style!
+if {$im_in != ""} {
+ set brush [gd create 8 8];
+ eval [concat gd copy $brush $im_in 0 0 0 0 [gd size $brush] [gd size $im_in]]
+ gd brush $im_out $brush
+ # Style so they won't overprint each other.
+ gd style $im_out "0 0 0 0 0 0 0 1"
+ gd line $im_out "styled brushed" 0 0 128 128
+}
+
+# Interlace the result for "fade in" in viewers that support it
+gd interlace $im_out true
+
+# Write PNG
+set out [open demoout.png w]
+gd writePNG $im_out $out
+close $out
+gd destroy $im_out
+
+
+
+ GDSHOW
+
+ A quick Tcl procedure to display a GD image using the xv program.
+
+################################################################
+# gdshow -- use xv to display an image.
+#
+# Waits until xv quits to return.
+#
+proc gdshow {gd} {
+ set f [open "|xv -" w]
+ catch {gd writePNG $gd $f}
+ catch {close $f} xx
+ if {$xx != {}} {
+ error "XV error: $xx"
+ }
+}