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

📄 pngwtran.c

📁 Linux下的基于X11的图形开发环境。
💻 C
📖 第 1 页 / 共 2 页
字号:
      {         png_bytep bp = row;         png_uint_32 i;         png_uint_32 istop = channels * row_info->width;         for (i = 0; i < istop; i++, bp++)         {            png_uint_16 v;            int j;            int c = (int)(i%channels);            v = *bp;            *bp = 0;            for (j = shift_start[c]; j > -shift_dec[c]; j -= shift_dec[c])            {               if (j > 0)                  *bp |= (png_byte)((v << j) & 0xff);               else                  *bp |= (png_byte)((v >> (-j)) & 0xff);            }         }      }      else      {         png_bytep bp;         png_uint_32 i;         png_uint_32 istop = channels * row_info->width;         for (bp = row, i = 0; i < istop; i++)         {            int c = (int)(i%channels);            png_uint_16 value, v;            int j;            v = (png_uint_16)(((png_uint_16)(*bp) << 8) + *(bp + 1));            value = 0;            for (j = shift_start[c]; j > -shift_dec[c]; j -= shift_dec[c])            {               if (j > 0)                  value |= (png_uint_16)((v << j) & (png_uint_16)0xffff);               else                  value |= (png_uint_16)((v >> (-j)) & (png_uint_16)0xffff);            }            *bp++ = (png_byte)(value >> 8);            *bp++ = (png_byte)(value & 0xff);         }      }   }}#endif#if defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED)void /* PRIVATE */png_do_write_swap_alpha(png_row_infop row_info, png_bytep row){   png_debug(1, "in png_do_write_swap_alpha\n");#if defined(PNG_USELESS_TESTS_SUPPORTED)   if (row != NULL && row_info != NULL)#endif   {      if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)      {         /* This converts from ARGB to RGBA */         if (row_info->bit_depth == 8)         {            png_bytep sp, dp;            png_uint_32 i;            png_uint_32 row_width = row_info->width;            for (i = 0, sp = dp = row; i < row_width; i++)            {               png_byte save = *(sp++);               *(dp++) = *(sp++);               *(dp++) = *(sp++);               *(dp++) = *(sp++);               *(dp++) = save;            }         }         /* This converts from AARRGGBB to RRGGBBAA */         else         {            png_bytep sp, dp;            png_uint_32 i;            png_uint_32 row_width = row_info->width;            for (i = 0, sp = dp = row; i < row_width; i++)            {               png_byte save[2];               save[0] = *(sp++);               save[1] = *(sp++);               *(dp++) = *(sp++);               *(dp++) = *(sp++);               *(dp++) = *(sp++);               *(dp++) = *(sp++);               *(dp++) = *(sp++);               *(dp++) = *(sp++);               *(dp++) = save[0];               *(dp++) = save[1];            }         }      }      else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)      {         /* This converts from AG to GA */         if (row_info->bit_depth == 8)         {            png_bytep sp, dp;            png_uint_32 i;            png_uint_32 row_width = row_info->width;            for (i = 0, sp = dp = row; i < row_width; i++)            {               png_byte save = *(sp++);               *(dp++) = *(sp++);               *(dp++) = save;            }         }         /* This converts from AAGG to GGAA */         else         {            png_bytep sp, dp;            png_uint_32 i;            png_uint_32 row_width = row_info->width;            for (i = 0, sp = dp = row; i < row_width; i++)            {               png_byte save[2];               save[0] = *(sp++);               save[1] = *(sp++);               *(dp++) = *(sp++);               *(dp++) = *(sp++);               *(dp++) = save[0];               *(dp++) = save[1];            }         }      }   }}#endif#if defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED)void /* PRIVATE */png_do_write_invert_alpha(png_row_infop row_info, png_bytep row){   png_debug(1, "in png_do_write_invert_alpha\n");#if defined(PNG_USELESS_TESTS_SUPPORTED)   if (row != NULL && row_info != NULL)#endif   {      if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)      {         /* This inverts the alpha channel in RGBA */         if (row_info->bit_depth == 8)         {            png_bytep sp, dp;            png_uint_32 i;            png_uint_32 row_width = row_info->width;            for (i = 0, sp = dp = row; i < row_width; i++)            {               *(dp++) = *(sp++);               *(dp++) = *(sp++);               *(dp++) = *(sp++);               *(dp++) = (png_byte)(255 - *(sp++));            }         }         /* This inverts the alpha channel in RRGGBBAA */         else         {            png_bytep sp, dp;            png_uint_32 i;            png_uint_32 row_width = row_info->width;            for (i = 0, sp = dp = row; i < row_width; i++)            {               *(dp++) = *(sp++);               *(dp++) = *(sp++);               *(dp++) = *(sp++);               *(dp++) = *(sp++);               *(dp++) = *(sp++);               *(dp++) = *(sp++);               *(dp++) = (png_byte)(255 - *(sp++));               *(dp++) = (png_byte)(255 - *(sp++));            }         }      }      else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)      {         /* This inverts the alpha channel in GA */         if (row_info->bit_depth == 8)         {            png_bytep sp, dp;            png_uint_32 i;            png_uint_32 row_width = row_info->width;            for (i = 0, sp = dp = row; i < row_width; i++)            {               *(dp++) = *(sp++);               *(dp++) = (png_byte)(255 - *(sp++));            }         }         /* This inverts the alpha channel in GGAA */         else         {            png_bytep sp, dp;            png_uint_32 i;            png_uint_32 row_width = row_info->width;            for (i = 0, sp = dp = row; i < row_width; i++)            {               *(dp++) = *(sp++);               *(dp++) = *(sp++);               *(dp++) = (png_byte)(255 - *(sp++));               *(dp++) = (png_byte)(255 - *(sp++));            }         }      }   }}#endif#if defined(PNG_MNG_FEATURES_SUPPORTED)/* undoes intrapixel differencing  */void /* PRIVATE */png_do_write_intrapixel(png_row_infop row_info, png_bytep row){   png_debug(1, "in png_do_write_intrapixel\n");   if (#if defined(PNG_USELESS_TESTS_SUPPORTED)       row != NULL && row_info != NULL &&#endif       (row_info->color_type & PNG_COLOR_MASK_COLOR))   {      int bytes_per_pixel;      png_uint_32 row_width = row_info->width;      if (row_info->bit_depth == 8)      {         png_bytep rp;         png_uint_32 i;         if (row_info->color_type == PNG_COLOR_TYPE_RGB)            bytes_per_pixel = 3;         else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)            bytes_per_pixel = 4;         else            return;         for (i = 0, rp = row; i < row_width; i++, rp += bytes_per_pixel)         {            *(rp)   = (png_byte)((*rp     - *(rp+1))&0xff);            *(rp+2) = (png_byte)((*(rp+2) - *(rp+1))&0xff);         }      }      else if (row_info->bit_depth == 16)      {         png_bytep rp;         png_uint_32 i;         if (row_info->color_type == PNG_COLOR_TYPE_RGB)            bytes_per_pixel = 6;         else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)            bytes_per_pixel = 8;         else            return;         for (i = 0, rp = row; i < row_width; i++, rp += bytes_per_pixel)         {            png_uint_32 s0=*(rp  )<<8 | *(rp+1);            png_uint_32 s1=*(rp+2)<<8 | *(rp+3);            png_uint_32 s2=*(rp+4)<<8 | *(rp+5);            png_uint_32 red=(s0-s1)&0xffff;            png_uint_32 blue=(s2-s1)&0xffff;            *(rp  ) = (png_byte)((red>>8)&0xff);            *(rp+1) = (png_byte)(red&0xff);            *(rp+4) = (png_byte)((blue>>8)&0xff);            *(rp+5) = (png_byte)(blue&0xff);         }      }   }}#endif /* PNG_MNG_FEATURES_SUPPORTED */#endif /* PNG_WRITE_SUPPORTED */

⌨️ 快捷键说明

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