Exemplo n.º 1
0
static void blend_color_lighten(char *cp, char *cp1, char *cp2, int fac)
{
	/* See if are lighter, if so mix, else dont do anything.
	if the paint col is darker then the original, then ignore */
	if (cp1[0]+cp1[1]+cp1[2] > cp2[0]+cp2[1]+cp2[2]) {
		cp[0]= cp1[0];
		cp[1]= cp1[1];
		cp[2]= cp1[2];
	}
	else
		blend_color_mix(cp, cp1, cp2, fac);
}
Exemplo n.º 2
0
unsigned int IMB_blend_color(unsigned int src1, unsigned int src2, int fac, IMB_BlendMode mode)
{
    unsigned int dst;
    int temp;
    char *cp, *cp1, *cp2;

    if (fac==0)
        return src1;

    cp = (char*)&dst;
    cp1 = (char*)&src1;
    cp2 = (char*)&src2;

    switch (mode) {
    case IMB_BLEND_MIX:
        blend_color_mix(cp, cp1, cp2, fac);
        break;
    case IMB_BLEND_ADD:
        blend_color_add(cp, cp1, cp2, fac);
        break;
    case IMB_BLEND_SUB:
        blend_color_sub(cp, cp1, cp2, fac);
        break;
    case IMB_BLEND_MUL:
        blend_color_mul(cp, cp1, cp2, fac);
        break;
    case IMB_BLEND_LIGHTEN:
        blend_color_lighten(cp, cp1, cp2, fac);
        break;
    case IMB_BLEND_DARKEN:
        blend_color_darken(cp, cp1, cp2, fac);
        break;
    default:
        cp[0]= cp1[0];
        cp[1]= cp1[1];
        cp[2]= cp1[2];
    }

    if (mode == IMB_BLEND_ERASE_ALPHA) {
        temp= (cp1[3] - fac*cp2[3]/255);
        cp[3]= (temp < 0)? 0: temp;
    }
    else { /* this does ADD_ALPHA also */
        temp= (cp1[3] + fac*cp2[3]/255);
        cp[3]= (temp > 255)? 255: temp;
    }

    return dst;
}