Dependencies:   emwin_lib

Fork of DMemWin by Embedded Artists

Committer:
destinyXfate
Date:
Thu Jun 02 04:55:08 2016 +0000
Revision:
4:20387dbf7ecf
Parent:
2:0e2ef1edf01b
;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
destinyXfate 2:0e2ef1edf01b 1
destinyXfate 2:0e2ef1edf01b 2 /* pngtrans.c - transforms the data in a row (used by both readers and writers)
destinyXfate 2:0e2ef1edf01b 3 *
destinyXfate 2:0e2ef1edf01b 4 * Last changed in libpng 1.2.13 November 13, 2006
destinyXfate 2:0e2ef1edf01b 5 * For conditions of distribution and use, see copyright notice in png.h
destinyXfate 2:0e2ef1edf01b 6 * Copyright (c) 1998-2006 Glenn Randers-Pehrson
destinyXfate 2:0e2ef1edf01b 7 * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
destinyXfate 2:0e2ef1edf01b 8 * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
destinyXfate 2:0e2ef1edf01b 9 */
destinyXfate 2:0e2ef1edf01b 10
destinyXfate 2:0e2ef1edf01b 11 #define PNG_INTERNAL
destinyXfate 2:0e2ef1edf01b 12 #include "png.h"
destinyXfate 2:0e2ef1edf01b 13
destinyXfate 2:0e2ef1edf01b 14 #if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
destinyXfate 2:0e2ef1edf01b 15 #if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED)
destinyXfate 2:0e2ef1edf01b 16 /* turn on BGR-to-RGB mapping */
destinyXfate 2:0e2ef1edf01b 17 void PNGAPI
destinyXfate 2:0e2ef1edf01b 18 png_set_bgr(png_structp png_ptr)
destinyXfate 2:0e2ef1edf01b 19 {
destinyXfate 2:0e2ef1edf01b 20 png_debug(1, "in png_set_bgr\n");
destinyXfate 2:0e2ef1edf01b 21 if(png_ptr == NULL) return;
destinyXfate 2:0e2ef1edf01b 22 png_ptr->transformations |= PNG_BGR;
destinyXfate 2:0e2ef1edf01b 23 }
destinyXfate 2:0e2ef1edf01b 24 #endif
destinyXfate 2:0e2ef1edf01b 25
destinyXfate 2:0e2ef1edf01b 26 #if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED)
destinyXfate 2:0e2ef1edf01b 27 /* turn on 16 bit byte swapping */
destinyXfate 2:0e2ef1edf01b 28 void PNGAPI
destinyXfate 2:0e2ef1edf01b 29 png_set_swap(png_structp png_ptr)
destinyXfate 2:0e2ef1edf01b 30 {
destinyXfate 2:0e2ef1edf01b 31 png_debug(1, "in png_set_swap\n");
destinyXfate 2:0e2ef1edf01b 32 if(png_ptr == NULL) return;
destinyXfate 2:0e2ef1edf01b 33 if (png_ptr->bit_depth == 16)
destinyXfate 2:0e2ef1edf01b 34 png_ptr->transformations |= PNG_SWAP_BYTES;
destinyXfate 2:0e2ef1edf01b 35 }
destinyXfate 2:0e2ef1edf01b 36 #endif
destinyXfate 2:0e2ef1edf01b 37
destinyXfate 2:0e2ef1edf01b 38 #if defined(PNG_READ_PACK_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED)
destinyXfate 2:0e2ef1edf01b 39 /* turn on pixel packing */
destinyXfate 2:0e2ef1edf01b 40 void PNGAPI
destinyXfate 2:0e2ef1edf01b 41 png_set_packing(png_structp png_ptr)
destinyXfate 2:0e2ef1edf01b 42 {
destinyXfate 2:0e2ef1edf01b 43 png_debug(1, "in png_set_packing\n");
destinyXfate 2:0e2ef1edf01b 44 if(png_ptr == NULL) return;
destinyXfate 2:0e2ef1edf01b 45 if (png_ptr->bit_depth < 8)
destinyXfate 2:0e2ef1edf01b 46 {
destinyXfate 2:0e2ef1edf01b 47 png_ptr->transformations |= PNG_PACK;
destinyXfate 2:0e2ef1edf01b 48 png_ptr->usr_bit_depth = 8;
destinyXfate 2:0e2ef1edf01b 49 }
destinyXfate 2:0e2ef1edf01b 50 }
destinyXfate 2:0e2ef1edf01b 51 #endif
destinyXfate 2:0e2ef1edf01b 52
destinyXfate 2:0e2ef1edf01b 53 #if defined(PNG_READ_PACKSWAP_SUPPORTED)||defined(PNG_WRITE_PACKSWAP_SUPPORTED)
destinyXfate 2:0e2ef1edf01b 54 /* turn on packed pixel swapping */
destinyXfate 2:0e2ef1edf01b 55 void PNGAPI
destinyXfate 2:0e2ef1edf01b 56 png_set_packswap(png_structp png_ptr)
destinyXfate 2:0e2ef1edf01b 57 {
destinyXfate 2:0e2ef1edf01b 58 png_debug(1, "in png_set_packswap\n");
destinyXfate 2:0e2ef1edf01b 59 if(png_ptr == NULL) return;
destinyXfate 2:0e2ef1edf01b 60 if (png_ptr->bit_depth < 8)
destinyXfate 2:0e2ef1edf01b 61 png_ptr->transformations |= PNG_PACKSWAP;
destinyXfate 2:0e2ef1edf01b 62 }
destinyXfate 2:0e2ef1edf01b 63 #endif
destinyXfate 2:0e2ef1edf01b 64
destinyXfate 2:0e2ef1edf01b 65 #if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED)
destinyXfate 2:0e2ef1edf01b 66 void PNGAPI
destinyXfate 2:0e2ef1edf01b 67 png_set_shift(png_structp png_ptr, png_color_8p true_bits)
destinyXfate 2:0e2ef1edf01b 68 {
destinyXfate 2:0e2ef1edf01b 69 png_debug(1, "in png_set_shift\n");
destinyXfate 2:0e2ef1edf01b 70 if(png_ptr == NULL) return;
destinyXfate 2:0e2ef1edf01b 71 png_ptr->transformations |= PNG_SHIFT;
destinyXfate 2:0e2ef1edf01b 72 png_ptr->shift = *true_bits;
destinyXfate 2:0e2ef1edf01b 73 }
destinyXfate 2:0e2ef1edf01b 74 #endif
destinyXfate 2:0e2ef1edf01b 75
destinyXfate 2:0e2ef1edf01b 76 #if defined(PNG_READ_INTERLACING_SUPPORTED) || \
destinyXfate 2:0e2ef1edf01b 77 defined(PNG_WRITE_INTERLACING_SUPPORTED)
destinyXfate 2:0e2ef1edf01b 78 int PNGAPI
destinyXfate 2:0e2ef1edf01b 79 png_set_interlace_handling(png_structp png_ptr)
destinyXfate 2:0e2ef1edf01b 80 {
destinyXfate 2:0e2ef1edf01b 81 png_debug(1, "in png_set_interlace handling\n");
destinyXfate 2:0e2ef1edf01b 82 if (png_ptr && png_ptr->interlaced)
destinyXfate 2:0e2ef1edf01b 83 {
destinyXfate 2:0e2ef1edf01b 84 png_ptr->transformations |= PNG_INTERLACE;
destinyXfate 2:0e2ef1edf01b 85 return (7);
destinyXfate 2:0e2ef1edf01b 86 }
destinyXfate 2:0e2ef1edf01b 87
destinyXfate 2:0e2ef1edf01b 88 return (1);
destinyXfate 2:0e2ef1edf01b 89 }
destinyXfate 2:0e2ef1edf01b 90 #endif
destinyXfate 2:0e2ef1edf01b 91
destinyXfate 2:0e2ef1edf01b 92 #if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED)
destinyXfate 2:0e2ef1edf01b 93 /* Add a filler byte on read, or remove a filler or alpha byte on write.
destinyXfate 2:0e2ef1edf01b 94 * The filler type has changed in v0.95 to allow future 2-byte fillers
destinyXfate 2:0e2ef1edf01b 95 * for 48-bit input data, as well as to avoid problems with some compilers
destinyXfate 2:0e2ef1edf01b 96 * that don't like bytes as parameters.
destinyXfate 2:0e2ef1edf01b 97 */
destinyXfate 2:0e2ef1edf01b 98 void PNGAPI
destinyXfate 2:0e2ef1edf01b 99 png_set_filler(png_structp png_ptr, png_uint_32 filler, int filler_loc)
destinyXfate 2:0e2ef1edf01b 100 {
destinyXfate 2:0e2ef1edf01b 101 png_debug(1, "in png_set_filler\n");
destinyXfate 2:0e2ef1edf01b 102 if(png_ptr == NULL) return;
destinyXfate 2:0e2ef1edf01b 103 png_ptr->transformations |= PNG_FILLER;
destinyXfate 2:0e2ef1edf01b 104 png_ptr->filler = (png_byte)filler;
destinyXfate 2:0e2ef1edf01b 105 if (filler_loc == PNG_FILLER_AFTER)
destinyXfate 2:0e2ef1edf01b 106 png_ptr->flags |= PNG_FLAG_FILLER_AFTER;
destinyXfate 2:0e2ef1edf01b 107 else
destinyXfate 2:0e2ef1edf01b 108 png_ptr->flags &= ~PNG_FLAG_FILLER_AFTER;
destinyXfate 2:0e2ef1edf01b 109
destinyXfate 2:0e2ef1edf01b 110 /* This should probably go in the "do_read_filler" routine.
destinyXfate 2:0e2ef1edf01b 111 * I attempted to do that in libpng-1.0.1a but that caused problems
destinyXfate 2:0e2ef1edf01b 112 * so I restored it in libpng-1.0.2a
destinyXfate 2:0e2ef1edf01b 113 */
destinyXfate 2:0e2ef1edf01b 114
destinyXfate 2:0e2ef1edf01b 115 if (png_ptr->color_type == PNG_COLOR_TYPE_RGB)
destinyXfate 2:0e2ef1edf01b 116 {
destinyXfate 2:0e2ef1edf01b 117 png_ptr->usr_channels = 4;
destinyXfate 2:0e2ef1edf01b 118 }
destinyXfate 2:0e2ef1edf01b 119
destinyXfate 2:0e2ef1edf01b 120 /* Also I added this in libpng-1.0.2a (what happens when we expand
destinyXfate 2:0e2ef1edf01b 121 * a less-than-8-bit grayscale to GA? */
destinyXfate 2:0e2ef1edf01b 122
destinyXfate 2:0e2ef1edf01b 123 if (png_ptr->color_type == PNG_COLOR_TYPE_GRAY && png_ptr->bit_depth >= 8)
destinyXfate 2:0e2ef1edf01b 124 {
destinyXfate 2:0e2ef1edf01b 125 png_ptr->usr_channels = 2;
destinyXfate 2:0e2ef1edf01b 126 }
destinyXfate 2:0e2ef1edf01b 127 }
destinyXfate 2:0e2ef1edf01b 128
destinyXfate 2:0e2ef1edf01b 129 #if !defined(PNG_1_0_X)
destinyXfate 2:0e2ef1edf01b 130 /* Added to libpng-1.2.7 */
destinyXfate 2:0e2ef1edf01b 131 void PNGAPI
destinyXfate 2:0e2ef1edf01b 132 png_set_add_alpha(png_structp png_ptr, png_uint_32 filler, int filler_loc)
destinyXfate 2:0e2ef1edf01b 133 {
destinyXfate 2:0e2ef1edf01b 134 png_debug(1, "in png_set_add_alpha\n");
destinyXfate 2:0e2ef1edf01b 135 if(png_ptr == NULL) return;
destinyXfate 2:0e2ef1edf01b 136 png_set_filler(png_ptr, filler, filler_loc);
destinyXfate 2:0e2ef1edf01b 137 png_ptr->transformations |= PNG_ADD_ALPHA;
destinyXfate 2:0e2ef1edf01b 138 }
destinyXfate 2:0e2ef1edf01b 139 #endif
destinyXfate 2:0e2ef1edf01b 140
destinyXfate 2:0e2ef1edf01b 141 #endif
destinyXfate 2:0e2ef1edf01b 142
destinyXfate 2:0e2ef1edf01b 143 #if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) || \
destinyXfate 2:0e2ef1edf01b 144 defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED)
destinyXfate 2:0e2ef1edf01b 145 void PNGAPI
destinyXfate 2:0e2ef1edf01b 146 png_set_swap_alpha(png_structp png_ptr)
destinyXfate 2:0e2ef1edf01b 147 {
destinyXfate 2:0e2ef1edf01b 148 png_debug(1, "in png_set_swap_alpha\n");
destinyXfate 2:0e2ef1edf01b 149 if(png_ptr == NULL) return;
destinyXfate 2:0e2ef1edf01b 150 png_ptr->transformations |= PNG_SWAP_ALPHA;
destinyXfate 2:0e2ef1edf01b 151 }
destinyXfate 2:0e2ef1edf01b 152 #endif
destinyXfate 2:0e2ef1edf01b 153
destinyXfate 2:0e2ef1edf01b 154 #if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) || \
destinyXfate 2:0e2ef1edf01b 155 defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED)
destinyXfate 2:0e2ef1edf01b 156 void PNGAPI
destinyXfate 2:0e2ef1edf01b 157 png_set_invert_alpha(png_structp png_ptr)
destinyXfate 2:0e2ef1edf01b 158 {
destinyXfate 2:0e2ef1edf01b 159 png_debug(1, "in png_set_invert_alpha\n");
destinyXfate 2:0e2ef1edf01b 160 if(png_ptr == NULL) return;
destinyXfate 2:0e2ef1edf01b 161 png_ptr->transformations |= PNG_INVERT_ALPHA;
destinyXfate 2:0e2ef1edf01b 162 }
destinyXfate 2:0e2ef1edf01b 163 #endif
destinyXfate 2:0e2ef1edf01b 164
destinyXfate 2:0e2ef1edf01b 165 #if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED)
destinyXfate 2:0e2ef1edf01b 166 void PNGAPI
destinyXfate 2:0e2ef1edf01b 167 png_set_invert_mono(png_structp png_ptr)
destinyXfate 2:0e2ef1edf01b 168 {
destinyXfate 2:0e2ef1edf01b 169 png_debug(1, "in png_set_invert_mono\n");
destinyXfate 2:0e2ef1edf01b 170 if(png_ptr == NULL) return;
destinyXfate 2:0e2ef1edf01b 171 png_ptr->transformations |= PNG_INVERT_MONO;
destinyXfate 2:0e2ef1edf01b 172 }
destinyXfate 2:0e2ef1edf01b 173
destinyXfate 2:0e2ef1edf01b 174 /* invert monochrome grayscale data */
destinyXfate 2:0e2ef1edf01b 175 void /* PRIVATE */
destinyXfate 2:0e2ef1edf01b 176 png_do_invert(png_row_infop row_info, png_bytep row)
destinyXfate 2:0e2ef1edf01b 177 {
destinyXfate 2:0e2ef1edf01b 178 png_debug(1, "in png_do_invert\n");
destinyXfate 2:0e2ef1edf01b 179 /* This test removed from libpng version 1.0.13 and 1.2.0:
destinyXfate 2:0e2ef1edf01b 180 * if (row_info->bit_depth == 1 &&
destinyXfate 2:0e2ef1edf01b 181 */
destinyXfate 2:0e2ef1edf01b 182 #if defined(PNG_USELESS_TESTS_SUPPORTED)
destinyXfate 2:0e2ef1edf01b 183 if (row == NULL || row_info == NULL)
destinyXfate 2:0e2ef1edf01b 184 return;
destinyXfate 2:0e2ef1edf01b 185 #endif
destinyXfate 2:0e2ef1edf01b 186 if (row_info->color_type == PNG_COLOR_TYPE_GRAY)
destinyXfate 2:0e2ef1edf01b 187 {
destinyXfate 2:0e2ef1edf01b 188 png_bytep rp = row;
destinyXfate 2:0e2ef1edf01b 189 png_uint_32 i;
destinyXfate 2:0e2ef1edf01b 190 png_uint_32 istop = row_info->rowbytes;
destinyXfate 2:0e2ef1edf01b 191
destinyXfate 2:0e2ef1edf01b 192 for (i = 0; i < istop; i++)
destinyXfate 2:0e2ef1edf01b 193 {
destinyXfate 2:0e2ef1edf01b 194 *rp = (png_byte)(~(*rp));
destinyXfate 2:0e2ef1edf01b 195 rp++;
destinyXfate 2:0e2ef1edf01b 196 }
destinyXfate 2:0e2ef1edf01b 197 }
destinyXfate 2:0e2ef1edf01b 198 else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA &&
destinyXfate 2:0e2ef1edf01b 199 row_info->bit_depth == 8)
destinyXfate 2:0e2ef1edf01b 200 {
destinyXfate 2:0e2ef1edf01b 201 png_bytep rp = row;
destinyXfate 2:0e2ef1edf01b 202 png_uint_32 i;
destinyXfate 2:0e2ef1edf01b 203 png_uint_32 istop = row_info->rowbytes;
destinyXfate 2:0e2ef1edf01b 204
destinyXfate 2:0e2ef1edf01b 205 for (i = 0; i < istop; i+=2)
destinyXfate 2:0e2ef1edf01b 206 {
destinyXfate 2:0e2ef1edf01b 207 *rp = (png_byte)(~(*rp));
destinyXfate 2:0e2ef1edf01b 208 rp+=2;
destinyXfate 2:0e2ef1edf01b 209 }
destinyXfate 2:0e2ef1edf01b 210 }
destinyXfate 2:0e2ef1edf01b 211 else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA &&
destinyXfate 2:0e2ef1edf01b 212 row_info->bit_depth == 16)
destinyXfate 2:0e2ef1edf01b 213 {
destinyXfate 2:0e2ef1edf01b 214 png_bytep rp = row;
destinyXfate 2:0e2ef1edf01b 215 png_uint_32 i;
destinyXfate 2:0e2ef1edf01b 216 png_uint_32 istop = row_info->rowbytes;
destinyXfate 2:0e2ef1edf01b 217
destinyXfate 2:0e2ef1edf01b 218 for (i = 0; i < istop; i+=4)
destinyXfate 2:0e2ef1edf01b 219 {
destinyXfate 2:0e2ef1edf01b 220 *rp = (png_byte)(~(*rp));
destinyXfate 2:0e2ef1edf01b 221 *(rp+1) = (png_byte)(~(*(rp+1)));
destinyXfate 2:0e2ef1edf01b 222 rp+=4;
destinyXfate 2:0e2ef1edf01b 223 }
destinyXfate 2:0e2ef1edf01b 224 }
destinyXfate 2:0e2ef1edf01b 225 }
destinyXfate 2:0e2ef1edf01b 226 #endif
destinyXfate 2:0e2ef1edf01b 227
destinyXfate 2:0e2ef1edf01b 228 #if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED)
destinyXfate 2:0e2ef1edf01b 229 /* swaps byte order on 16 bit depth images */
destinyXfate 2:0e2ef1edf01b 230 void /* PRIVATE */
destinyXfate 2:0e2ef1edf01b 231 png_do_swap(png_row_infop row_info, png_bytep row)
destinyXfate 2:0e2ef1edf01b 232 {
destinyXfate 2:0e2ef1edf01b 233 png_debug(1, "in png_do_swap\n");
destinyXfate 2:0e2ef1edf01b 234 if (
destinyXfate 2:0e2ef1edf01b 235 #if defined(PNG_USELESS_TESTS_SUPPORTED)
destinyXfate 2:0e2ef1edf01b 236 row != NULL && row_info != NULL &&
destinyXfate 2:0e2ef1edf01b 237 #endif
destinyXfate 2:0e2ef1edf01b 238 row_info->bit_depth == 16)
destinyXfate 2:0e2ef1edf01b 239 {
destinyXfate 2:0e2ef1edf01b 240 png_bytep rp = row;
destinyXfate 2:0e2ef1edf01b 241 png_uint_32 i;
destinyXfate 2:0e2ef1edf01b 242 png_uint_32 istop= row_info->width * row_info->channels;
destinyXfate 2:0e2ef1edf01b 243
destinyXfate 2:0e2ef1edf01b 244 for (i = 0; i < istop; i++, rp += 2)
destinyXfate 2:0e2ef1edf01b 245 {
destinyXfate 2:0e2ef1edf01b 246 png_byte t = *rp;
destinyXfate 2:0e2ef1edf01b 247 *rp = *(rp + 1);
destinyXfate 2:0e2ef1edf01b 248 *(rp + 1) = t;
destinyXfate 2:0e2ef1edf01b 249 }
destinyXfate 2:0e2ef1edf01b 250 }
destinyXfate 2:0e2ef1edf01b 251 }
destinyXfate 2:0e2ef1edf01b 252 #endif
destinyXfate 2:0e2ef1edf01b 253
destinyXfate 2:0e2ef1edf01b 254 #if defined(PNG_READ_PACKSWAP_SUPPORTED)||defined(PNG_WRITE_PACKSWAP_SUPPORTED)
destinyXfate 2:0e2ef1edf01b 255 static PNG_CONST png_byte onebppswaptable[256] = {
destinyXfate 2:0e2ef1edf01b 256 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0,
destinyXfate 2:0e2ef1edf01b 257 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0,
destinyXfate 2:0e2ef1edf01b 258 0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8,
destinyXfate 2:0e2ef1edf01b 259 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8,
destinyXfate 2:0e2ef1edf01b 260 0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4,
destinyXfate 2:0e2ef1edf01b 261 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4,
destinyXfate 2:0e2ef1edf01b 262 0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC,
destinyXfate 2:0e2ef1edf01b 263 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC,
destinyXfate 2:0e2ef1edf01b 264 0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2,
destinyXfate 2:0e2ef1edf01b 265 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2,
destinyXfate 2:0e2ef1edf01b 266 0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA,
destinyXfate 2:0e2ef1edf01b 267 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA,
destinyXfate 2:0e2ef1edf01b 268 0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6,
destinyXfate 2:0e2ef1edf01b 269 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6,
destinyXfate 2:0e2ef1edf01b 270 0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE,
destinyXfate 2:0e2ef1edf01b 271 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE,
destinyXfate 2:0e2ef1edf01b 272 0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1,
destinyXfate 2:0e2ef1edf01b 273 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1,
destinyXfate 2:0e2ef1edf01b 274 0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9,
destinyXfate 2:0e2ef1edf01b 275 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9,
destinyXfate 2:0e2ef1edf01b 276 0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5,
destinyXfate 2:0e2ef1edf01b 277 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5,
destinyXfate 2:0e2ef1edf01b 278 0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED,
destinyXfate 2:0e2ef1edf01b 279 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD,
destinyXfate 2:0e2ef1edf01b 280 0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3,
destinyXfate 2:0e2ef1edf01b 281 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3,
destinyXfate 2:0e2ef1edf01b 282 0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB,
destinyXfate 2:0e2ef1edf01b 283 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB,
destinyXfate 2:0e2ef1edf01b 284 0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7,
destinyXfate 2:0e2ef1edf01b 285 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7,
destinyXfate 2:0e2ef1edf01b 286 0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF,
destinyXfate 2:0e2ef1edf01b 287 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF
destinyXfate 2:0e2ef1edf01b 288 };
destinyXfate 2:0e2ef1edf01b 289
destinyXfate 2:0e2ef1edf01b 290 static PNG_CONST png_byte twobppswaptable[256] = {
destinyXfate 2:0e2ef1edf01b 291 0x00, 0x40, 0x80, 0xC0, 0x10, 0x50, 0x90, 0xD0,
destinyXfate 2:0e2ef1edf01b 292 0x20, 0x60, 0xA0, 0xE0, 0x30, 0x70, 0xB0, 0xF0,
destinyXfate 2:0e2ef1edf01b 293 0x04, 0x44, 0x84, 0xC4, 0x14, 0x54, 0x94, 0xD4,
destinyXfate 2:0e2ef1edf01b 294 0x24, 0x64, 0xA4, 0xE4, 0x34, 0x74, 0xB4, 0xF4,
destinyXfate 2:0e2ef1edf01b 295 0x08, 0x48, 0x88, 0xC8, 0x18, 0x58, 0x98, 0xD8,
destinyXfate 2:0e2ef1edf01b 296 0x28, 0x68, 0xA8, 0xE8, 0x38, 0x78, 0xB8, 0xF8,
destinyXfate 2:0e2ef1edf01b 297 0x0C, 0x4C, 0x8C, 0xCC, 0x1C, 0x5C, 0x9C, 0xDC,
destinyXfate 2:0e2ef1edf01b 298 0x2C, 0x6C, 0xAC, 0xEC, 0x3C, 0x7C, 0xBC, 0xFC,
destinyXfate 2:0e2ef1edf01b 299 0x01, 0x41, 0x81, 0xC1, 0x11, 0x51, 0x91, 0xD1,
destinyXfate 2:0e2ef1edf01b 300 0x21, 0x61, 0xA1, 0xE1, 0x31, 0x71, 0xB1, 0xF1,
destinyXfate 2:0e2ef1edf01b 301 0x05, 0x45, 0x85, 0xC5, 0x15, 0x55, 0x95, 0xD5,
destinyXfate 2:0e2ef1edf01b 302 0x25, 0x65, 0xA5, 0xE5, 0x35, 0x75, 0xB5, 0xF5,
destinyXfate 2:0e2ef1edf01b 303 0x09, 0x49, 0x89, 0xC9, 0x19, 0x59, 0x99, 0xD9,
destinyXfate 2:0e2ef1edf01b 304 0x29, 0x69, 0xA9, 0xE9, 0x39, 0x79, 0xB9, 0xF9,
destinyXfate 2:0e2ef1edf01b 305 0x0D, 0x4D, 0x8D, 0xCD, 0x1D, 0x5D, 0x9D, 0xDD,
destinyXfate 2:0e2ef1edf01b 306 0x2D, 0x6D, 0xAD, 0xED, 0x3D, 0x7D, 0xBD, 0xFD,
destinyXfate 2:0e2ef1edf01b 307 0x02, 0x42, 0x82, 0xC2, 0x12, 0x52, 0x92, 0xD2,
destinyXfate 2:0e2ef1edf01b 308 0x22, 0x62, 0xA2, 0xE2, 0x32, 0x72, 0xB2, 0xF2,
destinyXfate 2:0e2ef1edf01b 309 0x06, 0x46, 0x86, 0xC6, 0x16, 0x56, 0x96, 0xD6,
destinyXfate 2:0e2ef1edf01b 310 0x26, 0x66, 0xA6, 0xE6, 0x36, 0x76, 0xB6, 0xF6,
destinyXfate 2:0e2ef1edf01b 311 0x0A, 0x4A, 0x8A, 0xCA, 0x1A, 0x5A, 0x9A, 0xDA,
destinyXfate 2:0e2ef1edf01b 312 0x2A, 0x6A, 0xAA, 0xEA, 0x3A, 0x7A, 0xBA, 0xFA,
destinyXfate 2:0e2ef1edf01b 313 0x0E, 0x4E, 0x8E, 0xCE, 0x1E, 0x5E, 0x9E, 0xDE,
destinyXfate 2:0e2ef1edf01b 314 0x2E, 0x6E, 0xAE, 0xEE, 0x3E, 0x7E, 0xBE, 0xFE,
destinyXfate 2:0e2ef1edf01b 315 0x03, 0x43, 0x83, 0xC3, 0x13, 0x53, 0x93, 0xD3,
destinyXfate 2:0e2ef1edf01b 316 0x23, 0x63, 0xA3, 0xE3, 0x33, 0x73, 0xB3, 0xF3,
destinyXfate 2:0e2ef1edf01b 317 0x07, 0x47, 0x87, 0xC7, 0x17, 0x57, 0x97, 0xD7,
destinyXfate 2:0e2ef1edf01b 318 0x27, 0x67, 0xA7, 0xE7, 0x37, 0x77, 0xB7, 0xF7,
destinyXfate 2:0e2ef1edf01b 319 0x0B, 0x4B, 0x8B, 0xCB, 0x1B, 0x5B, 0x9B, 0xDB,
destinyXfate 2:0e2ef1edf01b 320 0x2B, 0x6B, 0xAB, 0xEB, 0x3B, 0x7B, 0xBB, 0xFB,
destinyXfate 2:0e2ef1edf01b 321 0x0F, 0x4F, 0x8F, 0xCF, 0x1F, 0x5F, 0x9F, 0xDF,
destinyXfate 2:0e2ef1edf01b 322 0x2F, 0x6F, 0xAF, 0xEF, 0x3F, 0x7F, 0xBF, 0xFF
destinyXfate 2:0e2ef1edf01b 323 };
destinyXfate 2:0e2ef1edf01b 324
destinyXfate 2:0e2ef1edf01b 325 static PNG_CONST png_byte fourbppswaptable[256] = {
destinyXfate 2:0e2ef1edf01b 326 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70,
destinyXfate 2:0e2ef1edf01b 327 0x80, 0x90, 0xA0, 0xB0, 0xC0, 0xD0, 0xE0, 0xF0,
destinyXfate 2:0e2ef1edf01b 328 0x01, 0x11, 0x21, 0x31, 0x41, 0x51, 0x61, 0x71,
destinyXfate 2:0e2ef1edf01b 329 0x81, 0x91, 0xA1, 0xB1, 0xC1, 0xD1, 0xE1, 0xF1,
destinyXfate 2:0e2ef1edf01b 330 0x02, 0x12, 0x22, 0x32, 0x42, 0x52, 0x62, 0x72,
destinyXfate 2:0e2ef1edf01b 331 0x82, 0x92, 0xA2, 0xB2, 0xC2, 0xD2, 0xE2, 0xF2,
destinyXfate 2:0e2ef1edf01b 332 0x03, 0x13, 0x23, 0x33, 0x43, 0x53, 0x63, 0x73,
destinyXfate 2:0e2ef1edf01b 333 0x83, 0x93, 0xA3, 0xB3, 0xC3, 0xD3, 0xE3, 0xF3,
destinyXfate 2:0e2ef1edf01b 334 0x04, 0x14, 0x24, 0x34, 0x44, 0x54, 0x64, 0x74,
destinyXfate 2:0e2ef1edf01b 335 0x84, 0x94, 0xA4, 0xB4, 0xC4, 0xD4, 0xE4, 0xF4,
destinyXfate 2:0e2ef1edf01b 336 0x05, 0x15, 0x25, 0x35, 0x45, 0x55, 0x65, 0x75,
destinyXfate 2:0e2ef1edf01b 337 0x85, 0x95, 0xA5, 0xB5, 0xC5, 0xD5, 0xE5, 0xF5,
destinyXfate 2:0e2ef1edf01b 338 0x06, 0x16, 0x26, 0x36, 0x46, 0x56, 0x66, 0x76,
destinyXfate 2:0e2ef1edf01b 339 0x86, 0x96, 0xA6, 0xB6, 0xC6, 0xD6, 0xE6, 0xF6,
destinyXfate 2:0e2ef1edf01b 340 0x07, 0x17, 0x27, 0x37, 0x47, 0x57, 0x67, 0x77,
destinyXfate 2:0e2ef1edf01b 341 0x87, 0x97, 0xA7, 0xB7, 0xC7, 0xD7, 0xE7, 0xF7,
destinyXfate 2:0e2ef1edf01b 342 0x08, 0x18, 0x28, 0x38, 0x48, 0x58, 0x68, 0x78,
destinyXfate 2:0e2ef1edf01b 343 0x88, 0x98, 0xA8, 0xB8, 0xC8, 0xD8, 0xE8, 0xF8,
destinyXfate 2:0e2ef1edf01b 344 0x09, 0x19, 0x29, 0x39, 0x49, 0x59, 0x69, 0x79,
destinyXfate 2:0e2ef1edf01b 345 0x89, 0x99, 0xA9, 0xB9, 0xC9, 0xD9, 0xE9, 0xF9,
destinyXfate 2:0e2ef1edf01b 346 0x0A, 0x1A, 0x2A, 0x3A, 0x4A, 0x5A, 0x6A, 0x7A,
destinyXfate 2:0e2ef1edf01b 347 0x8A, 0x9A, 0xAA, 0xBA, 0xCA, 0xDA, 0xEA, 0xFA,
destinyXfate 2:0e2ef1edf01b 348 0x0B, 0x1B, 0x2B, 0x3B, 0x4B, 0x5B, 0x6B, 0x7B,
destinyXfate 2:0e2ef1edf01b 349 0x8B, 0x9B, 0xAB, 0xBB, 0xCB, 0xDB, 0xEB, 0xFB,
destinyXfate 2:0e2ef1edf01b 350 0x0C, 0x1C, 0x2C, 0x3C, 0x4C, 0x5C, 0x6C, 0x7C,
destinyXfate 2:0e2ef1edf01b 351 0x8C, 0x9C, 0xAC, 0xBC, 0xCC, 0xDC, 0xEC, 0xFC,
destinyXfate 2:0e2ef1edf01b 352 0x0D, 0x1D, 0x2D, 0x3D, 0x4D, 0x5D, 0x6D, 0x7D,
destinyXfate 2:0e2ef1edf01b 353 0x8D, 0x9D, 0xAD, 0xBD, 0xCD, 0xDD, 0xED, 0xFD,
destinyXfate 2:0e2ef1edf01b 354 0x0E, 0x1E, 0x2E, 0x3E, 0x4E, 0x5E, 0x6E, 0x7E,
destinyXfate 2:0e2ef1edf01b 355 0x8E, 0x9E, 0xAE, 0xBE, 0xCE, 0xDE, 0xEE, 0xFE,
destinyXfate 2:0e2ef1edf01b 356 0x0F, 0x1F, 0x2F, 0x3F, 0x4F, 0x5F, 0x6F, 0x7F,
destinyXfate 2:0e2ef1edf01b 357 0x8F, 0x9F, 0xAF, 0xBF, 0xCF, 0xDF, 0xEF, 0xFF
destinyXfate 2:0e2ef1edf01b 358 };
destinyXfate 2:0e2ef1edf01b 359
destinyXfate 2:0e2ef1edf01b 360 /* swaps pixel packing order within bytes */
destinyXfate 2:0e2ef1edf01b 361 void /* PRIVATE */
destinyXfate 2:0e2ef1edf01b 362 png_do_packswap(png_row_infop row_info, png_bytep row)
destinyXfate 2:0e2ef1edf01b 363 {
destinyXfate 2:0e2ef1edf01b 364 png_debug(1, "in png_do_packswap\n");
destinyXfate 2:0e2ef1edf01b 365 if (
destinyXfate 2:0e2ef1edf01b 366 #if defined(PNG_USELESS_TESTS_SUPPORTED)
destinyXfate 2:0e2ef1edf01b 367 row != NULL && row_info != NULL &&
destinyXfate 2:0e2ef1edf01b 368 #endif
destinyXfate 2:0e2ef1edf01b 369 row_info->bit_depth < 8)
destinyXfate 2:0e2ef1edf01b 370 {
destinyXfate 2:0e2ef1edf01b 371 png_bytep rp, end, table;
destinyXfate 2:0e2ef1edf01b 372
destinyXfate 2:0e2ef1edf01b 373 end = row + row_info->rowbytes;
destinyXfate 2:0e2ef1edf01b 374
destinyXfate 2:0e2ef1edf01b 375 if (row_info->bit_depth == 1)
destinyXfate 2:0e2ef1edf01b 376 table = (png_bytep)onebppswaptable;
destinyXfate 2:0e2ef1edf01b 377 else if (row_info->bit_depth == 2)
destinyXfate 2:0e2ef1edf01b 378 table = (png_bytep)twobppswaptable;
destinyXfate 2:0e2ef1edf01b 379 else if (row_info->bit_depth == 4)
destinyXfate 2:0e2ef1edf01b 380 table = (png_bytep)fourbppswaptable;
destinyXfate 2:0e2ef1edf01b 381 else
destinyXfate 2:0e2ef1edf01b 382 return;
destinyXfate 2:0e2ef1edf01b 383
destinyXfate 2:0e2ef1edf01b 384 for (rp = row; rp < end; rp++)
destinyXfate 2:0e2ef1edf01b 385 *rp = table[*rp];
destinyXfate 2:0e2ef1edf01b 386 }
destinyXfate 2:0e2ef1edf01b 387 }
destinyXfate 2:0e2ef1edf01b 388 #endif /* PNG_READ_PACKSWAP_SUPPORTED or PNG_WRITE_PACKSWAP_SUPPORTED */
destinyXfate 2:0e2ef1edf01b 389
destinyXfate 2:0e2ef1edf01b 390 #if defined(PNG_WRITE_FILLER_SUPPORTED) || \
destinyXfate 2:0e2ef1edf01b 391 defined(PNG_READ_STRIP_ALPHA_SUPPORTED)
destinyXfate 2:0e2ef1edf01b 392 /* remove filler or alpha byte(s) */
destinyXfate 2:0e2ef1edf01b 393 void /* PRIVATE */
destinyXfate 2:0e2ef1edf01b 394 png_do_strip_filler(png_row_infop row_info, png_bytep row, png_uint_32 flags)
destinyXfate 2:0e2ef1edf01b 395 {
destinyXfate 2:0e2ef1edf01b 396 png_debug(1, "in png_do_strip_filler\n");
destinyXfate 2:0e2ef1edf01b 397 #if defined(PNG_USELESS_TESTS_SUPPORTED)
destinyXfate 2:0e2ef1edf01b 398 if (row != NULL && row_info != NULL)
destinyXfate 2:0e2ef1edf01b 399 #endif
destinyXfate 2:0e2ef1edf01b 400 {
destinyXfate 2:0e2ef1edf01b 401 png_bytep sp=row;
destinyXfate 2:0e2ef1edf01b 402 png_bytep dp=row;
destinyXfate 2:0e2ef1edf01b 403 png_uint_32 row_width=row_info->width;
destinyXfate 2:0e2ef1edf01b 404 png_uint_32 i;
destinyXfate 2:0e2ef1edf01b 405
destinyXfate 2:0e2ef1edf01b 406 if ((row_info->color_type == PNG_COLOR_TYPE_RGB ||
destinyXfate 2:0e2ef1edf01b 407 (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA &&
destinyXfate 2:0e2ef1edf01b 408 (flags & PNG_FLAG_STRIP_ALPHA))) &&
destinyXfate 2:0e2ef1edf01b 409 row_info->channels == 4)
destinyXfate 2:0e2ef1edf01b 410 {
destinyXfate 2:0e2ef1edf01b 411 if (row_info->bit_depth == 8)
destinyXfate 2:0e2ef1edf01b 412 {
destinyXfate 2:0e2ef1edf01b 413 /* This converts from RGBX or RGBA to RGB */
destinyXfate 2:0e2ef1edf01b 414 if (flags & PNG_FLAG_FILLER_AFTER)
destinyXfate 2:0e2ef1edf01b 415 {
destinyXfate 2:0e2ef1edf01b 416 dp+=3; sp+=4;
destinyXfate 2:0e2ef1edf01b 417 for (i = 1; i < row_width; i++)
destinyXfate 2:0e2ef1edf01b 418 {
destinyXfate 2:0e2ef1edf01b 419 *dp++ = *sp++;
destinyXfate 2:0e2ef1edf01b 420 *dp++ = *sp++;
destinyXfate 2:0e2ef1edf01b 421 *dp++ = *sp++;
destinyXfate 2:0e2ef1edf01b 422 sp++;
destinyXfate 2:0e2ef1edf01b 423 }
destinyXfate 2:0e2ef1edf01b 424 }
destinyXfate 2:0e2ef1edf01b 425 /* This converts from XRGB or ARGB to RGB */
destinyXfate 2:0e2ef1edf01b 426 else
destinyXfate 2:0e2ef1edf01b 427 {
destinyXfate 2:0e2ef1edf01b 428 for (i = 0; i < row_width; i++)
destinyXfate 2:0e2ef1edf01b 429 {
destinyXfate 2:0e2ef1edf01b 430 sp++;
destinyXfate 2:0e2ef1edf01b 431 *dp++ = *sp++;
destinyXfate 2:0e2ef1edf01b 432 *dp++ = *sp++;
destinyXfate 2:0e2ef1edf01b 433 *dp++ = *sp++;
destinyXfate 2:0e2ef1edf01b 434 }
destinyXfate 2:0e2ef1edf01b 435 }
destinyXfate 2:0e2ef1edf01b 436 row_info->pixel_depth = 24;
destinyXfate 2:0e2ef1edf01b 437 row_info->rowbytes = row_width * 3;
destinyXfate 2:0e2ef1edf01b 438 }
destinyXfate 2:0e2ef1edf01b 439 else /* if (row_info->bit_depth == 16) */
destinyXfate 2:0e2ef1edf01b 440 {
destinyXfate 2:0e2ef1edf01b 441 if (flags & PNG_FLAG_FILLER_AFTER)
destinyXfate 2:0e2ef1edf01b 442 {
destinyXfate 2:0e2ef1edf01b 443 /* This converts from RRGGBBXX or RRGGBBAA to RRGGBB */
destinyXfate 2:0e2ef1edf01b 444 sp += 8; dp += 6;
destinyXfate 2:0e2ef1edf01b 445 for (i = 1; i < row_width; i++)
destinyXfate 2:0e2ef1edf01b 446 {
destinyXfate 2:0e2ef1edf01b 447 /* This could be (although png_memcpy is probably slower):
destinyXfate 2:0e2ef1edf01b 448 png_memcpy(dp, sp, 6);
destinyXfate 2:0e2ef1edf01b 449 sp += 8;
destinyXfate 2:0e2ef1edf01b 450 dp += 6;
destinyXfate 2:0e2ef1edf01b 451 */
destinyXfate 2:0e2ef1edf01b 452
destinyXfate 2:0e2ef1edf01b 453 *dp++ = *sp++;
destinyXfate 2:0e2ef1edf01b 454 *dp++ = *sp++;
destinyXfate 2:0e2ef1edf01b 455 *dp++ = *sp++;
destinyXfate 2:0e2ef1edf01b 456 *dp++ = *sp++;
destinyXfate 2:0e2ef1edf01b 457 *dp++ = *sp++;
destinyXfate 2:0e2ef1edf01b 458 *dp++ = *sp++;
destinyXfate 2:0e2ef1edf01b 459 sp += 2;
destinyXfate 2:0e2ef1edf01b 460 }
destinyXfate 2:0e2ef1edf01b 461 }
destinyXfate 2:0e2ef1edf01b 462 else
destinyXfate 2:0e2ef1edf01b 463 {
destinyXfate 2:0e2ef1edf01b 464 /* This converts from XXRRGGBB or AARRGGBB to RRGGBB */
destinyXfate 2:0e2ef1edf01b 465 for (i = 0; i < row_width; i++)
destinyXfate 2:0e2ef1edf01b 466 {
destinyXfate 2:0e2ef1edf01b 467 /* This could be (although png_memcpy is probably slower):
destinyXfate 2:0e2ef1edf01b 468 png_memcpy(dp, sp, 6);
destinyXfate 2:0e2ef1edf01b 469 sp += 8;
destinyXfate 2:0e2ef1edf01b 470 dp += 6;
destinyXfate 2:0e2ef1edf01b 471 */
destinyXfate 2:0e2ef1edf01b 472
destinyXfate 2:0e2ef1edf01b 473 sp+=2;
destinyXfate 2:0e2ef1edf01b 474 *dp++ = *sp++;
destinyXfate 2:0e2ef1edf01b 475 *dp++ = *sp++;
destinyXfate 2:0e2ef1edf01b 476 *dp++ = *sp++;
destinyXfate 2:0e2ef1edf01b 477 *dp++ = *sp++;
destinyXfate 2:0e2ef1edf01b 478 *dp++ = *sp++;
destinyXfate 2:0e2ef1edf01b 479 *dp++ = *sp++;
destinyXfate 2:0e2ef1edf01b 480 }
destinyXfate 2:0e2ef1edf01b 481 }
destinyXfate 2:0e2ef1edf01b 482 row_info->pixel_depth = 48;
destinyXfate 2:0e2ef1edf01b 483 row_info->rowbytes = row_width * 6;
destinyXfate 2:0e2ef1edf01b 484 }
destinyXfate 2:0e2ef1edf01b 485 row_info->channels = 3;
destinyXfate 2:0e2ef1edf01b 486 }
destinyXfate 2:0e2ef1edf01b 487 else if ((row_info->color_type == PNG_COLOR_TYPE_GRAY ||
destinyXfate 2:0e2ef1edf01b 488 (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA &&
destinyXfate 2:0e2ef1edf01b 489 (flags & PNG_FLAG_STRIP_ALPHA))) &&
destinyXfate 2:0e2ef1edf01b 490 row_info->channels == 2)
destinyXfate 2:0e2ef1edf01b 491 {
destinyXfate 2:0e2ef1edf01b 492 if (row_info->bit_depth == 8)
destinyXfate 2:0e2ef1edf01b 493 {
destinyXfate 2:0e2ef1edf01b 494 /* This converts from GX or GA to G */
destinyXfate 2:0e2ef1edf01b 495 if (flags & PNG_FLAG_FILLER_AFTER)
destinyXfate 2:0e2ef1edf01b 496 {
destinyXfate 2:0e2ef1edf01b 497 for (i = 0; i < row_width; i++)
destinyXfate 2:0e2ef1edf01b 498 {
destinyXfate 2:0e2ef1edf01b 499 *dp++ = *sp++;
destinyXfate 2:0e2ef1edf01b 500 sp++;
destinyXfate 2:0e2ef1edf01b 501 }
destinyXfate 2:0e2ef1edf01b 502 }
destinyXfate 2:0e2ef1edf01b 503 /* This converts from XG or AG to G */
destinyXfate 2:0e2ef1edf01b 504 else
destinyXfate 2:0e2ef1edf01b 505 {
destinyXfate 2:0e2ef1edf01b 506 for (i = 0; i < row_width; i++)
destinyXfate 2:0e2ef1edf01b 507 {
destinyXfate 2:0e2ef1edf01b 508 sp++;
destinyXfate 2:0e2ef1edf01b 509 *dp++ = *sp++;
destinyXfate 2:0e2ef1edf01b 510 }
destinyXfate 2:0e2ef1edf01b 511 }
destinyXfate 2:0e2ef1edf01b 512 row_info->pixel_depth = 8;
destinyXfate 2:0e2ef1edf01b 513 row_info->rowbytes = row_width;
destinyXfate 2:0e2ef1edf01b 514 }
destinyXfate 2:0e2ef1edf01b 515 else /* if (row_info->bit_depth == 16) */
destinyXfate 2:0e2ef1edf01b 516 {
destinyXfate 2:0e2ef1edf01b 517 if (flags & PNG_FLAG_FILLER_AFTER)
destinyXfate 2:0e2ef1edf01b 518 {
destinyXfate 2:0e2ef1edf01b 519 /* This converts from GGXX or GGAA to GG */
destinyXfate 2:0e2ef1edf01b 520 sp += 4; dp += 2;
destinyXfate 2:0e2ef1edf01b 521 for (i = 1; i < row_width; i++)
destinyXfate 2:0e2ef1edf01b 522 {
destinyXfate 2:0e2ef1edf01b 523 *dp++ = *sp++;
destinyXfate 2:0e2ef1edf01b 524 *dp++ = *sp++;
destinyXfate 2:0e2ef1edf01b 525 sp += 2;
destinyXfate 2:0e2ef1edf01b 526 }
destinyXfate 2:0e2ef1edf01b 527 }
destinyXfate 2:0e2ef1edf01b 528 else
destinyXfate 2:0e2ef1edf01b 529 {
destinyXfate 2:0e2ef1edf01b 530 /* This converts from XXGG or AAGG to GG */
destinyXfate 2:0e2ef1edf01b 531 for (i = 0; i < row_width; i++)
destinyXfate 2:0e2ef1edf01b 532 {
destinyXfate 2:0e2ef1edf01b 533 sp += 2;
destinyXfate 2:0e2ef1edf01b 534 *dp++ = *sp++;
destinyXfate 2:0e2ef1edf01b 535 *dp++ = *sp++;
destinyXfate 2:0e2ef1edf01b 536 }
destinyXfate 2:0e2ef1edf01b 537 }
destinyXfate 2:0e2ef1edf01b 538 row_info->pixel_depth = 16;
destinyXfate 2:0e2ef1edf01b 539 row_info->rowbytes = row_width * 2;
destinyXfate 2:0e2ef1edf01b 540 }
destinyXfate 2:0e2ef1edf01b 541 row_info->channels = 1;
destinyXfate 2:0e2ef1edf01b 542 }
destinyXfate 2:0e2ef1edf01b 543 if (flags & PNG_FLAG_STRIP_ALPHA)
destinyXfate 2:0e2ef1edf01b 544 row_info->color_type &= ~PNG_COLOR_MASK_ALPHA;
destinyXfate 2:0e2ef1edf01b 545 }
destinyXfate 2:0e2ef1edf01b 546 }
destinyXfate 2:0e2ef1edf01b 547 #endif
destinyXfate 2:0e2ef1edf01b 548
destinyXfate 2:0e2ef1edf01b 549 #if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED)
destinyXfate 2:0e2ef1edf01b 550 /* swaps red and blue bytes within a pixel */
destinyXfate 2:0e2ef1edf01b 551 void /* PRIVATE */
destinyXfate 2:0e2ef1edf01b 552 png_do_bgr(png_row_infop row_info, png_bytep row)
destinyXfate 2:0e2ef1edf01b 553 {
destinyXfate 2:0e2ef1edf01b 554 png_debug(1, "in png_do_bgr\n");
destinyXfate 2:0e2ef1edf01b 555 if (
destinyXfate 2:0e2ef1edf01b 556 #if defined(PNG_USELESS_TESTS_SUPPORTED)
destinyXfate 2:0e2ef1edf01b 557 row != NULL && row_info != NULL &&
destinyXfate 2:0e2ef1edf01b 558 #endif
destinyXfate 2:0e2ef1edf01b 559 (row_info->color_type & PNG_COLOR_MASK_COLOR))
destinyXfate 2:0e2ef1edf01b 560 {
destinyXfate 2:0e2ef1edf01b 561 png_uint_32 row_width = row_info->width;
destinyXfate 2:0e2ef1edf01b 562 if (row_info->bit_depth == 8)
destinyXfate 2:0e2ef1edf01b 563 {
destinyXfate 2:0e2ef1edf01b 564 if (row_info->color_type == PNG_COLOR_TYPE_RGB)
destinyXfate 2:0e2ef1edf01b 565 {
destinyXfate 2:0e2ef1edf01b 566 png_bytep rp;
destinyXfate 2:0e2ef1edf01b 567 png_uint_32 i;
destinyXfate 2:0e2ef1edf01b 568
destinyXfate 2:0e2ef1edf01b 569 for (i = 0, rp = row; i < row_width; i++, rp += 3)
destinyXfate 2:0e2ef1edf01b 570 {
destinyXfate 2:0e2ef1edf01b 571 png_byte save = *rp;
destinyXfate 2:0e2ef1edf01b 572 *rp = *(rp + 2);
destinyXfate 2:0e2ef1edf01b 573 *(rp + 2) = save;
destinyXfate 2:0e2ef1edf01b 574 }
destinyXfate 2:0e2ef1edf01b 575 }
destinyXfate 2:0e2ef1edf01b 576 else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
destinyXfate 2:0e2ef1edf01b 577 {
destinyXfate 2:0e2ef1edf01b 578 png_bytep rp;
destinyXfate 2:0e2ef1edf01b 579 png_uint_32 i;
destinyXfate 2:0e2ef1edf01b 580
destinyXfate 2:0e2ef1edf01b 581 for (i = 0, rp = row; i < row_width; i++, rp += 4)
destinyXfate 2:0e2ef1edf01b 582 {
destinyXfate 2:0e2ef1edf01b 583 png_byte save = *rp;
destinyXfate 2:0e2ef1edf01b 584 *rp = *(rp + 2);
destinyXfate 2:0e2ef1edf01b 585 *(rp + 2) = save;
destinyXfate 2:0e2ef1edf01b 586 }
destinyXfate 2:0e2ef1edf01b 587 }
destinyXfate 2:0e2ef1edf01b 588 }
destinyXfate 2:0e2ef1edf01b 589 else if (row_info->bit_depth == 16)
destinyXfate 2:0e2ef1edf01b 590 {
destinyXfate 2:0e2ef1edf01b 591 if (row_info->color_type == PNG_COLOR_TYPE_RGB)
destinyXfate 2:0e2ef1edf01b 592 {
destinyXfate 2:0e2ef1edf01b 593 png_bytep rp;
destinyXfate 2:0e2ef1edf01b 594 png_uint_32 i;
destinyXfate 2:0e2ef1edf01b 595
destinyXfate 2:0e2ef1edf01b 596 for (i = 0, rp = row; i < row_width; i++, rp += 6)
destinyXfate 2:0e2ef1edf01b 597 {
destinyXfate 2:0e2ef1edf01b 598 png_byte save = *rp;
destinyXfate 2:0e2ef1edf01b 599 *rp = *(rp + 4);
destinyXfate 2:0e2ef1edf01b 600 *(rp + 4) = save;
destinyXfate 2:0e2ef1edf01b 601 save = *(rp + 1);
destinyXfate 2:0e2ef1edf01b 602 *(rp + 1) = *(rp + 5);
destinyXfate 2:0e2ef1edf01b 603 *(rp + 5) = save;
destinyXfate 2:0e2ef1edf01b 604 }
destinyXfate 2:0e2ef1edf01b 605 }
destinyXfate 2:0e2ef1edf01b 606 else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
destinyXfate 2:0e2ef1edf01b 607 {
destinyXfate 2:0e2ef1edf01b 608 png_bytep rp;
destinyXfate 2:0e2ef1edf01b 609 png_uint_32 i;
destinyXfate 2:0e2ef1edf01b 610
destinyXfate 2:0e2ef1edf01b 611 for (i = 0, rp = row; i < row_width; i++, rp += 8)
destinyXfate 2:0e2ef1edf01b 612 {
destinyXfate 2:0e2ef1edf01b 613 png_byte save = *rp;
destinyXfate 2:0e2ef1edf01b 614 *rp = *(rp + 4);
destinyXfate 2:0e2ef1edf01b 615 *(rp + 4) = save;
destinyXfate 2:0e2ef1edf01b 616 save = *(rp + 1);
destinyXfate 2:0e2ef1edf01b 617 *(rp + 1) = *(rp + 5);
destinyXfate 2:0e2ef1edf01b 618 *(rp + 5) = save;
destinyXfate 2:0e2ef1edf01b 619 }
destinyXfate 2:0e2ef1edf01b 620 }
destinyXfate 2:0e2ef1edf01b 621 }
destinyXfate 2:0e2ef1edf01b 622 }
destinyXfate 2:0e2ef1edf01b 623 }
destinyXfate 2:0e2ef1edf01b 624 #endif /* PNG_READ_BGR_SUPPORTED or PNG_WRITE_BGR_SUPPORTED */
destinyXfate 2:0e2ef1edf01b 625
destinyXfate 2:0e2ef1edf01b 626 #if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
destinyXfate 2:0e2ef1edf01b 627 defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \
destinyXfate 2:0e2ef1edf01b 628 defined(PNG_LEGACY_SUPPORTED)
destinyXfate 2:0e2ef1edf01b 629 void PNGAPI
destinyXfate 2:0e2ef1edf01b 630 png_set_user_transform_info(png_structp png_ptr, png_voidp
destinyXfate 2:0e2ef1edf01b 631 user_transform_ptr, int user_transform_depth, int user_transform_channels)
destinyXfate 2:0e2ef1edf01b 632 {
destinyXfate 2:0e2ef1edf01b 633 png_debug(1, "in png_set_user_transform_info\n");
destinyXfate 2:0e2ef1edf01b 634 if(png_ptr == NULL) return;
destinyXfate 2:0e2ef1edf01b 635 #if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED)
destinyXfate 2:0e2ef1edf01b 636 png_ptr->user_transform_ptr = user_transform_ptr;
destinyXfate 2:0e2ef1edf01b 637 png_ptr->user_transform_depth = (png_byte)user_transform_depth;
destinyXfate 2:0e2ef1edf01b 638 png_ptr->user_transform_channels = (png_byte)user_transform_channels;
destinyXfate 2:0e2ef1edf01b 639 #else
destinyXfate 2:0e2ef1edf01b 640 if(user_transform_ptr || user_transform_depth || user_transform_channels)
destinyXfate 2:0e2ef1edf01b 641 png_warning(png_ptr,
destinyXfate 2:0e2ef1edf01b 642 "This version of libpng does not support user transform info");
destinyXfate 2:0e2ef1edf01b 643 #endif
destinyXfate 2:0e2ef1edf01b 644 }
destinyXfate 2:0e2ef1edf01b 645 #endif
destinyXfate 2:0e2ef1edf01b 646
destinyXfate 2:0e2ef1edf01b 647 /* This function returns a pointer to the user_transform_ptr associated with
destinyXfate 2:0e2ef1edf01b 648 * the user transform functions. The application should free any memory
destinyXfate 2:0e2ef1edf01b 649 * associated with this pointer before png_write_destroy and png_read_destroy
destinyXfate 2:0e2ef1edf01b 650 * are called.
destinyXfate 2:0e2ef1edf01b 651 */
destinyXfate 2:0e2ef1edf01b 652 png_voidp PNGAPI
destinyXfate 2:0e2ef1edf01b 653 png_get_user_transform_ptr(png_structp png_ptr)
destinyXfate 2:0e2ef1edf01b 654 {
destinyXfate 2:0e2ef1edf01b 655 if (png_ptr == NULL) return (NULL);
destinyXfate 2:0e2ef1edf01b 656 #if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED)
destinyXfate 2:0e2ef1edf01b 657 return ((png_voidp)png_ptr->user_transform_ptr);
destinyXfate 2:0e2ef1edf01b 658 #else
destinyXfate 2:0e2ef1edf01b 659 return (NULL);
destinyXfate 2:0e2ef1edf01b 660 #endif
destinyXfate 2:0e2ef1edf01b 661 }
destinyXfate 2:0e2ef1edf01b 662 #endif /* PNG_READ_SUPPORTED || PNG_WRITE_SUPPORTED */
destinyXfate 2:0e2ef1edf01b 663