|
1 /*--------------------------------------------------------------------------- |
|
2 |
|
3 wpng - simple PNG-writing program writepng.h |
|
4 |
|
5 --------------------------------------------------------------------------- |
|
6 |
|
7 Copyright (c) 1998-2007 Greg Roelofs. All rights reserved. |
|
8 |
|
9 This software is provided "as is," without warranty of any kind, |
|
10 express or implied. In no event shall the author or contributors |
|
11 be held liable for any damages arising in any way from the use of |
|
12 this software. |
|
13 |
|
14 The contents of this file are DUAL-LICENSED. You may modify and/or |
|
15 redistribute this software according to the terms of one of the |
|
16 following two licenses (at your option): |
|
17 |
|
18 |
|
19 LICENSE 1 ("BSD-like with advertising clause"): |
|
20 |
|
21 Permission is granted to anyone to use this software for any purpose, |
|
22 including commercial applications, and to alter it and redistribute |
|
23 it freely, subject to the following restrictions: |
|
24 |
|
25 1. Redistributions of source code must retain the above copyright |
|
26 notice, disclaimer, and this list of conditions. |
|
27 2. Redistributions in binary form must reproduce the above copyright |
|
28 notice, disclaimer, and this list of conditions in the documenta- |
|
29 tion and/or other materials provided with the distribution. |
|
30 3. All advertising materials mentioning features or use of this |
|
31 software must display the following acknowledgment: |
|
32 |
|
33 This product includes software developed by Greg Roelofs |
|
34 and contributors for the book, "PNG: The Definitive Guide," |
|
35 published by O'Reilly and Associates. |
|
36 |
|
37 |
|
38 LICENSE 2 (GNU GPL v2 or later): |
|
39 |
|
40 This program is free software; you can redistribute it and/or modify |
|
41 it under the terms of the GNU General Public License as published by |
|
42 the Free Software Foundation; either version 2 of the License, or |
|
43 (at your option) any later version. |
|
44 |
|
45 This program is distributed in the hope that it will be useful, |
|
46 but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
47 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
48 GNU General Public License for more details. |
|
49 |
|
50 You should have received a copy of the GNU General Public License |
|
51 along with this program; if not, write to the Free Software Foundation, |
|
52 Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
|
53 |
|
54 ---------------------------------------------------------------------------*/ |
|
55 |
|
56 #ifndef TRUE |
|
57 # define TRUE 1 |
|
58 # define FALSE 0 |
|
59 #endif |
|
60 |
|
61 #ifndef MAX |
|
62 # define MAX(a,b) ((a) > (b)? (a) : (b)) |
|
63 # define MIN(a,b) ((a) < (b)? (a) : (b)) |
|
64 #endif |
|
65 |
|
66 #ifdef DEBUG |
|
67 # define Trace(x) {fprintf x ; fflush(stderr); fflush(stdout);} |
|
68 #else |
|
69 # define Trace(x) ; |
|
70 #endif |
|
71 |
|
72 #define TEXT_TITLE 0x01 |
|
73 #define TEXT_AUTHOR 0x02 |
|
74 #define TEXT_DESC 0x04 |
|
75 #define TEXT_COPY 0x08 |
|
76 #define TEXT_EMAIL 0x10 |
|
77 #define TEXT_URL 0x20 |
|
78 |
|
79 #define TEXT_TITLE_OFFSET 0 |
|
80 #define TEXT_AUTHOR_OFFSET 72 |
|
81 #define TEXT_COPY_OFFSET (2*72) |
|
82 #define TEXT_EMAIL_OFFSET (3*72) |
|
83 #define TEXT_URL_OFFSET (4*72) |
|
84 #define TEXT_DESC_OFFSET (5*72) |
|
85 |
|
86 typedef unsigned char uch; |
|
87 typedef unsigned short ush; |
|
88 typedef unsigned long ulg; |
|
89 |
|
90 typedef struct _mainprog_info { |
|
91 double gamma; |
|
92 long width; |
|
93 long height; |
|
94 time_t modtime; |
|
95 FILE *infile; |
|
96 FILE *outfile; |
|
97 void *png_ptr; |
|
98 void *info_ptr; |
|
99 uch *image_data; |
|
100 uch **row_pointers; |
|
101 char *title; |
|
102 char *author; |
|
103 char *desc; |
|
104 char *copyright; |
|
105 char *email; |
|
106 char *url; |
|
107 int filter; /* command-line-filter flag, not PNG row filter! */ |
|
108 int pnmtype; |
|
109 int sample_depth; |
|
110 int interlaced; |
|
111 int have_bg; |
|
112 int have_time; |
|
113 int have_text; |
|
114 jmp_buf jmpbuf; |
|
115 uch bg_red; |
|
116 uch bg_green; |
|
117 uch bg_blue; |
|
118 } mainprog_info; |
|
119 |
|
120 |
|
121 /* prototypes for public functions in writepng.c */ |
|
122 |
|
123 void writepng_version_info(void); |
|
124 |
|
125 int writepng_init(mainprog_info *mainprog_ptr); |
|
126 |
|
127 int writepng_encode_image(mainprog_info *mainprog_ptr); |
|
128 |
|
129 int writepng_encode_row(mainprog_info *mainprog_ptr); |
|
130 |
|
131 int writepng_encode_finish(mainprog_info *mainprog_ptr); |
|
132 |
|
133 void writepng_cleanup(mainprog_info *mainprog_ptr); |