static inline void fz_paint_affine_color_N_near(byte *dp, byte *sp, int sw, int sh, int u, int v, int fa, int fb, int w, int n, byte *color, byte *hp) { int n1 = n-1; int sa = color[n1]; int k; while (w--) { int ui = u >> 16; int vi = v >> 16; if (ui >= 0 && ui < sw && vi >= 0 && vi < sh) { int ma = sp[vi * sw + ui]; int masa = FZ_COMBINE(FZ_EXPAND(ma), sa); for (k = 0; k < n1; k++) dp[k] = FZ_BLEND(color[k], dp[k], masa); dp[n1] = FZ_BLEND(255, dp[n1], masa); if (hp) hp[0] = FZ_BLEND(255, hp[0], masa); } dp += n; if (hp) hp++; u += fa; v += fb; } }
static inline void fz_paint_affine_color_N_lerp(byte *dp, byte *sp, int sw, int sh, int u, int v, int fa, int fb, int w, int n, byte *color, byte *hp) { int n1 = n - 1; int sa = color[n1]; int k; while (w--) { int ui = u >> 16; int vi = v >> 16; if (ui >= 0 && ui < sw && vi >= 0 && vi < sh) { int uf = u & 0xffff; int vf = v & 0xffff; byte *a = sample_nearest(sp, sw, sh, 1, ui, vi); byte *b = sample_nearest(sp, sw, sh, 1, ui+1, vi); byte *c = sample_nearest(sp, sw, sh, 1, ui, vi+1); byte *d = sample_nearest(sp, sw, sh, 1, ui+1, vi+1); int ma = bilerp(a[0], b[0], c[0], d[0], uf, vf); int masa = FZ_COMBINE(FZ_EXPAND(ma), sa); for (k = 0; k < n1; k++) dp[k] = FZ_BLEND(color[k], dp[k], masa); dp[n1] = FZ_BLEND(255, dp[n1], masa); if (hp) hp[0] = FZ_BLEND(255, hp[0], masa); } dp += n; if (hp) hp++; u += fa; v += fb; } }
= (Cx-Cz)*(1-ax.ay) + Cz (a single MLA operation) ar = 1 Sadly, this is not true in the general case, so we abandon this effort and stick to using the premultiplied form. */ typedef unsigned char byte; /* These are used by the non-aa scan converter */ static inline void template_solid_color_1_da(byte * restrict dp, int n, int w, const byte * restrict color, int da) { int sa = FZ_EXPAND(color[1]); TRACK_FN(); if (sa == 0) return; if (sa == 256) { do { dp[0] = color[0]; dp[1] = 255; dp += 2; } while (--w); } else {
= (Cx-Cz)*(1-ax.ay) + Cz (a single MLA operation) ar = 1 Sadly, this is not true in the general case, so we abandon this effort and stick to using the premultiplied form. */ typedef unsigned char byte; /* These are used by the non-aa scan converter */ void fz_paint_solid_alpha(byte * restrict dp, int w, int alpha) { int t = FZ_EXPAND(255 - alpha); while (w--) { *dp = alpha + FZ_COMBINE(*dp, t); dp ++; } } static inline void fz_paint_solid_color_2(byte * restrict dp, int w, byte *color) { int sa = FZ_EXPAND(color[1]); if (sa == 0) return; if (sa == 256) {