/// <summary> /// Kreed's SuperSaI /// </summary> public static void SuperSaI(IPixelWorker <sPixel> worker) { var c0 = worker.SourceM1M1(); var c1 = worker.SourceP0M1(); var c2 = worker.SourceP1M1(); var d3 = worker.SourceP2M1(); var c3 = worker.SourceM1P0(); var c4 = worker.SourceP0P0(); var c5 = worker.SourceP1P0(); var d4 = worker.SourceP2P0(); var c6 = worker.SourceM1P1(); var c7 = worker.SourceP0P1(); var c8 = worker.SourceP1P1(); var d5 = worker.SourceP2P1(); var d0 = worker.SourceM1P2(); var d1 = worker.SourceP0P2(); var d2 = worker.SourceP1P2(); var d6 = worker.SourceP2P2(); sPixel e01, e10, e11; var e00 = e01 = e11 = c4; if (c7.IsLike(c5) && c4.IsNotLike(c8)) { var c57 = sPixel.Interpolate(c7, c5); e11 = c57; e01 = c57; } else if (c4.IsLike(c8) && c7.IsNotLike(c5)) { //nothing } else if (c4.IsLike(c8) && c7.IsLike(c5)) { var c57 = sPixel.Interpolate(c7, c5); var c48 = sPixel.Interpolate(c4, c8); var conc2D = 0; conc2D += _Conc2D(c57, c48, c6, d1); conc2D += _Conc2D(c57, c48, c3, c1); conc2D += _Conc2D(c57, c48, d2, d5); conc2D += _Conc2D(c57, c48, c2, d4); if (conc2D > 0) { e11 = c57; e01 = c57; } else if (conc2D == 0) { e11 = sPixel.Interpolate(c48, c57); e01 = sPixel.Interpolate(c48, c57); } } else { if (c8.IsLike(c5) && c8.IsLike(d1) && c7.IsNotLike(d2) && c8.IsNotLike(d0)) { e11 = sPixel.Interpolate(sPixel.Interpolate(c8, c5, d1), c7, 3, 1); } else if (c7.IsLike(c4) && c7.IsLike(d2) && c7.IsNotLike(d6) && c8.IsNotLike(d1)) { e11 = sPixel.Interpolate(sPixel.Interpolate(c7, c4, d2), c8, 3, 1); } else { e11 = sPixel.Interpolate(c7, c8); } if (c5.IsLike(c8) && c5.IsLike(c1) && c5.IsNotLike(c0) && c4.IsNotLike(c2)) { e01 = sPixel.Interpolate(sPixel.Interpolate(c5, c8, c1), c4, 3, 1); } else if (c4.IsLike(c7) && c4.IsLike(c2) && c5.IsNotLike(c1) && c4.IsNotLike(d3)) { e01 = sPixel.Interpolate(sPixel.Interpolate(c4, c7, c2), c5, 3, 1); } else { e01 = sPixel.Interpolate(c4, c5); } } if (c4.IsLike(c8) && c4.IsLike(c3) && c7.IsNotLike(c5) && c4.IsNotLike(d2)) { e10 = sPixel.Interpolate(c7, sPixel.Interpolate(c4, c8, c3)); } else if (c4.IsLike(c6) && c4.IsLike(c5) && c7.IsNotLike(c3) && c4.IsNotLike(d0)) { e10 = sPixel.Interpolate(c7, sPixel.Interpolate(c4, c6, c5)); } else { e10 = c7; } if (c7.IsLike(c5) && c7.IsLike(c6) && c4.IsNotLike(c8) && c7.IsNotLike(c2)) { e00 = sPixel.Interpolate(sPixel.Interpolate(c7, c5, c6), c4); } else if (c7.IsLike(c3) && c7.IsLike(c8) && c4.IsNotLike(c6) && c7.IsNotLike(c0)) { e00 = sPixel.Interpolate(sPixel.Interpolate(c7, c3, c8), c4); } worker.TargetP0P0(e00); worker.TargetP1P0(e01); worker.TargetP0P1(e10); worker.TargetP1P1(e11); }