예제 #1
0
        public Task <RGBPixel[, ]> Mix(IList <RGBPixel[, ]> sources, ulong frame)
        {
            // Schneller Ausgang
            if (sources.Count == 1)
            {
                return(Task.FromResult(sources[0]));
            }

            Func <RGBPixel, RGBPixel, RGBPixel> fn;

            switch (this.Operator)
            {
            case Operatoren.Max:
                fn = (a, b) => a = RGBPixel.Max(a, b);
                break;

            case Operatoren.Min:
                fn = (a, b) => a = RGBPixel.Min(a, b);
                break;

            case Operatoren.Add:
                fn = (a, b) => a = a + b;
                break;

            case Operatoren.Sub:
                fn = (a, b) => a = a - b;
                break;

            case Operatoren.Mul:
                fn = (a, b) => a = a * b;
                break;

            case Operatoren.Div:
                fn = (a, b) => a = a / b;
                break;

            default:
                fn = (a, b) => a;
                break;
            }

            // erstes Ding klonen.
            RGBPixel[,] res = sources[0].Clone2(o => o);
            for (int i = 1; i < sources.Count; i++)
            {
                res.MapInplace(sources[i], fn);
            }

            return(Task.FromResult(res));
        }