📄 pngdecode.c
字号:
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 + -