コード例 #1
0
/* An implementation of the Scale3X edge-extrapolation algorithm.
 *
 * Code from GIMP plugin, based on code from Adam D. Moss ([email protected])
 * licensed by the MIT license.
 */
static int extrapolate9(float *E0, float *E1, float *E2,
                        float *E3, float *E4, float *E5,
                        float *E6, float *E7, float *E8,
                        const float *A, const float *B, const float *C,
                        const float *D, const float *E, const float *F,
                        const float *G, const float *H, const float *I)
{
#define PEQ(X, Y) (fabsf(*X - *Y) < 1e-3f)
#define PCPY(DST, SRC) do { *DST = *SRC; } while (0)
	if ((!PEQ(B, H)) && (!PEQ(D, F))) {
		if (PEQ(D, B)) PCPY(E0, D); else PCPY(E0, E);
		if ((PEQ(D, B) && !PEQ(E, C)) || (PEQ(B, F) && !PEQ(E, A)))
			PCPY(E1, B); else PCPY(E1, E);
		if (PEQ(B, F)) PCPY(E2, F); else PCPY(E2, E);
		if ((PEQ(D, B) && !PEQ(E, G)) || (PEQ(D, H) && !PEQ(E, A)))
			PCPY(E3, D); else PCPY(E3, E);
		PCPY(E4, E);
		if ((PEQ(B, F) && !PEQ(E, I)) || (PEQ(H, F) && !PEQ(E, C)))
			PCPY(E5, F); else PCPY(E5, E);
		if (PEQ(D, H)) PCPY(E6, D); else PCPY(E6, E);
		if ((PEQ(D, H) && !PEQ(E, I)) || (PEQ(H, F) && !PEQ(E, G)))
			PCPY(E7, H); else PCPY(E7, E);
		if (PEQ(H, F)) PCPY(E8, F); else PCPY(E8, E);
		return 1;
	}
	else {
		return 0;
	}
#undef PEQ
#undef PCPY
}
コード例 #2
0
ファイル: antialias.c プロジェクト: GNOME/gegl
static int
extrapolate9 (const int components,
              gfloat *E0, gfloat *E1, gfloat *E2,
              gfloat *E3, gfloat *E4, gfloat *E5,
              gfloat *E6, gfloat *E7, gfloat *E8,
              gfloat *A,  gfloat *B,  gfloat *C,
              gfloat *D,  gfloat *E,  gfloat *F,
              gfloat *G,  gfloat *H,  gfloat *I)
{
#define PEQ(X,Y)      (0 == memcmp ((X), (Y), components * sizeof(gfloat)))
#define PCPY(DST,SRC) memcpy ((DST), (SRC), components * sizeof(gfloat))

    /* an implementation of the Scale3X edge-extrapolation algorithm */
    if ( (!PEQ(B,H)) && (!PEQ(D,F)) )
    {
        if (PEQ(D,B)) PCPY(E0,D);
        else PCPY(E0,E);
        if ((PEQ(D,B) && !PEQ(E,C)) || (PEQ(B,F) && !PEQ(E,A)))
            PCPY(E1,B);
        else PCPY(E1,E);
        if (PEQ(B,F)) PCPY(E2,F);
        else PCPY(E2,E);
        if ((PEQ(D,B) && !PEQ(E,G)) || (PEQ(D,H) && !PEQ(E,A)))
            PCPY(E3,D);
        else PCPY(E3,E);
        PCPY(E4,E);
        if ((PEQ(B,F) && !PEQ(E,I)) || (PEQ(H,F) && !PEQ(E,C)))
            PCPY(E5,F);
        else PCPY(E5,E);
        if (PEQ(D,H)) PCPY(E6,D);
        else PCPY(E6,E);
        if ((PEQ(D,H) && !PEQ(E,I)) || (PEQ(H,F) && !PEQ(E,G)))
            PCPY(E7,H);
        else PCPY(E7,E);
        if (PEQ(H,F)) PCPY(E8,F);
        else PCPY(E8,E);
        return 1;
    }
    else
    {
        return 0;
    }

#undef PEQ
#undef PCPY
}