1 | | |
2 | | |
3 | | |
4 | | |
5 | | |
6 | | |
7 | | |
8 | | |
9 | | |
10 | | |
11 | | |
12 | | |
13 | | |
14 | | |
15 | | |
16 | | |
17 | | |
18 | | |
19 | | |
20 | | |
21 | | |
22 | | |
23 | | |
24 | | |
25 | | |
26 | | |
27 | | |
28 | | |
29 | | |
30 | | |
31 | | |
32 | | |
33 | | |
34 | | |
35 | | |
36 | | |
37 | | |
38 | | |
39 | | |
40 | | |
41 | | |
42 | | |
43 | | |
44 | | |
45 | | |
46 | | |
47 | | |
48 | | |
49 | | |
50 | | |
51 | | |
52 | | |
53 | | |
54 | | |
55 | | |
56 | | |
57 | | |
58 | | |
59 | | |
60 | | |
61 | | |
62 | | |
63 | | |
64 | | |
65 | | |
66 | | |
| | | static void LM_FUNC(rgb_group *s,rgb_group *l,rgb_group *d, | rgb_group *sa,rgb_group *la,rgb_group *da, | int len,double alpha) | { | if (alpha==0.0) | { | MEMCPY(d,s,sizeof(rgb_group)*len); | MEMCPY(da,sa,sizeof(rgb_group)*len); | return; | } | else if (alpha==1.0) | { | if (!la) | while (len--) | { | d->r=L_TRUNC(L_OPER(COMBINE(s->r,sa->r),l->r)); | d->g=L_TRUNC(L_OPER(COMBINE(s->g,sa->g),l->g)); | d->b=L_TRUNC(L_OPER(COMBINE(s->b,sa->b),l->b)); | *da=white; | l++; s++; sa++; da++; d++; | } | else | while (len--) | { | d->r=L_TRUNC(L_OPER(COMBINE(s->r,sa->r),COMBINE(l->r,la->r))); | d->g=L_TRUNC(L_OPER(COMBINE(s->g,sa->g),COMBINE(l->g,la->g))); | d->b=L_TRUNC(L_OPER(COMBINE(s->b,sa->b),COMBINE(l->b,la->b))); | da->r=COMBINE_ALPHA_SUM(la->r,sa->r); | da->g=COMBINE_ALPHA_SUM(la->g,sa->g); | da->b=COMBINE_ALPHA_SUM(la->b,sa->b); | l++; s++; la++; sa++; da++; d++; | } | } | else | { | if (!la) | while (len--) | { | d->r=L_TRUNC(L_OPER(COMBINE(s->r,sa->r),COMBINE_A(l->r,alpha))); | d->g=L_TRUNC(L_OPER(COMBINE(s->g,sa->g),COMBINE_A(l->g,alpha))); | d->b=L_TRUNC(L_OPER(COMBINE(s->b,sa->b),COMBINE_A(l->b,alpha))); | da->r=COMBINE_ALPHA_SUM_V(COLORMAX,sa->r,alpha); | da->g=COMBINE_ALPHA_SUM_V(COLORMAX,sa->g,alpha); | da->b=COMBINE_ALPHA_SUM_V(COLORMAX,sa->b,alpha); | l++; s++; sa++; da++; d++; | } | else | while (len--) | { | d->r=L_TRUNC(L_OPER(COMBINE(s->r,sa->r), | COMBINE_V(l->r,la->r,alpha))); | d->g=L_TRUNC(L_OPER(COMBINE(s->g,sa->g), | COMBINE_V(l->g,la->g,alpha))); | d->b=L_TRUNC(L_OPER(COMBINE(s->g,sa->b), | COMBINE_V(l->b,la->b,alpha))); | da->r=COMBINE_ALPHA_SUM_V(la->r,sa->r,alpha); | da->g=COMBINE_ALPHA_SUM_V(la->g,sa->g,alpha); | da->b=COMBINE_ALPHA_SUM_V(la->b,sa->b,alpha); | l++; s++; la++; sa++; da++; d++; | } | } | } | | |
|