| /* pngrcb.c - callbacks while reading a png file |
| |
| libpng 1.0 beta 3 - version 0.89 |
| For conditions of distribution and use, see copyright notice in png.h |
| Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc. |
| May 25, 1996 |
| */ |
| |
| #define PNG_INTERNAL |
| #include "png.h" |
| |
| void |
| png_read_IHDR(png_structp png_ptr, png_infop info, |
| png_uint_32 width, png_uint_32 height, int bit_depth, |
| int color_type, int compression_type, int filter_type, |
| int interlace_type) |
| { |
| if (!png_ptr || !info) |
| return; |
| |
| info->width = width; |
| info->height = height; |
| info->bit_depth = (png_byte)bit_depth; |
| info->color_type =(png_byte) color_type; |
| info->compression_type = (png_byte)compression_type; |
| info->filter_type = (png_byte)filter_type; |
| info->interlace_type = (png_byte)interlace_type; |
| if (info->color_type == PNG_COLOR_TYPE_PALETTE) |
| info->channels = 1; |
| else if (info->color_type & PNG_COLOR_MASK_COLOR) |
| info->channels = 3; |
| else |
| info->channels = 1; |
| if (info->color_type & PNG_COLOR_MASK_ALPHA) |
| info->channels++; |
| info->pixel_depth = (png_byte)(info->channels * info->bit_depth); |
| info->rowbytes = ((info->width * info->pixel_depth + 7) >> 3); |
| } |
| |
| void |
| png_read_PLTE(png_structp png_ptr, png_infop info, |
| png_colorp palette, int num) |
| { |
| if (!png_ptr || !info) |
| return; |
| |
| info->palette = palette; |
| info->num_palette = (png_uint_16)num; |
| info->valid |= PNG_INFO_PLTE; |
| } |
| |
| #if defined(PNG_READ_gAMA_SUPPORTED) |
| void |
| png_read_gAMA(png_structp png_ptr, png_infop info, double gamma) |
| { |
| if (!png_ptr || !info) |
| return; |
| |
| info->gamma = gamma; |
| info->valid |= PNG_INFO_gAMA; |
| } |
| #endif |
| |
| #if defined(PNG_READ_sBIT_SUPPORTED) |
| void |
| png_read_sBIT(png_structp png_ptr, png_infop info, |
| png_color_8p sig_bit) |
| { |
| if (!png_ptr || !info) |
| return; |
| |
| png_memcpy(&(info->sig_bit), sig_bit, sizeof (png_color_8)); |
| info->valid |= PNG_INFO_sBIT; |
| } |
| #endif |
| |
| #if defined(PNG_READ_cHRM_SUPPORTED) |
| void |
| png_read_cHRM(png_structp png_ptr, png_infop info, |
| double white_x, double white_y, double red_x, double red_y, |
| double green_x, double green_y, double blue_x, double blue_y) |
| { |
| if (!png_ptr || !info) |
| return; |
| |
| info->x_white = white_x; |
| info->y_white = white_y; |
| info->x_red = red_x; |
| info->y_red = red_y; |
| info->x_green = green_x; |
| info->y_green = green_y; |
| info->x_blue = blue_x; |
| info->y_blue = blue_y; |
| info->valid |= PNG_INFO_cHRM; |
| } |
| #endif |
| |
| #if defined(PNG_READ_tRNS_SUPPORTED) |
| void |
| png_read_tRNS(png_structp png_ptr, png_infop info, |
| png_bytep trans, int num_trans, png_color_16p trans_values) |
| { |
| if (!png_ptr || !info) |
| return; |
| |
| if (trans) |
| { |
| info->trans = trans; |
| } |
| else |
| { |
| png_memcpy(&(info->trans_values), trans_values, |
| sizeof(png_color_16)); |
| } |
| info->num_trans = (png_uint_16)num_trans; |
| info->valid |= PNG_INFO_tRNS; |
| } |
| #endif |
| |
| #if defined(PNG_READ_bKGD_SUPPORTED) |
| void |
| png_read_bKGD(png_structp png_ptr, png_infop info, |
| png_color_16p background) |
| { |
| if (!png_ptr || !info) |
| return; |
| |
| png_memcpy(&(info->background), background, sizeof(png_color_16)); |
| info->valid |= PNG_INFO_bKGD; |
| } |
| #endif |
| |
| #if defined(PNG_READ_hIST_SUPPORTED) |
| void |
| png_read_hIST(png_structp png_ptr, png_infop info, png_uint_16p hist) |
| { |
| if (!png_ptr || !info) |
| return; |
| |
| info->hist = hist; |
| info->valid |= PNG_INFO_hIST; |
| } |
| #endif |
| |
| #if defined(PNG_READ_pHYs_SUPPORTED) |
| void |
| png_read_pHYs(png_structp png_ptr, png_infop info, |
| png_uint_32 res_x, png_uint_32 res_y, int unit_type) |
| { |
| if (!png_ptr || !info) |
| return; |
| |
| info->x_pixels_per_unit = res_x; |
| info->y_pixels_per_unit = res_y; |
| info->phys_unit_type = (png_byte)unit_type; |
| info->valid |= PNG_INFO_pHYs; |
| } |
| #endif |
| |
| #if defined(PNG_READ_oFFs_SUPPORTED) |
| void |
| png_read_oFFs(png_structp png_ptr, png_infop info, |
| png_uint_32 offset_x, png_uint_32 offset_y, int unit_type) |
| { |
| if (!png_ptr || !info) |
| return; |
| |
| info->x_offset = offset_x; |
| info->y_offset = offset_y; |
| info->offset_unit_type = (png_byte)unit_type; |
| info->valid |= PNG_INFO_oFFs; |
| } |
| #endif |
| |
| #if defined(PNG_READ_tIME_SUPPORTED) |
| void |
| png_read_tIME(png_structp png_ptr, png_infop info, |
| png_timep mod_time) |
| { |
| if (!png_ptr || !info) |
| return; |
| |
| png_memcpy(&(info->mod_time), mod_time, sizeof (png_time)); |
| info->valid |= PNG_INFO_tIME; |
| } |
| #endif |
| |
| #if defined(PNG_READ_tEXt_SUPPORTED) || defined(PNG_READ_zTXt_SUPPORTED) |
| void |
| png_read_zTXt(png_structp png_ptr, png_infop info, |
| png_charp key, png_charp text, png_uint_32 text_len, int compression) |
| { |
| if (!png_ptr || !info) |
| return; |
| |
| if (info->max_text <= info->num_text) |
| { |
| if (info->text) |
| { |
| png_uint_32 old_max; |
| |
| old_max = info->max_text; |
| info->max_text = info->num_text + 16; |
| { |
| png_textp old_text; |
| |
| old_text = info->text; |
| info->text = (png_textp)png_large_malloc(png_ptr, |
| info->max_text * sizeof (png_text)); |
| png_memcpy(info->text, old_text, |
| (png_size_t)(old_max * sizeof (png_text))); |
| png_large_free(png_ptr, old_text); |
| } |
| } |
| else |
| { |
| info->max_text = 16; |
| info->num_text = 0; |
| info->text = (png_textp)png_large_malloc(png_ptr, |
| info->max_text * sizeof (png_text)); |
| } |
| } |
| |
| info->text[info->num_text].key = key; |
| info->text[info->num_text].text = text; |
| info->text[info->num_text].text_length = text_len; |
| info->text[info->num_text].compression = compression; |
| info->num_text++; |
| } |
| #endif |
| |
| #if defined(PNG_READ_tEXt_SUPPORTED) |
| void |
| png_read_tEXt(png_structp png_ptr, png_infop info, |
| png_charp key, png_charp text, png_uint_32 text_len) |
| { |
| if (!png_ptr || !info) |
| return; |
| |
| png_read_zTXt(png_ptr, info, key, text, text_len, -1); |
| } |
| #endif |
| |