102
if (user_png_ver[i] != png_libpng_ver[i])
103
png_ptr->flags |= PNG_FLAG_LIBRARY_MISMATCH;
104
} while (png_libpng_ver[i++]);
107
png_ptr->flags |= PNG_FLAG_LIBRARY_MISMATCH;
110
if (png_ptr->flags & PNG_FLAG_LIBRARY_MISMATCH)
112
/* Libpng 0.90 and later are binary incompatible with libpng 0.89, so
113
* we must recompile any applications that use any older library version.
114
* For versions after libpng 1.0, we will be compatible, so we need
115
* only check the first digit.
117
if (user_png_ver == NULL || user_png_ver[0] != png_libpng_ver[0] ||
118
(user_png_ver[0] == '1' && user_png_ver[2] != png_libpng_ver[2]) ||
119
(user_png_ver[0] == '0' && user_png_ver[2] < '9'))
121
#if !defined(PNG_NO_STDIO) && !defined(_WIN32_WCE)
125
png_snprintf(msg, 80,
126
"Application was compiled with png.h from libpng-%.20s",
128
png_warning(png_ptr, msg);
130
png_snprintf(msg, 80,
105
if (user_png_ver[i] != png_libpng_ver[i])
106
png_ptr->flags |= PNG_FLAG_LIBRARY_MISMATCH;
107
} while (png_libpng_ver[i++]);
110
png_ptr->flags |= PNG_FLAG_LIBRARY_MISMATCH;
113
if (png_ptr->flags & PNG_FLAG_LIBRARY_MISMATCH)
115
/* Libpng 0.90 and later are binary incompatible with libpng 0.89, so
116
* we must recompile any applications that use any older library version.
117
* For versions after libpng 1.0, we will be compatible, so we need
118
* only check the first digit.
120
if (user_png_ver == NULL || user_png_ver[0] != png_libpng_ver[0] ||
121
(user_png_ver[0] == '1' && user_png_ver[2] != png_libpng_ver[2]) ||
122
(user_png_ver[0] == '0' && user_png_ver[2] < '9'))
124
#if defined(PNG_STDIO_SUPPORTED) && !defined(_WIN32_WCE)
128
png_snprintf(msg, 80,
129
"Application was compiled with png.h from libpng-%.20s",
131
png_warning(png_ptr, msg);
133
png_snprintf(msg, 80,
131
134
"Application is running with png.c from libpng-%.20s",
133
png_warning(png_ptr, msg);
136
png_warning(png_ptr, msg);
135
138
#ifdef PNG_ERROR_NUMBERS_SUPPORTED
139
"Incompatible libpng version in application and library");
142
"Incompatible libpng version in application and library");
143
146
/* Initialize zbuf - compression buffer */
148
151
png_ptr->zstream.zfree = png_zfree;
149
152
png_ptr->zstream.opaque = (voidpf)png_ptr;
151
switch (inflateInit(&png_ptr->zstream))
153
case Z_OK: /* Do nothing */ break;
155
case Z_STREAM_ERROR: png_error(png_ptr, "zlib memory error"); break;
156
case Z_VERSION_ERROR: png_error(png_ptr, "zlib version error"); break;
157
default: png_error(png_ptr, "Unknown zlib error");
154
switch (inflateInit(&png_ptr->zstream))
156
case Z_OK: /* Do nothing */ break;
158
case Z_STREAM_ERROR: png_error(png_ptr, "zlib memory error");
160
case Z_VERSION_ERROR: png_error(png_ptr, "zlib version error");
162
default: png_error(png_ptr, "Unknown zlib error");
160
166
png_ptr->zstream.next_out = png_ptr->zbuf;
161
167
png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size;
163
169
png_set_read_fn(png_ptr, png_voidp_NULL, png_rw_ptr_NULL);
165
171
#ifdef PNG_SETJMP_SUPPORTED
166
/* Applications that neglect to set up their own setjmp() and then encounter
167
a png_error() will longjmp here. Since the jmpbuf is then meaningless we
168
abort instead of returning. */
172
/* Applications that neglect to set up their own setjmp() and then
173
encounter a png_error() will longjmp here. Since the jmpbuf is
174
then meaningless we abort instead of returning. */
169
175
#ifdef USE_FAR_KEYWORD
170
176
if (setjmp(jmpbuf))
172
178
png_memcpy(png_ptr->jmpbuf, jmpbuf, png_sizeof(jmp_buf));
174
180
if (setjmp(png_ptr->jmpbuf))
183
#endif /* PNG_SETJMP_SUPPORTED */
178
185
return (png_ptr);
181
188
#if defined(PNG_1_0_X) || defined(PNG_1_2_X)
182
189
/* Initialize PNG structure for reading, and allocate any memory needed.
183
This interface is deprecated in favour of the png_create_read_struct(),
184
and it will disappear as of libpng-1.3.0. */
190
* This interface is deprecated in favour of the png_create_read_struct(),
191
* and it will disappear as of libpng-1.3.0.
185
193
#undef png_read_init
187
195
png_read_init(png_structp png_ptr)
362
372
PNG_CONST PNG_IDAT;
363
373
PNG_CONST PNG_IEND;
364
374
PNG_CONST PNG_PLTE;
365
#if defined(PNG_READ_bKGD_SUPPORTED)
375
#ifdef PNG_READ_bKGD_SUPPORTED
366
376
PNG_CONST PNG_bKGD;
368
#if defined(PNG_READ_cHRM_SUPPORTED)
378
#ifdef PNG_READ_cHRM_SUPPORTED
369
379
PNG_CONST PNG_cHRM;
371
#if defined(PNG_READ_gAMA_SUPPORTED)
381
#ifdef PNG_READ_gAMA_SUPPORTED
372
382
PNG_CONST PNG_gAMA;
374
#if defined(PNG_READ_hIST_SUPPORTED)
384
#ifdef PNG_READ_hIST_SUPPORTED
375
385
PNG_CONST PNG_hIST;
377
#if defined(PNG_READ_iCCP_SUPPORTED)
387
#ifdef PNG_READ_iCCP_SUPPORTED
378
388
PNG_CONST PNG_iCCP;
380
#if defined(PNG_READ_iTXt_SUPPORTED)
390
#ifdef PNG_READ_iTXt_SUPPORTED
381
391
PNG_CONST PNG_iTXt;
383
#if defined(PNG_READ_oFFs_SUPPORTED)
393
#ifdef PNG_READ_oFFs_SUPPORTED
384
394
PNG_CONST PNG_oFFs;
386
#if defined(PNG_READ_pCAL_SUPPORTED)
396
#ifdef PNG_READ_pCAL_SUPPORTED
387
397
PNG_CONST PNG_pCAL;
389
#if defined(PNG_READ_pHYs_SUPPORTED)
399
#ifdef PNG_READ_pHYs_SUPPORTED
390
400
PNG_CONST PNG_pHYs;
392
#if defined(PNG_READ_sBIT_SUPPORTED)
402
#ifdef PNG_READ_sBIT_SUPPORTED
393
403
PNG_CONST PNG_sBIT;
395
#if defined(PNG_READ_sCAL_SUPPORTED)
405
#ifdef PNG_READ_sCAL_SUPPORTED
396
406
PNG_CONST PNG_sCAL;
398
#if defined(PNG_READ_sPLT_SUPPORTED)
408
#ifdef PNG_READ_sPLT_SUPPORTED
399
409
PNG_CONST PNG_sPLT;
401
#if defined(PNG_READ_sRGB_SUPPORTED)
411
#ifdef PNG_READ_sRGB_SUPPORTED
402
412
PNG_CONST PNG_sRGB;
404
#if defined(PNG_READ_tEXt_SUPPORTED)
414
#ifdef PNG_READ_tEXt_SUPPORTED
405
415
PNG_CONST PNG_tEXt;
407
#if defined(PNG_READ_tIME_SUPPORTED)
417
#ifdef PNG_READ_tIME_SUPPORTED
408
418
PNG_CONST PNG_tIME;
410
#if defined(PNG_READ_tRNS_SUPPORTED)
420
#ifdef PNG_READ_tRNS_SUPPORTED
411
421
PNG_CONST PNG_tRNS;
413
#if defined(PNG_READ_zTXt_SUPPORTED)
423
#ifdef PNG_READ_zTXt_SUPPORTED
414
424
PNG_CONST PNG_zTXt;
416
426
#endif /* PNG_USE_LOCAL_ARRAYS */
461
471
png_ptr->mode |= PNG_HAVE_IDAT;
464
#if defined(PNG_READ_bKGD_SUPPORTED)
474
#ifdef PNG_READ_bKGD_SUPPORTED
465
475
else if (!png_memcmp(chunk_name, png_bKGD, 4))
466
476
png_handle_bKGD(png_ptr, info_ptr, length);
468
#if defined(PNG_READ_cHRM_SUPPORTED)
478
#ifdef PNG_READ_cHRM_SUPPORTED
469
479
else if (!png_memcmp(chunk_name, png_cHRM, 4))
470
480
png_handle_cHRM(png_ptr, info_ptr, length);
472
#if defined(PNG_READ_gAMA_SUPPORTED)
482
#ifdef PNG_READ_gAMA_SUPPORTED
473
483
else if (!png_memcmp(chunk_name, png_gAMA, 4))
474
484
png_handle_gAMA(png_ptr, info_ptr, length);
476
#if defined(PNG_READ_hIST_SUPPORTED)
486
#ifdef PNG_READ_hIST_SUPPORTED
477
487
else if (!png_memcmp(chunk_name, png_hIST, 4))
478
488
png_handle_hIST(png_ptr, info_ptr, length);
480
#if defined(PNG_READ_oFFs_SUPPORTED)
490
#ifdef PNG_READ_oFFs_SUPPORTED
481
491
else if (!png_memcmp(chunk_name, png_oFFs, 4))
482
492
png_handle_oFFs(png_ptr, info_ptr, length);
484
#if defined(PNG_READ_pCAL_SUPPORTED)
494
#ifdef PNG_READ_pCAL_SUPPORTED
485
495
else if (!png_memcmp(chunk_name, png_pCAL, 4))
486
496
png_handle_pCAL(png_ptr, info_ptr, length);
488
#if defined(PNG_READ_sCAL_SUPPORTED)
498
#ifdef PNG_READ_sCAL_SUPPORTED
489
499
else if (!png_memcmp(chunk_name, png_sCAL, 4))
490
500
png_handle_sCAL(png_ptr, info_ptr, length);
492
#if defined(PNG_READ_pHYs_SUPPORTED)
502
#ifdef PNG_READ_pHYs_SUPPORTED
493
503
else if (!png_memcmp(chunk_name, png_pHYs, 4))
494
504
png_handle_pHYs(png_ptr, info_ptr, length);
496
#if defined(PNG_READ_sBIT_SUPPORTED)
506
#ifdef PNG_READ_sBIT_SUPPORTED
497
507
else if (!png_memcmp(chunk_name, png_sBIT, 4))
498
508
png_handle_sBIT(png_ptr, info_ptr, length);
500
#if defined(PNG_READ_sRGB_SUPPORTED)
510
#ifdef PNG_READ_sRGB_SUPPORTED
501
511
else if (!png_memcmp(chunk_name, png_sRGB, 4))
502
512
png_handle_sRGB(png_ptr, info_ptr, length);
504
#if defined(PNG_READ_iCCP_SUPPORTED)
514
#ifdef PNG_READ_iCCP_SUPPORTED
505
515
else if (!png_memcmp(chunk_name, png_iCCP, 4))
506
516
png_handle_iCCP(png_ptr, info_ptr, length);
508
#if defined(PNG_READ_sPLT_SUPPORTED)
518
#ifdef PNG_READ_sPLT_SUPPORTED
509
519
else if (!png_memcmp(chunk_name, png_sPLT, 4))
510
520
png_handle_sPLT(png_ptr, info_ptr, length);
512
#if defined(PNG_READ_tEXt_SUPPORTED)
522
#ifdef PNG_READ_tEXt_SUPPORTED
513
523
else if (!png_memcmp(chunk_name, png_tEXt, 4))
514
524
png_handle_tEXt(png_ptr, info_ptr, length);
516
#if defined(PNG_READ_tIME_SUPPORTED)
526
#ifdef PNG_READ_tIME_SUPPORTED
517
527
else if (!png_memcmp(chunk_name, png_tIME, 4))
518
528
png_handle_tIME(png_ptr, info_ptr, length);
520
#if defined(PNG_READ_tRNS_SUPPORTED)
530
#ifdef PNG_READ_tRNS_SUPPORTED
521
531
else if (!png_memcmp(chunk_name, png_tRNS, 4))
522
532
png_handle_tRNS(png_ptr, info_ptr, length);
524
#if defined(PNG_READ_zTXt_SUPPORTED)
534
#ifdef PNG_READ_zTXt_SUPPORTED
525
535
else if (!png_memcmp(chunk_name, png_zTXt, 4))
526
536
png_handle_zTXt(png_ptr, info_ptr, length);
528
#if defined(PNG_READ_iTXt_SUPPORTED)
538
#ifdef PNG_READ_iTXt_SUPPORTED
529
539
else if (!png_memcmp(chunk_name, png_iTXt, 4))
530
540
png_handle_iTXt(png_ptr, info_ptr, length);
560
571
png_start_read_image(png_structp png_ptr)
562
573
png_debug(1, "in png_start_read_image");
563
575
if (png_ptr == NULL)
565
577
if (!(png_ptr->flags & PNG_FLAG_ROW_INIT))
566
578
png_read_start_row(png_ptr);
568
#endif /* PNG_NO_SEQUENTIAL_READ_SUPPORTED */
580
#endif /* PNG_SEQUENTIAL_READ_SUPPORTED */
570
#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED
582
#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
572
584
png_read_row(png_structp png_ptr, png_bytep row, png_bytep dsp_row)
574
#ifdef PNG_USE_LOCAL_ARRAYS
575
586
PNG_CONST PNG_IDAT;
576
587
PNG_CONST int png_pass_dsp_mask[7] = {0xff, 0x0f, 0xff, 0x33, 0xff, 0x55,
578
589
PNG_CONST int png_pass_mask[7] = {0x80, 0x08, 0x88, 0x22, 0xaa, 0x55, 0xff};
581
592
if (png_ptr == NULL)
583
595
png_debug2(1, "in png_read_row (row %lu, pass %d)",
584
596
png_ptr->row_number, png_ptr->pass);
585
598
if (!(png_ptr->flags & PNG_FLAG_ROW_INIT))
586
599
png_read_start_row(png_ptr);
587
600
if (png_ptr->row_number == 0 && png_ptr->pass == 0)
930
946
PNG_CONST PNG_IDAT;
931
947
PNG_CONST PNG_IEND;
932
948
PNG_CONST PNG_PLTE;
933
#if defined(PNG_READ_bKGD_SUPPORTED)
949
#ifdef PNG_READ_bKGD_SUPPORTED
934
950
PNG_CONST PNG_bKGD;
936
#if defined(PNG_READ_cHRM_SUPPORTED)
952
#ifdef PNG_READ_cHRM_SUPPORTED
937
953
PNG_CONST PNG_cHRM;
939
#if defined(PNG_READ_gAMA_SUPPORTED)
955
#ifdef PNG_READ_gAMA_SUPPORTED
940
956
PNG_CONST PNG_gAMA;
942
#if defined(PNG_READ_hIST_SUPPORTED)
958
#ifdef PNG_READ_hIST_SUPPORTED
943
959
PNG_CONST PNG_hIST;
945
#if defined(PNG_READ_iCCP_SUPPORTED)
961
#ifdef PNG_READ_iCCP_SUPPORTED
946
962
PNG_CONST PNG_iCCP;
948
#if defined(PNG_READ_iTXt_SUPPORTED)
964
#ifdef PNG_READ_iTXt_SUPPORTED
949
965
PNG_CONST PNG_iTXt;
951
#if defined(PNG_READ_oFFs_SUPPORTED)
967
#ifdef PNG_READ_oFFs_SUPPORTED
952
968
PNG_CONST PNG_oFFs;
954
#if defined(PNG_READ_pCAL_SUPPORTED)
970
#ifdef PNG_READ_pCAL_SUPPORTED
955
971
PNG_CONST PNG_pCAL;
957
#if defined(PNG_READ_pHYs_SUPPORTED)
973
#ifdef PNG_READ_pHYs_SUPPORTED
958
974
PNG_CONST PNG_pHYs;
960
#if defined(PNG_READ_sBIT_SUPPORTED)
976
#ifdef PNG_READ_sBIT_SUPPORTED
961
977
PNG_CONST PNG_sBIT;
963
#if defined(PNG_READ_sCAL_SUPPORTED)
979
#ifdef PNG_READ_sCAL_SUPPORTED
964
980
PNG_CONST PNG_sCAL;
966
#if defined(PNG_READ_sPLT_SUPPORTED)
982
#ifdef PNG_READ_sPLT_SUPPORTED
967
983
PNG_CONST PNG_sPLT;
969
#if defined(PNG_READ_sRGB_SUPPORTED)
985
#ifdef PNG_READ_sRGB_SUPPORTED
970
986
PNG_CONST PNG_sRGB;
972
#if defined(PNG_READ_tEXt_SUPPORTED)
988
#ifdef PNG_READ_tEXt_SUPPORTED
973
989
PNG_CONST PNG_tEXt;
975
#if defined(PNG_READ_tIME_SUPPORTED)
991
#ifdef PNG_READ_tIME_SUPPORTED
976
992
PNG_CONST PNG_tIME;
978
#if defined(PNG_READ_tRNS_SUPPORTED)
994
#ifdef PNG_READ_tRNS_SUPPORTED
979
995
PNG_CONST PNG_tRNS;
981
#if defined(PNG_READ_zTXt_SUPPORTED)
997
#ifdef PNG_READ_zTXt_SUPPORTED
982
998
PNG_CONST PNG_zTXt;
984
1000
#endif /* PNG_USE_LOCAL_ARRAYS */
1014
1030
else if (!png_memcmp(chunk_name, png_PLTE, 4))
1015
1031
png_handle_PLTE(png_ptr, info_ptr, length);
1016
#if defined(PNG_READ_bKGD_SUPPORTED)
1032
#ifdef PNG_READ_bKGD_SUPPORTED
1017
1033
else if (!png_memcmp(chunk_name, png_bKGD, 4))
1018
1034
png_handle_bKGD(png_ptr, info_ptr, length);
1020
#if defined(PNG_READ_cHRM_SUPPORTED)
1036
#ifdef PNG_READ_cHRM_SUPPORTED
1021
1037
else if (!png_memcmp(chunk_name, png_cHRM, 4))
1022
1038
png_handle_cHRM(png_ptr, info_ptr, length);
1024
#if defined(PNG_READ_gAMA_SUPPORTED)
1040
#ifdef PNG_READ_gAMA_SUPPORTED
1025
1041
else if (!png_memcmp(chunk_name, png_gAMA, 4))
1026
1042
png_handle_gAMA(png_ptr, info_ptr, length);
1028
#if defined(PNG_READ_hIST_SUPPORTED)
1044
#ifdef PNG_READ_hIST_SUPPORTED
1029
1045
else if (!png_memcmp(chunk_name, png_hIST, 4))
1030
1046
png_handle_hIST(png_ptr, info_ptr, length);
1032
#if defined(PNG_READ_oFFs_SUPPORTED)
1048
#ifdef PNG_READ_oFFs_SUPPORTED
1033
1049
else if (!png_memcmp(chunk_name, png_oFFs, 4))
1034
1050
png_handle_oFFs(png_ptr, info_ptr, length);
1036
#if defined(PNG_READ_pCAL_SUPPORTED)
1052
#ifdef PNG_READ_pCAL_SUPPORTED
1037
1053
else if (!png_memcmp(chunk_name, png_pCAL, 4))
1038
1054
png_handle_pCAL(png_ptr, info_ptr, length);
1040
#if defined(PNG_READ_sCAL_SUPPORTED)
1056
#ifdef PNG_READ_sCAL_SUPPORTED
1041
1057
else if (!png_memcmp(chunk_name, png_sCAL, 4))
1042
1058
png_handle_sCAL(png_ptr, info_ptr, length);
1044
#if defined(PNG_READ_pHYs_SUPPORTED)
1060
#ifdef PNG_READ_pHYs_SUPPORTED
1045
1061
else if (!png_memcmp(chunk_name, png_pHYs, 4))
1046
1062
png_handle_pHYs(png_ptr, info_ptr, length);
1048
#if defined(PNG_READ_sBIT_SUPPORTED)
1064
#ifdef PNG_READ_sBIT_SUPPORTED
1049
1065
else if (!png_memcmp(chunk_name, png_sBIT, 4))
1050
1066
png_handle_sBIT(png_ptr, info_ptr, length);
1052
#if defined(PNG_READ_sRGB_SUPPORTED)
1068
#ifdef PNG_READ_sRGB_SUPPORTED
1053
1069
else if (!png_memcmp(chunk_name, png_sRGB, 4))
1054
1070
png_handle_sRGB(png_ptr, info_ptr, length);
1056
#if defined(PNG_READ_iCCP_SUPPORTED)
1072
#ifdef PNG_READ_iCCP_SUPPORTED
1057
1073
else if (!png_memcmp(chunk_name, png_iCCP, 4))
1058
1074
png_handle_iCCP(png_ptr, info_ptr, length);
1060
#if defined(PNG_READ_sPLT_SUPPORTED)
1076
#ifdef PNG_READ_sPLT_SUPPORTED
1061
1077
else if (!png_memcmp(chunk_name, png_sPLT, 4))
1062
1078
png_handle_sPLT(png_ptr, info_ptr, length);
1064
#if defined(PNG_READ_tEXt_SUPPORTED)
1080
#ifdef PNG_READ_tEXt_SUPPORTED
1065
1081
else if (!png_memcmp(chunk_name, png_tEXt, 4))
1066
1082
png_handle_tEXt(png_ptr, info_ptr, length);
1068
#if defined(PNG_READ_tIME_SUPPORTED)
1084
#ifdef PNG_READ_tIME_SUPPORTED
1069
1085
else if (!png_memcmp(chunk_name, png_tIME, 4))
1070
1086
png_handle_tIME(png_ptr, info_ptr, length);
1072
#if defined(PNG_READ_tRNS_SUPPORTED)
1088
#ifdef PNG_READ_tRNS_SUPPORTED
1073
1089
else if (!png_memcmp(chunk_name, png_tRNS, 4))
1074
1090
png_handle_tRNS(png_ptr, info_ptr, length);
1076
#if defined(PNG_READ_zTXt_SUPPORTED)
1092
#ifdef PNG_READ_zTXt_SUPPORTED
1077
1093
else if (!png_memcmp(chunk_name, png_zTXt, 4))
1078
1094
png_handle_zTXt(png_ptr, info_ptr, length);
1080
#if defined(PNG_READ_iTXt_SUPPORTED)
1096
#ifdef PNG_READ_iTXt_SUPPORTED
1081
1097
else if (!png_memcmp(chunk_name, png_iTXt, 4))
1082
1098
png_handle_iTXt(png_ptr, info_ptr, length);
1184
1202
png_free(png_ptr, png_ptr->big_row_buf);
1185
1203
png_free(png_ptr, png_ptr->prev_row);
1186
1204
png_free(png_ptr, png_ptr->chunkdata);
1187
#if defined(PNG_READ_DITHER_SUPPORTED)
1205
#ifdef PNG_READ_DITHER_SUPPORTED
1188
1206
png_free(png_ptr, png_ptr->palette_lookup);
1189
1207
png_free(png_ptr, png_ptr->dither_index);
1191
#if defined(PNG_READ_GAMMA_SUPPORTED)
1209
#ifdef PNG_READ_GAMMA_SUPPORTED
1192
1210
png_free(png_ptr, png_ptr->gamma_table);
1194
#if defined(PNG_READ_BACKGROUND_SUPPORTED)
1212
#ifdef PNG_READ_BACKGROUND_SUPPORTED
1195
1213
png_free(png_ptr, png_ptr->gamma_from_1);
1196
1214
png_free(png_ptr, png_ptr->gamma_to_1);
1413
#if defined(PNG_READ_BGR_SUPPORTED)
1431
#ifdef PNG_READ_BGR_SUPPORTED
1414
1432
/* Flip the RGB pixels to BGR (or RGBA to BGRA)
1416
1434
if (transforms & PNG_TRANSFORM_BGR)
1417
1435
png_set_bgr(png_ptr);
1420
#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED)
1438
#ifdef PNG_READ_SWAP_ALPHA_SUPPORTED
1421
1439
/* Swap the RGBA or GA data to ARGB or AG (or BGRA to ABGR)
1423
1441
if (transforms & PNG_TRANSFORM_SWAP_ALPHA)
1424
1442
png_set_swap_alpha(png_ptr);
1427
#if defined(PNG_READ_SWAP_SUPPORTED)
1445
#ifdef PNG_READ_SWAP_SUPPORTED
1428
1446
/* Swap bytes of 16 bit files to least significant byte first
1430
1448
if (transforms & PNG_TRANSFORM_SWAP_ENDIAN)
1431
1449
png_set_swap(png_ptr);
1452
/* Added at libpng-1.2.41 */
1453
#ifdef PNG_READ_INVERT_ALPHA_SUPPORTED
1454
/* Invert the alpha channel from opacity to transparency
1456
if (transforms & PNG_TRANSFORM_INVERT_ALPHA)
1457
png_set_invert_alpha(png_ptr);
1460
/* Added at libpng-1.2.41 */
1461
#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED
1462
/* Expand grayscale image to RGB
1464
if (transforms & PNG_TRANSFORM_GRAY_TO_RGB)
1465
png_set_gray_to_rgb(png_ptr);
1434
1468
/* We don't handle adding filler bytes */
1436
1470
/* Optional call to gamma correct and add the background to the palette