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

📄 tif_getimage.c

📁 奇趣公司比较新的qt/emd版本
💻 C
📖 第 1 页 / 共 5 页
字号:
	    bv = (*b++ * av) / 255;	    *cp++ = PACK4(rv,gv,bv,av);	}	SKEW4(r, g, b, a, fromskew);	cp += toskew;    }}/* * 16-bit unpacked samples => RGB */DECLARESepPutFunc(putRGBseparate16bittile){    uint16 *wr = (uint16*) r;    uint16 *wg = (uint16*) g;    uint16 *wb = (uint16*) b;    (void) img; (void) y; (void) a;    while (h-- > 0) {	for (x = 0; x < w; x++)	    *cp++ = PACKW(*wr++, *wg++, *wb++);	SKEW(wr, wg, wb, fromskew);	cp += toskew;    }}/* * 16-bit unpacked samples => RGBA w/ associated alpha */DECLARESepPutFunc(putRGBAAseparate16bittile){    uint16 *wr = (uint16*) r;    uint16 *wg = (uint16*) g;    uint16 *wb = (uint16*) b;    uint16 *wa = (uint16*) a;    (void) img; (void) y;    while (h-- > 0) {	for (x = 0; x < w; x++)	    *cp++ = PACKW4(*wr++, *wg++, *wb++, *wa++);	SKEW4(wr, wg, wb, wa, fromskew);	cp += toskew;    }}/* * 16-bit unpacked samples => RGBA w/ unassociated alpha */DECLARESepPutFunc(putRGBUAseparate16bittile){    uint16 *wr = (uint16*) r;    uint16 *wg = (uint16*) g;    uint16 *wb = (uint16*) b;    uint16 *wa = (uint16*) a;    (void) img; (void) y;    while (h-- > 0) {	uint32 r,g,b,a;	/*	 * We shift alpha down four bits just in case unsigned	 * arithmetic doesn't handle the full range.	 * We still have plenty of accuracy, since the output is 8 bits.	 * So we have (r * 0xffff) * (a * 0xfff)) = r*a * (0xffff*0xfff)	 * Since we want r*a * 0xff for eight bit output,	 * we divide by (0xffff * 0xfff) / 0xff == 0x10eff.	 */	for (x = w; x-- > 0;) {	    a = *wa++ >> 4; 	    r = (*wr++ * a) / 0x10eff;	    g = (*wg++ * a) / 0x10eff;	    b = (*wb++ * a) / 0x10eff;	    *cp++ = PACK4(r,g,b,a);	}	SKEW4(wr, wg, wb, wa, fromskew);	cp += toskew;    }}/* * 8-bit packed CIE L*a*b 1976 samples => RGB */DECLAREContigPutFunc(putcontig8bitCIELab){	float X, Y, Z;	uint32 r, g, b;	(void) y;	fromskew *= 3;	while (h-- > 0) {		for (x = w; x-- > 0;) {			TIFFCIELabToXYZ(img->cielab,					(unsigned char)pp[0],					(signed char)pp[1],					(signed char)pp[2],					&X, &Y, &Z);			TIFFXYZToRGB(img->cielab, X, Y, Z, &r, &g, &b);			*cp++ = PACK(r, g, b);			pp += 3;		}		cp += toskew;		pp += fromskew;	}}/* * YCbCr -> RGB conversion and packing routines. */#define	YCbCrtoRGB(dst, Y) {						\	uint32 r, g, b;							\	TIFFYCbCrtoRGB(img->ycbcr, (Y), Cb, Cr, &r, &g, &b);		\	dst = PACK(r, g, b);						\}/* * 8-bit packed YCbCr samples => RGB  * This function is generic for different sampling sizes,  * and can handle blocks sizes that aren't multiples of the * sampling size.  However, it is substantially less optimized * than the specific sampling cases.  It is used as a fallback * for difficult blocks. */#ifdef notdefstatic void putcontig8bitYCbCrGenericTile(     TIFFRGBAImage* img,     uint32* cp,     uint32 x, uint32 y,     uint32 w, uint32 h,     int32 fromskew, int32 toskew,     unsigned char* pp,    int h_group,     int v_group ){    uint32* cp1 = cp+w+toskew;    uint32* cp2 = cp1+w+toskew;    uint32* cp3 = cp2+w+toskew;    int32 incr = 3*w+4*toskew;    int32   Cb, Cr;    int     group_size = v_group * h_group + 2;    (void) y;    fromskew = (fromskew * group_size) / h_group;    for( yy = 0; yy < h; yy++ )    {        unsigned char *pp_line;        int     y_line_group = yy / v_group;        int     y_remainder = yy - y_line_group * v_group;        pp_line = pp + v_line_group *                 for( xx = 0; xx < w; xx++ )        {            Cb = pp        }    }    for (; h >= 4; h -= 4) {	x = w>>2;	do {	    Cb = pp[16];	    Cr = pp[17];	    YCbCrtoRGB(cp [0], pp[ 0]);	    YCbCrtoRGB(cp [1], pp[ 1]);	    YCbCrtoRGB(cp [2], pp[ 2]);	    YCbCrtoRGB(cp [3], pp[ 3]);	    YCbCrtoRGB(cp1[0], pp[ 4]);	    YCbCrtoRGB(cp1[1], pp[ 5]);	    YCbCrtoRGB(cp1[2], pp[ 6]);	    YCbCrtoRGB(cp1[3], pp[ 7]);	    YCbCrtoRGB(cp2[0], pp[ 8]);	    YCbCrtoRGB(cp2[1], pp[ 9]);	    YCbCrtoRGB(cp2[2], pp[10]);	    YCbCrtoRGB(cp2[3], pp[11]);	    YCbCrtoRGB(cp3[0], pp[12]);	    YCbCrtoRGB(cp3[1], pp[13]);	    YCbCrtoRGB(cp3[2], pp[14]);	    YCbCrtoRGB(cp3[3], pp[15]);	    cp += 4, cp1 += 4, cp2 += 4, cp3 += 4;	    pp += 18;	} while (--x);	cp += incr, cp1 += incr, cp2 += incr, cp3 += incr;	pp += fromskew;    }}#endif/* * 8-bit packed YCbCr samples w/ 4,4 subsampling => RGB */DECLAREContigPutFunc(putcontig8bitYCbCr44tile){    uint32* cp1 = cp+w+toskew;    uint32* cp2 = cp1+w+toskew;    uint32* cp3 = cp2+w+toskew;    int32 incr = 3*w+4*toskew;    (void) y;    /* adjust fromskew */    fromskew = (fromskew * 18) / 4;    if ((h & 3) == 0 && (w & 3) == 0) {				                for (; h >= 4; h -= 4) {            x = w>>2;            do {                int32 Cb = pp[16];                int32 Cr = pp[17];                YCbCrtoRGB(cp [0], pp[ 0]);                YCbCrtoRGB(cp [1], pp[ 1]);                YCbCrtoRGB(cp [2], pp[ 2]);                YCbCrtoRGB(cp [3], pp[ 3]);                YCbCrtoRGB(cp1[0], pp[ 4]);                YCbCrtoRGB(cp1[1], pp[ 5]);                YCbCrtoRGB(cp1[2], pp[ 6]);                YCbCrtoRGB(cp1[3], pp[ 7]);                YCbCrtoRGB(cp2[0], pp[ 8]);                YCbCrtoRGB(cp2[1], pp[ 9]);                YCbCrtoRGB(cp2[2], pp[10]);                YCbCrtoRGB(cp2[3], pp[11]);                YCbCrtoRGB(cp3[0], pp[12]);                YCbCrtoRGB(cp3[1], pp[13]);                YCbCrtoRGB(cp3[2], pp[14]);                YCbCrtoRGB(cp3[3], pp[15]);                cp += 4, cp1 += 4, cp2 += 4, cp3 += 4;                pp += 18;            } while (--x);            cp += incr, cp1 += incr, cp2 += incr, cp3 += incr;            pp += fromskew;        }    } else {        while (h > 0) {            for (x = w; x > 0;) {                int32 Cb = pp[16];                int32 Cr = pp[17];                switch (x) {                default:                    switch (h) {                    default: YCbCrtoRGB(cp3[3], pp[15]); /* FALLTHROUGH */                    case 3:  YCbCrtoRGB(cp2[3], pp[11]); /* FALLTHROUGH */                    case 2:  YCbCrtoRGB(cp1[3], pp[ 7]); /* FALLTHROUGH */                    case 1:  YCbCrtoRGB(cp [3], pp[ 3]); /* FALLTHROUGH */                    }                                    /* FALLTHROUGH */                case 3:                    switch (h) {                    default: YCbCrtoRGB(cp3[2], pp[14]); /* FALLTHROUGH */                    case 3:  YCbCrtoRGB(cp2[2], pp[10]); /* FALLTHROUGH */                    case 2:  YCbCrtoRGB(cp1[2], pp[ 6]); /* FALLTHROUGH */                    case 1:  YCbCrtoRGB(cp [2], pp[ 2]); /* FALLTHROUGH */                    }                                    /* FALLTHROUGH */                case 2:                    switch (h) {                    default: YCbCrtoRGB(cp3[1], pp[13]); /* FALLTHROUGH */                    case 3:  YCbCrtoRGB(cp2[1], pp[ 9]); /* FALLTHROUGH */                    case 2:  YCbCrtoRGB(cp1[1], pp[ 5]); /* FALLTHROUGH */                    case 1:  YCbCrtoRGB(cp [1], pp[ 1]); /* FALLTHROUGH */                    }                                    /* FALLTHROUGH */                case 1:                    switch (h) {                    default: YCbCrtoRGB(cp3[0], pp[12]); /* FALLTHROUGH */                    case 3:  YCbCrtoRGB(cp2[0], pp[ 8]); /* FALLTHROUGH */                    case 2:  YCbCrtoRGB(cp1[0], pp[ 4]); /* FALLTHROUGH */                    case 1:  YCbCrtoRGB(cp [0], pp[ 0]); /* FALLTHROUGH */                    }                                    /* FALLTHROUGH */                }                if (x < 4) {                    cp += x; cp1 += x; cp2 += x; cp3 += x;                    x = 0;                }                else {                    cp += 4; cp1 += 4; cp2 += 4; cp3 += 4;                    x -= 4;                }                pp += 18;            }            if (h <= 4)                break;            h -= 4;            cp += incr, cp1 += incr, cp2 += incr, cp3 += incr;            pp += fromskew;        }    }}/* * 8-bit packed YCbCr samples w/ 4,2 subsampling => RGB */DECLAREContigPutFunc(putcontig8bitYCbCr42tile){    uint32* cp1 = cp+w+toskew;    int32 incr = 2*toskew+w;    (void) y;    fromskew = (fromskew * 10) / 4;    if ((h & 3) == 0 && (w & 1) == 0) {        for (; h >= 2; h -= 2) {            x = w>>2;            do {                int32 Cb = pp[8];                int32 Cr = pp[9];                                YCbCrtoRGB(cp [0], pp[0]);                YCbCrtoRGB(cp [1], pp[1]);                YCbCrtoRGB(cp [2], pp[2]);                YCbCrtoRGB(cp [3], pp[3]);                YCbCrtoRGB(cp1[0], pp[4]);                YCbCrtoRGB(cp1[1], pp[5]);                YCbCrtoRGB(cp1[2], pp[6]);                YCbCrtoRGB(cp1[3], pp[7]);                                cp += 4, cp1 += 4;                pp += 10;            } while (--x);            cp += incr, cp1 += incr;            pp += fromskew;        }    } else {        while (h > 0) {            for (x = w; x > 0;) {                int32 Cb = pp[8];                int32 Cr = pp[9];                switch (x) {                default:                    switch (h) {                    default: YCbCrtoRGB(cp1[3], pp[ 7]); /* FALLTHROUGH */                    case 1:  YCbCrtoRGB(cp [3], pp[ 3]); /* FALLTHROUGH */                    }                                    /* FALLTHROUGH */                case 3:                    switch (h) {                    default: YCbCrtoRGB(cp1[2], pp[ 6]); /* FALLTHROUGH */                    case 1:  YCbCrtoRGB(cp [2], pp[ 2]); /* FALLTHROUGH */                    }                                    /* FALLTHROUGH */                case 2:                    switch (h) {                    default: YCbCrtoRGB(cp1[1], pp[ 5]); /* FALLTHROUGH */                    case 1:  YCbCrtoRGB(cp [1], pp[ 1]); /* FALLTHROUGH */                    }                                    /* FALLTHROUGH */                case 1:                    switch (h) {                    default: YCbCrtoRGB(cp1[0], pp[ 4]); /* FALLTHROUGH */                    case 1:  YCbCrtoRGB(cp [0], pp[ 0]); /* FALLTHROUGH */                    }                                    /* FALLTHROUGH */                }                if (x < 4) {                    cp += x; cp1 += x;                    x = 0;                }                else {                    cp += 4; cp1 += 4;                    x -= 4;                }                pp += 10;            }            if (h <= 2)                break;            h -= 2;            cp += incr, cp1 += incr;            pp += fromskew;        }    }}/* * 8-bit packed YCbCr samples w/ 4,1 subsampling => RGB */DECLAREContigPutFunc(putcontig8bitYCbCr41tile){    (void) y;    /* XXX adjust fromskew */    do {	x = w>>2;	do {	    int32 Cb = pp[4];	    int32 Cr = pp[5];	    YCbCrtoRGB(cp [0], pp[0]);	    YCbCrtoRGB(cp [1], pp[1]);	    YCbCrtoRGB(cp [2], pp[2]);	    YCbCrtoRGB(cp [3], pp[3]);	    cp += 4;	    pp += 6;	} while (--x);        if( (w&3) != 0 )        {	    int32 Cb = pp[4];	    int32 Cr = pp[5];            switch( (w&3) ) {              case 3: YCbCrtoRGB(cp [2], pp[2]);              case 2: YCbCrtoRGB(cp [1], pp[1]);              case 1: YCbCrtoRGB(cp [0], pp[0]);              case 0: break;            }            cp += (w&3);            pp += 6;        }	cp += toskew;	pp += fromskew;    } while (--h);}/* * 8-bit packed YCbCr samples w/ 2,2 subsampling => RGB */DECLAREContigPutFunc(putcontig8bitYCbCr22tile){    uint32* cp1 = cp+w+toskew;    int32 incr = 2*toskew+w;    (void) y;    fromskew = (fromskew * 6) / 2;    if ((h & 1) == 0 && (w & 1) == 0) {        for (; h >= 2; h -= 2) {            x = w>>1;            do {                int32 Cb = pp[4];                int32 Cr = pp[5];                YCbCrtoRGB(cp [0], pp[0]);                YCbCrtoRGB(cp [1], pp[1]);                YCbCrtoRGB(cp1[0], pp[2]);                YCbCrtoRGB(cp1[1], pp[3]);                cp += 2, cp1 += 2;                pp += 6;            } while (--x);            cp += incr, cp1 += incr;            pp += fromskew;        }    } else {        while (h > 0) {            for (x = w; x > 0;) {                int32 Cb = pp[4];                int32 Cr = pp[5];                switch (x) {                default:                    switch (h) {                    default: YCbCrtoRGB(cp1[1], pp[ 3]); /* FALLTHROUGH */                    case 1:  YCbCrtoRGB(cp [1], pp[ 1]); /* FALLTHROUGH */                    }                                    /* FALLTHROUGH */                case 1:                    switch (h) {                    default: YCbCrtoRGB(cp1[0], pp[ 2]); /* FALLTHROUGH */                    case 1:  YCbCrtoRGB(cp [0], pp[ 0]); /* FALLTHROUGH */                    }                                    /* FALLTHROUGH */                }                if (x < 2) {                    cp += x; cp1 += x;                    x = 0;                }                else {                    cp += 2; cp1 += 2;                    x -= 2;                }                pp += 6;            }            if (h <= 2)                break;            h -= 2;            cp += incr, cp1 += incr;            pp += fromskew;        }    }}/* * 8-bit packed YCbCr samples w/ 2,1 subsampling => RGB */DECLAREContigPutFunc(putcontig8bitYCbCr21tile){    (void) y;    fromskew = (fromskew * 4) / 2;    do {	x = w>>1;	do {	    int32 Cb = pp[2];	    int32 Cr = pp[3];	    YCbCrtoRGB(cp[0], pp[0]); 	    YCbCrtoRGB(cp[1], pp[1]);	    cp += 2;	    pp += 4;	} while (--x);        if( (w&1) != 0 )

⌨️ 快捷键说明

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