PNGRCB.C
上传用户:wep9318
上传日期:2007-01-07
资源大小:893k
文件大小:6k
源码类别:

图片显示

开发平台:

Visual C++

  1. /* pngrcb.c - callbacks while reading a png file
  2.    libpng 1.0 beta 3 - version 0.89
  3.    For conditions of distribution and use, see copyright notice in png.h
  4.    Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
  5.    May 25, 1996
  6.    */
  7. #define PNG_INTERNAL
  8. #include "png.h"
  9. void
  10. png_read_IHDR(png_structp png_ptr, png_infop info,
  11.    png_uint_32 width, png_uint_32 height, int bit_depth,
  12.    int color_type, int compression_type, int filter_type,
  13.    int interlace_type)
  14. {
  15.    if (!png_ptr || !info)
  16.       return;
  17.    info->width = width;
  18.    info->height = height;
  19.    info->bit_depth = (png_byte)bit_depth;
  20.    info->color_type =(png_byte) color_type;
  21.    info->compression_type = (png_byte)compression_type;
  22.    info->filter_type = (png_byte)filter_type;
  23.    info->interlace_type = (png_byte)interlace_type;
  24.    if (info->color_type == PNG_COLOR_TYPE_PALETTE)
  25.       info->channels = 1;
  26.    else if (info->color_type & PNG_COLOR_MASK_COLOR)
  27.       info->channels = 3;
  28.    else
  29.       info->channels = 1;
  30.    if (info->color_type & PNG_COLOR_MASK_ALPHA)
  31.       info->channels++;
  32.    info->pixel_depth = (png_byte)(info->channels * info->bit_depth);
  33.    info->rowbytes = ((info->width * info->pixel_depth + 7) >> 3);
  34. }
  35. void
  36. png_read_PLTE(png_structp png_ptr, png_infop info,
  37.    png_colorp palette, int num)
  38. {
  39.    if (!png_ptr || !info)
  40.       return;
  41.    info->palette = palette;
  42.    info->num_palette = (png_uint_16)num;
  43.    info->valid |= PNG_INFO_PLTE;
  44. }
  45. #if defined(PNG_READ_gAMA_SUPPORTED)
  46. void
  47. png_read_gAMA(png_structp png_ptr, png_infop info, double gamma)
  48. {
  49.    if (!png_ptr || !info)
  50.       return;
  51.    info->gamma = gamma;
  52.    info->valid |= PNG_INFO_gAMA;
  53. }
  54. #endif
  55. #if defined(PNG_READ_sBIT_SUPPORTED)
  56. void
  57. png_read_sBIT(png_structp png_ptr, png_infop info,
  58.    png_color_8p sig_bit)
  59. {
  60.    if (!png_ptr || !info)
  61.       return;
  62.    png_memcpy(&(info->sig_bit), sig_bit, sizeof (png_color_8));
  63.    info->valid |= PNG_INFO_sBIT;
  64. }
  65. #endif
  66. #if defined(PNG_READ_cHRM_SUPPORTED)
  67. void
  68. png_read_cHRM(png_structp png_ptr, png_infop info,
  69.    double white_x, double white_y, double red_x, double red_y,
  70.    double green_x, double green_y, double blue_x, double blue_y)
  71. {
  72.    if (!png_ptr || !info)
  73.       return;
  74.    info->x_white = white_x;
  75.    info->y_white = white_y;
  76.    info->x_red = red_x;
  77.    info->y_red = red_y;
  78.    info->x_green = green_x;
  79.    info->y_green = green_y;
  80.    info->x_blue = blue_x;
  81.    info->y_blue = blue_y;
  82.    info->valid |= PNG_INFO_cHRM;
  83. }
  84. #endif
  85. #if defined(PNG_READ_tRNS_SUPPORTED)
  86. void
  87. png_read_tRNS(png_structp png_ptr, png_infop info,
  88.    png_bytep trans, int num_trans,   png_color_16p trans_values)
  89. {
  90.    if (!png_ptr || !info)
  91.       return;
  92.    if (trans)
  93.    {
  94.       info->trans = trans;
  95.    }
  96.    else
  97.    {
  98.       png_memcpy(&(info->trans_values), trans_values,
  99.          sizeof(png_color_16));
  100.    }
  101.    info->num_trans = (png_uint_16)num_trans;
  102.    info->valid |= PNG_INFO_tRNS;
  103. }
  104. #endif
  105. #if defined(PNG_READ_bKGD_SUPPORTED)
  106. void
  107. png_read_bKGD(png_structp png_ptr, png_infop info,
  108.    png_color_16p background)
  109. {
  110.    if (!png_ptr || !info)
  111.       return;
  112.    png_memcpy(&(info->background), background, sizeof(png_color_16));
  113.    info->valid |= PNG_INFO_bKGD;
  114. }
  115. #endif
  116. #if defined(PNG_READ_hIST_SUPPORTED)
  117. void
  118. png_read_hIST(png_structp png_ptr, png_infop info, png_uint_16p hist)
  119. {
  120.    if (!png_ptr || !info)
  121.       return;
  122.    info->hist = hist;
  123.    info->valid |= PNG_INFO_hIST;
  124. }
  125. #endif
  126. #if defined(PNG_READ_pHYs_SUPPORTED)
  127. void
  128. png_read_pHYs(png_structp png_ptr, png_infop info,
  129.    png_uint_32 res_x, png_uint_32 res_y, int unit_type)
  130. {
  131.    if (!png_ptr || !info)
  132.       return;
  133.    info->x_pixels_per_unit = res_x;
  134.    info->y_pixels_per_unit = res_y;
  135.    info->phys_unit_type = (png_byte)unit_type;
  136.    info->valid |= PNG_INFO_pHYs;
  137. }
  138. #endif
  139. #if defined(PNG_READ_oFFs_SUPPORTED)
  140. void
  141. png_read_oFFs(png_structp png_ptr, png_infop info,
  142.    png_uint_32 offset_x, png_uint_32 offset_y, int unit_type)
  143. {
  144.    if (!png_ptr || !info)
  145.       return;
  146.    info->x_offset = offset_x;
  147.    info->y_offset = offset_y;
  148.    info->offset_unit_type = (png_byte)unit_type;
  149.    info->valid |= PNG_INFO_oFFs;
  150. }
  151. #endif
  152. #if defined(PNG_READ_tIME_SUPPORTED)
  153. void
  154. png_read_tIME(png_structp png_ptr, png_infop info,
  155.    png_timep mod_time)
  156. {
  157.    if (!png_ptr || !info)
  158.       return;
  159.    png_memcpy(&(info->mod_time), mod_time, sizeof (png_time));
  160.    info->valid |= PNG_INFO_tIME;
  161. }
  162. #endif
  163. #if defined(PNG_READ_tEXt_SUPPORTED) || defined(PNG_READ_zTXt_SUPPORTED)
  164. void
  165. png_read_zTXt(png_structp png_ptr, png_infop info,
  166.    png_charp key, png_charp text, png_uint_32 text_len, int compression)
  167. {
  168.    if (!png_ptr || !info)
  169.       return;
  170.    if (info->max_text <= info->num_text)
  171.    {
  172.       if (info->text)
  173.       {
  174.          png_uint_32 old_max;
  175.          old_max = info->max_text;
  176.          info->max_text = info->num_text + 16;
  177.          {
  178.             png_textp old_text;
  179.             old_text = info->text;
  180.             info->text = (png_textp)png_large_malloc(png_ptr,
  181.                info->max_text * sizeof (png_text));
  182.             png_memcpy(info->text, old_text,
  183.                (png_size_t)(old_max * sizeof (png_text)));
  184.             png_large_free(png_ptr, old_text);
  185.          }
  186.       }
  187.       else
  188.       {
  189.          info->max_text = 16;
  190.          info->num_text = 0;
  191.          info->text = (png_textp)png_large_malloc(png_ptr,
  192.             info->max_text * sizeof (png_text));
  193.       }
  194.    }
  195.    info->text[info->num_text].key = key;
  196.    info->text[info->num_text].text = text;
  197.    info->text[info->num_text].text_length = text_len;
  198.    info->text[info->num_text].compression = compression;
  199.    info->num_text++;
  200. }
  201. #endif
  202. #if defined(PNG_READ_tEXt_SUPPORTED)
  203. void
  204. png_read_tEXt(png_structp png_ptr, png_infop info,
  205.    png_charp key, png_charp text, png_uint_32 text_len)
  206. {
  207.    if (!png_ptr || !info)
  208.       return;
  209.    png_read_zTXt(png_ptr, info, key, text, text_len, -1);
  210. }
  211. #endif