⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qdrawhelper.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
📖 第 1 页 / 共 5 页
字号:
        comp_func_Screen_impl(dest, src, length, FullCoverage());    else        comp_func_Screen_impl(dest, src, length, PartialCoverage(const_alpha));}/*    if 2.Dca < Da        Dca' = 2.Sca.Dca + Sca.(1 - Da) + Dca.(1 - Sa)    otherwise        Dca' = Sa.Da - 2.(Da - Dca).(Sa - Sca) + Sca.(1 - Da) + Dca.(1 - Sa)*/static inline int overlay_op(int dst, int src, int da, int sa){    const int temp = src * (255 - da) + dst * (255 - sa);    if (2 * dst < da)        return (2 * src * dst + temp) >> 8;    else        return (sa * da - 2 * (da - dst) * (sa - src) + temp) >> 8;}template <typename T>static inline void comp_func_solid_Overlay_impl(uint *dest, int length, uint color, const T &coverage){    int sa = qAlpha(color);    int sr = qRed(color);    int sg = qGreen(color);    int sb = qBlue(color);    for (int i = 0; i < length; ++i) {        uint d = dest[i];        int da = qAlpha(d);#define OP(a, b) overlay_op(a, b, da, sa)        int r = OP(  qRed(d), sr);        int b = OP( qBlue(d), sb);        int g = OP(qGreen(d), sg);        int a = mix_alpha(da, sa);#undef OP        coverage.store(&dest[i], qRgba(r, g, b, a));    }}void QT_FASTCALL comp_func_solid_Overlay(uint *dest, int length, uint color, uint const_alpha){    if (const_alpha == 255)        comp_func_solid_Overlay_impl(dest, length, color, FullCoverage());    else        comp_func_solid_Overlay_impl(dest, length, color, PartialCoverage(const_alpha));}template <typename T>static inline void comp_func_Overlay_impl(uint *dest, const uint *src, int length, const T &coverage){    for (int i = 0; i < length; ++i) {        uint d = dest[i];        uint s = src[i];        int da = qAlpha(d);        int sa = qAlpha(s);#define OP(a, b) overlay_op(a, b, da, sa)        int r = OP(  qRed(d),   qRed(s));        int b = OP( qBlue(d),  qBlue(s));        int g = OP(qGreen(d), qGreen(s));        int a = mix_alpha(da, sa);#undef OP        coverage.store(&dest[i], qRgba(r, g, b, a));    }}void QT_FASTCALL comp_func_Overlay(uint *dest, const uint *src, int length, uint const_alpha){    if (const_alpha == 255)        comp_func_Overlay_impl(dest, src, length, FullCoverage());    else        comp_func_Overlay_impl(dest, src, length, PartialCoverage(const_alpha));}/*    Dca' = min(Sca.Da, Dca.Sa) + Sca.(1 - Da) + Dca.(1 - Sa)    Da'  = Sa + Da - Sa.Da*/static inline int darken_op(int dst, int src, int da, int sa){    return (qMin(src * da, dst * sa) + src * (255 - da) + dst * (255 - sa)) >> 8;}template <typename T>static inline void comp_func_solid_Darken_impl(uint *dest, int length, uint color, const T &coverage){    int sa = qAlpha(color);    int sr = qRed(color);    int sg = qGreen(color);    int sb = qBlue(color);    for (int i = 0; i < length; ++i) {        uint d = dest[i];        int da = qAlpha(d);#define OP(a, b) darken_op(a, b, da, sa)        int r =  OP(  qRed(d), sr);        int b =  OP( qBlue(d), sb);        int g =  OP(qGreen(d), sg);        int a = mix_alpha(da, sa);#undef OP        coverage.store(&dest[i], qRgba(r, g, b, a));    }}void QT_FASTCALL comp_func_solid_Darken(uint *dest, int length, uint color, uint const_alpha){    if (const_alpha == 255)        comp_func_solid_Darken_impl(dest, length, color, FullCoverage());    else        comp_func_solid_Darken_impl(dest, length, color, PartialCoverage(const_alpha));}template <typename T>static inline void comp_func_Darken_impl(uint *dest, const uint *src, int length, const T &coverage){    for (int i = 0; i < length; ++i) {        uint d = dest[i];        uint s = src[i];        int da = qAlpha(d);        int sa = qAlpha(s);#define OP(a, b) darken_op(a, b, da, sa)        int r = OP(  qRed(d),   qRed(s));        int b = OP( qBlue(d),  qBlue(s));        int g = OP(qGreen(d), qGreen(s));        int a = mix_alpha(da, sa);#undef OP        coverage.store(&dest[i], qRgba(r, g, b, a));    }}void QT_FASTCALL comp_func_Darken(uint *dest, const uint *src, int length, uint const_alpha){    if (const_alpha == 255)        comp_func_Darken_impl(dest, src, length, FullCoverage());    else        comp_func_Darken_impl(dest, src, length, PartialCoverage(const_alpha));}/*   Dca' = max(Sca.Da, Dca.Sa) + Sca.(1 - Da) + Dca.(1 - Sa)   Da'  = Sa + Da - Sa.Da*/static inline int lighten_op(int dst, int src, int da, int sa){    return (qMax(src * da, dst * sa) + src * (255 - da) + dst * (255 - sa)) >> 8;}template <typename T>static inline void comp_func_solid_Lighten_impl(uint *dest, int length, uint color, const T &coverage){    int sa = qAlpha(color);    int sr = qRed(color);    int sg = qGreen(color);    int sb = qBlue(color);    for (int i = 0; i < length; ++i) {        uint d = dest[i];        int da = qAlpha(d);#define OP(a, b) lighten_op(a, b, da, sa)        int r =  OP(  qRed(d), sr);        int b =  OP( qBlue(d), sb);        int g =  OP(qGreen(d), sg);        int a = mix_alpha(da, sa);#undef OP        coverage.store(&dest[i], qRgba(r, g, b, a));    }}void QT_FASTCALL comp_func_solid_Lighten(uint *dest, int length, uint color, uint const_alpha){    if (const_alpha == 255)        comp_func_solid_Lighten_impl(dest, length, color, FullCoverage());    else        comp_func_solid_Lighten_impl(dest, length, color, PartialCoverage(const_alpha));}template <typename T>static inline void comp_func_Lighten_impl(uint *dest, const uint *src, int length, const T &coverage){    for (int i = 0; i < length; ++i) {        uint d = dest[i];        uint s = src[i];        int da = qAlpha(d);        int sa = qAlpha(s);#define OP(a, b) lighten_op(a, b, da, sa)        int r = OP(  qRed(d),   qRed(s));        int b = OP( qBlue(d),  qBlue(s));        int g = OP(qGreen(d), qGreen(s));        int a = mix_alpha(da, sa);#undef OP        coverage.store(&dest[i], qRgba(r, g, b, a));    }}void QT_FASTCALL comp_func_Lighten(uint *dest, const uint *src, int length, uint const_alpha){    if (const_alpha == 255)        comp_func_Lighten_impl(dest, src, length, FullCoverage());    else        comp_func_Lighten_impl(dest, src, length, PartialCoverage(const_alpha));}/*   if Sca.Da + Dca.Sa >= Sa.Da       Dca' = Sa.Da + Sca.(1 - Da) + Dca.(1 - Sa)   otherwise       Dca' = Dca.Sa/(1-Sca/Sa) + Sca.(1 - Da) + Dca.(1 - Sa)*/static inline int color_dodge_op(int dst, int src, int da, int sa){    const int sa_da = sa * da;    const int dst_sa = dst * sa;    const int src_da = src * da;    const int temp = src * (255 - da) + dst * (255 - sa);    if (src_da + dst_sa >= sa_da)        return (sa_da + temp) >> 8;    else        return (255 * dst_sa / (255 - 255 * src / sa) + temp) >> 8;}template <typename T>static inline void comp_func_solid_ColorDodge_impl(uint *dest, int length, uint color, const T &coverage){    int sa = qAlpha(color);    int sr = qRed(color);    int sg = qGreen(color);    int sb = qBlue(color);    for (int i = 0; i < length; ++i) {        uint d = dest[i];        int da = qAlpha(d);#define OP(a,b) color_dodge_op(a, b, da, sa)        int r = OP(  qRed(d), sr);        int b = OP( qBlue(d), sb);        int g = OP(qGreen(d), sg);        int a = mix_alpha(da, sa);#undef OP        coverage.store(&dest[i], qRgba(r, g, b, a));    }}void QT_FASTCALL comp_func_solid_ColorDodge(uint *dest, int length, uint color, uint const_alpha){    if (const_alpha == 255)        comp_func_solid_ColorDodge_impl(dest, length, color, FullCoverage());    else        comp_func_solid_ColorDodge_impl(dest, length, color, PartialCoverage(const_alpha));}template <typename T>static inline void comp_func_ColorDodge_impl(uint *dest, const uint *src, int length, const T &coverage){    for (int i = 0; i < length; ++i) {        uint d = dest[i];        uint s = src[i];        int da = qAlpha(d);        int sa = qAlpha(s);#define OP(a, b) color_dodge_op(a, b, da, sa)        int r = OP(  qRed(d),   qRed(s));        int b = OP( qBlue(d),  qBlue(s));        int g = OP(qGreen(d), qGreen(s));        int a = mix_alpha(da, sa);#undef OP        coverage.store(&dest[i], qRgba(r, g, b, a));    }}void QT_FASTCALL comp_func_ColorDodge(uint *dest, const uint *src, int length, uint const_alpha){    if (const_alpha == 255)        comp_func_ColorDodge_impl(dest, src, length, FullCoverage());    else        comp_func_ColorDodge_impl(dest, src, length, PartialCoverage(const_alpha));}/*   if Sca.Da + Dca.Sa <= Sa.Da       Dca' = Sca.(1 - Da) + Dca.(1 - Sa)   otherwise       Dca' = Sa.(Sca.Da + Dca.Sa - Sa.Da)/Sca + Sca.(1 - Da) + Dca.(1 - Sa)*/static inline int color_burn_op(int dst, int src, int da, int sa){    const int src_da = src * da;    const int dst_sa = dst * sa;    const int sa_da = sa * da;    const int temp = src * (255 - da) + dst * (255 - sa);    if (src == 0 || src_da + dst_sa <= sa_da)        return temp >> 8;    else        return (sa * (src_da + dst_sa - sa_da) / src + temp) >> 8;}template <typename T>static inline void comp_func_solid_ColorBurn_impl(uint *dest, int length, uint color, const T &coverage){    int sa = qAlpha(color);    int sr = qRed(color);    int sg = qGreen(color);    int sb = qBlue(color);    for (int i = 0; i < length; ++i) {        uint d = dest[i];        int da = qAlpha(d);#define OP(a, b) color_burn_op(a, b, da, sa)        int r =  OP(  qRed(d), sr);        int b =  OP( qBlue(d), sb);        int g =  OP(qGreen(d), sg);        int a = mix_alpha(da, sa);#undef OP        coverage.store(&dest[i], qRgba(r, g, b, a));    }}void QT_FASTCALL comp_func_solid_ColorBurn(uint *dest, int length, uint color, uint const_alpha){    if (const_alpha == 255)        comp_func_solid_ColorBurn_impl(dest, length, color, FullCoverage());    else        comp_func_solid_ColorBurn_impl(dest, length, color, PartialCoverage(const_alpha));}template <typename T>static inline void comp_func_ColorBurn_impl(uint *dest, const uint *src, int length, const T &coverage){    for (int i = 0; i < length; ++i) {        uint d = dest[i];        uint s = src[i];        int da = qAlpha(d);        int sa = qAlpha(s);#define OP(a, b) color_burn_op(a, b, da, sa)        int r = OP(  qRed(d),   qRed(s));        int b = OP( qBlue(d),  qBlue(s));        int g = OP(qGreen(d), qGreen(s));        int a = mix_alpha(da, sa);#undef OP        coverage.store(&dest[i], qRgba(r, g, b, a));    }}void QT_FASTCALL comp_func_ColorBurn(uint *dest, const uint *src, int length, uint const_alpha){    if (const_alpha == 255)        comp_func_ColorBurn_impl(dest, src, length, FullCoverage());    else        comp_func_ColorBurn_impl(dest, src, length, PartialCoverage(const_alpha));}/*    if 2.Sca < Sa        Dca' = 2.Sca.Dca + Sca.(1 - Da) + Dca.(1 - Sa)    otherwise        Dca' = Sa.Da - 2.(Da - Dca).(Sa - Sca) + Sca.(1 - Da) + Dca.(1 - Sa)*/static inline uint hardlight_op(int dst, int src, int da, int sa){    const uint temp = src * (255 - da) + dst * (255 - sa);    if (2 * src < sa)        return (2 * src * dst + temp) >> 8;    else        return (sa * da - 2 * (da - dst) * (sa - src) + temp) >> 8;}template <typename T>static inline void comp_func_solid_HardLight_impl(uint *dest, int length, uint color, const T &coverage){    int sa = qAlpha(color);    int sr = qRed(color);    int sg = qGreen(color);    int sb = qBlue(color);    for (int i = 0; i < length; ++i) {        uint d = dest[i];        int da = qAlpha(d);#define OP(a, b) hardlight_op(a, b, da, sa)        int r =  OP(  qRed(d), sr);        int b =  OP( qBlue(d), sb);        int g =  OP(qGreen(d), sg);        int a = mix_alpha(da, sa);#undef OP        coverage.store(&dest[i], qRgba(r, g, b, a));    }}void QT_FASTCALL comp_func_solid_HardLight(uint *dest, int length, uint color, uint const_alpha){    if (const_alpha == 255)        comp_func_solid_HardLight_impl(dest, length, color, FullCoverage());    else        comp_f

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -