Lines Matching defs:png_ptr

56 png_write_info_before_PLTE(png_structp png_ptr, png_infop info_ptr)
60 if (png_ptr == NULL || info_ptr == NULL)
63 if (!(png_ptr->mode & PNG_WROTE_INFO_BEFORE_PLTE))
66 png_write_sig(png_ptr);
69 if ((png_ptr->mode&PNG_HAVE_PNG_SIGNATURE) && \
70 (png_ptr->mng_features_permitted))
72 png_warning(png_ptr, "MNG features are not allowed in a PNG datastream");
73 png_ptr->mng_features_permitted = 0;
78 png_write_IHDR(png_ptr, info_ptr->width, info_ptr->height,
91 png_write_gAMA_fixed(png_ptr, info_ptr->gamma);
95 png_write_sRGB(png_ptr, (int)info_ptr->srgb_intent);
100 png_write_iCCP(png_ptr, info_ptr->iccp_name, PNG_COMPRESSION_TYPE_BASE,
105 png_write_sBIT(png_ptr, &(info_ptr->sig_bit), info_ptr->color_type);
109 png_write_cHRM_fixed(png_ptr,
127 int keep = png_handle_as_unknown(png_ptr, up->name);
135 (png_ptr->flags & PNG_FLAG_KEEP_UNSAFE_CHUNKS)))
138 png_warning(png_ptr, "Writing zero-length unknown chunk");
140 png_write_chunk(png_ptr, up->name, up->data, up->size);
145 png_ptr->mode |= PNG_WROTE_INFO_BEFORE_PLTE;
150 png_write_info(png_structp png_ptr, png_infop info_ptr)
158 if (png_ptr == NULL || info_ptr == NULL)
161 png_write_info_before_PLTE(png_ptr, info_ptr);
164 png_write_PLTE(png_ptr, info_ptr->palette,
168 png_error(png_ptr, "Valid palette required for paletted images");
175 if ((png_ptr->transformations & PNG_INVERT_ALPHA) &&
184 png_write_tRNS(png_ptr, info_ptr->trans_alpha, &(info_ptr->trans_color),
190 png_write_bKGD(png_ptr, &(info_ptr->background), info_ptr->color_type);
195 png_write_hIST(png_ptr, info_ptr->hist, info_ptr->num_palette);
200 png_write_oFFs(png_ptr, info_ptr->x_offset, info_ptr->y_offset,
206 png_write_pCAL(png_ptr, info_ptr->pcal_purpose, info_ptr->pcal_X0,
213 png_write_sCAL_s(png_ptr, (int)info_ptr->scal_unit,
219 png_write_pHYs(png_ptr, info_ptr->x_pixels_per_unit,
226 png_write_tIME(png_ptr, &(info_ptr->mod_time));
227 png_ptr->mode |= PNG_WROTE_tIME;
234 png_write_sPLT(png_ptr, info_ptr->splt_palettes + i);
248 png_write_iTXt(png_ptr,
255 png_warning(png_ptr, "Unable to write international text");
266 png_write_zTXt(png_ptr, info_ptr->text[i].key,
270 png_warning(png_ptr, "Unable to write compressed text");
280 png_write_tEXt(png_ptr, info_ptr->text[i].key,
287 png_warning(png_ptr, "Unable to write uncompressed text");
304 int keep = png_handle_as_unknown(png_ptr, up->name);
311 (png_ptr->flags & PNG_FLAG_KEEP_UNSAFE_CHUNKS)))
313 png_write_chunk(png_ptr, up->name, up->data, up->size);
326 png_write_end(png_structp png_ptr, png_infop info_ptr)
330 if (png_ptr == NULL)
333 if (!(png_ptr->mode & PNG_HAVE_IDAT))
334 png_error(png_ptr, "No IDATs written into file");
345 !(png_ptr->mode & PNG_WROTE_tIME))
346 png_write_tIME(png_ptr, &(info_ptr->mod_time));
360 png_write_iTXt(png_ptr,
367 png_warning(png_ptr, "Unable to write international text");
377 png_write_zTXt(png_ptr, info_ptr->text[i].key,
381 png_warning(png_ptr, "Unable to write compressed text");
391 png_write_tEXt(png_ptr, info_ptr->text[i].key,
394 png_warning(png_ptr, "Unable to write uncompressed text");
413 int keep = png_handle_as_unknown(png_ptr, up->name);
418 (png_ptr->flags & PNG_FLAG_KEEP_UNSAFE_CHUNKS)))
420 png_write_chunk(png_ptr, up->name, up->data, up->size);
427 png_ptr->mode |= PNG_AFTER_IDAT;
430 png_write_IEND(png_ptr);
433 * do not set png_ptr->output_flush_fn to crash. If your application
440 png_flush(png_ptr);
472 /* Initialize png_ptr structure, and allocate any memory needed */
482 /* Alternate initialize png_ptr structure, and allocate any memory needed */
483 static void png_reset_filter_heuristics(png_structp png_ptr); /* forward decl */
495 png_structp png_ptr;
505 png_ptr = (png_structp)png_create_struct_2(PNG_STRUCT_PNG,
508 png_ptr = (png_structp)png_create_struct(PNG_STRUCT_PNG);
510 if (png_ptr == NULL)
515 png_ptr->user_width_max = PNG_USER_WIDTH_MAX;
516 png_ptr->user_height_max = PNG_USER_HEIGHT_MAX;
526 if (setjmp(png_jmpbuf(png_ptr))) /* sets longjmp to match setjmp */
529 png_memcpy(png_jmpbuf(png_ptr), tmp_jmpbuf, png_sizeof(jmp_buf));
535 png_set_mem_fn(png_ptr, mem_ptr, malloc_fn, free_fn);
537 png_set_error_fn(png_ptr, error_ptr, error_fn, warn_fn);
539 if (!png_user_version_check(png_ptr, user_png_ver))
543 png_ptr->zbuf_size = PNG_ZBUF_SIZE;
547 png_ptr->zbuf = (png_bytep)png_malloc_warn(png_ptr,
548 png_ptr->zbuf_size);
549 if (png_ptr->zbuf == NULL)
556 png_free(png_ptr, png_ptr->zbuf);
557 png_ptr->zbuf = NULL;
559 png_destroy_struct_2((png_voidp)png_ptr,
562 png_destroy_struct((png_voidp)png_ptr);
567 png_set_write_fn(png_ptr, NULL, NULL, NULL);
570 png_reset_filter_heuristics(png_ptr);
573 return (png_ptr);
583 png_write_rows(png_structp png_ptr, png_bytepp row,
591 if (png_ptr == NULL)
597 png_write_row(png_ptr, *rp);
605 png_write_image(png_structp png_ptr, png_bytepp image)
611 if (png_ptr == NULL)
620 num_pass = png_set_interlace_handling(png_ptr);
628 for (i = 0, rp = image; i < png_ptr->height; i++, rp++)
630 png_write_row(png_ptr, *rp);
637 png_write_row(png_structp png_ptr, png_const_bytep row)
639 if (png_ptr == NULL)
643 png_ptr->row_number, png_ptr->pass);
646 if (png_ptr->row_number == 0 && png_ptr->pass == 0)
649 if (!(png_ptr->mode & PNG_WROTE_INFO_BEFORE_PLTE))
650 png_error(png_ptr,
655 if (png_ptr->transformations & PNG_INVERT_MONO)
656 png_warning(png_ptr, "PNG_WRITE_INVERT_SUPPORTED is not defined");
660 if (png_ptr->transformations & PNG_FILLER)
661 png_warning(png_ptr, "PNG_WRITE_FILLER_SUPPORTED is not defined");
665 if (png_ptr->transformations & PNG_PACKSWAP)
666 png_warning(png_ptr,
671 if (png_ptr->transformations & PNG_PACK)
672 png_warning(png_ptr, "PNG_WRITE_PACK_SUPPORTED is not defined");
676 if (png_ptr->transformations & PNG_SHIFT)
677 png_warning(png_ptr, "PNG_WRITE_SHIFT_SUPPORTED is not defined");
681 if (png_ptr->transformations & PNG_BGR)
682 png_warning(png_ptr, "PNG_WRITE_BGR_SUPPORTED is not defined");
686 if (png_ptr->transformations & PNG_SWAP_BYTES)
687 png_warning(png_ptr, "PNG_WRITE_SWAP_SUPPORTED is not defined");
690 png_write_start_row(png_ptr);
695 if (png_ptr->interlaced && (png_ptr->transformations & PNG_INTERLACE))
697 switch (png_ptr->pass)
700 if (png_ptr->row_number & 0x07)
702 png_write_finish_row(png_ptr);
708 if ((png_ptr->row_number & 0x07) || png_ptr->width < 5)
710 png_write_finish_row(png_ptr);
716 if ((png_ptr->row_number & 0x07) != 4)
718 png_write_finish_row(png_ptr);
724 if ((png_ptr->row_number & 0x03) || png_ptr->width < 3)
726 png_write_finish_row(png_ptr);
732 if ((png_ptr->row_number & 0x03) != 2)
734 png_write_finish_row(png_ptr);
740 if ((png_ptr->row_number & 0x01) || png_ptr->width < 2)
742 png_write_finish_row(png_ptr);
748 if (!(png_ptr->row_number & 0x01))
750 png_write_finish_row(png_ptr);
762 png_ptr->row_info.color_type = png_ptr->color_type;
763 png_ptr->row_info.width = png_ptr->usr_width;
764 png_ptr->row_info.channels = png_ptr->usr_channels;
765 png_ptr->row_info.bit_depth = png_ptr->usr_bit_depth;
766 png_ptr->row_info.pixel_depth = (png_byte)(png_ptr->row_info.bit_depth *
767 png_ptr->row_info.channels);
769 png_ptr->row_info.rowbytes = PNG_ROWBYTES(png_ptr->row_info.pixel_depth,
770 png_ptr->row_info.width);
772 png_debug1(3, "row_info->color_type = %d", png_ptr->row_info.color_type);
773 png_debug1(3, "row_info->width = %u", png_ptr->row_info.width);
774 png_debug1(3, "row_info->channels = %d", png_ptr->row_info.channels);
775 png_debug1(3, "row_info->bit_depth = %d", png_ptr->row_info.bit_depth);
776 png_debug1(3, "row_info->pixel_depth = %d", png_ptr->row_info.pixel_depth);
778 (unsigned long)png_ptr->row_info.rowbytes);
781 png_memcpy(png_ptr->row_buf + 1, row, png_ptr->row_info.rowbytes);
785 if (png_ptr->interlaced && png_ptr->pass < 6 &&
786 (png_ptr->transformations & PNG_INTERLACE))
788 png_do_write_interlace(&(png_ptr->row_info),
789 png_ptr->row_buf + 1, png_ptr->pass);
791 if (!(png_ptr->row_info.width))
793 png_write_finish_row(png_ptr);
801 if (png_ptr->transformations)
802 png_do_write_transformations(png_ptr);
815 if ((png_ptr->mng_features_permitted & PNG_FLAG_MNG_FILTER_64) &&
816 (png_ptr->filter_type == PNG_INTRAPIXEL_DIFFERENCING))
819 png_do_write_intrapixel(&(png_ptr->row_info), png_ptr->row_buf + 1);
824 png_write_find_filter(png_ptr, &(png_ptr->row_info));
826 if (png_ptr->write_row_fn != NULL)
827 (*(png_ptr->write_row_fn))(png_ptr, png_ptr->row_number, png_ptr->pass);
833 png_set_flush(png_structp png_ptr, int nrows)
837 if (png_ptr == NULL)
840 png_ptr->flush_dist = (nrows < 0 ? 0 : nrows);
845 png_write_flush(png_structp png_ptr)
851 if (png_ptr == NULL)
855 if (png_ptr->row_number >= png_ptr->num_rows)
863 ret = deflate(&png_ptr->zstream, Z_SYNC_FLUSH);
869 if (png_ptr->zstream.msg != NULL)
870 png_error(png_ptr, png_ptr->zstream.msg);
873 png_error(png_ptr, "zlib error");
876 if (!(png_ptr->zstream.avail_out))
879 png_write_IDAT(png_ptr, png_ptr->zbuf, png_ptr->zbuf_size);
885 if (png_ptr->zbuf_size != png_ptr->zstream.avail_out)
888 png_write_IDAT(png_ptr, png_ptr->zbuf,
889 png_ptr->zbuf_size - png_ptr->zstream.avail_out);
891 png_ptr->flush_rows = 0;
892 png_flush(png_ptr);
900 png_structp png_ptr = NULL;
911 png_ptr = *png_ptr_ptr;
913 free_fn = png_ptr->free_fn;
914 mem_ptr = png_ptr->mem_ptr;
919 if (png_ptr != NULL)
921 free_fn = png_ptr->free_fn;
922 mem_ptr = png_ptr->mem_ptr;
931 if (png_ptr != NULL)
933 png_free_data(png_ptr, info_ptr, PNG_FREE_ALL, -1);
936 if (png_ptr->num_chunk_list)
938 png_free(png_ptr, png_ptr->chunk_list);
939 png_ptr->num_chunk_list = 0;
953 if (png_ptr != NULL)
955 png_write_destroy(png_ptr);
957 png_destroy_struct_2((png_voidp)png_ptr, (png_free_ptr)free_fn,
960 png_destroy_struct((png_voidp)png_ptr);
967 /* Free any memory used in png_ptr struct (old method) */
969 png_write_destroy(png_structp png_ptr)
986 if (png_ptr->zlib_state != PNG_ZLIB_UNINITIALIZED)
987 deflateEnd(&png_ptr->zstream);
990 png_free(png_ptr, png_ptr->zbuf);
991 png_free(png_ptr, png_ptr->row_buf);
993 png_free(png_ptr, png_ptr->prev_row);
994 png_free(png_ptr, png_ptr->sub_row);
995 png_free(png_ptr, png_ptr->up_row);
996 png_free(png_ptr, png_ptr->avg_row);
997 png_free(png_ptr, png_ptr->paeth_row);
1002 png_reset_filter_heuristics(png_ptr);
1003 png_free(png_ptr, png_ptr->filter_costs);
1004 png_free(png_ptr, png_ptr->inv_filter_costs);
1009 png_memcpy(tmp_jmp, png_ptr->longjmp_buffer, png_sizeof(jmp_buf));
1012 error_fn = png_ptr->error_fn;
1014 warning_fn = png_ptr->warning_fn;
1016 error_ptr = png_ptr->error_ptr;
1018 free_fn = png_ptr->free_fn;
1021 png_memset(png_ptr, 0, png_sizeof(png_struct));
1023 png_ptr->error_fn = error_fn;
1025 png_ptr->warning_fn = warning_fn;
1027 png_ptr->error_ptr = error_ptr;
1029 png_ptr->free_fn = free_fn;
1033 png_memcpy(png_ptr->longjmp_buffer, tmp_jmp, png_sizeof(jmp_buf));
1039 png_set_filter(png_structp png_ptr, int method, int filters)
1043 if (png_ptr == NULL)
1047 if ((png_ptr->mng_features_permitted & PNG_FLAG_MNG_FILTER_64) &&
1059 case 7: png_warning(png_ptr, "Unknown row filter for method 0");
1062 png_ptr->do_filter = PNG_FILTER_NONE; break;
1066 png_ptr->do_filter = PNG_FILTER_SUB; break;
1069 png_ptr->do_filter = PNG_FILTER_UP; break;
1072 png_ptr->do_filter = PNG_FILTER_AVG; break;
1075 png_ptr->do_filter = PNG_FILTER_PAETH; break;
1078 png_ptr->do_filter = (png_byte)filters; break;
1081 png_warning(png_ptr, "Unknown row filter for method 0");
1094 if (png_ptr->row_buf != NULL)
1097 if ((png_ptr->do_filter & PNG_FILTER_SUB) && png_ptr->sub_row == NULL)
1099 png_ptr->sub_row = (png_bytep)png_malloc(png_ptr,
1100 (png_ptr->rowbytes + 1));
1101 png_ptr->sub_row[0] = PNG_FILTER_VALUE_SUB;
1104 if ((png_ptr->do_filter & PNG_FILTER_UP) && png_ptr->up_row == NULL)
1106 if (png_ptr->prev_row == NULL)
1108 png_warning(png_ptr, "Can't add Up filter after starting");
1109 png_ptr->do_filter = (png_byte)(png_ptr->do_filter &
1115 png_ptr->up_row = (png_bytep)png_malloc(png_ptr,
1116 (png_ptr->rowbytes + 1));
1117 png_ptr->up_row[0] = PNG_FILTER_VALUE_UP;
1121 if ((png_ptr->do_filter & PNG_FILTER_AVG) && png_ptr->avg_row == NULL)
1123 if (png_ptr->prev_row == NULL)
1125 png_warning(png_ptr, "Can't add Average filter after starting");
1126 png_ptr->do_filter = (png_byte)(png_ptr->do_filter &
1132 png_ptr->avg_row = (png_bytep)png_malloc(png_ptr,
1133 (png_ptr->rowbytes + 1));
1134 png_ptr->avg_row[0] = PNG_FILTER_VALUE_AVG;
1138 if ((png_ptr->do_filter & PNG_FILTER_PAETH) &&
1139 png_ptr->paeth_row == NULL)
1141 if (png_ptr->prev_row == NULL)
1143 png_warning(png_ptr, "Can't add Paeth filter after starting");
1144 png_ptr->do_filter &= (png_byte)(~PNG_FILTER_PAETH);
1149 png_ptr->paeth_row = (png_bytep)png_malloc(png_ptr,
1150 (png_ptr->rowbytes + 1));
1151 png_ptr->paeth_row[0] = PNG_FILTER_VALUE_PAETH;
1155 if (png_ptr->do_filter == PNG_NO_FILTERS)
1157 png_ptr->do_filter = PNG_FILTER_NONE;
1161 png_error(png_ptr, "Unknown custom filter method");
1174 png_reset_filter_heuristics(png_structp png_ptr)
1181 png_ptr->num_prev_filters = 0;
1182 png_ptr->heuristic_method = PNG_FILTER_HEURISTIC_UNWEIGHTED;
1183 if (png_ptr->prev_filters != NULL)
1185 png_bytep old = png_ptr->prev_filters;
1186 png_ptr->prev_filters = NULL;
1187 png_free(png_ptr, old);
1189 if (png_ptr->filter_weights != NULL)
1191 png_uint_16p old = png_ptr->filter_weights;
1192 png_ptr->filter_weights = NULL;
1193 png_free(png_ptr, old);
1196 if (png_ptr->inv_filter_weights != NULL)
1198 png_uint_16p old = png_ptr->inv_filter_weights;
1199 png_ptr->inv_filter_weights = NULL;
1200 png_free(png_ptr, old);
1207 png_init_filter_heuristics(png_structp png_ptr, int heuristic_method,
1210 if (png_ptr == NULL)
1214 png_reset_filter_heuristics(png_ptr);
1226 png_ptr->prev_filters = (png_bytep)png_malloc(png_ptr,
1232 png_ptr->prev_filters[i] = 255;
1235 png_ptr->filter_weights = (png_uint_16p)png_malloc(png_ptr,
1238 png_ptr->inv_filter_weights = (png_uint_16p)png_malloc(png_ptr,
1243 png_ptr->inv_filter_weights[i] =
1244 png_ptr->filter_weights[i] = PNG_WEIGHT_FACTOR;
1248 png_ptr->num_prev_filters = (png_byte)num_weights;
1252 * need to be based on png_ptr->filter.
1254 if (png_ptr->filter_costs == NULL)
1256 png_ptr->filter_costs = (png_uint_16p)png_malloc(png_ptr,
1259 png_ptr->inv_filter_costs = (png_uint_16p)png_malloc(png_ptr,
1265 png_ptr->inv_filter_costs[i] =
1266 png_ptr->filter_costs[i] = PNG_COST_FACTOR;
1270 png_ptr->heuristic_method = PNG_FILTER_HEURISTIC_WEIGHTED;
1282 png_warning(png_ptr, "Unknown filter heuristic method");
1290 png_set_filter_heuristics(png_structp png_ptr, int heuristic_method,
1299 if (!png_init_filter_heuristics(png_ptr, heuristic_method, num_weights))
1310 png_ptr->inv_filter_weights[i] =
1311 png_ptr->filter_weights[i] = PNG_WEIGHT_FACTOR;
1316 png_ptr->inv_filter_weights[i] =
1319 png_ptr->filter_weights[i] =
1333 png_ptr->inv_filter_costs[i] =
1336 png_ptr->filter_costs[i] =
1345 png_set_filter_heuristics_fixed(png_structp png_ptr, int heuristic_method,
1354 if (!png_init_filter_heuristics(png_ptr, heuristic_method, num_weights))
1365 png_ptr->inv_filter_weights[i] =
1366 png_ptr->filter_weights[i] = PNG_WEIGHT_FACTOR;
1371 png_ptr->inv_filter_weights[i] = (png_uint_16)
1374 png_ptr->filter_weights[i] = (png_uint_16)((PNG_WEIGHT_FACTOR*
1398 png_ptr->inv_filter_costs[i] = (png_uint_16)tmp;
1403 png_ptr->filter_costs[i] = (png_uint_16)tmp;
1411 png_set_compression_level(png_structp png_ptr, int level)
1415 if (png_ptr == NULL)
1418 png_ptr->flags |= PNG_FLAG_ZLIB_CUSTOM_LEVEL;
1419 png_ptr->zlib_level = level;
1423 png_set_compression_mem_level(png_structp png_ptr, int mem_level)
1427 if (png_ptr == NULL)
1430 png_ptr->flags |= PNG_FLAG_ZLIB_CUSTOM_MEM_LEVEL;
1431 png_ptr->zlib_mem_level = mem_level;
1435 png_set_compression_strategy(png_structp png_ptr, int strategy)
1439 if (png_ptr == NULL)
1442 png_ptr->flags |= PNG_FLAG_ZLIB_CUSTOM_STRATEGY;
1443 png_ptr->zlib_strategy = strategy;
1450 png_set_compression_window_bits(png_structp png_ptr, int window_bits)
1452 if (png_ptr == NULL)
1456 png_warning(png_ptr, "Only compression windows <= 32k supported by PNG");
1459 png_warning(png_ptr, "Only compression windows >= 256 supported by PNG");
1465 png_warning(png_ptr, "Compression window is being reset to 512");
1470 png_ptr->flags |= PNG_FLAG_ZLIB_CUSTOM_WINDOW_BITS;
1471 png_ptr->zlib_window_bits = window_bits;
1475 png_set_compression_method(png_structp png_ptr, int method)
1479 if (png_ptr == NULL)
1483 png_warning(png_ptr, "Only compression method 8 is supported by PNG");
1485 png_ptr->flags |= PNG_FLAG_ZLIB_CUSTOM_METHOD;
1486 png_ptr->zlib_method = method;
1492 png_set_text_compression_level(png_structp png_ptr, int level)
1496 if (png_ptr == NULL)
1499 png_ptr->flags |= PNG_FLAG_ZTXT_CUSTOM_LEVEL;
1500 png_ptr->zlib_text_level = level;
1504 png_set_text_compression_mem_level(png_structp png_ptr, int mem_level)
1508 if (png_ptr == NULL)
1511 png_ptr->flags |= PNG_FLAG_ZTXT_CUSTOM_MEM_LEVEL;
1512 png_ptr->zlib_text_mem_level = mem_level;
1516 png_set_text_compression_strategy(png_structp png_ptr, int strategy)
1520 if (png_ptr == NULL)
1523 png_ptr->flags |= PNG_FLAG_ZTXT_CUSTOM_STRATEGY;
1524 png_ptr->zlib_text_strategy = strategy;
1531 png_set_text_compression_window_bits(png_structp png_ptr, int window_bits)
1533 if (png_ptr == NULL)
1537 png_warning(png_ptr, "Only compression windows <= 32k supported by PNG");
1540 png_warning(png_ptr, "Only compression windows >= 256 supported by PNG");
1546 png_warning(png_ptr, "Text compression window is being reset to 512");
1551 png_ptr->flags |= PNG_FLAG_ZTXT_CUSTOM_WINDOW_BITS;
1552 png_ptr->zlib_text_window_bits = window_bits;
1556 png_set_text_compression_method(png_structp png_ptr, int method)
1560 if (png_ptr == NULL)
1564 png_warning(png_ptr, "Only compression method 8 is supported by PNG");
1566 png_ptr->flags |= PNG_FLAG_ZTXT_CUSTOM_METHOD;
1567 png_ptr->zlib_text_method = method;
1573 png_set_write_status_fn(png_structp png_ptr, png_write_status_ptr write_row_fn)
1575 if (png_ptr == NULL)
1578 png_ptr->write_row_fn = write_row_fn;
1583 png_set_write_user_transform_fn(png_structp png_ptr, png_user_transform_ptr
1588 if (png_ptr == NULL)
1591 png_ptr->transformations |= PNG_USER_TRANSFORM;
1592 png_ptr->write_user_transform_fn = write_user_transform_fn;
1599 png_write_png(png_structp png_ptr, png_infop info_ptr,
1602 if (png_ptr == NULL || info_ptr == NULL)
1606 png_write_info(png_ptr, info_ptr);
1613 png_set_invert_mono(png_ptr);
1622 png_set_shift(png_ptr, &info_ptr->sig_bit);
1628 png_set_packing(png_ptr);
1634 png_set_swap_alpha(png_ptr);
1640 png_set_filler(png_ptr, 0, PNG_FILLER_AFTER);
1643 png_set_filler(png_ptr, 0, PNG_FILLER_BEFORE);
1649 png_set_bgr(png_ptr);
1655 png_set_swap(png_ptr);
1661 png_set_packswap(png_ptr);
1667 png_set_invert_alpha(png_ptr);
1674 png_write_image(png_ptr, info_ptr->row_pointers);
1677 png_write_end(png_ptr, info_ptr);