if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
if (png_ptr->color_type == PNG_COLOR_TYPE_GRAY) { png_byte buf[2];  if (length != 2) { png_warning(png_ptr, "Incorrect tRNS chunk length"); png_crc_finish(png_ptr, length); return; }  png_crc_read(png_ptr, buf, 2); png_ptr->num_trans = 1; png_ptr->trans_values.gray = png_get_uint_16(buf); } else if (png_ptr->color_type == PNG_COLOR_TYPE_RGB) { png_byte buf[6];  if (length != 6) { png_warning(png_ptr, "Incorrect tRNS chunk length"); png_crc_finish(png_ptr, length); return; } png_crc_read(png_ptr, buf, (png_size_t)length); png_ptr->num_trans = 1; png_ptr->trans_values.red = png_get_uint_16(buf); png_ptr->trans_values.green = png_get_uint_16(buf + 2); png_ptr->trans_values.blue = png_get_uint_16(buf + 4); } else if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
png_handle_tRNS(png_structp png_ptr, png_infop info_ptr, png_uint_32 length){   png_byte readbuf[PNG_MAX_PALETTE_LENGTH];   png_debug(1, "in png_handle_tRNS\n");   if (!(png_ptr->mode & PNG_HAVE_IHDR))      png_error(png_ptr, "Missing IHDR before tRNS");   else if (png_ptr->mode & PNG_HAVE_IDAT)   {      png_warning(png_ptr, "Invalid tRNS after IDAT");      png_crc_finish(png_ptr, length);      return;   }   else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_tRNS))   {      png_warning(png_ptr, "Duplicate tRNS chunk");      png_crc_finish(png_ptr, length);      return;   }   if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)   {      if (!(png_ptr->mode & PNG_HAVE_PLTE))      {         /* Should be an error, but we can cope with it */         png_warning(png_ptr, "Missing PLTE before tRNS");      }      else if (length > (png_uint_32)png_ptr->num_palette)      {         png_warning(png_ptr, "Incorrect tRNS chunk length");         png_crc_finish(png_ptr, length);         return;      }      if (length == 0)      {         png_warning(png_ptr, "Zero length tRNS chunk");         png_crc_finish(png_ptr, length);         return;      }      png_crc_read(png_ptr, readbuf, (png_size_t)length);      png_ptr->num_trans = (png_uint_16)length;   }   else if (png_ptr->color_type == PNG_COLOR_TYPE_RGB)   {      png_byte buf[6];      if (length != 6)      {         png_warning(png_ptr, "Incorrect tRNS chunk length");         png_crc_finish(png_ptr, length);         return;      }      png_crc_read(png_ptr, buf, (png_size_t)length);      png_ptr->num_trans = 1;      png_ptr->trans_values.red = png_get_uint_16(buf);      png_ptr->trans_values.green = png_get_uint_16(buf + 2);      png_ptr->trans_values.blue = png_get_uint_16(buf + 4);   }   else if (png_ptr->color_type == PNG_COLOR_TYPE_GRAY)   {      png_byte buf[6];      if (length != 2)      {         png_warning(png_ptr, "Incorrect tRNS chunk length");         png_crc_finish(png_ptr, length);         return;      }      png_crc_read(png_ptr, buf, 2);      png_ptr->num_trans = 1;      png_ptr->trans_values.gray = png_get_uint_16(buf);   }   else   {      png_warning(png_ptr, "tRNS chunk not allowed with alpha channel");      png_crc_finish(png_ptr, length);      return;   }   if (png_crc_finish(png_ptr, 0))      return;   png_set_tRNS(png_ptr, info_ptr, readbuf, png_ptr->num_trans,      &(png_ptr->trans_values));}