pngtrans.c

来自「a 3d car ....with color texture..」· C语言 代码 · 共 555 行 · 第 1/2 页

C
555
字号
   0x0C, 0x1C, 0x2C, 0x3C, 0x4C, 0x5C, 0x6C, 0x7C,   0x8C, 0x9C, 0xAC, 0xBC, 0xCC, 0xDC, 0xEC, 0xFC,   0x0D, 0x1D, 0x2D, 0x3D, 0x4D, 0x5D, 0x6D, 0x7D,   0x8D, 0x9D, 0xAD, 0xBD, 0xCD, 0xDD, 0xED, 0xFD,   0x0E, 0x1E, 0x2E, 0x3E, 0x4E, 0x5E, 0x6E, 0x7E,   0x8E, 0x9E, 0xAE, 0xBE, 0xCE, 0xDE, 0xEE, 0xFE,   0x0F, 0x1F, 0x2F, 0x3F, 0x4F, 0x5F, 0x6F, 0x7F,   0x8F, 0x9F, 0xAF, 0xBF, 0xCF, 0xDF, 0xEF, 0xFF};/* swaps pixel packing order within bytes */voidpng_do_packswap(png_row_infop row_info, png_bytep row){   png_debug(1, "in png_do_packswap\n");   if (#if defined(PNG_USELESS_TESTS_SUPPORTED)       row != NULL && row_info != NULL &&#endif       row_info->bit_depth < 8)   {      png_bytep rp, end, table;      end = row + row_info->rowbytes;      if (row_info->bit_depth == 1)         table = onebppswaptable;      else if (row_info->bit_depth == 2)         table = twobppswaptable;      else if (row_info->bit_depth == 4)         table = fourbppswaptable;      else         return;      for (rp = row; rp < end; rp++)         *rp = table[*rp];   }}#endif /* PNG_READ_PACKSWAP_SUPPORTED or PNG_WRITE_PACKSWAP_SUPPORTED */#if defined(PNG_WRITE_FILLER_SUPPORTED) || \    defined(PNG_READ_STRIP_ALPHA_SUPPORTED)/* remove filler or alpha byte(s) */voidpng_do_strip_filler(png_row_infop row_info, png_bytep row, png_uint_32 flags){   png_debug(1, "in png_do_strip_filler\n");#if defined(PNG_USELESS_TESTS_SUPPORTED)   if (row != NULL && row_info != NULL)#endif   {/*      if (row_info->color_type == PNG_COLOR_TYPE_RGB ||          row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)*/      png_bytep sp=row;      png_bytep dp=row;      png_uint_32 row_width=row_info->width;      png_uint_32 i;      if (row_info->channels == 4)      {         if (row_info->bit_depth == 8)         {            /* This converts from RGBX or RGBA to RGB */            if (flags & PNG_FLAG_FILLER_AFTER)            {               dp+=3; sp+=4;               for (i = 1; i < row_width; i++)               {                  *dp++ = *sp++;                  *dp++ = *sp++;                  *dp++ = *sp++;                  sp++;               }            }            /* This converts from XRGB or ARGB to RGB */            else            {               for (i = 0; i < row_width; i++)               {                  sp++;                  *dp++ = *sp++;                  *dp++ = *sp++;                  *dp++ = *sp++;               }            }            row_info->pixel_depth = 24;            row_info->rowbytes = row_width * 3;         }         else /* if (row_info->bit_depth == 16) */         {            if (flags & PNG_FLAG_FILLER_AFTER)            {               /* This converts from RRGGBBXX or RRGGBBAA to RRGGBB */               sp += 8; dp += 6;               for (i = 1; i < row_width; i++)               {                  /* This could be (although memcpy is probably slower):                  png_memcpy(dp, sp, 6);                  sp += 8;                  dp += 6;                  */                  *dp++ = *sp++;                  *dp++ = *sp++;                  *dp++ = *sp++;                  *dp++ = *sp++;                  *dp++ = *sp++;                  *dp++ = *sp++;                  sp += 2;               }            }            else            {               /* This converts from XXRRGGBB or AARRGGBB to RRGGBB */               for (i = 0; i < row_width; i++)               {                  /* This could be (although memcpy is probably slower):                  png_memcpy(dp, sp, 6);                  sp += 8;                  dp += 6;                  */                  sp+=2;                  *dp++ = *sp++;                  *dp++ = *sp++;                  *dp++ = *sp++;                  *dp++ = *sp++;                  *dp++ = *sp++;                  *dp++ = *sp++;               }            }            row_info->pixel_depth = 48;            row_info->rowbytes = row_width * 6;         }         row_info->channels = 3;         row_info->color_type &= ~PNG_COLOR_MASK_ALPHA;      }/*      else if (row_info->color_type == PNG_COLOR_TYPE_GRAY ||               row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)*/      else if (row_info->channels == 2)      {         if (row_info->bit_depth == 8)         {            /* This converts from GX or GA to G */            if (flags & PNG_FLAG_FILLER_AFTER)            {               for (i = 0; i < row_width; i++)               {                  *dp++ = *sp++;                  sp++;               }            }            /* This converts from XG or AG to G */            else            {               for (i = 0; i < row_width; i++)               {                  sp++;                  *dp++ = *sp++;               }            }            row_info->pixel_depth = 8;            row_info->rowbytes = row_width;         }         else /* if (row_info->bit_depth == 16) */         {            if (flags & PNG_FLAG_FILLER_AFTER)            {               /* This converts from GGXX or GGAA to GG */               sp += 4; dp += 2;               for (i = 1; i < row_width; i++)               {                  *dp++ = *sp++;                  *dp++ = *sp++;                  sp += 2;               }            }            else            {               /* This converts from XXGG or AAGG to GG */               for (i = 0; i < row_width; i++)               {                  sp += 2;                  *dp++ = *sp++;                  *dp++ = *sp++;               }            }            row_info->pixel_depth = 16;            row_info->rowbytes = row_width * 2;         }         row_info->channels = 1;         row_info->color_type &= ~PNG_COLOR_MASK_ALPHA;      }   }}#endif#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED)/* swaps red and blue bytes within a pixel */voidpng_do_bgr(png_row_infop row_info, png_bytep row){   png_debug(1, "in png_do_bgr\n");   if (#if defined(PNG_USELESS_TESTS_SUPPORTED)       row != NULL && row_info != NULL &&#endif       (row_info->color_type & PNG_COLOR_MASK_COLOR))   {      png_uint_32 row_width = row_info->width;      if (row_info->bit_depth == 8)      {         if (row_info->color_type == PNG_COLOR_TYPE_RGB)         {            png_bytep rp;            png_uint_32 i;            for (i = 0, rp = row; i < row_width; i++, rp += 3)            {               png_byte save = *rp;               *rp = *(rp + 2);               *(rp + 2) = save;            }         }         else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)         {            png_bytep rp;            png_uint_32 i;            for (i = 0, rp = row; i < row_width; i++, rp += 4)            {               png_byte save = *rp;               *rp = *(rp + 2);               *(rp + 2) = save;            }         }      }      else if (row_info->bit_depth == 16)      {         if (row_info->color_type == PNG_COLOR_TYPE_RGB)         {            png_bytep rp;            png_uint_32 i;            for (i = 0, rp = row; i < row_width; i++, rp += 6)            {               png_byte save = *rp;               *rp = *(rp + 4);               *(rp + 4) = save;               save = *(rp + 1);               *(rp + 1) = *(rp + 5);               *(rp + 5) = save;            }         }         else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)         {            png_bytep rp;            png_uint_32 i;            for (i = 0, rp = row; i < row_width; i++, rp += 8)            {               png_byte save = *rp;               *rp = *(rp + 4);               *(rp + 4) = save;               save = *(rp + 1);               *(rp + 1) = *(rp + 5);               *(rp + 5) = save;            }         }      }   }}#endif /* PNG_READ_BGR_SUPPORTED or PNG_WRITE_BGR_SUPPORTED */

⌨️ 快捷键说明

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