C++ (Qt) result.r = 0.5 * (c1.r + c2.r); result.g = 0.5 * (c1.g + c2.g); result.b = 0.5 * (c1.b + c2.b); result.alpha = (c1.alpha + c2.alpha > 1.0) ? 1.0f : c1.alpha + c2.alpha;
C++ (Qt)ARGB c1, c2;...// теперь мне надо получить среднее значение// хорошо бы записать такARGB average = (c1 + c2) * 0.5f;
C++ (Qt)// просто суммируем компонентыinline ARGB operator + ( const ARGB & c1, const ARGB & c2 ){ return ARGB(c1.a + c2.a, c1.r + c2.r, c1.g + c2.g, c1.b + c2.b);} // умножаем альфу на t, RGB на t * alphainline ARGB operator * ( const ARGB & c, float t ){ float t2 = c.a * t; return ARGB(t2, c.r * t2, c.g * t2, c.b * t2);} // делим альфу на t, RGB на t * alphainline ARGB operator / ( const ARGB & c, float t ){ float t2 = MAX(c.a * t, 1.0e-4f); return ARGB(c.a / t, c.r / t2, c.g / t2, c.b / t2);}
C++ (Qt)ARGB result1 = (c1 + c2) / 2; // так ничего хорошего не получится ;-)ARGB result2 = (c1 * 0.5f + c2 * 0.5f) / 1.0f; // a так ?ARGB result3 = (c1 * 0.125f + c2 * 0.5f + с3 * 0.375f) / 1.0f; // или так ?
C++ (Qt)inline const ARGB operator+(const ARGB &c1, const ARGB &c2){ ARGB res; res.alpha = 0.5f * (c1.alpha + c2.alpha); res.r = 0.5f * (c1.r + c2.r); res.g = 0.5f * (c1.g + c2.g); res.b = 0.5f * (c1.b + c2.b); return res;}
C++ (Qt)inline const ARGB operator+(const ARGB &c1, const ARGB &c2){ ARGB res; float x = 0.5f * (1.0 - c1.alpha + c2.alpha); res.alpha = 0.5f * (c1.alpha + c2.alpha); res.r = c1.r * (1.0f - x) + x * c2.r; res.g = c1.g * (1.0f - x) + x * c2.g; res.b = c1.b * (1.0f - x) + x * c2.b; return res;}
C++ (Qt)inline const ARGB operator+(const ARGB &c1, const ARGB &c2){ ARGB res; float x = 0.5f * (1.0 - c1.alpha + c2.alpha); res.alpha = c1.alpha * (1.0f - x) + x * c2.alpha; // <--- вот здесь)) res.r = c1.r * (1.0f - x) + x * c2.r; res.g = c1.g * (1.0f - x) + x * c2.g; res.b = c1.b * (1.0f - x) + x * c2.b; return res;}