15 #define PNG_NO_PEDANTIC_WARNINGS 17 #if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED) 19 #if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED) 28 png_ptr->transformations |= PNG_BGR;
32 #if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED) 41 if (png_ptr->bit_depth == 16)
42 png_ptr->transformations |= PNG_SWAP_BYTES;
46 #if defined(PNG_READ_PACK_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED) 55 if (png_ptr->bit_depth < 8)
57 png_ptr->transformations |= PNG_PACK;
58 png_ptr->usr_bit_depth = 8;
63 #if defined(PNG_READ_PACKSWAP_SUPPORTED)||defined(PNG_WRITE_PACKSWAP_SUPPORTED) 72 if (png_ptr->bit_depth < 8)
73 png_ptr->transformations |= PNG_PACKSWAP;
77 #if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED) 85 png_ptr->transformations |= PNG_SHIFT;
90 #if defined(PNG_READ_INTERLACING_SUPPORTED) || \ 91 defined(PNG_WRITE_INTERLACING_SUPPORTED) 95 png_debug(1,
"in png_set_interlace handling");
97 if (png_ptr && png_ptr->interlaced)
99 png_ptr->transformations |= PNG_INTERLACE;
107 #if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED) 120 png_ptr->transformations |= PNG_FILLER;
121 #ifdef PNG_LEGACY_SUPPORTED 127 png_ptr->flags |= PNG_FLAG_FILLER_AFTER;
129 png_ptr->flags &= ~PNG_FLAG_FILLER_AFTER;
138 png_ptr->usr_channels = 4;
146 png_ptr->usr_channels = 2;
160 png_ptr->transformations |= PNG_ADD_ALPHA;
166 #if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) || \ 167 defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED) 175 png_ptr->transformations |= PNG_SWAP_ALPHA;
179 #if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) || \ 180 defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED) 188 png_ptr->transformations |= PNG_INVERT_ALPHA;
192 #if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED) 200 png_ptr->transformations |= PNG_INVERT_MONO;
212 #ifdef PNG_USELESS_TESTS_SUPPORTED 213 if (row ==
NULL || row_info ==
NULL)
222 for (i = 0; i < istop; i++)
229 row_info->bit_depth == 8)
235 for (i = 0; i < istop; i+=2)
242 row_info->bit_depth == 16)
248 for (i = 0; i < istop; i+=4)
258 #if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED) 266 #ifdef PNG_USELESS_TESTS_SUPPORTED
269 row_info->bit_depth == 16)
273 png_uint_32 istop= row_info->width * row_info->channels;
275 for (i = 0; i < istop; i++, rp += 2)
285 #if defined(PNG_READ_PACKSWAP_SUPPORTED)||defined(PNG_WRITE_PACKSWAP_SUPPORTED) 287 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0,
288 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0,
289 0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8,
290 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8,
291 0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4,
292 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4,
293 0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC,
294 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC,
295 0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2,
296 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2,
297 0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA,
298 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA,
299 0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6,
300 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6,
301 0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE,
302 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE,
303 0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1,
304 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1,
305 0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9,
306 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9,
307 0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5,
308 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5,
309 0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED,
310 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD,
311 0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3,
312 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3,
313 0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB,
314 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB,
315 0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7,
316 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7,
317 0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF,
318 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF
322 0x00, 0x40, 0x80, 0xC0, 0x10, 0x50, 0x90, 0xD0,
323 0x20, 0x60, 0xA0, 0xE0, 0x30, 0x70, 0xB0, 0xF0,
324 0x04, 0x44, 0x84, 0xC4, 0x14, 0x54, 0x94, 0xD4,
325 0x24, 0x64, 0xA4, 0xE4, 0x34, 0x74, 0xB4, 0xF4,
326 0x08, 0x48, 0x88, 0xC8, 0x18, 0x58, 0x98, 0xD8,
327 0x28, 0x68, 0xA8, 0xE8, 0x38, 0x78, 0xB8, 0xF8,
328 0x0C, 0x4C, 0x8C, 0xCC, 0x1C, 0x5C, 0x9C, 0xDC,
329 0x2C, 0x6C, 0xAC, 0xEC, 0x3C, 0x7C, 0xBC, 0xFC,
330 0x01, 0x41, 0x81, 0xC1, 0x11, 0x51, 0x91, 0xD1,
331 0x21, 0x61, 0xA1, 0xE1, 0x31, 0x71, 0xB1, 0xF1,
332 0x05, 0x45, 0x85, 0xC5, 0x15, 0x55, 0x95, 0xD5,
333 0x25, 0x65, 0xA5, 0xE5, 0x35, 0x75, 0xB5, 0xF5,
334 0x09, 0x49, 0x89, 0xC9, 0x19, 0x59, 0x99, 0xD9,
335 0x29, 0x69, 0xA9, 0xE9, 0x39, 0x79, 0xB9, 0xF9,
336 0x0D, 0x4D, 0x8D, 0xCD, 0x1D, 0x5D, 0x9D, 0xDD,
337 0x2D, 0x6D, 0xAD, 0xED, 0x3D, 0x7D, 0xBD, 0xFD,
338 0x02, 0x42, 0x82, 0xC2, 0x12, 0x52, 0x92, 0xD2,
339 0x22, 0x62, 0xA2, 0xE2, 0x32, 0x72, 0xB2, 0xF2,
340 0x06, 0x46, 0x86, 0xC6, 0x16, 0x56, 0x96, 0xD6,
341 0x26, 0x66, 0xA6, 0xE6, 0x36, 0x76, 0xB6, 0xF6,
342 0x0A, 0x4A, 0x8A, 0xCA, 0x1A, 0x5A, 0x9A, 0xDA,
343 0x2A, 0x6A, 0xAA, 0xEA, 0x3A, 0x7A, 0xBA, 0xFA,
344 0x0E, 0x4E, 0x8E, 0xCE, 0x1E, 0x5E, 0x9E, 0xDE,
345 0x2E, 0x6E, 0xAE, 0xEE, 0x3E, 0x7E, 0xBE, 0xFE,
346 0x03, 0x43, 0x83, 0xC3, 0x13, 0x53, 0x93, 0xD3,
347 0x23, 0x63, 0xA3, 0xE3, 0x33, 0x73, 0xB3, 0xF3,
348 0x07, 0x47, 0x87, 0xC7, 0x17, 0x57, 0x97, 0xD7,
349 0x27, 0x67, 0xA7, 0xE7, 0x37, 0x77, 0xB7, 0xF7,
350 0x0B, 0x4B, 0x8B, 0xCB, 0x1B, 0x5B, 0x9B, 0xDB,
351 0x2B, 0x6B, 0xAB, 0xEB, 0x3B, 0x7B, 0xBB, 0xFB,
352 0x0F, 0x4F, 0x8F, 0xCF, 0x1F, 0x5F, 0x9F, 0xDF,
353 0x2F, 0x6F, 0xAF, 0xEF, 0x3F, 0x7F, 0xBF, 0xFF
357 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70,
358 0x80, 0x90, 0xA0, 0xB0, 0xC0, 0xD0, 0xE0, 0xF0,
359 0x01, 0x11, 0x21, 0x31, 0x41, 0x51, 0x61, 0x71,
360 0x81, 0x91, 0xA1, 0xB1, 0xC1, 0xD1, 0xE1, 0xF1,
361 0x02, 0x12, 0x22, 0x32, 0x42, 0x52, 0x62, 0x72,
362 0x82, 0x92, 0xA2, 0xB2, 0xC2, 0xD2, 0xE2, 0xF2,
363 0x03, 0x13, 0x23, 0x33, 0x43, 0x53, 0x63, 0x73,
364 0x83, 0x93, 0xA3, 0xB3, 0xC3, 0xD3, 0xE3, 0xF3,
365 0x04, 0x14, 0x24, 0x34, 0x44, 0x54, 0x64, 0x74,
366 0x84, 0x94, 0xA4, 0xB4, 0xC4, 0xD4, 0xE4, 0xF4,
367 0x05, 0x15, 0x25, 0x35, 0x45, 0x55, 0x65, 0x75,
368 0x85, 0x95, 0xA5, 0xB5, 0xC5, 0xD5, 0xE5, 0xF5,
369 0x06, 0x16, 0x26, 0x36, 0x46, 0x56, 0x66, 0x76,
370 0x86, 0x96, 0xA6, 0xB6, 0xC6, 0xD6, 0xE6, 0xF6,
371 0x07, 0x17, 0x27, 0x37, 0x47, 0x57, 0x67, 0x77,
372 0x87, 0x97, 0xA7, 0xB7, 0xC7, 0xD7, 0xE7, 0xF7,
373 0x08, 0x18, 0x28, 0x38, 0x48, 0x58, 0x68, 0x78,
374 0x88, 0x98, 0xA8, 0xB8, 0xC8, 0xD8, 0xE8, 0xF8,
375 0x09, 0x19, 0x29, 0x39, 0x49, 0x59, 0x69, 0x79,
376 0x89, 0x99, 0xA9, 0xB9, 0xC9, 0xD9, 0xE9, 0xF9,
377 0x0A, 0x1A, 0x2A, 0x3A, 0x4A, 0x5A, 0x6A, 0x7A,
378 0x8A, 0x9A, 0xAA, 0xBA, 0xCA, 0xDA, 0xEA, 0xFA,
379 0x0B, 0x1B, 0x2B, 0x3B, 0x4B, 0x5B, 0x6B, 0x7B,
380 0x8B, 0x9B, 0xAB, 0xBB, 0xCB, 0xDB, 0xEB, 0xFB,
381 0x0C, 0x1C, 0x2C, 0x3C, 0x4C, 0x5C, 0x6C, 0x7C,
382 0x8C, 0x9C, 0xAC, 0xBC, 0xCC, 0xDC, 0xEC, 0xFC,
383 0x0D, 0x1D, 0x2D, 0x3D, 0x4D, 0x5D, 0x6D, 0x7D,
384 0x8D, 0x9D, 0xAD, 0xBD, 0xCD, 0xDD, 0xED, 0xFD,
385 0x0E, 0x1E, 0x2E, 0x3E, 0x4E, 0x5E, 0x6E, 0x7E,
386 0x8E, 0x9E, 0xAE, 0xBE, 0xCE, 0xDE, 0xEE, 0xFE,
387 0x0F, 0x1F, 0x2F, 0x3F, 0x4F, 0x5F, 0x6F, 0x7F,
388 0x8F, 0x9F, 0xAF, 0xBF, 0xCF, 0xDF, 0xEF, 0xFF
398 #ifdef PNG_USELESS_TESTS_SUPPORTED
401 row_info->bit_depth < 8)
405 end = row + row_info->rowbytes;
407 if (row_info->bit_depth == 1)
409 else if (row_info->bit_depth == 2)
411 else if (row_info->bit_depth == 4)
416 for (rp = row; rp <
end; rp++)
422 #if defined(PNG_WRITE_FILLER_SUPPORTED) || \ 423 defined(PNG_READ_STRIP_ALPHA_SUPPORTED) 430 #ifdef PNG_USELESS_TESTS_SUPPORTED 431 if (row !=
NULL && row_info !=
NULL)
441 (flags & PNG_FLAG_STRIP_ALPHA))) &&
442 row_info->channels == 4)
444 if (row_info->bit_depth == 8)
447 if (flags & PNG_FLAG_FILLER_AFTER)
450 for (i = 1; i < row_width; i++)
461 for (i = 0; i < row_width; i++)
469 row_info->pixel_depth = 24;
470 row_info->rowbytes = row_width * 3;
474 if (flags & PNG_FLAG_FILLER_AFTER)
478 for (i = 1; i < row_width; i++)
498 for (i = 0; i < row_width; i++)
515 row_info->pixel_depth = 48;
516 row_info->rowbytes = row_width * 6;
518 row_info->channels = 3;
522 (flags & PNG_FLAG_STRIP_ALPHA))) &&
523 row_info->channels == 2)
525 if (row_info->bit_depth == 8)
528 if (flags & PNG_FLAG_FILLER_AFTER)
530 for (i = 0; i < row_width; i++)
539 for (i = 0; i < row_width; i++)
545 row_info->pixel_depth = 8;
546 row_info->rowbytes = row_width;
550 if (flags & PNG_FLAG_FILLER_AFTER)
554 for (i = 1; i < row_width; i++)
564 for (i = 0; i < row_width; i++)
571 row_info->pixel_depth = 16;
572 row_info->rowbytes = row_width * 2;
574 row_info->channels = 1;
576 if (flags & PNG_FLAG_STRIP_ALPHA)
582 #if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED) 590 #ifdef PNG_USELESS_TESTS_SUPPORTED
596 if (row_info->bit_depth == 8)
603 for (i = 0, rp = row; i < row_width; i++, rp += 3)
615 for (i = 0, rp = row; i < row_width; i++, rp += 4)
623 else if (row_info->bit_depth == 16)
630 for (i = 0, rp = row; i < row_width; i++, rp += 6)
636 *(rp + 1) = *(rp + 5);
645 for (i = 0, rp = row; i < row_width; i++, rp += 8)
651 *(rp + 1) = *(rp + 5);
660 #if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ 661 defined(PNG_LEGACY_SUPPORTED) || \ 662 defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) 667 png_debug(1,
"in png_set_user_transform_info");
671 #ifdef PNG_USER_TRANSFORM_PTR_SUPPORTED 673 png_ptr->user_transform_depth = (
png_byte)user_transform_depth;
674 png_ptr->user_transform_channels = (
png_byte)user_transform_channels;
676 if (user_transform_ptr || user_transform_depth || user_transform_channels)
678 "This version of libpng does not support user transform info");
693 #ifdef PNG_USER_TRANSFORM_PTR_SUPPORTED 694 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)
GLenum GLenum GLvoid * row
void PNGAPI png_set_bgr(png_structp png_ptr)
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)
unsigned short png_uint_16
#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
void PNGAPI png_set_swap_alpha(png_structp png_ptr)
GLenum GLsizei GLenum GLenum const GLvoid * table