3
(copyright Willem van Schaik, 1999)
9
Permission to use, copy, modify, and distribute this software and
10
its documentation for any purpose and without fee is hereby granted,
11
provided that the above copyright notice appear in all copies and
12
that both that copyright notice and this permission notice appear in
13
supporting documentation. This software is provided "as is" without
14
express or implied warranty.
19
Soon after the creation of PNG in 1995, the need was felt for a set of
20
pnmtopng / pngtopnm utilities. Independantly Alexander Lehmann and I
21
(Willem van Schaik) started such a project. Luckily we discovered this
22
and merged the two together into pnmtopng.tar.gz, which is available
23
from a/o ftp://ftp.simplesystems.org/pub/libpng/png/.
25
These two utilities have many, many options and make use of most of the
26
features of PNG, like gamma, alpha, sbit, text-chunks, etc. This makes
27
the utilities quite complex and by now not anymore very maintainable.
28
When we wrote these programs, libpng was still in an early stage.
29
Therefore, lots of the functionality that we put in our software can now
30
be done using transform-functions in libpng.
32
Finally, to compile these programs, you need to have installed and
33
compiled three libraries: libpng, zlib and netpbm. Especially the latter
34
makes the whole setup a bit bulky. But that's unavoidable given the many
40
At this moment libpng is in a very stable state and can do much of the
41
work done in pnmtopng. Also, pnmtopng needs to be upgraded to the new
42
interface of libpng. Hence, it is time for a rewrite from the ground up
43
of pnmtopng and pngtopnm. This will happen in the near future (stay
44
tuned). The new package will get a different name to distinguish it from
47
To experiment a bit with the new interface of libpng, I started off with
48
a small prototype that contains only the basic functionality. It doesn't
49
have any of the options to read or write special chunks and it will do
50
no gamma correction. But this makes it also a simple program that is
51
quite easy to understand and can serve well as a template for other
52
software developments. (By now there are of course a couple of programs,
53
like Greg Roelofs' rpng/wpng, that can be used just as good.)
58
As this is the small brother of the future PngPlus, I called this fellow
59
PngMinus. Because I started this development in good-old Turbo-C, I
60
avoided the use the netpbm library, which requires DOS extenders. Again,
61
another reason to call it PngMinus (minus netpbm :-). So, part of the
62
program are some elementary routines to read / write pgm- and ppm-files.
63
It does not read b&w pbm-files.
65
The downside of this approach is that you can not use them on images
66
that require blocks of memory bigger than 64k (the DOS version). For
67
larger images you will get an out-of-memory error.
69
As said before, PngMinus doesn't correct for gamma. When reading
70
png-files you can do this just as well by piping the output of png2pnm
71
to pnmgamma, one of the standard PbmPlus tools. This same scenario will
72
most probably also be followed in the full-blown future PngPlus, with
73
the addition of course of the possibility to create gamma-chunks when
76
On the other hand it supports alpha-channels. When reading a png-image
77
you can write the alpha-channel into a pgm-file. And when creating an
78
RGB+A png-image, you just combine a ppm-file with a corresponding
79
pgm-file containing the alpha-channel. When reading, transparency chunks
80
are converted into an alpha-channel and from there on treated the same
83
Finally you can opt for writing ascii or binary pgm- and ppm-files. When
84
the bit-depth is 16, the format will always be ascii.
89
To distinguish them from pnmtopng and PngPlus, the utilities are named
90
png2pnm and pnm2png (2 instead of to). The input- and output-files can
91
be given as parameters or through redirection. Therefore the programs
92
can be part of a pipe.
94
To list the options type "png2pnm -h" or "pnm2png -h".
97
Just like Scandinavian furniture
98
--------------------------------
99
You have to put it together yourself. I did test the software under
100
MS-DOS with Turbo-C 3.0 and under RedHat Linux 4.2 with gcc. In both
101
cases I used libpng-1.0.4 and zlib-1.1.3. Later versions should be OK,
102
however some older libpng versions have a bug in pngmem.c when using
103
Turbo-C 3.0 (see below).
105
You can build it using one of the two makefiles (make -f makefile.###)
106
or use the batch/script files pngminus.bat / pngminus.sh. This assumes
107
that you have built the libraries in ../libpng and ../zlib. Using Linux,
108
make sure that you have built libpng with makefile.std and not
109
makefile.linux (also called .lnx in earlier versions of libpng). The
110
latter creates a .so shared-library, while the PngMinus makefile assumes
111
a normal .a static library.
113
If you create a ../pngsuite directory and then store the basn####.png
114
files from PngSuite (http://www.schaik.com/pngsuite/) in there, you can
115
test in one go the proper functioning of PngMinus, see png2pnm.bat and
116
pnm2png.bat (or the .sh versions).
121
Please, remember that this was just a small experiment to learn a few
122
things. It will have many unforeseen features <vbg>. Who said bugs? Use
123
it when you are in need for something simple or when you want to start
124
developing your own stuff.
130
hptr = (png_byte huge *)((long)(hptr) & 0xfffffff0L);
133
hptr = (png_byte huge *)((long)(hptr) & 0xfffffff0L);
138
png_ptr->offset_table_ptr[i] = (png_bytep)hptr;
139
hptr += (png_uint_32)65536L;
141
png_ptr->offset_table_ptr[i] = (png_bytep)hptr;
142
hptr = hptr + 65536L;
149
mailto:willem@schaik.com
150
http://www.schaik.com/png/