Lines 57-75
Link Here
|
57 |
data->end_info = png_create_info_struct(data->png_ptr); |
57 |
data->end_info = png_create_info_struct(data->png_ptr); |
58 |
assert(data->end_info != 0); |
58 |
assert(data->end_info != 0); |
59 |
|
59 |
|
60 |
if (setjmp(data->png_ptr->jmpbuf)) |
60 |
if (setjmp(data->png_jmpbuf(png_ptr))) |
61 |
assert(0); |
61 |
assert(0); |
62 |
|
62 |
|
63 |
png_init_io(data->png_ptr, data->file); |
63 |
png_init_io(data->png_ptr, data->file); |
64 |
|
64 |
|
65 |
png_read_info(data->png_ptr, data->info_ptr); |
65 |
png_read_info(data->png_ptr, data->info_ptr); |
66 |
|
66 |
|
67 |
*width = data->info_ptr->width; |
67 |
*width = data->png_get_image_width(png_ptr, info_ptr); |
68 |
*height = data->info_ptr->height; |
68 |
*height = data->png_get_image_height(png_ptr, info_ptr); |
69 |
|
69 |
|
70 |
assert(data->info_ptr->bit_depth == 8 || data->info_ptr->bit_depth == 16); |
70 |
assert(data->png_get_bit_depth(png_ptr, info_ptr) == 8 || data->png_get_bit_depth(png_ptr, info_ptr) == 16); |
71 |
assert(data->info_ptr->color_type == PNG_COLOR_TYPE_RGB || data->info_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA); |
71 |
assert(data->png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_RGB || data->png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_RGB_ALPHA); |
72 |
assert(data->info_ptr->interlace_type == PNG_INTERLACE_NONE); |
72 |
assert(data->png_get_interlace_type(png_ptr, info_ptr) == PNG_INTERLACE_NONE); |
73 |
|
73 |
|
74 |
data->have_read = 0; |
74 |
data->have_read = 0; |
75 |
|
75 |
|
Lines 84-112
Link Here
|
84 |
int bps, spp; |
84 |
int bps, spp; |
85 |
unsigned char *row; |
85 |
unsigned char *row; |
86 |
|
86 |
|
87 |
if (setjmp(data->png_ptr->jmpbuf)) |
87 |
if (setjmp(data->png_jmpbuf(png_ptr))) |
88 |
assert(0); |
88 |
assert(0); |
89 |
|
89 |
|
90 |
if (data->info_ptr->color_type == PNG_COLOR_TYPE_RGB) |
90 |
if (data->png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_RGB) |
91 |
spp = 3; |
91 |
spp = 3; |
92 |
else |
92 |
else |
93 |
spp = 4; |
93 |
spp = 4; |
94 |
|
94 |
|
95 |
if (data->info_ptr->bit_depth == 16) |
95 |
if (data->png_get_bit_depth(png_ptr, info_ptr) == 16) |
96 |
bps = 2; |
96 |
bps = 2; |
97 |
else |
97 |
else |
98 |
bps = 1; |
98 |
bps = 1; |
99 |
|
99 |
|
100 |
row = (unsigned char*)malloc(data->info_ptr->width * spp * bps); |
100 |
row = (unsigned char*)malloc(data->png_get_image_width(png_ptr, info_ptr) * spp * bps); |
101 |
|
101 |
|
102 |
for (i = 0; i < num_lines; ++i) |
102 |
for (i = 0; i < num_lines; ++i) |
103 |
{ |
103 |
{ |
104 |
int j, channel; |
104 |
int j, channel; |
105 |
|
105 |
|
106 |
png_read_row(data->png_ptr, (png_bytep)row, 0); |
106 |
png_read_row(data->png_ptr, (png_bytep)row, 0); |
107 |
for (j = 0; j < data->info_ptr->width; ++j) |
107 |
for (j = 0; j < data->png_get_image_width(png_ptr, info_ptr); ++j) |
108 |
for (channel = 0; channel < 3; ++channel) |
108 |
for (channel = 0; channel < 3; ++channel) |
109 |
lines[i * data->info_ptr->width * 3 + j * 3 + channel] = row[j * spp * bps + channel * bps]; |
109 |
lines[i * data->png_get_image_width(png_ptr, info_ptr) * 3 + j * 3 + channel] = row[j * spp * bps + channel * bps]; |
110 |
} |
110 |
} |
111 |
|
111 |
|
112 |
free(row); |
112 |
free(row); |
Lines 119-125
Link Here
|
119 |
{ |
119 |
{ |
120 |
png_data_t *data = (png_data_t*)_data; |
120 |
png_data_t *data = (png_data_t*)_data; |
121 |
|
121 |
|
122 |
if (setjmp(data->png_ptr->jmpbuf)) |
122 |
if (setjmp(data->png_jmpbuf(png_ptr))) |
123 |
assert(0); |
123 |
assert(0); |
124 |
|
124 |
|
125 |
if (data->have_read) |
125 |
if (data->have_read) |
Lines 148-154
Link Here
|
148 |
data->info_ptr = png_create_info_struct(data->png_ptr); |
148 |
data->info_ptr = png_create_info_struct(data->png_ptr); |
149 |
assert(data->info_ptr != 0); |
149 |
assert(data->info_ptr != 0); |
150 |
|
150 |
|
151 |
if (setjmp(data->png_ptr->jmpbuf)) |
151 |
if (setjmp(data->png_jmpbuf(png_ptr))) |
152 |
assert(0); |
152 |
assert(0); |
153 |
|
153 |
|
154 |
if (pixel_stride == 4) |
154 |
if (pixel_stride == 4) |
Lines 156-173
Link Here
|
156 |
|
156 |
|
157 |
png_init_io(data->png_ptr, data->file); |
157 |
png_init_io(data->png_ptr, data->file); |
158 |
|
158 |
|
159 |
data->info_ptr->width = width; |
159 |
png_colorp palette; |
160 |
data->info_ptr->height = height; |
160 |
int num_palette; |
161 |
data->info_ptr->valid = 0; |
161 |
int num_trans; |
162 |
data->info_ptr->rowbytes = width * 3; |
162 |
int compression_type; |
163 |
data->info_ptr->palette = 0; |
163 |
int filter_type; |
164 |
data->info_ptr->num_palette = 0; |
164 |
|
165 |
data->info_ptr->num_trans = 0; |
165 |
data->png_get_image_width(png_ptr, info_ptr) = width; |
166 |
data->info_ptr->bit_depth = 8; |
166 |
data->png_get_image_height(png_ptr, info_ptr) = height; |
167 |
data->info_ptr->color_type = PNG_COLOR_TYPE_RGB; |
167 |
data->png_get_valid(png_ptr, info_ptr) = 0; |
168 |
data->info_ptr->compression_type = PNG_COMPRESSION_TYPE_DEFAULT; |
168 |
data->png_get_rowbytes(png_ptr, info_ptr) = width * 3; |
169 |
data->info_ptr->filter_type = PNG_FILTER_TYPE_DEFAULT; |
169 |
data->palette = 0; |
170 |
data->info_ptr->interlace_type = PNG_INTERLACE_NONE; |
170 |
data->num_palette = 0; |
|
|
171 |
data->num_trans = 0; |
172 |
data->png_get_bit_depth(png_ptr, info_ptr) = 8; |
173 |
data->png_get_color_type(png_ptr, info_ptr) = PNG_COLOR_TYPE_RGB; |
174 |
data->compression_type = PNG_COMPRESSION_TYPE_DEFAULT; |
175 |
data->filter_type = PNG_FILTER_TYPE_DEFAULT; |
176 |
data->png_get_interlace_type(png_ptr, info_ptr) = PNG_INTERLACE_NONE; |
171 |
|
177 |
|
172 |
png_write_info(data->png_ptr, data->info_ptr); |
178 |
png_write_info(data->png_ptr, data->info_ptr); |
173 |
|
179 |
|
Lines 182-188
Link Here
|
182 |
png_data_t *data = (png_data_t*)_data; |
188 |
png_data_t *data = (png_data_t*)_data; |
183 |
int i; |
189 |
int i; |
184 |
|
190 |
|
185 |
if (setjmp(data->png_ptr->jmpbuf)) |
191 |
if (setjmp(data->png_jmpbuf(png_ptr))) |
186 |
assert(0); |
192 |
assert(0); |
187 |
|
193 |
|
188 |
for (i = 0; i < num_lines; ++i) |
194 |
for (i = 0; i < num_lines; ++i) |
Lines 194-200
Link Here
|
194 |
{ |
200 |
{ |
195 |
png_data_t *data = (png_data_t*)_data; |
201 |
png_data_t *data = (png_data_t*)_data; |
196 |
|
202 |
|
197 |
if (setjmp(data->png_ptr->jmpbuf)) |
203 |
if (setjmp(data->png_jmpbuf(png_ptr))) |
198 |
assert(0); |
204 |
assert(0); |
199 |
|
205 |
|
200 |
png_write_end(data->png_ptr, data->info_ptr); |
206 |
png_write_end(data->png_ptr, data->info_ptr); |