Пример #1
0
 private static Blender <GrayColor> GetGrayBlender(Func <int, int, int> blend)
 => (dst, src, opacity) =>
 {
     int v = blend(dst.V, src.V);
     src = new GrayColor(v, src.A);
     return(BlendNormal(dst, src, opacity));
 };
Пример #2
0
 private static GrayColor BlendNegBW(GrayColor dst, GrayColor src, int opacity)
 {
     if (dst.A == 0)
     {
         return(src);
     }
     else if (dst.V < 128)
     {
         return(new GrayColor(255, 255));
     }
     else
     {
         return(new GrayColor(0, 255));
     }
 }
Пример #3
0
        private static GrayColor BlendNormal(GrayColor dst, GrayColor src, int opacity)
        {
            if (dst.A == 0)
            {
                return(new GrayColor(src.V, MultiplyNormalizedToByte(src.A, opacity)));
            }
            else if (src.A == 0)
            {
                return(dst);
            }

            var sa = MultiplyNormalizedToByte(src.A, opacity);

            var ra = dst.A + sa - MultiplyNormalizedToByte(dst.A, sa);
            var rg = dst.V + (src.V - dst.V) * sa / ra;

            return(new GrayColor(rg, ra));
        }
Пример #4
0
        private static GrayColor BlendMerge(GrayColor dst, GrayColor src, int opacity)
        {
            int rk, ra;

            if (dst.A == 0)
            {
                rk = src.V;
            }
            else if (src.A == 0)
            {
                rk = dst.V;
            }
            else
            {
                rk = dst.V + MultiplyNormalizedToByte((src.V - dst.V), opacity);
            }
            ra = dst.A + MultiplyNormalizedToByte((src.A - dst.A), opacity);
            if (ra == 0)
            {
                rk = 0;
            }

            return(new GrayColor(rk, ra));
        }