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

📄 pngdecode.c

📁 用于移动设备上的java虚拟机源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
      INIT_UNPACK(data->depth, shift, mask);      x0 = shift;      m0 = mask;      for (i = 0; i < data->width; ++i) {        UNPACK(dst, src, shift, mask, data->depth, x0, m0);      }    } else if ((data->colorType & 3) == 2) { /* color types: 2, 6 */      INIT_PACK3(data->depth, data->colorType & CT_ALPHA, shift, inc);      for (i = 0; i < data->width; ++i) {        PACK3(dst, src, shift, inc, data->colorType & CT_ALPHA);      }    } else { /* color types: 3, 4 (depth >= 8) */      INIT_PACK1(data->depth, data->colorType & CT_ALPHA, shift, inc);      for (i = 0; i < data->width; ++i) {        PACK1(dst, src, shift, inc, data->colorType & CT_ALPHA);      }    }}static voidunpack2(unsigned char *dst,        unsigned char *src0, unsigned char *src1,        pngData *data){    int i;    int shift0, inc0, x0;    int shift1, inc1;    unsigned char mask0, m0;    unsigned char mask1;    if (data->trans != NULL && data->colorType != 3) {      if (data->colorType == 2) {        INIT_TRANS_PACK_RGB(data->depth, shift0, inc0);        INIT_TRANS_PACK_RGB(data->depth, shift1, inc1);        for (i = 0; i < data->width; ++i) {          TRANS_PACK_RGB(dst, src0, shift0, inc0, data->trans);          if ((++i) < data->width) {          TRANS_PACK_RGB(dst, src1, shift1, inc1, data->trans);          }        }      }      else if (data->colorType == 0) {        if(data->depth < 8) {          INIT_TRANS_UNPACK_GS(data->depth, shift0, mask0);          INIT_TRANS_UNPACK_GS(data->depth, shift1, mask1);          x0 = shift0;          m0 = mask0;          for (i = 0; i < data->width; ++i) {            TRANS_UNPACK_GS(dst, src0, shift0, mask0,                             data->depth, x0, m0, data->trans);            if((++i) < data->width) {              TRANS_UNPACK_GS(dst, src1, shift1, mask1,                               data->depth, x0, m0, data->trans);            }          }        } else {          INIT_TRANS_PACK_GS(data->depth, shift0, inc0);          INIT_TRANS_PACK_GS(data->depth, shift1, inc1);          for (i = 0; i < data->width; ++i) {            TRANS_PACK_GS(dst, src0, shift0, inc0, data->trans);            if((++i) < data->width) {              TRANS_PACK_GS(dst, src1, shift1, inc1, data->trans);            }          }        }      }    } else if (data->depth < 8) {        INIT_UNPACK(data->depth, shift0, mask0);        INIT_UNPACK(data->depth, shift1, mask1);        x0 = shift0;        m0 = mask0;        for (i = 0; i < data->width; ++i) {            UNPACK(dst, src0, shift0, mask0, data->depth, x0, m0);            if ((++i) < data->width) {                UNPACK(dst, src1, shift1, mask1, data->depth, x0, m0);            }        }    } else if ((data->colorType & 3) == 2) {        INIT_PACK3(data->depth, data->colorType & CT_ALPHA, shift0, inc0);        INIT_PACK3(data->depth, data->colorType & CT_ALPHA, shift1, inc1);        for (i = 0; i < data->width; ++i) {            PACK3(dst, src0, shift0, inc0, data->colorType & CT_ALPHA);            if ((++i) < data->width) {                PACK3(dst, src1, shift1, inc1, data->colorType & CT_ALPHA);            }        }    } else {        INIT_PACK1(data->depth, data->colorType & CT_ALPHA, shift0, inc0);        INIT_PACK1(data->depth, data->colorType & CT_ALPHA, shift1, inc1);        for (i = 0; i < data->width; ++i) {            PACK1(dst, src0, shift0, inc0, data->colorType & CT_ALPHA);            if ((++i) < data->width) {                PACK1(dst, src1, shift1, inc1, data->colorType & CT_ALPHA);            }        }    }}static voidunpack3(unsigned char *dst,        unsigned char *src0, unsigned char *src1, unsigned char *src2,        pngData *data){    int i;    int shift0, inc0, x0;    int shift1, inc1;    int shift2, inc2;    unsigned char mask0, m0;    unsigned char mask1;    unsigned char mask2;    /* alternate 0 1 2 1 */    if (data->trans != NULL && data->colorType != 3) {      if (data->colorType == 2) {        INIT_TRANS_PACK_RGB(data->depth, shift0, inc0);        INIT_TRANS_PACK_RGB(data->depth, shift1, inc1);        INIT_TRANS_PACK_RGB(data->depth, shift2, inc2);        for (i = 0; i < data->width; ++i) {          TRANS_PACK_RGB(dst, src0, shift0, inc0, data->trans);          if ((++i) < data->width) {          TRANS_PACK_RGB(dst, src1, shift1, inc1, data->trans);          }          if ((++i) < data->width) {          TRANS_PACK_RGB(dst, src2, shift2, inc2, data->trans);          }          if ((++i) < data->width) {          TRANS_PACK_RGB(dst, src1, shift1, inc1, data->trans);          }        }      }      else if (data->colorType == 0) {        if(data->depth < 8) {          INIT_TRANS_UNPACK_GS(data->depth, shift0, mask0);          INIT_TRANS_UNPACK_GS(data->depth, shift1, mask1);          INIT_TRANS_UNPACK_GS(data->depth, shift2, mask2);          x0 = shift0;          m0 = mask0;          for (i = 0; i < data->width; ++i) {            TRANS_UNPACK_GS(dst, src0, shift0, mask0,                             data->depth, x0, m0, data->trans);            if((++i) < data->width) {              TRANS_UNPACK_GS(dst, src1, shift1, mask1,                               data->depth, x0, m0, data->trans);            }            if((++i) < data->width) {              TRANS_UNPACK_GS(dst, src2, shift2, mask2,                               data->depth, x0, m0, data->trans);            }            if((++i) < data->width) {              TRANS_UNPACK_GS(dst, src1, shift1, mask1,                               data->depth, x0, m0, data->trans);            }          }        } else {          INIT_TRANS_PACK_GS(data->depth, shift0, inc0);          INIT_TRANS_PACK_GS(data->depth, shift1, inc1);          INIT_TRANS_PACK_GS(data->depth, shift2, inc2);          for (i = 0; i < data->width; ++i) {            TRANS_PACK_GS(dst, src0, shift0, inc0, data->trans);            if((++i) < data->width) {              TRANS_PACK_GS(dst, src1, shift1, inc1, data->trans);            }            if((++i) < data->width) {              TRANS_PACK_GS(dst, src2, shift2, inc2, data->trans);            }            if((++i) < data->width) {              TRANS_PACK_GS(dst, src1, shift1, inc1, data->trans);            }          }        }      }    } else if (data->depth < 8) {        INIT_UNPACK(data->depth, shift0, mask0);        INIT_UNPACK(data->depth, shift1, mask1);        INIT_UNPACK(data->depth, shift2, mask2);        x0 = shift0;        m0 = mask0;        for (i = 0; i < data->width; ++i) {            UNPACK(dst, src0, shift0, mask0, data->depth, x0, m0);            if ((++i) < data->width) {                UNPACK(dst, src1, shift1, mask1, data->depth, x0, m0);            }            if ((++i) < data->width) {                UNPACK(dst, src2, shift2, mask2, data->depth, x0, m0);            }            if ((++i) < data->width) {                UNPACK(dst, src1, shift1, mask1, data->depth, x0, m0);            }        }    } else if ((data->colorType & 3) == 2) {        INIT_PACK3(data->depth, data->colorType & CT_ALPHA, shift0, inc0);        INIT_PACK3(data->depth, data->colorType & CT_ALPHA, shift1, inc1);        INIT_PACK3(data->depth, data->colorType & CT_ALPHA, shift2, inc2);        for (i = 0; i < data->width; ++i) {            PACK3(dst, src0, shift0, inc0, data->colorType & CT_ALPHA);            if ((++i) < data->width) {                PACK3(dst, src1, shift1, inc1, data->colorType & CT_ALPHA);            }            if ((++i) < data->width) {                PACK3(dst, src2, shift2, inc2, data->colorType & CT_ALPHA);            }            if ((++i) < data->width) {                PACK3(dst, src1, shift1, inc1, data->colorType & CT_ALPHA);            }        }    } else {        INIT_PACK1(data->depth, data->colorType & CT_ALPHA, shift0, inc0);        INIT_PACK1(data->depth, data->colorType & CT_ALPHA, shift1, inc1);        INIT_PACK1(data->depth, data->colorType & CT_ALPHA, shift2, inc2);        for (i = 0; i < data->width; ++i) {            PACK1(dst, src0, shift0, inc0, data->colorType & CT_ALPHA);            if ((++i) < data->width) {                PACK1(dst, src1, shift1, inc1, data->colorType & CT_ALPHA);            }            if ((++i) < data->width) {                PACK1(dst, src2, shift2, inc2, data->colorType & CT_ALPHA);            }            if ((++i) < data->width) {                PACK1(dst, src1, shift1, inc1, data->colorType & CT_ALPHA);            }        }    }}static voidunpack4(unsigned char *dst,        unsigned char *src0, unsigned char *src1,        unsigned char *src2, unsigned char *src3,        pngData *data){    int i;    int shift0, inc0, x0;    int shift1, inc1;    int shift2, inc2;    int shift3, inc3;    unsigned char mask0, m0;    unsigned char mask1;    unsigned char mask2;    unsigned char mask3;    /* alternate 0 1 2 1 3 1 2 1 */    if (data->trans != NULL && data->colorType != 3) {      if (data->colorType == 2) {        INIT_TRANS_PACK_RGB(data->depth, shift0, inc0);        INIT_TRANS_PACK_RGB(data->depth, shift1, inc1);        INIT_TRANS_PACK_RGB(data->depth, shift2, inc2);        INIT_TRANS_PACK_RGB(data->depth, shift3, inc3);        for (i = 0; i < data->width; ++i) {          TRANS_PACK_RGB(dst, src0, shift0, inc0, data->trans);          if ((++i) < data->width) {          TRANS_PACK_RGB(dst, src1, shift1, inc1, data->trans);          }          if ((++i) < data->width) {          TRANS_PACK_RGB(dst, src2, shift2, inc2, data->trans);          }          if ((++i) < data->width) {          TRANS_PACK_RGB(dst, src1, shift1, inc1, data->trans);          }          if ((++i) < data->width) {          TRANS_PACK_RGB(dst, src3, shift3, inc3, data->trans);          }          if ((++i) < data->width) {          TRANS_PACK_RGB(dst, src2, shift2, inc2, data->trans);          }          if ((++i) < data->width) {          TRANS_PACK_RGB(dst, src2, shift2, inc2, data->trans);          }        }      }      else if (data->colorType == 0) {        if(data->depth < 8) {          INIT_TRANS_UNPACK_GS(data->depth, shift0, mask0);          INIT_TRANS_UNPACK_GS(data->depth, shift1, mask1);          INIT_TRANS_UNPACK_GS(data->depth, shift2, mask2);          INIT_TRANS_UNPACK_GS(data->depth, shift3, mask3);          x0 = shift0;          m0 = mask0;          for (i = 0; i < data->width; ++i) {            TRANS_UNPACK_GS(dst, src0, shift0, mask0,                             data->depth, x0, m0, data->trans);            if((++i) < data->width) {              TRANS_UNPACK_GS(dst, src1, shift1, mask1,                               data->depth, x0, m0, data->trans);            }            if((++i) < data->width) {              TRANS_UNPACK_GS(dst, src2, shift2, mask2,                               data->depth, x0, m0, data->trans);            }            if((++i) < data->width) {              TRANS_UNPACK_GS(dst, src1, shift1, mask1,                               data->depth, x0, m0, data->trans);            }            if((++i) < data->width) {              TRANS_UNPACK_GS(dst, src3, shift3, mask3,                               data->depth, x0, m0, data->trans);            }            if((++i) < data->width) {              TRANS_UNPACK_GS(dst, src2, shift2, mask2,                               data->depth, x0, m0, data->trans);            }            if((++i) < data->width) {              TRANS_UNPACK_GS(dst, src1, shift1, mask1,                               data->depth, x0, m0, data->trans);            }          }        } else {          INIT_TRANS_PACK_GS(data->depth, shift0, inc0);          INIT_TRANS_PACK_GS(data->depth, shift1, inc1);          INIT_TRANS_PACK_GS(data->depth, shift2, inc2);          INIT_TRANS_PACK_GS(data->depth, shift3, inc3);          for (i = 0; i < data->width; ++i) {            TRANS_PACK_GS(dst, src0, shift0, inc0, data->trans);            if((++i) < data->width) {              TRANS_PACK_GS(dst, src1, shift1, inc1, data->trans);            }

⌨️ 快捷键说明

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