13 #if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED) 15 #if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED) 21 if (png_ptr == NULL)
return;
22 png_ptr->transformations |= PNG_BGR;
26 #if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED) 32 if (png_ptr == NULL)
return;
33 if (png_ptr->bit_depth == 16)
34 png_ptr->transformations |= PNG_SWAP_BYTES;
38 #if defined(PNG_READ_PACK_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED) 44 if (png_ptr == NULL)
return;
45 if (png_ptr->bit_depth < 8)
47 png_ptr->transformations |= PNG_PACK;
48 png_ptr->usr_bit_depth = 8;
53 #if defined(PNG_READ_PACKSWAP_SUPPORTED)||defined(PNG_WRITE_PACKSWAP_SUPPORTED) 59 if (png_ptr == NULL)
return;
60 if (png_ptr->bit_depth < 8)
61 png_ptr->transformations |= PNG_PACKSWAP;
65 #if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED) 70 if (png_ptr == NULL)
return;
71 png_ptr->transformations |= PNG_SHIFT;
76 #if defined(PNG_READ_INTERLACING_SUPPORTED) || \ 77 defined(PNG_WRITE_INTERLACING_SUPPORTED) 81 png_debug(1,
"in png_set_interlace handling\n");
82 if (png_ptr && png_ptr->interlaced)
84 png_ptr->transformations |= PNG_INTERLACE;
92 #if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED) 102 if (png_ptr == NULL)
return;
103 png_ptr->transformations |= PNG_FILLER;
106 png_ptr->flags |= PNG_FLAG_FILLER_AFTER;
108 png_ptr->flags &= ~PNG_FLAG_FILLER_AFTER;
117 png_ptr->usr_channels = 4;
125 png_ptr->usr_channels = 2;
129 #if !defined(PNG_1_0_X) 135 if (png_ptr == NULL)
return;
137 png_ptr->transformations |= PNG_ADD_ALPHA;
143 #if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) || \ 144 defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED) 149 if (png_ptr == NULL)
return;
150 png_ptr->transformations |= PNG_SWAP_ALPHA;
154 #if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) || \ 155 defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED) 159 png_debug(1,
"in png_set_invert_alpha\n");
160 if (png_ptr == NULL)
return;
161 png_ptr->transformations |= PNG_INVERT_ALPHA;
165 #if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED) 169 png_debug(1,
"in png_set_invert_mono\n");
170 if (png_ptr == NULL)
return;
171 png_ptr->transformations |= PNG_INVERT_MONO;
182 #if defined(PNG_USELESS_TESTS_SUPPORTED) 183 if (row == NULL || row_info == NULL)
192 for (i = 0; i < istop; i++)
199 row_info->bit_depth == 8)
205 for (i = 0; i < istop; i+=2)
212 row_info->bit_depth == 16)
218 for (i = 0; i < istop; i+=4)
228 #if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED) 235 #
if defined(PNG_USELESS_TESTS_SUPPORTED)
236 row != NULL && row_info != NULL &&
238 row_info->bit_depth == 16)
242 png_uint_32 istop= row_info->width * row_info->channels;
244 for (i = 0; i < istop; i++, rp += 2)
254 #if defined(PNG_READ_PACKSWAP_SUPPORTED)||defined(PNG_WRITE_PACKSWAP_SUPPORTED) 256 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0,
257 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0,
258 0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8,
259 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8,
260 0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4,
261 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4,
262 0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC,
263 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC,
264 0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2,
265 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2,
266 0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA,
267 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA,
268 0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6,
269 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6,
270 0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE,
271 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE,
272 0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1,
273 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1,
274 0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9,
275 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9,
276 0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5,
277 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5,
278 0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED,
279 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD,
280 0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3,
281 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3,
282 0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB,
283 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB,
284 0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7,
285 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7,
286 0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF,
287 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF
291 0x00, 0x40, 0x80, 0xC0, 0x10, 0x50, 0x90, 0xD0,
292 0x20, 0x60, 0xA0, 0xE0, 0x30, 0x70, 0xB0, 0xF0,
293 0x04, 0x44, 0x84, 0xC4, 0x14, 0x54, 0x94, 0xD4,
294 0x24, 0x64, 0xA4, 0xE4, 0x34, 0x74, 0xB4, 0xF4,
295 0x08, 0x48, 0x88, 0xC8, 0x18, 0x58, 0x98, 0xD8,
296 0x28, 0x68, 0xA8, 0xE8, 0x38, 0x78, 0xB8, 0xF8,
297 0x0C, 0x4C, 0x8C, 0xCC, 0x1C, 0x5C, 0x9C, 0xDC,
298 0x2C, 0x6C, 0xAC, 0xEC, 0x3C, 0x7C, 0xBC, 0xFC,
299 0x01, 0x41, 0x81, 0xC1, 0x11, 0x51, 0x91, 0xD1,
300 0x21, 0x61, 0xA1, 0xE1, 0x31, 0x71, 0xB1, 0xF1,
301 0x05, 0x45, 0x85, 0xC5, 0x15, 0x55, 0x95, 0xD5,
302 0x25, 0x65, 0xA5, 0xE5, 0x35, 0x75, 0xB5, 0xF5,
303 0x09, 0x49, 0x89, 0xC9, 0x19, 0x59, 0x99, 0xD9,
304 0x29, 0x69, 0xA9, 0xE9, 0x39, 0x79, 0xB9, 0xF9,
305 0x0D, 0x4D, 0x8D, 0xCD, 0x1D, 0x5D, 0x9D, 0xDD,
306 0x2D, 0x6D, 0xAD, 0xED, 0x3D, 0x7D, 0xBD, 0xFD,
307 0x02, 0x42, 0x82, 0xC2, 0x12, 0x52, 0x92, 0xD2,
308 0x22, 0x62, 0xA2, 0xE2, 0x32, 0x72, 0xB2, 0xF2,
309 0x06, 0x46, 0x86, 0xC6, 0x16, 0x56, 0x96, 0xD6,
310 0x26, 0x66, 0xA6, 0xE6, 0x36, 0x76, 0xB6, 0xF6,
311 0x0A, 0x4A, 0x8A, 0xCA, 0x1A, 0x5A, 0x9A, 0xDA,
312 0x2A, 0x6A, 0xAA, 0xEA, 0x3A, 0x7A, 0xBA, 0xFA,
313 0x0E, 0x4E, 0x8E, 0xCE, 0x1E, 0x5E, 0x9E, 0xDE,
314 0x2E, 0x6E, 0xAE, 0xEE, 0x3E, 0x7E, 0xBE, 0xFE,
315 0x03, 0x43, 0x83, 0xC3, 0x13, 0x53, 0x93, 0xD3,
316 0x23, 0x63, 0xA3, 0xE3, 0x33, 0x73, 0xB3, 0xF3,
317 0x07, 0x47, 0x87, 0xC7, 0x17, 0x57, 0x97, 0xD7,
318 0x27, 0x67, 0xA7, 0xE7, 0x37, 0x77, 0xB7, 0xF7,
319 0x0B, 0x4B, 0x8B, 0xCB, 0x1B, 0x5B, 0x9B, 0xDB,
320 0x2B, 0x6B, 0xAB, 0xEB, 0x3B, 0x7B, 0xBB, 0xFB,
321 0x0F, 0x4F, 0x8F, 0xCF, 0x1F, 0x5F, 0x9F, 0xDF,
322 0x2F, 0x6F, 0xAF, 0xEF, 0x3F, 0x7F, 0xBF, 0xFF
326 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70,
327 0x80, 0x90, 0xA0, 0xB0, 0xC0, 0xD0, 0xE0, 0xF0,
328 0x01, 0x11, 0x21, 0x31, 0x41, 0x51, 0x61, 0x71,
329 0x81, 0x91, 0xA1, 0xB1, 0xC1, 0xD1, 0xE1, 0xF1,
330 0x02, 0x12, 0x22, 0x32, 0x42, 0x52, 0x62, 0x72,
331 0x82, 0x92, 0xA2, 0xB2, 0xC2, 0xD2, 0xE2, 0xF2,
332 0x03, 0x13, 0x23, 0x33, 0x43, 0x53, 0x63, 0x73,
333 0x83, 0x93, 0xA3, 0xB3, 0xC3, 0xD3, 0xE3, 0xF3,
334 0x04, 0x14, 0x24, 0x34, 0x44, 0x54, 0x64, 0x74,
335 0x84, 0x94, 0xA4, 0xB4, 0xC4, 0xD4, 0xE4, 0xF4,
336 0x05, 0x15, 0x25, 0x35, 0x45, 0x55, 0x65, 0x75,
337 0x85, 0x95, 0xA5, 0xB5, 0xC5, 0xD5, 0xE5, 0xF5,
338 0x06, 0x16, 0x26, 0x36, 0x46, 0x56, 0x66, 0x76,
339 0x86, 0x96, 0xA6, 0xB6, 0xC6, 0xD6, 0xE6, 0xF6,
340 0x07, 0x17, 0x27, 0x37, 0x47, 0x57, 0x67, 0x77,
341 0x87, 0x97, 0xA7, 0xB7, 0xC7, 0xD7, 0xE7, 0xF7,
342 0x08, 0x18, 0x28, 0x38, 0x48, 0x58, 0x68, 0x78,
343 0x88, 0x98, 0xA8, 0xB8, 0xC8, 0xD8, 0xE8, 0xF8,
344 0x09, 0x19, 0x29, 0x39, 0x49, 0x59, 0x69, 0x79,
345 0x89, 0x99, 0xA9, 0xB9, 0xC9, 0xD9, 0xE9, 0xF9,
346 0x0A, 0x1A, 0x2A, 0x3A, 0x4A, 0x5A, 0x6A, 0x7A,
347 0x8A, 0x9A, 0xAA, 0xBA, 0xCA, 0xDA, 0xEA, 0xFA,
348 0x0B, 0x1B, 0x2B, 0x3B, 0x4B, 0x5B, 0x6B, 0x7B,
349 0x8B, 0x9B, 0xAB, 0xBB, 0xCB, 0xDB, 0xEB, 0xFB,
350 0x0C, 0x1C, 0x2C, 0x3C, 0x4C, 0x5C, 0x6C, 0x7C,
351 0x8C, 0x9C, 0xAC, 0xBC, 0xCC, 0xDC, 0xEC, 0xFC,
352 0x0D, 0x1D, 0x2D, 0x3D, 0x4D, 0x5D, 0x6D, 0x7D,
353 0x8D, 0x9D, 0xAD, 0xBD, 0xCD, 0xDD, 0xED, 0xFD,
354 0x0E, 0x1E, 0x2E, 0x3E, 0x4E, 0x5E, 0x6E, 0x7E,
355 0x8E, 0x9E, 0xAE, 0xBE, 0xCE, 0xDE, 0xEE, 0xFE,
356 0x0F, 0x1F, 0x2F, 0x3F, 0x4F, 0x5F, 0x6F, 0x7F,
357 0x8F, 0x9F, 0xAF, 0xBF, 0xCF, 0xDF, 0xEF, 0xFF
366 #
if defined(PNG_USELESS_TESTS_SUPPORTED)
367 row != NULL && row_info != NULL &&
369 row_info->bit_depth < 8)
373 end = row + row_info->rowbytes;
375 if (row_info->bit_depth == 1)
377 else if (row_info->bit_depth == 2)
379 else if (row_info->bit_depth == 4)
384 for (rp = row; rp < end; rp++)
390 #if defined(PNG_WRITE_FILLER_SUPPORTED) || \ 391 defined(PNG_READ_STRIP_ALPHA_SUPPORTED) 396 png_debug(1,
"in png_do_strip_filler\n");
397 #if defined(PNG_USELESS_TESTS_SUPPORTED) 398 if (row != NULL && row_info != NULL)
408 (flags & PNG_FLAG_STRIP_ALPHA))) &&
409 row_info->channels == 4)
411 if (row_info->bit_depth == 8)
414 if (flags & PNG_FLAG_FILLER_AFTER)
417 for (i = 1; i < row_width; i++)
428 for (i = 0; i < row_width; i++)
436 row_info->pixel_depth = 24;
437 row_info->rowbytes = row_width * 3;
441 if (flags & PNG_FLAG_FILLER_AFTER)
445 for (i = 1; i < row_width; i++)
465 for (i = 0; i < row_width; i++)
482 row_info->pixel_depth = 48;
483 row_info->rowbytes = row_width * 6;
485 row_info->channels = 3;
489 (flags & PNG_FLAG_STRIP_ALPHA))) &&
490 row_info->channels == 2)
492 if (row_info->bit_depth == 8)
495 if (flags & PNG_FLAG_FILLER_AFTER)
497 for (i = 0; i < row_width; i++)
506 for (i = 0; i < row_width; i++)
512 row_info->pixel_depth = 8;
513 row_info->rowbytes = row_width;
517 if (flags & PNG_FLAG_FILLER_AFTER)
521 for (i = 1; i < row_width; i++)
531 for (i = 0; i < row_width; i++)
538 row_info->pixel_depth = 16;
539 row_info->rowbytes = row_width * 2;
541 row_info->channels = 1;
543 if (flags & PNG_FLAG_STRIP_ALPHA)
549 #if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED) 556 #
if defined(PNG_USELESS_TESTS_SUPPORTED)
557 row != NULL && row_info != NULL &&
562 if (row_info->bit_depth == 8)
569 for (i = 0, rp = row; i < row_width; i++, rp += 3)
581 for (i = 0, rp = row; i < row_width; i++, rp += 4)
589 else if (row_info->bit_depth == 16)
596 for (i = 0, rp = row; i < row_width; i++, rp += 6)
602 *(rp + 1) = *(rp + 5);
611 for (i = 0, rp = row; i < row_width; i++, rp += 8)
617 *(rp + 1) = *(rp + 5);
626 #if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ 627 defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \ 628 defined(PNG_LEGACY_SUPPORTED) 633 png_debug(1,
"in png_set_user_transform_info\n");
634 if (png_ptr == NULL)
return;
635 #if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED) 637 png_ptr->user_transform_depth = (
png_byte)user_transform_depth;
638 png_ptr->user_transform_channels = (
png_byte)user_transform_channels;
640 if (user_transform_ptr || user_transform_depth || user_transform_channels)
642 "This version of libpng does not support user transform info");
655 if (png_ptr == NULL)
return (NULL);
656 #if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED) 657 return ((
png_voidp)png_ptr->user_transform_ptr);
void PNGAPI png_set_packing(png_structp png_ptr)
void PNGAPI png_set_add_alpha(png_structp png_ptr, png_uint_32 filler, int filler_loc)
void png_do_packswap(png_row_infop row_info, png_bytep row)
void png_do_invert(png_row_infop row_info, png_bytep row)
png_voidp int int user_transform_channels
png_voidp user_transform_ptr
#define PNG_COLOR_TYPE_RGB
void PNGAPI png_set_invert_alpha(png_structp png_ptr)
#define PNG_COLOR_TYPE_GRAY_ALPHA
void png_do_strip_filler(png_row_infop row_info, png_bytep row, png_uint_32 flags)
#define PNG_COLOR_TYPE_RGB_ALPHA
png_voidp int user_transform_depth
void PNGAPI png_set_user_transform_info(png_structp png_ptr, png_voidp user_transform_ptr, int user_transform_depth, int user_transform_channels)
void PNGAPI png_set_bgr(png_structp png_ptr)
static PNG_CONST png_byte onebppswaptable[256]
png_struct FAR * png_structp
png_voidp PNGAPI png_get_user_transform_ptr(png_structp png_ptr)
void PNGAPI png_set_filler(png_structp png_ptr, png_uint_32 filler, int filler_loc)
#define PNG_COLOR_MASK_COLOR
void PNGAPI png_set_packswap(png_structp png_ptr)
void PNGAPI png_set_swap(png_structp png_ptr)
#define PNG_COLOR_TYPE_GRAY
void PNGAPI png_warning(png_structp png_ptr, png_const_charp warning_message)
void png_do_bgr(png_row_infop row_info, png_bytep row)
void PNGAPI png_set_invert_mono(png_structp png_ptr)
#define PNG_COLOR_MASK_ALPHA
void png_do_swap(png_row_infop row_info, png_bytep row)
png_color_8 FAR * png_color_8p
int PNGAPI png_set_interlace_handling(png_structp png_ptr)
void PNGAPI png_set_shift(png_structp png_ptr, png_color_8p true_bits)
unsigned long png_uint_32
png_row_info FAR * png_row_infop
static PNG_CONST png_byte twobppswaptable[256]
void PNGAPI png_set_swap_alpha(png_structp png_ptr)
static PNG_CONST png_byte fourbppswaptable[256]