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

📄 pngrtran.c

📁 a 3d car ....with color texture..
💻 C
📖 第 1 页 / 共 5 页
字号:
            }         }      }   }}#endif#if defined(PNG_READ_FILLER_SUPPORTED)/* Add filler channel if we have RGB color */voidpng_do_read_filler(png_row_infop row_info, png_bytep row,   png_uint_32 filler, png_uint_32 flags){   png_uint_32 i;   png_uint_32 row_width = row_info->width;   png_byte hi_filler = (png_byte)((filler>>8) & 0xff);   png_byte low_filler = (png_byte)(filler & 0xff);   png_debug(1, "in png_do_read_filler\n");   if (#if defined(PNG_USELESS_TESTS_SUPPORTED)       row != NULL  && row_info != NULL &&#endif       row_info->color_type == PNG_COLOR_TYPE_GRAY)   {      if(row_info->bit_depth == 8)      {         /* This changes the data from G to GX */         if (flags & PNG_FLAG_FILLER_AFTER)         {            png_bytep sp = row + (png_size_t)row_width;            png_bytep dp =  sp + (png_size_t)row_width;            for (i = 1; i < row_width; i++)            {               *(--dp) = low_filler;               *(--dp) = *(--sp);            }            row_info->channels = 2;            row_info->pixel_depth = 16;            row_info->rowbytes = row_width * 2;         }      /* This changes the data from G to XG */         else         {            png_bytep sp = row + (png_size_t)row_width;            png_bytep dp = sp  + (png_size_t)row_width;            for (i = 0; i < row_width; i++)            {               *(--dp) = *(--sp);               *(--dp) = low_filler;            }            row_info->channels = 2;            row_info->pixel_depth = 16;            row_info->rowbytes = row_width * 2;         }      }      else if(row_info->bit_depth == 16)      {         /* This changes the data from GG to GGXX */         if (flags & PNG_FLAG_FILLER_AFTER)         {            png_bytep sp = row + (png_size_t)row_width;            png_bytep dp = sp  + (png_size_t)row_width;            for (i = 1; i < row_width; i++)            {               *(--dp) = hi_filler;               *(--dp) = low_filler;               *(--dp) = *(--sp);               *(--dp) = *(--sp);            }            row_info->channels = 2;            row_info->pixel_depth = 32;            row_info->rowbytes = row_width * 2;         }         /* This changes the data from GG to XXGG */         else         {            png_bytep sp = row + (png_size_t)row_width;            png_bytep dp = sp  + (png_size_t)row_width;            for (i = 0; i < row_width; i++)            {               *(--dp) = *(--sp);               *(--dp) = *(--sp);               *(--dp) = hi_filler;               *(--dp) = low_filler;            }            row_info->channels = 2;            row_info->pixel_depth = 16;            row_info->rowbytes = row_width * 2;         }      }   } /* COLOR_TYPE == GRAY */   else if (row_info->color_type == PNG_COLOR_TYPE_RGB)   {      if(row_info->bit_depth == 8)      {         /* This changes the data from RGB to RGBX */         if (flags & PNG_FLAG_FILLER_AFTER)         {            png_bytep sp = row + (png_size_t)row_width * 3;            png_bytep dp = sp  + (png_size_t)row_width;            for (i = 1; i < row_width; i++)            {               *(--dp) = low_filler;               *(--dp) = *(--sp);               *(--dp) = *(--sp);               *(--dp) = *(--sp);            }            row_info->channels = 4;            row_info->pixel_depth = 32;            row_info->rowbytes = row_width * 4;         }      /* This changes the data from RGB to XRGB */         else         {            png_bytep sp = row + (png_size_t)row_width * 3;            png_bytep dp = sp + (png_size_t)row_width;            for (i = 0; i < row_width; i++)            {               *(--dp) = *(--sp);               *(--dp) = *(--sp);               *(--dp) = *(--sp);               *(--dp) = low_filler;            }            row_info->channels = 4;            row_info->pixel_depth = 32;            row_info->rowbytes = row_width * 4;         }      }      else if(row_info->bit_depth == 16)      {         /* This changes the data from RRGGBB to RRGGBBXX */         if (flags & PNG_FLAG_FILLER_AFTER)         {            png_bytep sp = row + (png_size_t)row_width * 3;            png_bytep dp = sp  + (png_size_t)row_width;            for (i = 1; i < row_width; i++)            {               *(--dp) = hi_filler;               *(--dp) = low_filler;               *(--dp) = *(--sp);               *(--dp) = *(--sp);               *(--dp) = *(--sp);               *(--dp) = *(--sp);               *(--dp) = *(--sp);               *(--dp) = *(--sp);            }            row_info->channels = 4;            row_info->pixel_depth = 64;            row_info->rowbytes = row_width * 4;         }         /* This changes the data from RRGGBB to XXRRGGBB */         else         {            png_bytep sp = row + (png_size_t)row_width * 3;            png_bytep dp = sp  + (png_size_t)row_width;            for (i = 0; i < row_width; i++)            {               *(--dp) = *(--sp);               *(--dp) = *(--sp);               *(--dp) = *(--sp);               *(--dp) = *(--sp);               *(--dp) = *(--sp);               *(--dp) = *(--sp);               *(--dp) = hi_filler;               *(--dp) = low_filler;            }            row_info->channels = 4;            row_info->pixel_depth = 64;            row_info->rowbytes = row_width * 4;         }      }   } /* COLOR_TYPE == RGB */}#endif#if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED)/* expand grayscale files to RGB, with or without alpha */voidpng_do_gray_to_rgb(png_row_infop row_info, png_bytep row){   png_uint_32 i;   png_uint_32 row_width = row_info->width;   png_debug(1, "in png_do_gray_to_rgb\n");   if (row_info->bit_depth >= 8 &&#if defined(PNG_USELESS_TESTS_SUPPORTED)       row != NULL && row_info != NULL &&#endif      !(row_info->color_type & PNG_COLOR_MASK_COLOR))   {      if (row_info->color_type == PNG_COLOR_TYPE_GRAY)      {         if (row_info->bit_depth == 8)         {            png_bytep sp = row + (png_size_t)row_width - 1;            png_bytep dp = sp  + (png_size_t)row_width * 2;            for (i = 0; i < row_width; i++)            {               *(dp--) = *sp;               *(dp--) = *sp;               *(dp--) = *sp;               sp--;            }         }         else         {            png_bytep sp = row + (png_size_t)row_width * 2 - 1;            png_bytep dp = sp  + (png_size_t)row_width * 4;            for (i = 0; i < row_width; i++)            {               *(dp--) = *sp;               *(dp--) = *(sp - 1);               *(dp--) = *sp;               *(dp--) = *(sp - 1);               *(dp--) = *sp;               *(dp--) = *(sp - 1);               sp--;               sp--;            }         }      }      else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)      {         if (row_info->bit_depth == 8)         {            png_bytep sp = row + (png_size_t)row_width * 2 - 1;            png_bytep dp = sp  + (png_size_t)row_width * 2;            for (i = 0; i < row_width; i++)            {               *(dp--) = *(sp--);               *(dp--) = *sp;               *(dp--) = *sp;               *(dp--) = *sp;               sp--;            }         }         else         {            png_bytep sp = row + (png_size_t)row_width * 4 - 1;            png_bytep dp = sp  + (png_size_t)row_width * 4;            for (i = 0; i < row_width; i++)            {               *(dp--) = *(sp--);               *(dp--) = *(sp--);               *(dp--) = *sp;               *(dp--) = *(sp - 1);               *(dp--) = *sp;               *(dp--) = *(sp - 1);               *(dp--) = *sp;               *(dp--) = *(sp - 1);               sp--;               sp--;            }         }      }      row_info->channels += (png_byte)2;      row_info->color_type |= PNG_COLOR_MASK_COLOR;      row_info->pixel_depth = (png_byte)(row_info->channels *         row_info->bit_depth);      row_info->rowbytes = ((row_width *         row_info->pixel_depth + 7) >> 3);   }}#endif/* This function is currently unused.  Do we really need it? */#if defined(PNG_READ_DITHER_SUPPORTED) && defined(PNG_CORRECT_PALETTE_SUPPORTED)voidpng_correct_palette(png_structp png_ptr, png_colorp palette,   int num_palette){   png_debug(1, "in png_correct_palette\n");#if defined(PNG_READ_BACKGROUND_SUPPORTED) && defined(PNG_READ_GAMMA_SUPPORTED)   if ((png_ptr->transformations & (PNG_GAMMA)) &&      (png_ptr->transformations & (PNG_BACKGROUND)))   {      png_color back, back_1;      if (png_ptr->background_gamma_type == PNG_BACKGROUND_GAMMA_FILE)      {         back.red = png_ptr->gamma_table[png_ptr->background.red];         back.green = png_ptr->gamma_table[png_ptr->background.green];         back.blue = png_ptr->gamma_table[png_ptr->background.blue];         back_1.red = png_ptr->gamma_to_1[png_ptr->background.red];         back_1.green = png_ptr->gamma_to_1[png_ptr->background.green];         back_1.blue = png_ptr->gamma_to_1[png_ptr->background.blue];      }      else      {         double g;         g = 1.0 / (png_ptr->background_gamma * png_ptr->screen_gamma);         if (png_ptr->background_gamma_type == PNG_BACKGROUND_GAMMA_SCREEN ||             fabs(g - 1.0) < PNG_GAMMA_THRESHOLD)         {            back.red = png_ptr->background.red;            back.green = png_ptr->background.green;            back.blue = png_ptr->background.blue;         }         else         {            back.red =               (png_byte)(pow((double)png_ptr->background.red/255, g) *                255.0 + 0.5);            back.green =               (png_byte)(pow((double)png_ptr->background.green/255, g) *                255.0 + 0.5);            back.blue =               (png_byte)(pow((double)png_ptr->background.blue/255, g) *                255.0 + 0.5);         }         g = 1.0 / png_ptr->background_gamma;         back_1.red =            (png_byte)(pow((double)png_ptr->background.red/255, g) *             255.0 + 0.5);         back_1.green =            (png_byte)(pow((double)png_ptr->background.green/255, g) *             255.0 + 0.5);         back_1.blue =            (png_byte)(pow((double)png_ptr->background.blue/255, g) *             255.0 + 0.5);      }      if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)      {         png_uint_32 i;         for (i = 0; i < (png_uint_32)num_palette; i++)         {            if (i < png_ptr->num_trans && png_ptr->trans[i] == 0)            {               palette[i] = back;            }            else if (i < png_ptr->num_trans && png_ptr->trans[i] != 0xff)            {               png_byte v, w;               v = png_ptr->gamma_to_1[png_ptr->palette[i].red];               png_composite(w, v, png_ptr->trans[i], back_1.red);               palette[i].red = png_ptr->gamma_from_1[w];               v = png_ptr->gamma_to_1[png_ptr->palette[i].green];               png_composite(w, v, png_ptr->trans[i], back_1.green);               palette[i].green = png_ptr->gamma_from_1[w];               v = png_ptr->gamma_to_1[png_ptr->palette[i].blue];               png_composite(w, v, png_ptr->trans[i], back_1.blue);               palette[i].blue = png_ptr->gamma_from_1[w];            }            else            {               palette[i].red = png_ptr->gamma_table[palette[i].red];               palette[i].green = png_ptr->gamma_table[palette[i].green];               palette[i].blue = png_ptr->gamma_table[palette[i].blue];            }         }      }      else      {         int i;         for (i = 0; i < num_palette; i++)         {            if (palette[i].red == (png_byte)png_ptr->trans_values.gray)            {               palette[i] = back;            }            else            {               palette[i].red = png_ptr->gamma_table[palette[i].red];               palette[i].green = png_ptr->gamma_table[palette[i].green];               palette[i].blue = png_ptr->gamma_table[palette[i].blue];            }         }      }   }   else#endif#if defined(PNG_READ_GAMMA_SUPPORTED)   if (png_ptr->transformations & PNG_GAMMA)   {      int i;      for (i = 0; i < num_palette; i++)      {         palette[i].red = png_ptr->gamma_table[palette[i].red];         palette[i].green = png_ptr->gamma_table[palette[i].green];         palette[i].blue = png_ptr->gamma_table[palette[i].blue];      }   }#if defined(PNG_READ_BACKGROUND_SUPPORTED

⌨️ 快捷键说明

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