Mercurial > fife-parpg
comparison ext/libpng-1.2.29/contrib/pngminus/README @ 0:4a0efb7baf70
* Datasets becomes the new trunk and retires after that :-)
author | mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222 |
---|---|
date | Sun, 29 Jun 2008 18:44:17 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4a0efb7baf70 |
---|---|
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 |