~baltix/+junk/irrlicht-test

« back to all changes in this revision

Viewing changes to source/Irrlicht/libpng/contrib/pngminus/README

  • Committer: Mantas Kriaučiūnas
  • Date: 2011-07-18 13:06:25 UTC
  • Revision ID: mantas@akl.lt-20110718130625-c5pvifp61e7kj1ol
Included whole irrlicht SVN libraries to work around launchpad recipe issue with quilt, see https://answers.launchpad.net/launchpad/+question/165193

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
PngMinus
 
2
--------
 
3
(copyright Willem van Schaik, 1999)
 
4
 
 
5
 
 
6
License
 
7
-------
 
8
 
 
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.
 
15
 
 
16
 
 
17
Some history
 
18
------------
 
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/.
 
24
 
 
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.
 
31
 
 
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
 
35
features of pnmtopng.
 
36
 
 
37
 
 
38
What now
 
39
--------
 
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
 
45
the old one: PngPlus.
 
46
 
 
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.)
 
54
 
 
55
 
 
56
Can and can not
 
57
---------------
 
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.
 
64
 
 
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.
 
68
 
 
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
 
74
writing png-files.
 
75
 
 
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
 
81
way.
 
82
 
 
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.
 
85
 
 
86
 
 
87
Using it
 
88
--------
 
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.
 
93
 
 
94
To list the options type "png2pnm -h" or "pnm2png -h".
 
95
 
 
96
 
 
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).
 
104
 
 
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.
 
112
 
 
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).
 
117
 
 
118
 
 
119
Warranty
 
120
-------
 
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.
 
125
 
 
126
 
 
127
The Turbo bug
 
128
-------------
 
129
** pngmem.old
 
130
          hptr = (png_byte huge *)((long)(hptr) & 0xfffffff0L);
 
131
          hptr += 16L;
 
132
** pngmem.c
 
133
          hptr = (png_byte huge *)((long)(hptr) & 0xfffffff0L);
 
134
          hptr = hptr + 16L;
 
135
**
 
136
 
 
137
** pngmem.old
 
138
          png_ptr->offset_table_ptr[i] = (png_bytep)hptr;
 
139
          hptr += (png_uint_32)65536L;
 
140
** pngmem.c
 
141
          png_ptr->offset_table_ptr[i] = (png_bytep)hptr;
 
142
          hptr = hptr + 65536L;
 
143
**
 
144
 
 
145
 
 
146
The end
 
147
-------
 
148
Willem van Schaik
 
149
mailto:willem@schaik.com
 
150
http://www.schaik.com/png/
 
151
-------
 
152
Oct 1999
 
153