⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pngset.c

📁 GIS系统支持库Geospatial Data Abstraction Library代码.GDAL is a translator library for raster geospatial dat
💻 C
📖 第 1 页 / 共 3 页
字号:
      {         textp->lang=textp->key + key_len + 1;         png_memcpy(textp->lang, text_ptr[i].lang, lang_len);         *(textp->lang+lang_len) = '\0';         textp->lang_key=textp->lang + lang_len + 1;         png_memcpy(textp->lang_key, text_ptr[i].lang_key, lang_key_len);         *(textp->lang_key+lang_key_len) = '\0';         textp->text=textp->lang_key + lang_key_len + 1;      }      else#endif      {#ifdef PNG_iTXt_SUPPORTED         textp->lang=NULL;         textp->lang_key=NULL;#endif         textp->text=textp->key + key_len + 1;      }      if(text_length)         png_memcpy(textp->text, text_ptr[i].text,            (png_size_t)(text_length));      *(textp->text+text_length) = '\0';#ifdef PNG_iTXt_SUPPORTED      if(textp->compression > 0)      {         textp->text_length = 0;         textp->itxt_length = text_length;      }      else#endif      {         textp->text_length = text_length;#ifdef PNG_iTXt_SUPPORTED         textp->itxt_length = 0;#endif      }      info_ptr->text[info_ptr->num_text]= *textp;      info_ptr->num_text++;      png_debug1(3, "transferred text chunk %d\n", info_ptr->num_text);   }   return(0);}#endif#if defined(PNG_tIME_SUPPORTED)void PNGAPIpng_set_tIME(png_structp png_ptr, png_infop info_ptr, png_timep mod_time){   png_debug1(1, "in %s storage function\n", "tIME");   if (png_ptr == NULL || info_ptr == NULL ||       (png_ptr->mode & PNG_WROTE_tIME))      return;   png_memcpy(&(info_ptr->mod_time), mod_time, png_sizeof (png_time));   info_ptr->valid |= PNG_INFO_tIME;}#endif#if defined(PNG_tRNS_SUPPORTED)void PNGAPIpng_set_tRNS(png_structp png_ptr, png_infop info_ptr,   png_bytep trans, int num_trans, png_color_16p trans_values){   png_debug1(1, "in %s storage function\n", "tRNS");   if (png_ptr == NULL || info_ptr == NULL)      return;   if (trans != NULL)   {       /*        * It may not actually be necessary to set png_ptr->trans here;        * we do it for backward compatibility with the way the png_handle_tRNS        * function used to do the allocation.        */#ifdef PNG_FREE_ME_SUPPORTED       png_free_data(png_ptr, info_ptr, PNG_FREE_TRNS, 0);#endif       /* Changed from num_trans to 256 in version 1.2.1 */       png_ptr->trans = info_ptr->trans = (png_bytep)png_malloc(png_ptr,           (png_uint_32)256);       png_memcpy(info_ptr->trans, trans, (png_size_t)num_trans);#ifdef PNG_FREE_ME_SUPPORTED       info_ptr->free_me |= PNG_FREE_TRNS;#else       png_ptr->flags |= PNG_FLAG_FREE_TRNS;#endif   }   if (trans_values != NULL)   {      png_memcpy(&(info_ptr->trans_values), trans_values,         png_sizeof(png_color_16));      if (num_trans == 0)        num_trans = 1;   }   info_ptr->num_trans = (png_uint_16)num_trans;   info_ptr->valid |= PNG_INFO_tRNS;}#endif#if defined(PNG_sPLT_SUPPORTED)void PNGAPIpng_set_sPLT(png_structp png_ptr,             png_infop info_ptr, png_sPLT_tp entries, int nentries){    png_sPLT_tp np;    int i;    np = (png_sPLT_tp)png_malloc_warn(png_ptr,        (info_ptr->splt_palettes_num + nentries) * png_sizeof(png_sPLT_t));    if (np == NULL)    {      png_warning(png_ptr, "No memory for sPLT palettes.");      return;    }    png_memcpy(np, info_ptr->splt_palettes,           info_ptr->splt_palettes_num * png_sizeof(png_sPLT_t));    png_free(png_ptr, info_ptr->splt_palettes);    info_ptr->splt_palettes=NULL;    for (i = 0; i < nentries; i++)    {        png_sPLT_tp to = np + info_ptr->splt_palettes_num + i;        png_sPLT_tp from = entries + i;        to->name = (png_charp)png_malloc(png_ptr,            png_strlen(from->name) + 1);        /* TODO: use png_malloc_warn */        png_strcpy(to->name, from->name);        to->entries = (png_sPLT_entryp)png_malloc(png_ptr,            from->nentries * png_sizeof(png_sPLT_t));        /* TODO: use png_malloc_warn */        png_memcpy(to->entries, from->entries,            from->nentries * png_sizeof(png_sPLT_t));        to->nentries = from->nentries;        to->depth = from->depth;    }    info_ptr->splt_palettes = np;    info_ptr->splt_palettes_num += nentries;    info_ptr->valid |= PNG_INFO_sPLT;#ifdef PNG_FREE_ME_SUPPORTED    info_ptr->free_me |= PNG_FREE_SPLT;#endif}#endif /* PNG_sPLT_SUPPORTED */#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)void PNGAPIpng_set_unknown_chunks(png_structp png_ptr,   png_infop info_ptr, png_unknown_chunkp unknowns, int num_unknowns){    png_unknown_chunkp np;    int i;    if (png_ptr == NULL || info_ptr == NULL || num_unknowns == 0)        return;    np = (png_unknown_chunkp)png_malloc_warn(png_ptr,        (info_ptr->unknown_chunks_num + num_unknowns) *        png_sizeof(png_unknown_chunk));    if (np == NULL)    {       png_warning(png_ptr, "Out of memory while processing unknown chunk.");       return;    }    png_memcpy(np, info_ptr->unknown_chunks,           info_ptr->unknown_chunks_num * png_sizeof(png_unknown_chunk));    png_free(png_ptr, info_ptr->unknown_chunks);    info_ptr->unknown_chunks=NULL;    for (i = 0; i < num_unknowns; i++)    {        png_unknown_chunkp to = np + info_ptr->unknown_chunks_num + i;        png_unknown_chunkp from = unknowns + i;        png_strncpy((png_charp)to->name, (png_charp)from->name, 5);        to->data = (png_bytep)png_malloc_warn(png_ptr, from->size);        if (to->data == NULL)        {           png_warning(png_ptr, "Out of memory processing unknown chunk.");        }        else        {           png_memcpy(to->data, from->data, from->size);           to->size = from->size;           /* note our location in the read or write sequence */           to->location = (png_byte)(png_ptr->mode & 0xff);        }    }    info_ptr->unknown_chunks = np;    info_ptr->unknown_chunks_num += num_unknowns;#ifdef PNG_FREE_ME_SUPPORTED    info_ptr->free_me |= PNG_FREE_UNKN;#endif}void PNGAPIpng_set_unknown_chunk_location(png_structp png_ptr, png_infop info_ptr,   int chunk, int location){   if(png_ptr != NULL && info_ptr != NULL && chunk >= 0 && chunk <         (int)info_ptr->unknown_chunks_num)      info_ptr->unknown_chunks[chunk].location = (png_byte)location;}#endif#if defined(PNG_READ_EMPTY_PLTE_SUPPORTED) || \    defined(PNG_WRITE_EMPTY_PLTE_SUPPORTED)void PNGAPIpng_permit_empty_plte (png_structp png_ptr, int empty_plte_permitted){   /* This function is deprecated in favor of png_permit_mng_features()      and will be removed from libpng-2.0.0 */   png_debug(1, "in png_permit_empty_plte, DEPRECATED.\n");   if (png_ptr == NULL)      return;   png_ptr->mng_features_permitted = (png_byte)     ((png_ptr->mng_features_permitted & (~(PNG_FLAG_MNG_EMPTY_PLTE))) |     ((empty_plte_permitted & PNG_FLAG_MNG_EMPTY_PLTE)));}#endif#if defined(PNG_MNG_FEATURES_SUPPORTED)png_uint_32 PNGAPIpng_permit_mng_features (png_structp png_ptr, png_uint_32 mng_features){   png_debug(1, "in png_permit_mng_features\n");   if (png_ptr == NULL)      return (png_uint_32)0;   png_ptr->mng_features_permitted =     (png_byte)(mng_features & PNG_ALL_MNG_FEATURES);   return (png_uint_32)png_ptr->mng_features_permitted;}#endif#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)void PNGAPIpng_set_keep_unknown_chunks(png_structp png_ptr, int keep, png_bytep   chunk_list, int num_chunks){    png_bytep new_list, p;    int i, old_num_chunks;    if (num_chunks == 0)    {      if(keep == PNG_HANDLE_CHUNK_ALWAYS || keep == PNG_HANDLE_CHUNK_IF_SAFE)        png_ptr->flags |= PNG_FLAG_KEEP_UNKNOWN_CHUNKS;      else        png_ptr->flags &= ~PNG_FLAG_KEEP_UNKNOWN_CHUNKS;      if(keep == PNG_HANDLE_CHUNK_ALWAYS)        png_ptr->flags |= PNG_FLAG_KEEP_UNSAFE_CHUNKS;      else        png_ptr->flags &= ~PNG_FLAG_KEEP_UNSAFE_CHUNKS;      return;    }    if (chunk_list == NULL)      return;    old_num_chunks=png_ptr->num_chunk_list;    new_list=(png_bytep)png_malloc(png_ptr,       (png_uint_32)(5*(num_chunks+old_num_chunks)));    if(png_ptr->chunk_list != NULL)    {       png_memcpy(new_list, png_ptr->chunk_list,          (png_size_t)(5*old_num_chunks));       png_free(png_ptr, png_ptr->chunk_list);       png_ptr->chunk_list=NULL;    }    png_memcpy(new_list+5*old_num_chunks, chunk_list,       (png_size_t)(5*num_chunks));    for (p=new_list+5*old_num_chunks+4, i=0; i<num_chunks; i++, p+=5)       *p=(png_byte)keep;    png_ptr->num_chunk_list=old_num_chunks+num_chunks;    png_ptr->chunk_list=new_list;#ifdef PNG_FREE_ME_SUPPORTED    png_ptr->free_me |= PNG_FREE_LIST;#endif}#endif#if defined(PNG_READ_USER_CHUNKS_SUPPORTED)void PNGAPIpng_set_read_user_chunk_fn(png_structp png_ptr, png_voidp user_chunk_ptr,   png_user_chunk_ptr read_user_chunk_fn){   png_debug(1, "in png_set_read_user_chunk_fn\n");   png_ptr->read_user_chunk_fn = read_user_chunk_fn;   png_ptr->user_chunk_ptr = user_chunk_ptr;}#endif#if defined(PNG_INFO_IMAGE_SUPPORTED)void PNGAPIpng_set_rows(png_structp png_ptr, png_infop info_ptr, png_bytepp row_pointers){   png_debug1(1, "in %s storage function\n", "rows");   if (png_ptr == NULL || info_ptr == NULL)      return;   if(info_ptr->row_pointers && (info_ptr->row_pointers != row_pointers))      png_free_data(png_ptr, info_ptr, PNG_FREE_ROWS, 0);   info_ptr->row_pointers = row_pointers;   if(row_pointers)      info_ptr->valid |= PNG_INFO_IDAT;}#endif#ifdef PNG_WRITE_SUPPORTEDvoid PNGAPIpng_set_compression_buffer_size(png_structp png_ptr, png_uint_32 size){    if(png_ptr->zbuf)       png_free(png_ptr, png_ptr->zbuf);    png_ptr->zbuf_size = (png_size_t)size;    png_ptr->zbuf = (png_bytep)png_malloc(png_ptr, size);    png_ptr->zstream.next_out = png_ptr->zbuf;    png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size;}#endifvoid PNGAPIpng_set_invalid(png_structp png_ptr, png_infop info_ptr, int mask){   if (png_ptr && info_ptr)      info_ptr->valid &= ~(mask);}#ifndef PNG_1_0_X#ifdef PNG_ASSEMBLER_CODE_SUPPORTED/* this function was added to libpng 1.2.0 and should always exist by default */void PNGAPIpng_set_asm_flags (png_structp png_ptr, png_uint_32 asm_flags){    png_uint_32 settable_asm_flags;    png_uint_32 settable_mmx_flags;    settable_mmx_flags =#ifdef PNG_HAVE_ASSEMBLER_COMBINE_ROW                         PNG_ASM_FLAG_MMX_READ_COMBINE_ROW  |#endif#ifdef PNG_HAVE_ASSEMBLER_READ_INTERLACE                         PNG_ASM_FLAG_MMX_READ_INTERLACE    |#endif#ifdef PNG_HAVE_ASSEMBLER_READ_FILTER_ROW                         PNG_ASM_FLAG_MMX_READ_FILTER_SUB   |                         PNG_ASM_FLAG_MMX_READ_FILTER_UP    |                         PNG_ASM_FLAG_MMX_READ_FILTER_AVG   |                         PNG_ASM_FLAG_MMX_READ_FILTER_PAETH |#endif                         0;    /* could be some non-MMX ones in the future, but not currently: */    settable_asm_flags = settable_mmx_flags;    if (!(png_ptr->asm_flags & PNG_ASM_FLAG_MMX_SUPPORT_COMPILED) ||        !(png_ptr->asm_flags & PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU))    {        /* clear all MMX flags if MMX isn't supported */        settable_asm_flags &= ~settable_mmx_flags;        png_ptr->asm_flags &= ~settable_mmx_flags;    }    /* we're replacing the settable bits with those passed in by the user,     * so first zero them out of the master copy, then logical-OR in the     * allowed subset that was requested */    png_ptr->asm_flags &= ~settable_asm_flags;               /* zero them */    png_ptr->asm_flags |= (asm_flags & settable_asm_flags);  /* set them */}#endif /* ?PNG_ASSEMBLER_CODE_SUPPORTED */#ifdef PNG_ASSEMBLER_CODE_SUPPORTED/* this function was added to libpng 1.2.0 */void PNGAPIpng_set_mmx_thresholds (png_structp png_ptr,                        png_byte mmx_bitdepth_threshold,                        png_uint_32 mmx_rowbytes_threshold){    png_ptr->mmx_bitdepth_threshold = mmx_bitdepth_threshold;    png_ptr->mmx_rowbytes_threshold = mmx_rowbytes_threshold;}#endif /* ?PNG_ASSEMBLER_CODE_SUPPORTED */#ifdef PNG_SET_USER_LIMITS_SUPPORTED/* this function was added to libpng 1.2.6 */void PNGAPIpng_set_user_limits (png_structp png_ptr, png_uint_32 user_width_max,    png_uint_32 user_height_max){    /* Images with dimensions larger than these limits will be     * rejected by png_set_IHDR().  To accept any PNG datastream     * regardless of dimensions, set both limits to 0x7ffffffL.     */    png_ptr->user_width_max = user_width_max;    png_ptr->user_height_max = user_height_max;}#endif /* ?PNG_SET_USER_LIMITS_SUPPORTED */#endif /* ?PNG_1_0_X */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -