Beispiel #1
0
 /// <summary>
 /// Copies the specified image into a new instance.
 /// </summary>
 /// <param name="image">The Fouurier image to copy.</param>
 public FourierWorker(FourierWorker image)
 {
     if (image == null || image.values == null)
     {
         return;
     }
     FFTAfter                   = image.FFTAfter;
     OriginalMax                = image.OriginalMax;
     NormalizationCap           = image.NormalizationCap;
     FourierWidth               = image.FourierWidth;
     FourierHeight              = image.FourierHeight;
     FourierSize                = image.FourierSize;
     FourierPixelCount          = image.FourierPixelCount;
     FourierPixelComponentCount = image.FourierPixelComponentCount;
     alphaReference             = image.alphaReference;
     if (alphaReference != null)
     {
         alphaReference.ShallowClone();
     }
     ShiftAxes                 = image.ShiftAxes;
     TargetWidth               = image.TargetWidth;
     TargetHeight              = image.TargetHeight;
     TargetSize                = image.TargetSize;
     ComponentCount            = image.ComponentCount;
     TargetPixelCount          = image.TargetPixelCount;
     TargetPixelComponentCount = image.TargetPixelComponentCount;
     fourierWidthLog2          = image.fourierWidthLog2;
     fourierHeightLog2         = image.fourierHeightLog2;
     values = new ComplexF[ComponentCount][];
     for (int c = 0; c < ComponentCount; c++)
     {
         values[c] = new ComplexF[FourierPixelCount];
         Array.Copy(image.values[c], values[c], FourierPixelCount);
     }
 }
Beispiel #2
0
        /// <summary>
        /// MAME's AdvInterp2x, very similar to Scale2x but uses interpolation, modified by Hawkynt to support thresholds
        /// </summary>
        public static void AdvInterp2x(PixelWorker <sPixel> worker)
        {
            var    c1 = worker.SourceP0M1();
            var    c3 = worker.SourceM1P0();
            var    c4 = worker.SourceP0P0();
            var    c5 = worker.SourceP1P0();
            var    c7 = worker.SourceP0P1();
            sPixel e01, e10, e11;
            var    e00 = e01 = e10 = e11 = c4;

            if (c1.IsNotLike(c7) && c3.IsNotLike(c5))
            {
                if (c3.IsLike(c1))
                {
                    e00 = sPixel.Interpolate(sPixel.Interpolate(c1, c3), c4, 5, 3);
                }
                if (c5.IsLike(c1))
                {
                    e01 = sPixel.Interpolate(sPixel.Interpolate(c1, c5), c4, 5, 3);
                }
                if (c3.IsLike(c7))
                {
                    e10 = sPixel.Interpolate(sPixel.Interpolate(c7, c3), c4, 5, 3);
                }
                if (c5.IsLike(c7))
                {
                    e11 = sPixel.Interpolate(sPixel.Interpolate(c7, c5), c4, 5, 3);
                }
            }
            worker.TargetP0P0(e00);
            worker.TargetP1P0(e01);
            worker.TargetP0P1(e10);
            worker.TargetP1P1(e11);
        }
Beispiel #3
0
 /// <summary>
 /// MAME's RGB 2x
 /// </summary>
 public static void Rgb2x(PixelWorker<sPixel> worker) {
   var pixel = worker.SourceP0P0();
   worker.TargetP0P0(new sPixel(pixel.Red, 0, 0, pixel.Alpha));
   worker.TargetP1P0(new sPixel(0, pixel.Green, 0, pixel.Alpha));
   worker.TargetP0P1(new sPixel(0, 0, pixel.Blue, pixel.Alpha));
   worker.TargetP1P1(pixel);
 }
Beispiel #4
0
        /// <summary>
        /// another bad one a made for MS-Dos in 1998
        /// </summary>
        public static void Tv3x(PixelWorker <sPixel> worker)
        {
            var pixel = worker.SourceP0P0();

            worker.TargetP0P0(new sPixel(pixel.Red, 0, 0, pixel.Alpha));
            worker.TargetP1P0(new sPixel(0, pixel.Green, 0, pixel.Alpha));
            worker.TargetP2P0(new sPixel(0, 0, pixel.Blue, pixel.Alpha));
            if ((worker.SourceX() & 1) == 0)
            {
                worker.TargetP0P1(new sPixel(pixel.Red, 0, 0, pixel.Alpha));
                if (worker.SourceY() > 0)
                {
                    worker.TargetP1M1(new sPixel(0, pixel.Green, 0, pixel.Alpha));
                }
                worker.TargetP2P1(new sPixel(0, 0, pixel.Blue, pixel.Alpha));
            }
            else
            {
                if (worker.SourceY() > 0)
                {
                    worker.TargetP0M1(new sPixel(pixel.Red, 0, 0, pixel.Alpha));
                }
                worker.TargetP1P1(new sPixel(0, pixel.Green, 0, pixel.Alpha));
                if (worker.SourceY() > 0)
                {
                    worker.TargetP2M1(new sPixel(0, 0, pixel.Blue, pixel.Alpha));
                }
            }
        }
Beispiel #5
0
        public static void DES2(PixelWorker <sPixel> worker)
        {
            var n  = worker.SourceP0M1();
            var w  = worker.SourceM1P0();
            var c  = worker.SourceP0P0();
            var e  = worker.SourceP1P0();
            var s  = worker.SourceP0P1();
            var se = worker.SourceP1P1();

            var p0 = (((w.IsLike(n)) && (n.IsNotLike(e)) && (w.IsNotLike(s))) ? w : c);
            var p1 = (((n.IsLike(e)) && (n.IsNotLike(w)) && (e.IsNotLike(s))) ? e : c);
            var p2 = (((w.IsLike(s)) && (w.IsNotLike(n)) && (s.IsNotLike(e))) ? w : c);
            var p3 = (((s.IsLike(e)) && (w.IsNotLike(s)) && (n.IsNotLike(e))) ? e : c);

            var cx  = c;
            var ce  = sPixel.Interpolate(c, e, 3, 1);
            var cs  = sPixel.Interpolate(c, s, 3, 1);
            var cse = sPixel.Interpolate(c, se, 3, 1);


            var d1 = sPixel.Interpolate(p0, cx, 3, 1);
            var d2 = sPixel.Interpolate(p1, ce, 3, 1);
            var d3 = sPixel.Interpolate(p2, cs, 3, 1);
            var d4 = sPixel.Interpolate(p3, cse, 3, 1);

            worker.TargetP0P0(d1);
            worker.TargetP1P0(d2);
            worker.TargetP0P1(d3);
            worker.TargetP1P1(d4);
        }
Beispiel #6
0
        public static void DoUltra2XScl(PixelWorker <sPixel> worker)
        {
            var n = worker.SourceP0M1();
            var w = worker.SourceM1P0();
            var c = worker.SourceP0P0();
            var e = worker.SourceP1P0();
            var s = worker.SourceP0P1();

            var cx = c;
            var wx = w;
            var ex = e;
            var cw = _Mixpal(c, w);
            var ce = _Mixpal(c, e);

            var p0 = (((w.IsLike(n)) && (n.IsNotLike(e)) && (w.IsNotLike(s))) ? wx : cw);
            var p1 = (((n.IsLike(e)) && (n.IsNotLike(w)) && (e.IsNotLike(s))) ? ex : ce);
            var p2 = (((w.IsLike(s)) && (w.IsNotLike(n)) && (s.IsNotLike(e))) ? wx : cw);
            var p3 = (((s.IsLike(e)) && (w.IsNotLike(s)) && (n.IsNotLike(e))) ? ex : ce);

            p0 = _Unmix(p0, cx);
            p1 = _Unmix(p1, cx);
            p2 = _Unmix(p2, cx);
            p3 = _Unmix(p3, cx);

            worker.TargetP0P0(p0);
            worker.TargetP1P0(p1);
            worker.TargetP0P1(p2);
            worker.TargetP1P1(p3);
        }
Beispiel #7
0
    public static void DoUltra2XScl(PixelWorker<sPixel> worker) {
      var n = worker.SourceP0M1();
      var w = worker.SourceM1P0();
      var c = worker.SourceP0P0();
      var e = worker.SourceP1P0();
      var s = worker.SourceP0P1();

      var cx = c;
      var wx = w;
      var ex = e;
      var cw = _Mixpal(c, w);
      var ce = _Mixpal(c, e);

      var p0 = (((w.IsLike(n)) && (n.IsNotLike(e)) && (w.IsNotLike(s))) ? wx : cw);
      var p1 = (((n.IsLike(e)) && (n.IsNotLike(w)) && (e.IsNotLike(s))) ? ex : ce);
      var p2 = (((w.IsLike(s)) && (w.IsNotLike(n)) && (s.IsNotLike(e))) ? wx : cw);
      var p3 = (((s.IsLike(e)) && (w.IsNotLike(s)) && (n.IsNotLike(e))) ? ex : ce);

      p0 = _Unmix(p0, cx);
      p1 = _Unmix(p1, cx);
      p2 = _Unmix(p2, cx);
      p3 = _Unmix(p3, cx);

      worker.TargetP0P0(p0);
      worker.TargetP1P0(p1);
      worker.TargetP0P1(p2);
      worker.TargetP1P1(p3);
    }
Beispiel #8
0
    /// <summary>
    /// good old Eagle Engine modified by Hawkynt to support thresholds
    /// </summary>
    public static void Eagle2x(PixelWorker<sPixel>worker ) {
      var c0 = worker.SourceM1M1();
      var c1 = worker.SourceP0M1();
      var c2 = worker.SourceP1M1();
      var c3 = worker.SourceM1P0();
      var c4 = worker.SourceP0P0();
      var c5 = worker.SourceP1P0();
      var c6 = worker.SourceM1P1();
      var c7 = worker.SourceP0P1();
      var c8 = worker.SourceP1P1();
      sPixel e01, e10, e11;
      var e00 = e01 = e10 = e11 = c4;
      if ((c1.IsLike(c0)) && (c1.IsLike(c3)))
        e00 = sPixel.Interpolate(c1, c0, c3);

      if ((c2.IsLike(c1)) && (c2.IsLike(c5)))
        e01 = sPixel.Interpolate(c2, c1, c5);

      if ((c6.IsLike(c3)) && (c6.IsLike(c7)))
        e10 = sPixel.Interpolate(c6, c3, c7);

      if ((c7.IsLike(c5)) && (c7.IsLike(c8)))
        e11 = sPixel.Interpolate(c7, c5, c8);

      worker.TargetP0P0(e00);
      worker.TargetP1P0(e01);
      worker.TargetP0P1(e10);
      worker.TargetP1P1(e11);
    }
Beispiel #9
0
    public static void DES2(PixelWorker<sPixel> worker) {
      var n = worker.SourceP0M1();
      var w = worker.SourceM1P0();
      var c = worker.SourceP0P0();
      var e = worker.SourceP1P0();
      var s = worker.SourceP0P1();
      var se = worker.SourceP1P1();

      var p0 = (((w.IsLike(n)) && (n.IsNotLike(e)) && (w.IsNotLike(s))) ? w : c);
      var p1 = (((n.IsLike(e)) && (n.IsNotLike(w)) && (e.IsNotLike(s))) ? e : c);
      var p2 = (((w.IsLike(s)) && (w.IsNotLike(n)) && (s.IsNotLike(e))) ? w : c);
      var p3 = (((s.IsLike(e)) && (w.IsNotLike(s)) && (n.IsNotLike(e))) ? e : c);

      var cx = c;
      var ce = sPixel.Interpolate(c, e, 3, 1);
      var cs = sPixel.Interpolate(c, s, 3, 1);
      var cse = sPixel.Interpolate(c, se, 3, 1);


      var d1 = sPixel.Interpolate(p0, cx, 3, 1);
      var d2 = sPixel.Interpolate(p1, ce, 3, 1);
      var d3 = sPixel.Interpolate(p2, cs, 3, 1);
      var d4 = sPixel.Interpolate(p3, cse, 3, 1);

      worker.TargetP0P0(d1);
      worker.TargetP1P0(d2);
      worker.TargetP0P1(d3);
      worker.TargetP1P1(d4);
    }
Beispiel #10
0
 /// <summary>
 /// body for HQ2x etc.
 /// </summary>
 public static void ComplexFilter(PixelWorker<sPixel> worker, byte scaleX, byte scaleY, cImage.NqKernel kernel) {
   var c0 = worker.SourceM1M1();
   var c1 = worker.SourceP0M1();
   var c2 = worker.SourceP1M1();
   var c3 = worker.SourceM1P0();
   var c4 = worker.SourceP0P0();
   var c5 = worker.SourceP1P0();
   var c6 = worker.SourceM1P1();
   var c7 = worker.SourceP0P1();
   var c8 = worker.SourceP1P1();
   byte pattern = 0;
   if ((c4.IsNotLike(c0)))
     pattern |= 1;
   if ((c4.IsNotLike(c1)))
     pattern |= 2;
   if ((c4.IsNotLike(c2)))
     pattern |= 4;
   if ((c4.IsNotLike(c3)))
     pattern |= 8;
   if ((c4.IsNotLike(c5)))
     pattern |= 16;
   if ((c4.IsNotLike(c6)))
     pattern |= 32;
   if ((c4.IsNotLike(c7)))
     pattern |= 64;
   if ((c4.IsNotLike(c8)))
     pattern |= 128;
   kernel(pattern, c0, c1, c2, c3, c4, c5, c6, c7, c8, worker);
 } // end sub
Beispiel #11
0
 /// <summary>
 /// just a bad old-school TV effect
 /// </summary>
 public static void Tv2x(PixelWorker<sPixel> worker) {
   var pixel = worker.SourceP0P0();
   var luminance = pixel.Luminance;
   worker.TargetP0P0(new sPixel(pixel.Red, 0, 0, pixel.Alpha));
   worker.TargetP1P0(new sPixel(0, pixel.Green, 0, pixel.Alpha));
   worker.TargetP0P1(new sPixel(0, 0, pixel.Blue, pixel.Alpha));
   worker.TargetP1P1(sPixel.FromGrey(luminance, pixel.Alpha));
 }
Beispiel #12
0
 /// <summary>
 /// MAME's TV effect in 2x
 /// </summary>
 public static void Tv2x(PixelWorker<sPixel> worker) {
   var pixel = worker.SourceP0P0();
   var subPixel = pixel * _gamma58;
   worker.TargetP0P0(pixel);
   worker.TargetP1P0(pixel);
   worker.TargetP0P1(subPixel);
   worker.TargetP1P1(subPixel);
 }
Beispiel #13
0
        /// <summary>
        /// MAME's RGB 2x
        /// </summary>
        public static void Rgb2x(PixelWorker <sPixel> worker)
        {
            var pixel = worker.SourceP0P0();

            worker.TargetP0P0(new sPixel(pixel.Red, 0, 0, pixel.Alpha));
            worker.TargetP1P0(new sPixel(0, pixel.Green, 0, pixel.Alpha));
            worker.TargetP0P1(new sPixel(0, 0, pixel.Blue, pixel.Alpha));
            worker.TargetP1P1(pixel);
        }
Beispiel #14
0
        /// <summary>
        /// Vertical scanlines
        /// </summary>
        public static void VerticalScanlines(PixelWorker <sPixel> worker, float grayFactor)
        {
            var pixel = worker.SourceP0P0();

            worker.TargetP0P0(pixel);
            var factor = grayFactor / 100f + 1f;

            worker.TargetP1P0(pixel * factor);
        }
Beispiel #15
0
        /// <summary>
        /// just a bad old-school TV effect
        /// </summary>
        public static void Tv2x(PixelWorker <sPixel> worker)
        {
            var pixel     = worker.SourceP0P0();
            var luminance = pixel.Luminance;

            worker.TargetP0P0(new sPixel(pixel.Red, 0, 0, pixel.Alpha));
            worker.TargetP1P0(new sPixel(0, pixel.Green, 0, pixel.Alpha));
            worker.TargetP0P1(new sPixel(0, 0, pixel.Blue, pixel.Alpha));
            worker.TargetP1P1(sPixel.FromGrey(luminance, pixel.Alpha));
        }
Beispiel #16
0
        /// <summary>
        /// MAME's TV effect in 2x
        /// </summary>
        public static void Tv2x(PixelWorker <sPixel> worker)
        {
            var pixel    = worker.SourceP0P0();
            var subPixel = pixel * _gamma58;

            worker.TargetP0P0(pixel);
            worker.TargetP1P0(pixel);
            worker.TargetP0P1(subPixel);
            worker.TargetP1P1(subPixel);
        }
Beispiel #17
0
        /// <summary>
        /// This is the XBR4x by Hyllian (see http://board.byuu.org/viewtopic.php?f=10&t=2248)
        /// </summary>
        public static void Xbr4X(PixelWorker <sPixel> worker, bool allowAlphaBlending)
        {
            Contract.Assume(worker != null);
            var a1 = worker.SourceM1M2();
            var b1 = worker.SourceP0M2();
            var c1 = worker.SourceP1M2();

            var a0 = worker.SourceM2M1();
            var pa = worker.SourceM1M1();
            var pb = worker.SourceP0M1();
            var pc = worker.SourceP1M1();
            var c4 = worker.SourceP2M1();

            var d0 = worker.SourceM2P0();
            var pd = worker.SourceM1P0();
            var pe = worker.SourceP0P0();
            var pf = worker.SourceP1P0();
            var f4 = worker.SourceP2P0();

            var g0 = worker.SourceM2P1();
            var pg = worker.SourceM1P1();
            var ph = worker.SourceP0P1();
            var pi = worker.SourceP1P1();
            var i4 = worker.SourceP2P1();

            var g5 = worker.SourceM1P2();
            var h5 = worker.SourceP0P2();
            var i5 = worker.SourceP1P2();

            sPixel e1, e2, e3, e4, e5, e6, e7, e8, e9, ea, eb, ec, ed, ee, ef;
            var    e0 = e1 = e2 = e3 = e4 = e5 = e6 = e7 = e8 = e9 = ea = eb = ec = ed = ee = ef = pe;

            _Kernel4Xv2(pe, pi, ph, pf, pg, pc, pd, pb, f4, i4, h5, i5, ref ef, ref ee, ref eb, ref e3, ref e7, ref ea, ref ed, ref ec, allowAlphaBlending);
            _Kernel4Xv2(pe, pc, pf, pb, pi, pa, ph, pd, b1, c1, f4, c4, ref e3, ref e7, ref e2, ref e0, ref e1, ref e6, ref eb, ref ef, allowAlphaBlending);
            _Kernel4Xv2(pe, pa, pb, pd, pc, pg, pf, ph, d0, a0, b1, a1, ref e0, ref e1, ref e4, ref ec, ref e8, ref e5, ref e2, ref e3, allowAlphaBlending);
            _Kernel4Xv2(pe, pg, pd, ph, pa, pi, pb, pf, h5, g5, d0, g0, ref ec, ref e8, ref ed, ref ef, ref ee, ref e9, ref e4, ref e0, allowAlphaBlending);

            worker.TargetP0P0(e0);
            worker.TargetP1P0(e1);
            worker.TargetP2P0(e2);
            worker.TargetP3P0(e3);
            worker.TargetP0P1(e4);
            worker.TargetP1P1(e5);
            worker.TargetP2P1(e6);
            worker.TargetP3P1(e7);
            worker.TargetP0P2(e8);
            worker.TargetP1P2(e9);
            worker.TargetP2P2(ea);
            worker.TargetP3P2(eb);
            worker.TargetP0P3(ec);
            worker.TargetP1P3(ed);
            worker.TargetP2P3(ee);
            worker.TargetP3P3(ef);
        }
Beispiel #18
0
    } // end sub

    /// <summary>
    /// body for HQ2xBold etc. as seen in SNES9x
    /// </summary>
    public static void ComplexFilterBold(PixelWorker<sPixel> worker, byte scaleX, byte scaleY, cImage.NqKernel kernel) {
      var c0 = worker.SourceM1M1();
      var c1 = worker.SourceP0M1();
      var c2 = worker.SourceP1M1();
      var c3 = worker.SourceM1P0();
      var c4 = worker.SourceP0P0();
      var c5 = worker.SourceP1P0();
      var c6 = worker.SourceM1P1();
      var c7 = worker.SourceP0P1();
      var c8 = worker.SourceP1P1();
      var brightness = new[] { 
        c0.Brightness,
        c1.Brightness,
        c2.Brightness,
        c3.Brightness,
        c4.Brightness,
        c5.Brightness,
        c6.Brightness,
        c7.Brightness,
        c8.Brightness
      };
      var avgBrightness = (byte)((
        brightness[0] +
        brightness[1] +
        brightness[2] +
        brightness[3] +
        brightness[4] +
        brightness[5] +
        brightness[6] +
        brightness[7] +
        brightness[8]
        ) / 9);
      var dc4 = c4.Brightness > avgBrightness;
      byte pattern = 0;
      if ((c4.IsNotLike(c0)) && ((brightness[0] > avgBrightness) != dc4))
        pattern |= 1;
      if ((c4.IsNotLike(c1)) && ((brightness[1] > avgBrightness) != dc4))
        pattern |= 2;
      if ((c4.IsNotLike(c2)) && ((brightness[2] > avgBrightness) != dc4))
        pattern |= 4;
      if ((c4.IsNotLike(c3)) && ((brightness[3] > avgBrightness) != dc4))
        pattern |= 8;
      if ((c4.IsNotLike(c5)) && ((brightness[5] > avgBrightness) != dc4))
        pattern |= 16;
      if ((c4.IsNotLike(c6)) && ((brightness[6] > avgBrightness) != dc4))
        pattern |= 32;
      if ((c4.IsNotLike(c7)) && ((brightness[7] > avgBrightness) != dc4))
        pattern |= 64;
      if ((c4.IsNotLike(c8)) && ((brightness[8] > avgBrightness) != dc4))
        pattern |= 128;
      kernel(pattern, c0, c1, c2, c3, c4, c5, c6, c7, c8, worker);
    } // end sub
Beispiel #19
0
 /// <summary>
 /// MAME's TV effect 3x
 /// </summary>
 public static void Tv3x(PixelWorker<sPixel> worker) {
   var pixel = worker.SourceP0P0();
   var subPixel = pixel * _gamma58;
   var subPixel2 = pixel * _gamma516;
   worker.TargetP0P0(pixel);
   worker.TargetP1P0(pixel);
   worker.TargetP2P0(pixel);
   worker.TargetP0P1(subPixel);
   worker.TargetP1P1(subPixel);
   worker.TargetP2P1(subPixel);
   worker.TargetP0P2(subPixel2);
   worker.TargetP1P2(subPixel2);
   worker.TargetP2P2(subPixel2);
 }
Beispiel #20
0
        /// <summary>
        /// MAME's TV effect 3x
        /// </summary>
        public static void Tv3x(PixelWorker <sPixel> worker)
        {
            var pixel     = worker.SourceP0P0();
            var subPixel  = pixel * _gamma58;
            var subPixel2 = pixel * _gamma516;

            worker.TargetP0P0(pixel);
            worker.TargetP1P0(pixel);
            worker.TargetP2P0(pixel);
            worker.TargetP0P1(subPixel);
            worker.TargetP1P1(subPixel);
            worker.TargetP2P1(subPixel);
            worker.TargetP0P2(subPixel2);
            worker.TargetP1P2(subPixel2);
            worker.TargetP2P2(subPixel2);
        }
Beispiel #21
0
    /// <summary>
    /// Bilinear Plus Original
    /// </summary>
    public static void BilinearPlusOriginal(PixelWorker<sPixel>worker ) {
      var c00 = worker.SourceP0P0();
      var c01 = worker.SourceP1P0();
      var c10 = worker.SourceP0P1();
      var c11 = worker.SourceP1P1();

      var e00 = sPixel.Interpolate(c00, c01, c10, 5, 2, 1);
      var e01 = sPixel.Interpolate(c00, c01);
      var e10 = sPixel.Interpolate(c00, c10);
      var e11 = sPixel.Interpolate(c00, c01, c10, c11);

      worker.TargetP0P0(e00);
      worker.TargetP1P0(e01);
      worker.TargetP0P1(e10);
      worker.TargetP1P1(e11);
    }
Beispiel #22
0
    /// <summary>
    /// AFAIK there is no eagle 3x so I made one (Hawkynt)
    /// </summary>
    public static void Eagle3x(PixelWorker<sPixel> worker) {
      var c0 = worker.SourceM1M1();
      var c1 = worker.SourceP0M1();
      var c2 = worker.SourceP1M1();
      var c3 = worker.SourceM1P0();
      var c4 = worker.SourceP0P0();
      var c5 = worker.SourceP1P0();
      var c6 = worker.SourceM1P1();
      var c7 = worker.SourceP0P1();
      var c8 = worker.SourceP1P1();
      sPixel e01, e02, e10, e12, e20, e21, e22;
      var e00 = e01 = e02 = e10 = e12 = e20 = e21 = e22 = c4;

      if ((c0.IsLike(c1)) && (c0.IsLike(c3)))
        e00 = sPixel.Interpolate(c0, c1, c3);

      if ((c2.IsLike(c1)) && (c2.IsLike(c5)))
        e02 = sPixel.Interpolate(c2, c1, c5);

      if ((c6.IsLike(c3)) && (c6.IsLike(c7)))
        e20 = sPixel.Interpolate(c6, c3, c7);

      if ((c8.IsLike(c5)) && (c8.IsLike(c7)))
        e22 = sPixel.Interpolate(c8, c5, c7);

      if ((c0.IsLike(c1)) && (c0.IsLike(c3)) && (c2.IsLike(c1)) && (c2.IsLike(c5)))
        e01 = sPixel.Interpolate(sPixel.Interpolate(c0, c1, c3), sPixel.Interpolate(c2, c1, c5));

      if ((c2.IsLike(c1)) && (c2.IsLike(c5)) && (c8.IsLike(c5)) && (c8.IsLike(c7)))
        e12 = sPixel.Interpolate(sPixel.Interpolate(c2, c1, c5), sPixel.Interpolate(c8, c5, c7));

      if ((c6.IsLike(c7)) && (c6.IsLike(c3)) && (c8.IsLike(c5)) && (c8.IsLike(c7)))
        e21 = sPixel.Interpolate(sPixel.Interpolate(c6, c7, c3), sPixel.Interpolate(c8, c5, c7));

      if ((c0.IsLike(c1)) && (c0.IsLike(c3)) && (c6.IsLike(c7)) && (c6.IsLike(c3)))
        e10 = sPixel.Interpolate(sPixel.Interpolate(c0, c1, c3), sPixel.Interpolate(c6, c3, c7));

      worker.TargetP0P0(e00);
      worker.TargetP1P0(e01);
      worker.TargetP2P0(e02);
      worker.TargetP0P1(e10);
      worker.TargetP1P1(c4);
      worker.TargetP2P1(e12);
      worker.TargetP0P2(e20);
      worker.TargetP1P2(e21);
      worker.TargetP2P2(e22);
    }
Beispiel #23
0
        /// <summary>
        /// This is the XBR3x by Hyllian (see http://board.byuu.org/viewtopic.php?f=10&t=2248)
        /// </summary>
        public static void Xbr3X(PixelWorker <sPixel> worker, bool allowAlphaBlending, bool useOriginalImplementation)
        {
            Contract.Assume(worker != null);
            var a1 = worker.SourceM1M2();
            var b1 = worker.SourceP0M2();
            var c1 = worker.SourceP1M2();

            var a0 = worker.SourceM2M1();
            var pa = worker.SourceM1M1();
            var pb = worker.SourceP0M1();
            var pc = worker.SourceP1M1();
            var c4 = worker.SourceP2M1();

            var d0 = worker.SourceM2P0();
            var pd = worker.SourceM1P0();
            var pe = worker.SourceP0P0();
            var pf = worker.SourceP1P0();
            var f4 = worker.SourceP2P0();

            var g0 = worker.SourceM2P1();
            var pg = worker.SourceM1P1();
            var ph = worker.SourceP0P1();
            var pi = worker.SourceP1P1();
            var i4 = worker.SourceP2P1();

            var g5 = worker.SourceM1P2();
            var h5 = worker.SourceP0P2();
            var i5 = worker.SourceP1P2();

            sPixel e1, e2, e3, e4, e5, e6, e7, e8;
            var    e0 = e1 = e2 = e3 = e4 = e5 = e6 = e7 = e8 = pe;

            _Kernel3X(pe, pi, ph, pf, pg, pc, pd, pb, f4, i4, h5, i5, ref e2, ref e5, ref e6, ref e7, ref e8, allowAlphaBlending, useOriginalImplementation);
            _Kernel3X(pe, pc, pf, pb, pi, pa, ph, pd, b1, c1, f4, c4, ref e0, ref e1, ref e8, ref e5, ref e2, allowAlphaBlending, useOriginalImplementation);
            _Kernel3X(pe, pa, pb, pd, pc, pg, pf, ph, d0, a0, b1, a1, ref e6, ref e3, ref e2, ref e1, ref e0, allowAlphaBlending, useOriginalImplementation);
            _Kernel3X(pe, pg, pd, ph, pa, pi, pb, pf, h5, g5, d0, g0, ref e8, ref e7, ref e0, ref e3, ref e6, allowAlphaBlending, useOriginalImplementation);

            worker.TargetP0P0(e0);
            worker.TargetP1P0(e1);
            worker.TargetP2P0(e2);
            worker.TargetP0P1(e3);
            worker.TargetP1P1(e4);
            worker.TargetP2P1(e5);
            worker.TargetP0P2(e6);
            worker.TargetP1P2(e7);
            worker.TargetP2P2(e8);
        }
Beispiel #24
0
        /// <summary>
        /// Bilinear Plus Original
        /// </summary>
        public static void BilinearPlusOriginal(PixelWorker <sPixel> worker)
        {
            var c00 = worker.SourceP0P0();
            var c01 = worker.SourceP1P0();
            var c10 = worker.SourceP0P1();
            var c11 = worker.SourceP1P1();

            var e00 = sPixel.Interpolate(c00, c01, c10, 5, 2, 1);
            var e01 = sPixel.Interpolate(c00, c01);
            var e10 = sPixel.Interpolate(c00, c10);
            var e11 = sPixel.Interpolate(c00, c01, c10, c11);

            worker.TargetP0P0(e00);
            worker.TargetP1P0(e01);
            worker.TargetP0P1(e10);
            worker.TargetP1P1(e11);
        }
Beispiel #25
0
    /// <summary>
    /// FNES' 2xSCL
    /// </summary>
    /// <param name="worker">The worker.</param>
    public static void Do2XScl(PixelWorker<sPixel> worker) {
      var n = worker.SourceP0M1();
      var w = worker.SourceM1P0();
      var c = worker.SourceP0P0();
      var e = worker.SourceP1P0();
      var s = worker.SourceP0P1();

      var p0 = (((w.IsLike(n)) && (n.IsNotLike(e)) && (w.IsNotLike(s))) ? w : c);
      var p1 = (((n.IsLike(e)) && (n.IsNotLike(w)) && (e.IsNotLike(s))) ? e : c);
      var p2 = (((w.IsLike(s)) && (w.IsNotLike(n)) && (s.IsNotLike(e))) ? w : c);
      var p3 = (((s.IsLike(e)) && (w.IsNotLike(s)) && (n.IsNotLike(e))) ? e : c);

      worker.TargetP0P0(p0);
      worker.TargetP1P0(p1);
      worker.TargetP0P1(p2);
      worker.TargetP1P1(p3);
    }
Beispiel #26
0
    /// <summary>
    /// DES filters from FNES
    /// </summary>
    public static void DES(PixelWorker<sPixel> worker) {
      var n = worker.SourceP0M1();
      var w = worker.SourceM1P0();
      var c = worker.SourceP0P0();
      var e = worker.SourceP1P0();
      var s = worker.SourceP0P1();


      var p0 = (((w.IsLike(n)) && (n.IsNotLike(e)) && (w.IsNotLike(s))) ? w : c);
      var p1 = (((n.IsLike(e)) && (n.IsNotLike(w)) && (e.IsNotLike(s))) ? e : c);
      var p2 = (((w.IsLike(s)) && (w.IsNotLike(n)) && (s.IsNotLike(e))) ? w : c);
      var p3 = (((s.IsLike(e)) && (w.IsNotLike(s)) && (n.IsNotLike(e))) ? e : c);

      var d = sPixel.Interpolate(p0, p1, p2, p3);

      worker.TargetP0P0(d);
    }
Beispiel #27
0
    /// <summary>
    /// This is the XBR3x by Hyllian (see http://board.byuu.org/viewtopic.php?f=10&t=2248)
    /// </summary>
    public static void Xbr3X(PixelWorker<sPixel> worker, bool allowAlphaBlending, bool useOriginalImplementation) {
      Contract.Assume(worker != null);
      var a1 = worker.SourceM1M2();
      var b1 = worker.SourceP0M2();
      var c1 = worker.SourceP1M2();

      var a0 = worker.SourceM2M1();
      var pa = worker.SourceM1M1();
      var pb = worker.SourceP0M1();
      var pc = worker.SourceP1M1();
      var c4 = worker.SourceP2M1();

      var d0 = worker.SourceM2P0();
      var pd = worker.SourceM1P0();
      var pe = worker.SourceP0P0();
      var pf = worker.SourceP1P0();
      var f4 = worker.SourceP2P0();

      var g0 = worker.SourceM2P1();
      var pg = worker.SourceM1P1();
      var ph = worker.SourceP0P1();
      var pi = worker.SourceP1P1();
      var i4 = worker.SourceP2P1();

      var g5 = worker.SourceM1P2();
      var h5 = worker.SourceP0P2();
      var i5 = worker.SourceP1P2();

      sPixel e1, e2, e3, e4, e5, e6, e7, e8;
      var e0 = e1 = e2 = e3 = e4 = e5 = e6 = e7 = e8 = pe;

      _Kernel3X(pe, pi, ph, pf, pg, pc, pd, pb, f4, i4, h5, i5, ref e2, ref e5, ref e6, ref e7, ref e8, allowAlphaBlending, useOriginalImplementation);
      _Kernel3X(pe, pc, pf, pb, pi, pa, ph, pd, b1, c1, f4, c4, ref e0, ref e1, ref e8, ref e5, ref e2, allowAlphaBlending, useOriginalImplementation);
      _Kernel3X(pe, pa, pb, pd, pc, pg, pf, ph, d0, a0, b1, a1, ref e6, ref e3, ref e2, ref e1, ref e0, allowAlphaBlending, useOriginalImplementation);
      _Kernel3X(pe, pg, pd, ph, pa, pi, pb, pf, h5, g5, d0, g0, ref e8, ref e7, ref e0, ref e3, ref e6, allowAlphaBlending, useOriginalImplementation);

      worker.TargetP0P0(e0);
      worker.TargetP1P0(e1);
      worker.TargetP2P0(e2);
      worker.TargetP0P1(e3);
      worker.TargetP1P1(e4);
      worker.TargetP2P1(e5);
      worker.TargetP0P2(e6);
      worker.TargetP1P2(e7);
      worker.TargetP2P2(e8);
    }
Beispiel #28
0
        /// <summary>
        /// FNES' 2xSCL
        /// </summary>
        /// <param name="worker">The worker.</param>
        public static void Do2XScl(PixelWorker <sPixel> worker)
        {
            var n = worker.SourceP0M1();
            var w = worker.SourceM1P0();
            var c = worker.SourceP0P0();
            var e = worker.SourceP1P0();
            var s = worker.SourceP0P1();

            var p0 = (((w.IsLike(n)) && (n.IsNotLike(e)) && (w.IsNotLike(s))) ? w : c);
            var p1 = (((n.IsLike(e)) && (n.IsNotLike(w)) && (e.IsNotLike(s))) ? e : c);
            var p2 = (((w.IsLike(s)) && (w.IsNotLike(n)) && (s.IsNotLike(e))) ? w : c);
            var p3 = (((s.IsLike(e)) && (w.IsNotLike(s)) && (n.IsNotLike(e))) ? e : c);

            worker.TargetP0P0(p0);
            worker.TargetP1P0(p1);
            worker.TargetP0P1(p2);
            worker.TargetP1P1(p3);
        }
Beispiel #29
0
        /// <summary>
        /// DES filters from FNES
        /// </summary>
        public static void DES(PixelWorker <sPixel> worker)
        {
            var n = worker.SourceP0M1();
            var w = worker.SourceM1P0();
            var c = worker.SourceP0P0();
            var e = worker.SourceP1P0();
            var s = worker.SourceP0P1();


            var p0 = (((w.IsLike(n)) && (n.IsNotLike(e)) && (w.IsNotLike(s))) ? w : c);
            var p1 = (((n.IsLike(e)) && (n.IsNotLike(w)) && (e.IsNotLike(s))) ? e : c);
            var p2 = (((w.IsLike(s)) && (w.IsNotLike(n)) && (s.IsNotLike(e))) ? w : c);
            var p3 = (((s.IsLike(e)) && (w.IsNotLike(s)) && (n.IsNotLike(e))) ? e : c);

            var d = sPixel.Interpolate(p0, p1, p2, p3);

            worker.TargetP0P0(d);
        }
Beispiel #30
0
    /// <summary>
    /// Bilinear Plus
    /// </summary>
    public static void BilinearPlus(PixelWorker<sPixel>worker ) {
      var c00 = worker.SourceP0P0();
      var c01 = worker.SourceP1P0();
      var c10 = worker.SourceP0P1();
      var c11 = worker.SourceP1P1();

      const float gamma = 14f / 16f;

      var e00 = sPixel.Interpolate(c00, c01, c10, 10, 2, 2) * gamma;
      var e01 = sPixel.Interpolate(c00, c01);
      var e10 = sPixel.Interpolate(c00, c10);
      var e11 = sPixel.Interpolate(c00, c01, c10, c11);

      worker.TargetP0P0(e00);
      worker.TargetP1P0(e01);
      worker.TargetP0P1(e10);
      worker.TargetP1P1(e11);
    }
Beispiel #31
0
        /// <summary>
        /// another one that takes into account that normal eagle means that 3 surroundings should be equal
        /// looks ugly sometimes depends heavily on source image
        /// </summary>
        public static void Eagle3xB(PixelWorker <sPixel> worker)
        {
            var    c0 = worker.SourceM1M1();
            var    c1 = worker.SourceP0M1();
            var    c2 = worker.SourceP1M1();
            var    c3 = worker.SourceM1P0();
            var    c4 = worker.SourceP0P0();
            var    c5 = worker.SourceP1P0();
            var    c6 = worker.SourceM1P1();
            var    c7 = worker.SourceP0P1();
            var    c8 = worker.SourceP1P1();
            sPixel e01, e02, e10, e12, e20, e21, e22;
            var    e00 = e01 = e02 = e10 = e12 = e20 = e21 = e22 = c4;

            if ((c0.IsLike(c1)) && (c0.IsLike(c3)))
            {
                e00 = sPixel.Interpolate(c0, c1, c3);
            }

            if ((c2.IsLike(c1)) && (c2.IsLike(c5)))
            {
                e02 = sPixel.Interpolate(c2, c1, c5);
            }

            if ((c6.IsLike(c3)) && (c6.IsLike(c7)))
            {
                e20 = sPixel.Interpolate(c6, c3, c7);
            }

            if ((c8.IsLike(c5)) && (c8.IsLike(c7)))
            {
                e22 = sPixel.Interpolate(c8, c5, c7);
            }

            worker.TargetP0P0(e00);
            worker.TargetP1P0(e01);
            worker.TargetP2P0(e02);
            worker.TargetP0P1(e10);
            worker.TargetP1P1(c4);
            worker.TargetP2P1(e12);
            worker.TargetP0P2(e20);
            worker.TargetP1P2(e21);
            worker.TargetP2P2(e22);
        }
Beispiel #32
0
    /// <summary>
    /// another bad one a made for MS-Dos in 1998
    /// </summary>
    public static void Tv3x(PixelWorker<sPixel> worker) {
      var pixel = worker.SourceP0P0();
      worker.TargetP0P0(new sPixel(pixel.Red, 0, 0, pixel.Alpha));
      worker.TargetP1P0(new sPixel(0, pixel.Green, 0, pixel.Alpha));
      worker.TargetP2P0(new sPixel(0, 0, pixel.Blue, pixel.Alpha));
      if ((worker.SourceX() & 1) == 0) {
        worker.TargetP0P1(new sPixel(pixel.Red, 0, 0, pixel.Alpha));
        if (worker.SourceY() > 0)
          worker.TargetP1M1(new sPixel(0, pixel.Green, 0, pixel.Alpha));
        worker.TargetP2P1(new sPixel(0, 0, pixel.Blue, pixel.Alpha));
      } else {
        if (worker.SourceY() > 0)
          worker.TargetP0M1(new sPixel(pixel.Red, 0, 0, pixel.Alpha));
        worker.TargetP1P1(new sPixel(0, pixel.Green, 0, pixel.Alpha));
        if (worker.SourceY() > 0)
          worker.TargetP2M1(new sPixel(0, 0, pixel.Blue, pixel.Alpha));
      }

    }
Beispiel #33
0
        /// <summary>
        /// Bilinear Plus
        /// </summary>
        public static void BilinearPlus(PixelWorker <sPixel> worker)
        {
            var c00 = worker.SourceP0P0();
            var c01 = worker.SourceP1P0();
            var c10 = worker.SourceP0P1();
            var c11 = worker.SourceP1P1();

            const float gamma = 14f / 16f;

            var e00 = sPixel.Interpolate(c00, c01, c10, 10, 2, 2) * gamma;
            var e01 = sPixel.Interpolate(c00, c01);
            var e10 = sPixel.Interpolate(c00, c10);
            var e11 = sPixel.Interpolate(c00, c01, c10, c11);

            worker.TargetP0P0(e00);
            worker.TargetP1P0(e01);
            worker.TargetP0P1(e10);
            worker.TargetP1P1(e11);
        }
Beispiel #34
0
        /// <summary>
        /// This is the XBR2x by Hyllian (see http://board.byuu.org/viewtopic.php?f=10&t=2248)
        /// </summary>
        public static void Xbr2X(PixelWorker <sPixel> worker, bool allowAlphaBlending)
        {
            Contract.Assume(worker != null);
            var a1 = worker.SourceM1M2();
            var b1 = worker.SourceP0M2();
            var c1 = worker.SourceP1M2();

            var a0 = worker.SourceM2M1();
            var pa = worker.SourceM1M1();
            var pb = worker.SourceP0M1();
            var pc = worker.SourceP1M1();
            var c4 = worker.SourceP2M1();

            var d0 = worker.SourceM2P0();
            var pd = worker.SourceM1P0();
            var pe = worker.SourceP0P0();
            var pf = worker.SourceP1P0();
            var f4 = worker.SourceP2P0();

            var g0 = worker.SourceM2P1();
            var pg = worker.SourceM1P1();
            var ph = worker.SourceP0P1();
            var pi = worker.SourceP1P1();
            var i4 = worker.SourceP2P1();

            var g5 = worker.SourceM1P2();
            var h5 = worker.SourceP0P2();
            var i5 = worker.SourceP1P2();

            sPixel e1, e2, e3;
            var    e0 = e1 = e2 = e3 = pe;

            _Kernel2Xv5(pe, pi, ph, pf, pg, pc, pd, pb, f4, i4, h5, i5, ref e1, ref e2, ref e3, allowAlphaBlending);
            _Kernel2Xv5(pe, pc, pf, pb, pi, pa, ph, pd, b1, c1, f4, c4, ref e0, ref e3, ref e1, allowAlphaBlending);
            _Kernel2Xv5(pe, pa, pb, pd, pc, pg, pf, ph, d0, a0, b1, a1, ref e2, ref e1, ref e0, allowAlphaBlending);
            _Kernel2Xv5(pe, pg, pd, ph, pa, pi, pb, pf, h5, g5, d0, g0, ref e3, ref e0, ref e2, allowAlphaBlending);

            worker.TargetP0P0(e0);
            worker.TargetP1P0(e1);
            worker.TargetP0P1(e2);
            worker.TargetP1P1(e3);
        }
Beispiel #35
0
    /// <summary>
    /// This is the XBR2x by Hyllian (see http://board.byuu.org/viewtopic.php?f=10&t=2248)
    /// </summary>
    public static void Xbr2X(PixelWorker<sPixel> worker, bool allowAlphaBlending) {
      Contract.Assume(worker != null);
      var a1 = worker.SourceM1M2();
      var b1 = worker.SourceP0M2();
      var c1 = worker.SourceP1M2();

      var a0 = worker.SourceM2M1();
      var pa = worker.SourceM1M1();
      var pb = worker.SourceP0M1();
      var pc = worker.SourceP1M1();
      var c4 = worker.SourceP2M1();

      var d0 = worker.SourceM2P0();
      var pd = worker.SourceM1P0();
      var pe = worker.SourceP0P0();
      var pf = worker.SourceP1P0();
      var f4 = worker.SourceP2P0();

      var g0 = worker.SourceM2P1();
      var pg = worker.SourceM1P1();
      var ph = worker.SourceP0P1();
      var pi = worker.SourceP1P1();
      var i4 = worker.SourceP2P1();

      var g5 = worker.SourceM1P2();
      var h5 = worker.SourceP0P2();
      var i5 = worker.SourceP1P2();

      sPixel e1, e2, e3;
      var e0 = e1 = e2 = e3 = pe;

      _Kernel2Xv5(pe, pi, ph, pf, pg, pc, pd, pb, f4, i4, h5, i5, ref e1, ref e2, ref e3, allowAlphaBlending);
      _Kernel2Xv5(pe, pc, pf, pb, pi, pa, ph, pd, b1, c1, f4, c4, ref e0, ref e3, ref e1, allowAlphaBlending);
      _Kernel2Xv5(pe, pa, pb, pd, pc, pg, pf, ph, d0, a0, b1, a1, ref e2, ref e1, ref e0, allowAlphaBlending);
      _Kernel2Xv5(pe, pg, pd, ph, pa, pi, pb, pf, h5, g5, d0, g0, ref e3, ref e0, ref e2, allowAlphaBlending);

      worker.TargetP0P0(e0);
      worker.TargetP1P0(e1);
      worker.TargetP0P1(e2);
      worker.TargetP1P1(e3);
    }
    /// <summary>
    /// Christoph Feck's ([email protected]) Reverse Anti-Alias filter
    /// TODO: make mathutils and join clamp, min and max with the ones from spixel
    /// </summary>
    /// <param name="worker">The worker.</param>
    public static void Process(PixelWorker<sPixel>worker ) {

      var b1 = worker.SourceP0M2();
      var b = worker.SourceP0M1();
      var d = worker.SourceM1P0();
      var e = worker.SourceP0P0();
      var f = worker.SourceP1P0();
      var h = worker.SourceP0P1();
      var h5 = worker.SourceP0P2();
      var d0 = worker.SourceM2P0();
      var f4 = worker.SourceP2P0();

      var redPart = _ReverseAntiAlias(b1.Red, b.Red, d.Red, e.Red, f.Red, h.Red, h5.Red, d0.Red, f4.Red);
      var greenPart = _ReverseAntiAlias(b1.Green, b.Green, d.Green, e.Green, f.Green, h.Green, h5.Green, d0.Green, f4.Green);
      var bluePart = _ReverseAntiAlias(b1.Blue, b.Blue, d.Blue, e.Blue, f.Blue, h.Blue, h5.Blue, d0.Blue, f4.Blue);
      var alphaPart = _ReverseAntiAlias(b1.Alpha, b.Alpha, d.Alpha, e.Alpha, f.Alpha, h.Alpha, h5.Alpha, d0.Alpha, f4.Alpha);

      worker.TargetP0P0( sPixel.FromRGBA(redPart.Item1, greenPart.Item1, bluePart.Item1, alphaPart.Item1));
      worker.TargetP1P0(sPixel.FromRGBA(redPart.Item2, greenPart.Item2, bluePart.Item2, alphaPart.Item2));
      worker.TargetP0P1( sPixel.FromRGBA(redPart.Item3, greenPart.Item3, bluePart.Item3, alphaPart.Item3));
      worker.TargetP1P1( sPixel.FromRGBA(redPart.Item4, greenPart.Item4, bluePart.Item4, alphaPart.Item4));
    }
Beispiel #37
0
        /// <summary>
        /// Christoph Feck's ([email protected]) Reverse Anti-Alias filter
        /// TODO: make mathutils and join clamp, min and max with the ones from spixel
        /// </summary>
        /// <param name="worker">The worker.</param>
        public static void Process(PixelWorker <sPixel> worker)
        {
            var b1 = worker.SourceP0M2();
            var b  = worker.SourceP0M1();
            var d  = worker.SourceM1P0();
            var e  = worker.SourceP0P0();
            var f  = worker.SourceP1P0();
            var h  = worker.SourceP0P1();
            var h5 = worker.SourceP0P2();
            var d0 = worker.SourceM2P0();
            var f4 = worker.SourceP2P0();

            var redPart   = _ReverseAntiAlias(b1.Red, b.Red, d.Red, e.Red, f.Red, h.Red, h5.Red, d0.Red, f4.Red);
            var greenPart = _ReverseAntiAlias(b1.Green, b.Green, d.Green, e.Green, f.Green, h.Green, h5.Green, d0.Green, f4.Green);
            var bluePart  = _ReverseAntiAlias(b1.Blue, b.Blue, d.Blue, e.Blue, f.Blue, h.Blue, h5.Blue, d0.Blue, f4.Blue);
            var alphaPart = _ReverseAntiAlias(b1.Alpha, b.Alpha, d.Alpha, e.Alpha, f.Alpha, h.Alpha, h5.Alpha, d0.Alpha, f4.Alpha);

            worker.TargetP0P0(sPixel.FromRGBA(redPart.Item1, greenPart.Item1, bluePart.Item1, alphaPart.Item1));
            worker.TargetP1P0(sPixel.FromRGBA(redPart.Item2, greenPart.Item2, bluePart.Item2, alphaPart.Item2));
            worker.TargetP0P1(sPixel.FromRGBA(redPart.Item3, greenPart.Item3, bluePart.Item3, alphaPart.Item3));
            worker.TargetP1P1(sPixel.FromRGBA(redPart.Item4, greenPart.Item4, bluePart.Item4, alphaPart.Item4));
        }
Beispiel #38
0
        /// <summary>
        /// good old Eagle Engine modified by Hawkynt to support thresholds
        /// </summary>
        public static void Eagle2x(PixelWorker <sPixel> worker)
        {
            var    c0 = worker.SourceM1M1();
            var    c1 = worker.SourceP0M1();
            var    c2 = worker.SourceP1M1();
            var    c3 = worker.SourceM1P0();
            var    c4 = worker.SourceP0P0();
            var    c5 = worker.SourceP1P0();
            var    c6 = worker.SourceM1P1();
            var    c7 = worker.SourceP0P1();
            var    c8 = worker.SourceP1P1();
            sPixel e01, e10, e11;
            var    e00 = e01 = e10 = e11 = c4;

            if ((c1.IsLike(c0)) && (c1.IsLike(c3)))
            {
                e00 = sPixel.Interpolate(c1, c0, c3);
            }

            if ((c2.IsLike(c1)) && (c2.IsLike(c5)))
            {
                e01 = sPixel.Interpolate(c2, c1, c5);
            }

            if ((c6.IsLike(c3)) && (c6.IsLike(c7)))
            {
                e10 = sPixel.Interpolate(c6, c3, c7);
            }

            if ((c7.IsLike(c5)) && (c7.IsLike(c8)))
            {
                e11 = sPixel.Interpolate(c7, c5, c8);
            }

            worker.TargetP0P0(e00);
            worker.TargetP1P0(e01);
            worker.TargetP0P1(e10);
            worker.TargetP1P1(e11);
        }
Beispiel #39
0
        /// <summary>
        /// Calculates the fast fourier transform of the image.
        /// </summary>
        /// <param name="image">The image to get calculate the FFT from.</param>
        /// <param name="shiftAxes">Whether to perform FFTShift on the Fourier image.</param>
        /// <param name="ignoreAlpha">Whether to ignore the alpha component of the image (if it is 32-bit).</param>
        /// <param name="disposeImage">Whether to dispose the image after use.</param>
        /// <param name="targetWidth">The height to resize the kernel to, or -1 to leave kernel same width. Can only be larger than the kernel width.</param>
        /// <param name="targetHeight">The height to resize the kernel to, or -1 to leave kernel same height. Can only be larger than the kernel height.</param>
        public FourierWorker(PixelWorker image, bool shiftAxes = true, bool ignoreAlpha = false, bool disposeImage = false, int targetWidth = -1, int targetHeight = -1)
        {
            if (image == null)
            {
                return;
            }
            int componentCount = image.ComponentCount, targetPixelCount = image.PixelCount;

            if (ignoreAlpha && componentCount == 4)
            {
                componentCount = 3;
                alphaReference = image;
                alphaReference.ShallowClone();
            }
            values                     = new ComplexF[componentCount][];
            ComponentCount             = componentCount;
            TargetWidth                = image.Width;
            TargetHeight               = image.Height;
            TargetPixelCount           = image.PixelCount;
            TargetPixelComponentCount  = image.PixelComponentCount;
            TargetSize                 = new Size(TargetWidth, TargetHeight);
            FourierWidth               = (int)Maths.CeilingPowerOfTwo((uint)(targetWidth <= TargetWidth ? TargetWidth : targetWidth));
            FourierHeight              = (int)Maths.CeilingPowerOfTwo((uint)(targetHeight <= TargetHeight ? TargetHeight : targetHeight));
            FourierSize                = new Size(FourierWidth, FourierHeight);
            FourierPixelCount          = FourierWidth * FourierHeight;
            FourierPixelComponentCount = FourierPixelCount * ComponentCount;
            fourierWidthLog2           = Maths.Log2((uint)FourierWidth);
            fourierHeightLog2          = Maths.Log2((uint)FourierHeight);
            ComplexF[] current;
            byte       comp;
            int        c, x = 0, y = 0, fourierWidth = FourierWidth, fourierHeight = FourierHeight, tw = TargetWidth;
            int        tcc = image.ComponentCount, txMinusOne = TargetWidth - 1, tyMinusOne = TargetHeight - 1;

            for (c = 0; c < componentCount; c++)
            {
                current   = new ComplexF[FourierPixelCount];
                values[c] = current;
                for (y = 0; y < fourierHeight; y++)
                {
                    for (x = 0; x < fourierWidth; x++)
                    {
                        comp = image.GetPixelBgra((Math.Min(y, tyMinusOne) * tw + Math.Min(x, txMinusOne)) * tcc)[c];
                        if (comp > OriginalMax)
                        {
                            OriginalMax = comp;
                        }
                        current[y * fourierWidth + x] = new ComplexF()
                        {
                            Real = comp,
                        };
                    }
                }
            }
            NormalizationCap = OriginalMax;
            FFT(true);
            if (shiftAxes)
            {
                ShiftAxes = true;
                FFTShift();
            }
            if (disposeImage)
            {
                image.Dispose();
            }
        }
    private cImage _RunLoop(Rectangle? filterRegion, byte scaleX, byte scaleY, Action<PixelWorker<sPixel>> scaler) {
      var startX = filterRegion == null ? 0 : Math.Max(0, filterRegion.Value.Left);
      var startY = filterRegion == null ? 0 : Math.Max(0, filterRegion.Value.Top);

      var endX = filterRegion == null ? this.Width : Math.Min(this.Width, filterRegion.Value.Right);
      var endY = filterRegion == null ? this.Height : Math.Min(this.Height, filterRegion.Value.Bottom);

      var width = endX - startX;

      var result = new cImage(width * scaleX, (endY - startY) * scaleY);
          
      Parallel.ForEach(
        Partitioner.Create(startY, endY),
        () => 0,
        (range, _, threadStorage) => {
          var threadSrcMinY = range.Item1;
          var threadSrcMaxY = range.Item2;
          
          var targetY = (threadSrcMinY - startY) * scaleY;
          for (var sourceY = threadSrcMinY; sourceY < threadSrcMaxY;++sourceY) {
            var worker=new PixelWorker<sPixel>(
              this.GetImageData(), 
              startX,
              sourceY, 
              this._width, 
              this._height, 
              this._horizontalOutOfBoundsHandler,
              this._verticalOutOfBoundsHandler, 
              result.GetImageData(), 
              0, 
              targetY, 
              result._width
            );
            var xRange=width;
            while(xRange>=64){
              xRange-=64;
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
              scaler(worker);
              worker.IncrementX(scaleX);
            }
            for (; xRange>0;--xRange) {
              scaler(worker);
              worker.IncrementX(scaleX);
            }
            
            targetY += scaleY;
          }
          return (threadStorage);
        },
        _ => { }
      );

      return(result);
    }
Beispiel #41
0
 /// <summary>
 /// Andrea Mazzoleni's Scale2X modified by Hawkynt to support thresholds
 /// </summary>
 public static void Scale2x(PixelWorker<sPixel> worker) {
   var c1 = worker.SourceP0M1();
   var c3 = worker.SourceM1P0();
   var c4 = worker.SourceP0P0();
   var c5 = worker.SourceP1P0();
   var c7 = worker.SourceP0P1();
   sPixel e01, e10, e11;
   var e00 = e01 = e10 = e11 = c4;
   if (c3.IsNotLike(c5) && c1.IsNotLike(c7)) {
     if (c1.IsLike(c3)) {
       e00 = sPixel.Interpolate(c1, c3);
     }
     if (c1.IsLike(c5)) {
       e01 = sPixel.Interpolate(c1, c5);
     }
     if (c7.IsLike(c3)) {
       e10 = sPixel.Interpolate(c7, c3);
     }
     if (c7.IsLike(c5)) {
       e11 = sPixel.Interpolate(c7, c5);
     }
   }
   worker.TargetP0P0(e00);
   worker.TargetP1P0(e01);
   worker.TargetP0P1(e10);
   worker.TargetP1P1(e11);
 }
Beispiel #42
0
    // TODO: to be really exact, the comparisons are not that right by comparing to already interpolated values
    // TODO: when interpolating 3 or more points I'm using already calculated interpolations and weight them further
    //       which is not the mathematically correct approach, but it's enough - at least for now
    /// <summary>
    /// Kreed's SuperEagle modified by Hawkynt to allow thresholds
    /// </summary>
    public static void SuperEagle(PixelWorker<sPixel> worker) {
      var c0 = worker.SourceM1M1();
      var c1 = worker.SourceP0M1();
      var c2 = worker.SourceP1M1();
      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 d1 = worker.SourceP0P2();
      var d2 = worker.SourceP1P2();

      sPixel e00 = c4, e11 = c4;
      sPixel e01, e10;
      if (c4.IsLike(c8)) {
        var c48 = sPixel.Interpolate(c4, c8);
        if (c7.IsLike(c5)) {
          var c57 = sPixel.Interpolate(c5, c7);
          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) {
            e10 = c57;
            e01 = c57;
            e11 = sPixel.Interpolate(c48, c57);
            e00 = sPixel.Interpolate(c48, c57);
          } else if (conc2D < 0) {
            e10 = sPixel.Interpolate(c48, c57);
            e01 = sPixel.Interpolate(c48, c57);
          } else {
            e10 = c57;
            e01 = c57;
          }
        } else {
          if (c48.IsLike(c1) && c48.IsLike(d5))
            e01 = sPixel.Interpolate(sPixel.Interpolate(c48, c1, d5), c5, 3, 1);
          else if (c48.IsLike(c1))
            e01 = sPixel.Interpolate(sPixel.Interpolate(c48, c1), c5, 3, 1);
          else if (c48.IsLike(d5))
            e01 = sPixel.Interpolate(sPixel.Interpolate(c48, d5), c5, 3, 1);
          else
            e01 = sPixel.Interpolate(c48, c5);

          if (c48.IsLike(d2) && c48.IsLike(c3))
            e10 = sPixel.Interpolate(sPixel.Interpolate(c48, d2, c3), c7, 3, 1);
          else if (c48.IsLike(d2))
            e10 = sPixel.Interpolate(sPixel.Interpolate(c48, d2), c7, 3, 1);
          else if (c48.IsLike(c3))
            e10 = sPixel.Interpolate(sPixel.Interpolate(c48, c3), c7, 3, 1);
          else
            e10 = sPixel.Interpolate(c48, c7);

        }
      } else {
        if (c7.IsLike(c5)) {
          var c57 = sPixel.Interpolate(c5, c7);
          e01 = c57;
          e10 = c57;

          if (c57.IsLike(c6) && c57.IsLike(c2))
            e00 = sPixel.Interpolate(sPixel.Interpolate(c57, c6, c2), c4, 3, 1);
          else if (c57.IsLike(c6))
            e00 = sPixel.Interpolate(sPixel.Interpolate(c57, c6), c4, 3, 1);
          else if (c57.IsLike(c2))
            e00 = sPixel.Interpolate(sPixel.Interpolate(c57, c2), c4, 3, 1);
          else
            e00 = sPixel.Interpolate(c57, c4);

          if (c57.IsLike(d4) && c57.IsLike(d1))
            e11 = sPixel.Interpolate(sPixel.Interpolate(c57, d4, d1), c8, 3, 1);
          else if (c57.IsLike(d4))
            e11 = sPixel.Interpolate(sPixel.Interpolate(c57, d4), c8, 3, 1);
          else if (c57.IsLike(d1))
            e11 = sPixel.Interpolate(sPixel.Interpolate(c57, d1), c8, 3, 1);
          else
            e11 = sPixel.Interpolate(c57, c8);

        } else {
          e11 = sPixel.Interpolate(c8, c7, c5, 6, 1, 1);
          e00 = sPixel.Interpolate(c4, c7, c5, 6, 1, 1);
          e10 = sPixel.Interpolate(c7, c4, c8, 6, 1, 1);
          e01 = sPixel.Interpolate(c5, c4, c8, 6, 1, 1);
        }
      }

      worker.TargetP0P0(e00);
      worker.TargetP1P0(e01);
      worker.TargetP0P1(e10);
      worker.TargetP1P1(e11);
    }
Beispiel #43
0
    } // end sub

    /// <summary>
    /// body for HQ2xSmart etc. as seen in SNES9x
    /// </summary>
    public static void ComplexFilterSmart(PixelWorker<sPixel> worker, byte scaleX, byte scaleY, cImage.NqKernel kernel) {
      var c0 = worker.SourceM1M1();
      var c2 = worker.SourceP1M1();
      var c4 = worker.SourceP0P0();
      var c6 = worker.SourceM1P1();
      var c8 = worker.SourceP1P1();
      if (c0.IsLike(c4) || c2.IsLike(c4) || c6.IsLike(c4) || c8.IsLike(c4))
        ComplexFilter(worker, scaleX, scaleY, kernel);
      else
        ComplexFilterBold(worker, scaleX, scaleY, kernel);
    } // end sub
Beispiel #44
0
        // TODO: to be really exact, the comparisons are not that right by comparing to already interpolated values
        // TODO: when interpolating 3 or more points I'm using already calculated interpolations and weight them further
        //       which is not the mathematically correct approach, but it's enough - at least for now
        /// <summary>
        /// Kreed's SuperEagle modified by Hawkynt to allow thresholds
        /// </summary>
        public static void SuperEagle(PixelWorker <sPixel> worker)
        {
            var c0 = worker.SourceM1M1();
            var c1 = worker.SourceP0M1();
            var c2 = worker.SourceP1M1();
            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 d1 = worker.SourceP0P2();
            var d2 = worker.SourceP1P2();

            sPixel e00 = c4, e11 = c4;
            sPixel e01, e10;

            if (c4.IsLike(c8))
            {
                var c48 = sPixel.Interpolate(c4, c8);
                if (c7.IsLike(c5))
                {
                    var c57    = sPixel.Interpolate(c5, c7);
                    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)
                    {
                        e10 = c57;
                        e01 = c57;
                        e11 = sPixel.Interpolate(c48, c57);
                        e00 = sPixel.Interpolate(c48, c57);
                    }
                    else if (conc2D < 0)
                    {
                        e10 = sPixel.Interpolate(c48, c57);
                        e01 = sPixel.Interpolate(c48, c57);
                    }
                    else
                    {
                        e10 = c57;
                        e01 = c57;
                    }
                }
                else
                {
                    if (c48.IsLike(c1) && c48.IsLike(d5))
                    {
                        e01 = sPixel.Interpolate(sPixel.Interpolate(c48, c1, d5), c5, 3, 1);
                    }
                    else if (c48.IsLike(c1))
                    {
                        e01 = sPixel.Interpolate(sPixel.Interpolate(c48, c1), c5, 3, 1);
                    }
                    else if (c48.IsLike(d5))
                    {
                        e01 = sPixel.Interpolate(sPixel.Interpolate(c48, d5), c5, 3, 1);
                    }
                    else
                    {
                        e01 = sPixel.Interpolate(c48, c5);
                    }

                    if (c48.IsLike(d2) && c48.IsLike(c3))
                    {
                        e10 = sPixel.Interpolate(sPixel.Interpolate(c48, d2, c3), c7, 3, 1);
                    }
                    else if (c48.IsLike(d2))
                    {
                        e10 = sPixel.Interpolate(sPixel.Interpolate(c48, d2), c7, 3, 1);
                    }
                    else if (c48.IsLike(c3))
                    {
                        e10 = sPixel.Interpolate(sPixel.Interpolate(c48, c3), c7, 3, 1);
                    }
                    else
                    {
                        e10 = sPixel.Interpolate(c48, c7);
                    }
                }
            }
            else
            {
                if (c7.IsLike(c5))
                {
                    var c57 = sPixel.Interpolate(c5, c7);
                    e01 = c57;
                    e10 = c57;

                    if (c57.IsLike(c6) && c57.IsLike(c2))
                    {
                        e00 = sPixel.Interpolate(sPixel.Interpolate(c57, c6, c2), c4, 3, 1);
                    }
                    else if (c57.IsLike(c6))
                    {
                        e00 = sPixel.Interpolate(sPixel.Interpolate(c57, c6), c4, 3, 1);
                    }
                    else if (c57.IsLike(c2))
                    {
                        e00 = sPixel.Interpolate(sPixel.Interpolate(c57, c2), c4, 3, 1);
                    }
                    else
                    {
                        e00 = sPixel.Interpolate(c57, c4);
                    }

                    if (c57.IsLike(d4) && c57.IsLike(d1))
                    {
                        e11 = sPixel.Interpolate(sPixel.Interpolate(c57, d4, d1), c8, 3, 1);
                    }
                    else if (c57.IsLike(d4))
                    {
                        e11 = sPixel.Interpolate(sPixel.Interpolate(c57, d4), c8, 3, 1);
                    }
                    else if (c57.IsLike(d1))
                    {
                        e11 = sPixel.Interpolate(sPixel.Interpolate(c57, d1), c8, 3, 1);
                    }
                    else
                    {
                        e11 = sPixel.Interpolate(c57, c8);
                    }
                }
                else
                {
                    e11 = sPixel.Interpolate(c8, c7, c5, 6, 1, 1);
                    e00 = sPixel.Interpolate(c4, c7, c5, 6, 1, 1);
                    e10 = sPixel.Interpolate(c7, c4, c8, 6, 1, 1);
                    e01 = sPixel.Interpolate(c5, c4, c8, 6, 1, 1);
                }
            }

            worker.TargetP0P0(e00);
            worker.TargetP1P0(e01);
            worker.TargetP0P1(e10);
            worker.TargetP1P1(e11);
        }
Beispiel #45
0
        /// <summary>
        /// Kreed's SuperSaI
        /// </summary>
        public static void SuperSaI(PixelWorker <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);
        }
Beispiel #46
0
        /// <summary>
        /// Derek Liauw Kie Fa's 2XSaI
        /// </summary>
        public static void SaI2X(PixelWorker <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();

            sPixel e01, e10, e11;
            var    e00 = e01 = e10 = e11 = c4;

            if (c4.IsLike(c8) && c5.IsNotLike(c7))
            {
                var c48 = sPixel.Interpolate(c4, c8);
                if ((c48.IsLike(c1) && c5.IsLike(d5)) || (c48.IsLike(c7) && c48.IsLike(c2) && c5.IsNotLike(c1) && c5.IsLike(d3)))
                {
                    //nothing
                }
                else
                {
                    e01 = sPixel.Interpolate(c48, c5);
                }

                if ((c48.IsLike(c3) && c7.IsLike(d2)) || (c48.IsLike(c5) && c48.IsLike(c6) && c3.IsNotLike(c7) && c7.IsLike(d0)))
                {
                    //nothing
                }
                else
                {
                    e10 = sPixel.Interpolate(c48, c7);
                }
            }
            else if (c5.IsLike(c7) && c4.IsNotLike(c8))
            {
                var c57 = sPixel.Interpolate(c5, c7);
                if ((c57.IsLike(c2) && c4.IsLike(c6)) || (c57.IsLike(c1) && c57.IsLike(c8) && c4.IsNotLike(c2) && c4.IsLike(c0)))
                {
                    e01 = c57;
                }
                else
                {
                    e01 = sPixel.Interpolate(c4, c57);
                }

                if ((c57.IsLike(c6) && c4.IsLike(c2)) || (c57.IsLike(c3) && c57.IsLike(c8) && c4.IsNotLike(c6) && c4.IsLike(c0)))
                {
                    e10 = c57;
                }
                else
                {
                    e10 = sPixel.Interpolate(c4, c57);
                }
                e11 = c57;
            }
            else if (c4.IsLike(c8) && c5.IsLike(c7))
            {
                var c48 = sPixel.Interpolate(c4, c8);
                var c57 = sPixel.Interpolate(c5, c7);
                if (c48.IsNotLike(c57))
                {
                    var conc2D = 0;
                    conc2D += _Conc2D(c48, c57, c3, c1);
                    conc2D -= _Conc2D(c57, c48, d4, c2);
                    conc2D -= _Conc2D(c57, c48, c6, d1);
                    conc2D += _Conc2D(c48, c57, d5, d2);

                    if (conc2D < 0)
                    {
                        e11 = c57;
                    }
                    else if (conc2D == 0)
                    {
                        e11 = sPixel.Interpolate(c48, c57);
                    }
                    e10 = sPixel.Interpolate(c48, c57);
                    e01 = sPixel.Interpolate(c48, c57);
                }
            }
            else
            {
                e11 = sPixel.Interpolate(c4, c5, c7, c8);

                if (c4.IsLike(c7) && c4.IsLike(c2) && c5.IsNotLike(c1) && c5.IsLike(d3))
                {
                    //nothing
                }
                else if (c5.IsLike(c1) && c5.IsLike(c8) && c4.IsNotLike(c2) && c4.IsLike(c0))
                {
                    e01 = sPixel.Interpolate(c5, c1, c8);
                }
                else
                {
                    e01 = sPixel.Interpolate(c4, c5);
                }

                if (c4.IsLike(c5) && c4.IsLike(c6) && c3.IsNotLike(c7) && c7.IsLike(d0))
                {
                    //nothing
                }
                else if (c7.IsLike(c3) && c7.IsLike(c8) && c4.IsNotLike(c6) && c4.IsLike(c0))
                {
                    e10 = sPixel.Interpolate(c7, c3, c8);
                }
                else
                {
                    e10 = sPixel.Interpolate(c4, c7);
                }
            }

            worker.TargetP0P0(e00);
            worker.TargetP1P0(e01);
            worker.TargetP0P1(e10);
            worker.TargetP1P1(e11);
        }
Beispiel #47
0
    /// <summary>
    /// Derek Liauw Kie Fa's 2XSaI
    /// </summary>
    public static void SaI2X(PixelWorker<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();

      sPixel e01, e10, e11;
      var e00 = e01 = e10 = e11 = c4;

      if (c4.IsLike(c8) && c5.IsNotLike(c7)) {
        var c48 = sPixel.Interpolate(c4, c8);
        if ((c48.IsLike(c1) && c5.IsLike(d5)) || (c48.IsLike(c7) && c48.IsLike(c2) && c5.IsNotLike(c1) && c5.IsLike(d3))) {
          //nothing
        } else {
          e01 = sPixel.Interpolate(c48, c5);
        }

        if ((c48.IsLike(c3) && c7.IsLike(d2)) || (c48.IsLike(c5) && c48.IsLike(c6) && c3.IsNotLike(c7) && c7.IsLike(d0))) {
          //nothing
        } else {
          e10 = sPixel.Interpolate(c48, c7);
        }
      } else if (c5.IsLike(c7) && c4.IsNotLike(c8)) {
        var c57 = sPixel.Interpolate(c5, c7);
        if ((c57.IsLike(c2) && c4.IsLike(c6)) || (c57.IsLike(c1) && c57.IsLike(c8) && c4.IsNotLike(c2) && c4.IsLike(c0))) {
          e01 = c57;
        } else {
          e01 = sPixel.Interpolate(c4, c57);
        }

        if ((c57.IsLike(c6) && c4.IsLike(c2)) || (c57.IsLike(c3) && c57.IsLike(c8) && c4.IsNotLike(c6) && c4.IsLike(c0))) {
          e10 = c57;
        } else {
          e10 = sPixel.Interpolate(c4, c57);
        }
        e11 = c57;
      } else if (c4.IsLike(c8) && c5.IsLike(c7)) {
        var c48 = sPixel.Interpolate(c4, c8);
        var c57 = sPixel.Interpolate(c5, c7);
        if (c48.IsNotLike(c57)) {
          var conc2D = 0;
          conc2D += _Conc2D(c48, c57, c3, c1);
          conc2D -= _Conc2D(c57, c48, d4, c2);
          conc2D -= _Conc2D(c57, c48, c6, d1);
          conc2D += _Conc2D(c48, c57, d5, d2);

          if (conc2D < 0) {
            e11 = c57;
          } else if (conc2D == 0) {
            e11 = sPixel.Interpolate(c48, c57);
          }
          e10 = sPixel.Interpolate(c48, c57);
          e01 = sPixel.Interpolate(c48, c57);
        }
      } else {
        e11 = sPixel.Interpolate(c4, c5, c7, c8);

        if (c4.IsLike(c7) && c4.IsLike(c2) && c5.IsNotLike(c1) && c5.IsLike(d3)) {
          //nothing
        } else if (c5.IsLike(c1) && c5.IsLike(c8) && c4.IsNotLike(c2) && c4.IsLike(c0)) {
          e01 = sPixel.Interpolate(c5, c1, c8);
        } else {
          e01 = sPixel.Interpolate(c4, c5);
        }

        if (c4.IsLike(c5) && c4.IsLike(c6) && c3.IsNotLike(c7) && c7.IsLike(d0)) {
          //nothing
        } else if (c7.IsLike(c3) && c7.IsLike(c8) && c4.IsNotLike(c6) && c4.IsLike(c0)) {
          e10 = sPixel.Interpolate(c7, c3, c8);
        } else {
          e10 = sPixel.Interpolate(c4, c7);
        }
      }

      worker.TargetP0P0(e00);
      worker.TargetP1P0(e01);
      worker.TargetP0P1(e10);
      worker.TargetP1P1(e11);
    }
Beispiel #48
0
 /// <summary>
 /// Calculates the fast fourier transform of the image.
 /// </summary>
 /// <param name="image">The image to get calculate the FFT from.</param>
 /// <param name="shiftAxes">Whether to perform FFTShift on the Fourier image.</param>
 /// <param name="ignoreAlpha">Whether to ignore the alpha component of the image (if it is 32-bit).</param>
 /// <param name="disposeImage">Whether to dispose the image after use.</param>
 /// <param name="targetWidth">The height to resize the kernel to, or -1 to leave kernel same width. Can only be larger than the kernel width.</param>
 /// <param name="targetHeight">The height to resize the kernel to, or -1 to leave kernel same height. Can only be larger than the kernel height.</param>
 public FourierWorker(Bitmap image, bool shiftAxes = true, bool ignoreAlpha = false, bool disposeImage = false, int targetWidth = -1, int targetHeight = -1) : this(PixelWorker.FromImage(image, false, false, disposeImage ? ImageParameterAction.Dispose : ImageParameterAction.RemoveReference), shiftAxes, ignoreAlpha, true, targetWidth, targetHeight)
 {
 }
Beispiel #49
0
 /// <summary>
 /// Vertical scanlines
 /// </summary>
 public static void VerticalScanlines(PixelWorker<sPixel>worker , float grayFactor) {
   var pixel = worker.SourceP0P0();
   worker.TargetP0P0(pixel);
   var factor = grayFactor / 100f + 1f;
   worker.TargetP1P0( pixel * factor);
 }
Beispiel #50
0
    /// <summary>
    /// This is the XBR4x by Hyllian (see http://board.byuu.org/viewtopic.php?f=10&t=2248)
    /// </summary>
    public static void Xbr4X(PixelWorker<sPixel> worker, bool allowAlphaBlending) {
      Contract.Assume(worker != null);
      var a1 = worker.SourceM1M2();
      var b1 = worker.SourceP0M2();
      var c1 = worker.SourceP1M2();

      var a0 = worker.SourceM2M1();
      var pa = worker.SourceM1M1();
      var pb = worker.SourceP0M1();
      var pc = worker.SourceP1M1();
      var c4 = worker.SourceP2M1();

      var d0 = worker.SourceM2P0();
      var pd = worker.SourceM1P0();
      var pe = worker.SourceP0P0();
      var pf = worker.SourceP1P0();
      var f4 = worker.SourceP2P0();

      var g0 = worker.SourceM2P1();
      var pg = worker.SourceM1P1();
      var ph = worker.SourceP0P1();
      var pi = worker.SourceP1P1();
      var i4 = worker.SourceP2P1();

      var g5 = worker.SourceM1P2();
      var h5 = worker.SourceP0P2();
      var i5 = worker.SourceP1P2();

      sPixel e1, e2, e3, e4, e5, e6, e7, e8, e9, ea, eb, ec, ed, ee, ef;
      var e0 = e1 = e2 = e3 = e4 = e5 = e6 = e7 = e8 = e9 = ea = eb = ec = ed = ee = ef = pe;

      _Kernel4Xv2(pe, pi, ph, pf, pg, pc, pd, pb, f4, i4, h5, i5, ref ef, ref ee, ref eb, ref e3, ref e7, ref ea, ref ed, ref ec, allowAlphaBlending);
      _Kernel4Xv2(pe, pc, pf, pb, pi, pa, ph, pd, b1, c1, f4, c4, ref e3, ref e7, ref e2, ref e0, ref e1, ref e6, ref eb, ref ef, allowAlphaBlending);
      _Kernel4Xv2(pe, pa, pb, pd, pc, pg, pf, ph, d0, a0, b1, a1, ref e0, ref e1, ref e4, ref ec, ref e8, ref e5, ref e2, ref e3, allowAlphaBlending);
      _Kernel4Xv2(pe, pg, pd, ph, pa, pi, pb, pf, h5, g5, d0, g0, ref ec, ref e8, ref ed, ref ef, ref ee, ref e9, ref e4, ref e0, allowAlphaBlending);

      worker.TargetP0P0(e0);
      worker.TargetP1P0(e1);
      worker.TargetP2P0(e2);
      worker.TargetP3P0(e3);
      worker.TargetP0P1(e4);
      worker.TargetP1P1(e5);
      worker.TargetP2P1(e6);
      worker.TargetP3P1(e7);
      worker.TargetP0P2(e8);
      worker.TargetP1P2(e9);
      worker.TargetP2P2(ea);
      worker.TargetP3P2(eb);
      worker.TargetP0P3(ec);
      worker.TargetP1P3(ed);
      worker.TargetP2P3(ee);
      worker.TargetP3P3(ef);
    }
Beispiel #51
0
    /// <summary>
    /// Andrea Mazzoleni's Scale3X modified by Hawkynt to support thresholds
    /// </summary>
    public static void Scale3x(PixelWorker<sPixel> worker) {
      var c0 = worker.SourceM1M1();
      var c1 = worker.SourceP0M1();
      var c2 = worker.SourceP1M1();
      var c3 = worker.SourceM1P0();
      var c4 = worker.SourceP0P0();
      var c5 = worker.SourceP1P0();
      var c6 = worker.SourceM1P1();
      var c7 = worker.SourceP0P1();
      var c8 = worker.SourceP1P1();
      sPixel e01, e02, e10, e11, e12, e20, e21, e22 = c4;
      var e00 = e01 = e02 = e10 = e11 = e12 = e20 = e21 = e22 = c4;
      if (c1.IsNotLike(c7) && c3.IsNotLike(c5)) {
        if (c3.IsLike(c1))
          e00 = sPixel.Interpolate(c3, c1);
        if (c1.IsLike(c5))
          e02 = sPixel.Interpolate(c1, c5);
        if (c3.IsLike(c7))
          e20 = sPixel.Interpolate(c3, c7);
        if (c7.IsLike(c5))
          e22 = sPixel.Interpolate(c7, c5);

        if (
          (c3.IsLike(c1) && c4.IsNotLike(c2)) &&
          (c5.IsLike(c1) && c4.IsNotLike(c0))
          )
          e01 = sPixel.Interpolate(c1, c3, c5);
        else if (c3.IsLike(c1) && c4.IsNotLike(c2))
          e01 = sPixel.Interpolate(c3, c1);
        else if (c5.IsLike(c1) && c4.IsNotLike(c0))
          e01 = sPixel.Interpolate(c5, c1);

        if (
          (c3.IsLike(c1) && c4.IsNotLike(c6)) &&
          (c3.IsLike(c7) && c4.IsNotLike(c0))
          )
          e10 = sPixel.Interpolate(c3, c1, c7);
        else if (c3.IsLike(c1) && c4.IsNotLike(c6))
          e10 = sPixel.Interpolate(c3, c1);
        else if (c3.IsLike(c7) && c4.IsNotLike(c0))
          e10 = sPixel.Interpolate(c3, c7);

        if (
          (c5.IsLike(c1) && c4.IsNotLike(c8)) &&
          (c5.IsLike(c7) && c4.IsNotLike(c2))
          )
          e12 = sPixel.Interpolate(c5, c1, c7);
        else if (c5.IsLike(c1) && c4.IsNotLike(c8))
          e12 = sPixel.Interpolate(c5, c1);
        else if (c5.IsLike(c7) && c4.IsNotLike(c2))
          e12 = sPixel.Interpolate(c5, c7);

        if (
          (c3.IsLike(c7) && c4.IsNotLike(c8)) &&
          (c5.IsLike(c7) && c4.IsNotLike(c6))
          )
          e21 = sPixel.Interpolate(c7, c3, c5);
        else if (c3.IsLike(c7) && c4.IsNotLike(c8))
          e21 = sPixel.Interpolate(c3, c7);
        else if (c5.IsLike(c7) && c4.IsNotLike(c6))
          e21 = sPixel.Interpolate(c5, c7);

      }
      worker.TargetP0P0(e00);
      worker.TargetP1P0(e01);
      worker.TargetP2P0(e02);
      worker.TargetP0P1(e10);
      worker.TargetP1P1(e11);
      worker.TargetP2P1(e12);
      worker.TargetP0P2(e20);
      worker.TargetP1P2(e21);
      worker.TargetP2P2(e22);
    }
Beispiel #52
0
        /// <summary>
        /// SNES9x's EPX3 modified by Hawkynt to support thresholds
        /// </summary>
        public static void Epx3(PixelWorker <sPixel> worker)
        {
            var    c0 = worker.SourceM1M1();
            var    c1 = worker.SourceP0M1();
            var    c2 = worker.SourceP1M1();
            var    c3 = worker.SourceM1P0();
            var    c4 = worker.SourceP0P0();
            var    c5 = worker.SourceP1P0();
            var    c6 = worker.SourceM1P1();
            var    c7 = worker.SourceP0P1();
            var    c8 = worker.SourceP1P1();
            sPixel e01, e02, e10, e11, e12, e20, e21, e22;
            var    e00 = e01 = e02 = e10 = e11 = e12 = e20 = e21 = e22 = c4;

            if (c3.IsNotLike(c5) && c7.IsNotLike(c1))
            {
                var neq40 = c4.IsNotLike(c0);
                var neq41 = c4.IsNotLike(c1);
                var neq42 = c4.IsNotLike(c2);
                var neq43 = c4.IsNotLike(c3);
                var neq45 = c4.IsNotLike(c5);
                var neq46 = c4.IsNotLike(c6);
                var neq47 = c4.IsNotLike(c7);
                var neq48 = c4.IsNotLike(c8);

                var eq13 = c1.IsLike(c3) && (neq40 || neq48 || c1.IsNotLike(c2) || c3.IsNotLike(c6));
                var eq37 = c3.IsLike(c7) && (neq46 || neq42 || c3.IsNotLike(c0) || c7.IsNotLike(c8));
                var eq75 = c7.IsLike(c5) && (neq48 || neq40 || c7.IsNotLike(c6) || c5.IsNotLike(c2));
                var eq51 = c5.IsLike(c1) && (neq42 || neq46 || c5.IsNotLike(c8) || c1.IsNotLike(c0));
                if (
                    (!neq40) ||
                    (!neq41) ||
                    (!neq42) ||
                    (!neq43) ||
                    (!neq45) ||
                    (!neq46) ||
                    (!neq47) ||
                    (!neq48)
                    )
                {
                    if (eq13)
                    {
                        e00 = sPixel.Interpolate(c1, c3);
                    }
                    if (eq51)
                    {
                        e02 = sPixel.Interpolate(c5, c1);
                    }
                    if (eq37)
                    {
                        e20 = sPixel.Interpolate(c3, c7);
                    }
                    if (eq75)
                    {
                        e22 = sPixel.Interpolate(c7, c5);
                    }

                    if ((eq51 && neq40) && (eq13 && neq42))
                    {
                        e01 = sPixel.Interpolate(c1, c3, c5);
                    }
                    else if (eq51 && neq40)
                    {
                        e01 = sPixel.Interpolate(c1, c5);
                    }
                    else if (eq13 && neq42)
                    {
                        e01 = sPixel.Interpolate(c1, c3);
                    }

                    if ((eq13 && neq46) && (eq37 && neq40))
                    {
                        e10 = sPixel.Interpolate(c3, c1, c7);
                    }
                    else if (eq13 && neq46)
                    {
                        e10 = sPixel.Interpolate(c3, c1);
                    }
                    else if (eq37 && neq40)
                    {
                        e10 = sPixel.Interpolate(c3, c7);
                    }

                    if ((eq75 && neq42) && (eq51 && neq48))
                    {
                        e12 = sPixel.Interpolate(c5, c1, c7);
                    }
                    else if (eq75 && neq42)
                    {
                        e12 = sPixel.Interpolate(c5, c7);
                    }
                    else if (eq51 && neq48)
                    {
                        e12 = sPixel.Interpolate(c5, c1);
                    }

                    if ((eq37 && neq48) && (eq75 && neq46))
                    {
                        e21 = sPixel.Interpolate(c7, c3, c5);
                    }
                    else if (eq75 && neq46)
                    {
                        e21 = sPixel.Interpolate(c7, c5);
                    }
                    else if (eq37 && neq48)
                    {
                        e21 = sPixel.Interpolate(c7, c3);
                    }
                }
                else
                {
                    if (eq13)
                    {
                        e00 = sPixel.Interpolate(c1, c3);
                    }
                    if (eq51)
                    {
                        e02 = sPixel.Interpolate(c5, c1);
                    }
                    if (eq37)
                    {
                        e20 = sPixel.Interpolate(c3, c7);
                    }
                    if (eq75)
                    {
                        e22 = sPixel.Interpolate(c7, c5);
                    }
                }
            }

            worker.TargetP0P0(e00);
            worker.TargetP1P0(e01);
            worker.TargetP2P0(e02);
            worker.TargetP0P1(e10);
            worker.TargetP1P1(e11);
            worker.TargetP2P1(e12);
            worker.TargetP0P2(e20);
            worker.TargetP1P2(e21);
            worker.TargetP2P2(e22);
        }
Beispiel #53
0
    public static void Hq4xKernel(byte pattern, sPixel c0, sPixel c1, sPixel c2, sPixel c3, sPixel c4, sPixel c5, sPixel c6, sPixel c7, sPixel c8, PixelWorker<sPixel> worker) {
      sPixel e01, e02, e03, e10, e11, e12, e13, e20, e21, e22, e23, e30, e31, e32, e33;
      var e00 = e01 = e02 = e03 = e10 = e11 = e12 = e13 = e20 = e21 = e22 = e23 = e30 = e31 = e32 = e33 = c4;
      switch (pattern) {
        #region HQ4x PATTERNS

        case 0:
        case 1:
        case 4:
        case 5:
        case 32:
        case 33:
        case 36:
        case 37:
        case 128:
        case 129:
        case 132:
        case 133:
        case 160:
        case 161:
        case 164:
        case 165: {
          e00 = sPixel.Interpolate(c4, c1, c3, 2, 1, 1);
          e01 = sPixel.Interpolate(c4, c1, c3, 5, 2, 1);
          e02 = sPixel.Interpolate(c4, c1, c5, 5, 2, 1);
          e03 = sPixel.Interpolate(c4, c1, c5, 2, 1, 1);
          e10 = sPixel.Interpolate(c4, c3, c1, 5, 2, 1);
          e11 = sPixel.Interpolate(c4, c1, c3, 6, 1, 1);
          e12 = sPixel.Interpolate(c4, c1, c5, 6, 1, 1);
          e13 = sPixel.Interpolate(c4, c5, c1, 5, 2, 1);
          e20 = sPixel.Interpolate(c4, c3, c7, 5, 2, 1);
          e21 = sPixel.Interpolate(c4, c3, c7, 6, 1, 1);
          e22 = sPixel.Interpolate(c4, c5, c7, 6, 1, 1);
          e23 = sPixel.Interpolate(c4, c5, c7, 5, 2, 1);
          e30 = sPixel.Interpolate(c4, c3, c7, 2, 1, 1);
          e31 = sPixel.Interpolate(c4, c7, c3, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c7, c5, 5, 2, 1);
          e33 = sPixel.Interpolate(c4, c5, c7, 2, 1, 1);
        }
        break;
        case 2:
        case 34:
        case 130:
        case 162: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c0, 3, 1);
          e02 = sPixel.Interpolate(c4, c2, 3, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e10 = sPixel.Interpolate(c4, c3, c0, 5, 2, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c5, c2, 5, 2, 1);
          e20 = sPixel.Interpolate(c4, c3, c7, 5, 2, 1);
          e21 = sPixel.Interpolate(c4, c3, c7, 6, 1, 1);
          e22 = sPixel.Interpolate(c4, c5, c7, 6, 1, 1);
          e23 = sPixel.Interpolate(c4, c5, c7, 5, 2, 1);
          e30 = sPixel.Interpolate(c4, c3, c7, 2, 1, 1);
          e31 = sPixel.Interpolate(c4, c7, c3, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c7, c5, 5, 2, 1);
          e33 = sPixel.Interpolate(c4, c5, c7, 2, 1, 1);
        }
        break;
        case 3:
        case 35:
        case 131:
        case 163: {
          e00 = sPixel.Interpolate(c4, c3, 5, 3);
          e01 = sPixel.Interpolate(c4, c3, 7, 1);
          e02 = sPixel.Interpolate(c4, c2, 3, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e10 = sPixel.Interpolate(c4, c3, 5, 3);
          e11 = sPixel.Interpolate(c4, c3, 7, 1);
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c5, c2, 5, 2, 1);
          e20 = sPixel.Interpolate(c4, c3, c7, 5, 2, 1);
          e21 = sPixel.Interpolate(c4, c3, c7, 6, 1, 1);
          e22 = sPixel.Interpolate(c4, c5, c7, 6, 1, 1);
          e23 = sPixel.Interpolate(c4, c5, c7, 5, 2, 1);
          e30 = sPixel.Interpolate(c4, c3, c7, 2, 1, 1);
          e31 = sPixel.Interpolate(c4, c7, c3, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c7, c5, 5, 2, 1);
          e33 = sPixel.Interpolate(c4, c5, c7, 2, 1, 1);
        }
        break;
        case 6:
        case 38:
        case 134:
        case 166: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c0, 3, 1);
          e02 = sPixel.Interpolate(c4, c5, 7, 1);
          e03 = sPixel.Interpolate(c4, c5, 5, 3);
          e10 = sPixel.Interpolate(c4, c3, c0, 5, 2, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = sPixel.Interpolate(c4, c5, 7, 1);
          e13 = sPixel.Interpolate(c4, c5, 5, 3);
          e20 = sPixel.Interpolate(c4, c3, c7, 5, 2, 1);
          e21 = sPixel.Interpolate(c4, c3, c7, 6, 1, 1);
          e22 = sPixel.Interpolate(c4, c5, c7, 6, 1, 1);
          e23 = sPixel.Interpolate(c4, c5, c7, 5, 2, 1);
          e30 = sPixel.Interpolate(c4, c3, c7, 2, 1, 1);
          e31 = sPixel.Interpolate(c4, c7, c3, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c7, c5, 5, 2, 1);
          e33 = sPixel.Interpolate(c4, c5, c7, 2, 1, 1);
        }
        break;
        case 7:
        case 39:
        case 135:
        case 167: {
          e00 = sPixel.Interpolate(c4, c3, 5, 3);
          e01 = sPixel.Interpolate(c4, c3, 7, 1);
          e02 = sPixel.Interpolate(c4, c5, 7, 1);
          e03 = sPixel.Interpolate(c4, c5, 5, 3);
          e10 = sPixel.Interpolate(c4, c3, 5, 3);
          e11 = sPixel.Interpolate(c4, c3, 7, 1);
          e12 = sPixel.Interpolate(c4, c5, 7, 1);
          e13 = sPixel.Interpolate(c4, c5, 5, 3);
          e20 = sPixel.Interpolate(c4, c3, c7, 5, 2, 1);
          e21 = sPixel.Interpolate(c4, c3, c7, 6, 1, 1);
          e22 = sPixel.Interpolate(c4, c5, c7, 6, 1, 1);
          e23 = sPixel.Interpolate(c4, c5, c7, 5, 2, 1);
          e30 = sPixel.Interpolate(c4, c3, c7, 2, 1, 1);
          e31 = sPixel.Interpolate(c4, c7, c3, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c7, c5, 5, 2, 1);
          e33 = sPixel.Interpolate(c4, c5, c7, 2, 1, 1);
        }
        break;
        case 8:
        case 12:
        case 136:
        case 140: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c1, c0, 5, 2, 1);
          e02 = sPixel.Interpolate(c4, c1, c5, 5, 2, 1);
          e03 = sPixel.Interpolate(c4, c1, c5, 2, 1, 1);
          e10 = sPixel.Interpolate(c4, c0, 3, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = sPixel.Interpolate(c4, c1, c5, 6, 1, 1);
          e13 = sPixel.Interpolate(c4, c5, c1, 5, 2, 1);
          e20 = sPixel.Interpolate(c4, c6, 3, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = sPixel.Interpolate(c4, c5, c7, 6, 1, 1);
          e23 = sPixel.Interpolate(c4, c5, c7, 5, 2, 1);
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c7, c6, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c7, c5, 5, 2, 1);
          e33 = sPixel.Interpolate(c4, c5, c7, 2, 1, 1);
        }
        break;
        case 9:
        case 13:
        case 137:
        case 141: {
          e00 = sPixel.Interpolate(c4, c1, 5, 3);
          e01 = sPixel.Interpolate(c4, c1, 5, 3);
          e02 = sPixel.Interpolate(c4, c1, c5, 5, 2, 1);
          e03 = sPixel.Interpolate(c4, c1, c5, 2, 1, 1);
          e10 = sPixel.Interpolate(c4, c1, 7, 1);
          e11 = sPixel.Interpolate(c4, c1, 7, 1);
          e12 = sPixel.Interpolate(c4, c1, c5, 6, 1, 1);
          e13 = sPixel.Interpolate(c4, c5, c1, 5, 2, 1);
          e20 = sPixel.Interpolate(c4, c6, 3, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = sPixel.Interpolate(c4, c5, c7, 6, 1, 1);
          e23 = sPixel.Interpolate(c4, c5, c7, 5, 2, 1);
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c7, c6, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c7, c5, 5, 2, 1);
          e33 = sPixel.Interpolate(c4, c5, c7, 2, 1, 1);
        }
        break;
        case 10:
        case 138: {
          e02 = sPixel.Interpolate(c4, c2, 3, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c5, c2, 5, 2, 1);
          e20 = sPixel.Interpolate(c4, c6, 3, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = sPixel.Interpolate(c4, c5, c7, 6, 1, 1);
          e23 = sPixel.Interpolate(c4, c5, c7, 5, 2, 1);
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c7, c6, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c7, c5, 5, 2, 1);
          e33 = sPixel.Interpolate(c4, c5, c7, 2, 1, 1);
          if (c1.IsNotLike(c3)) {
            e00 = sPixel.Interpolate(c4, c0, 5, 3);
            e01 = sPixel.Interpolate(c4, c0, 3, 1);
            e10 = sPixel.Interpolate(c4, c0, 3, 1);
            e11 = sPixel.Interpolate(c4, c0, 7, 1);
          } else {
            e00 = sPixel.Interpolate(c1, c3, 1, 1);
            e01 = sPixel.Interpolate(c1, c4, 1, 1);
            e10 = sPixel.Interpolate(c3, c4, 1, 1);
            e11 = c4;
          }
        }
        break;
        case 11:
        case 139: {
          e02 = sPixel.Interpolate(c4, c2, 3, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e11 = c4;
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c5, c2, 5, 2, 1);
          e20 = sPixel.Interpolate(c4, c6, 3, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = sPixel.Interpolate(c4, c5, c7, 6, 1, 1);
          e23 = sPixel.Interpolate(c4, c5, c7, 5, 2, 1);
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c7, c6, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c7, c5, 5, 2, 1);
          e33 = sPixel.Interpolate(c4, c5, c7, 2, 1, 1);
          if (c1.IsNotLike(c3)) {
            e00 = c4;
            e01 = c4;
            e10 = c4;
          } else {
            e00 = sPixel.Interpolate(c1, c3, 1, 1);
            e01 = sPixel.Interpolate(c1, c4, 1, 1);
            e10 = sPixel.Interpolate(c3, c4, 1, 1);
          }
        }
        break;
        case 14:
        case 142: {
          e12 = sPixel.Interpolate(c4, c5, 7, 1);
          e13 = sPixel.Interpolate(c4, c5, 5, 3);
          e20 = sPixel.Interpolate(c4, c6, 3, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = sPixel.Interpolate(c4, c5, c7, 6, 1, 1);
          e23 = sPixel.Interpolate(c4, c5, c7, 5, 2, 1);
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c7, c6, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c7, c5, 5, 2, 1);
          e33 = sPixel.Interpolate(c4, c5, c7, 2, 1, 1);
          if (c1.IsNotLike(c3)) {
            e00 = sPixel.Interpolate(c4, c0, 5, 3);
            e01 = sPixel.Interpolate(c4, c0, 3, 1);
            e02 = sPixel.Interpolate(c4, c5, 7, 1);
            e03 = sPixel.Interpolate(c4, c5, 5, 3);
            e10 = sPixel.Interpolate(c4, c0, 3, 1);
            e11 = sPixel.Interpolate(c4, c0, 7, 1);
          } else {
            e00 = sPixel.Interpolate(c1, c3, 1, 1);
            e01 = sPixel.Interpolate(c1, c3, 5, 3);
            e02 = sPixel.Interpolate(c1, c4, 3, 1);
            e03 = sPixel.Interpolate(c4, c1, 3, 1);
            e10 = sPixel.Interpolate(c3, c1, c4, 2, 1, 1);
            e11 = sPixel.Interpolate(c4, c1, c3, 6, 1, 1);
          }
        }
        break;
        case 15:
        case 143: {
          e12 = sPixel.Interpolate(c4, c5, 7, 1);
          e13 = sPixel.Interpolate(c4, c5, 5, 3);
          e20 = sPixel.Interpolate(c4, c6, 3, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = sPixel.Interpolate(c4, c5, c7, 6, 1, 1);
          e23 = sPixel.Interpolate(c4, c5, c7, 5, 2, 1);
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c7, c6, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c7, c5, 5, 2, 1);
          e33 = sPixel.Interpolate(c4, c5, c7, 2, 1, 1);
          if (c1.IsNotLike(c3)) {
            e00 = c4;
            e01 = c4;
            e02 = sPixel.Interpolate(c4, c5, 7, 1);
            e03 = sPixel.Interpolate(c4, c5, 5, 3);
            e10 = c4;
            e11 = c4;
          } else {
            e00 = sPixel.Interpolate(c1, c3, 1, 1);
            e01 = sPixel.Interpolate(c1, c3, 5, 3);
            e02 = sPixel.Interpolate(c1, c4, 3, 1);
            e03 = sPixel.Interpolate(c4, c1, 3, 1);
            e10 = sPixel.Interpolate(c3, c1, c4, 2, 1, 1);
            e11 = sPixel.Interpolate(c4, c1, c3, 6, 1, 1);
          }
        }
        break;
        case 16:
        case 17:
        case 48:
        case 49: {
          e00 = sPixel.Interpolate(c4, c1, c3, 2, 1, 1);
          e01 = sPixel.Interpolate(c4, c1, c3, 5, 2, 1);
          e02 = sPixel.Interpolate(c4, c1, c2, 5, 2, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e10 = sPixel.Interpolate(c4, c3, c1, 5, 2, 1);
          e11 = sPixel.Interpolate(c4, c1, c3, 6, 1, 1);
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c2, 3, 1);
          e20 = sPixel.Interpolate(c4, c3, c7, 5, 2, 1);
          e21 = sPixel.Interpolate(c4, c3, c7, 6, 1, 1);
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c8, 3, 1);
          e30 = sPixel.Interpolate(c4, c3, c7, 2, 1, 1);
          e31 = sPixel.Interpolate(c4, c7, c3, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c7, c8, 5, 2, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
        }
        break;
        case 18:
        case 50: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c0, 3, 1);
          e10 = sPixel.Interpolate(c4, c3, c0, 5, 2, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e20 = sPixel.Interpolate(c4, c3, c7, 5, 2, 1);
          e21 = sPixel.Interpolate(c4, c3, c7, 6, 1, 1);
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c8, 3, 1);
          e30 = sPixel.Interpolate(c4, c3, c7, 2, 1, 1);
          e31 = sPixel.Interpolate(c4, c7, c3, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c7, c8, 5, 2, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
          if (c1.IsNotLike(c5)) {
            e02 = sPixel.Interpolate(c4, c2, 3, 1);
            e03 = sPixel.Interpolate(c4, c2, 5, 3);
            e12 = sPixel.Interpolate(c4, c2, 7, 1);
            e13 = sPixel.Interpolate(c4, c2, 3, 1);
          } else {
            e02 = sPixel.Interpolate(c1, c4, 1, 1);
            e03 = sPixel.Interpolate(c1, c5, 1, 1);
            e12 = c4;
            e13 = sPixel.Interpolate(c4, c5, 1, 1);
          }
        }
        break;
        case 19:
        case 51: {
          e10 = sPixel.Interpolate(c4, c3, 5, 3);
          e11 = sPixel.Interpolate(c4, c3, 7, 1);
          e20 = sPixel.Interpolate(c4, c3, c7, 5, 2, 1);
          e21 = sPixel.Interpolate(c4, c3, c7, 6, 1, 1);
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c8, 3, 1);
          e30 = sPixel.Interpolate(c4, c3, c7, 2, 1, 1);
          e31 = sPixel.Interpolate(c4, c7, c3, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c7, c8, 5, 2, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
          if (c1.IsNotLike(c5)) {
            e00 = sPixel.Interpolate(c4, c3, 5, 3);
            e01 = sPixel.Interpolate(c4, c3, 7, 1);
            e02 = sPixel.Interpolate(c4, c2, 3, 1);
            e03 = sPixel.Interpolate(c4, c2, 5, 3);
            e12 = sPixel.Interpolate(c4, c2, 7, 1);
            e13 = sPixel.Interpolate(c4, c2, 3, 1);
          } else {
            e00 = sPixel.Interpolate(c4, c1, 3, 1);
            e01 = sPixel.Interpolate(c1, c4, 3, 1);
            e02 = sPixel.Interpolate(c1, c5, 5, 3);
            e03 = sPixel.Interpolate(c1, c5, 1, 1);
            e12 = sPixel.Interpolate(c4, c1, c5, 6, 1, 1);
            e13 = sPixel.Interpolate(c5, c1, c4, 2, 1, 1);
          }
        }
        break;
        case 20:
        case 21:
        case 52:
        case 53: {
          e00 = sPixel.Interpolate(c4, c1, c3, 2, 1, 1);
          e01 = sPixel.Interpolate(c4, c1, c3, 5, 2, 1);
          e02 = sPixel.Interpolate(c4, c1, 5, 3);
          e03 = sPixel.Interpolate(c4, c1, 5, 3);
          e10 = sPixel.Interpolate(c4, c3, c1, 5, 2, 1);
          e11 = sPixel.Interpolate(c4, c1, c3, 6, 1, 1);
          e12 = sPixel.Interpolate(c4, c1, 7, 1);
          e13 = sPixel.Interpolate(c4, c1, 7, 1);
          e20 = sPixel.Interpolate(c4, c3, c7, 5, 2, 1);
          e21 = sPixel.Interpolate(c4, c3, c7, 6, 1, 1);
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c8, 3, 1);
          e30 = sPixel.Interpolate(c4, c3, c7, 2, 1, 1);
          e31 = sPixel.Interpolate(c4, c7, c3, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c7, c8, 5, 2, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
        }
        break;
        case 22:
        case 54: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c0, 3, 1);
          e10 = sPixel.Interpolate(c4, c3, c0, 5, 2, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = c4;
          e20 = sPixel.Interpolate(c4, c3, c7, 5, 2, 1);
          e21 = sPixel.Interpolate(c4, c3, c7, 6, 1, 1);
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c8, 3, 1);
          e30 = sPixel.Interpolate(c4, c3, c7, 2, 1, 1);
          e31 = sPixel.Interpolate(c4, c7, c3, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c7, c8, 5, 2, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
          if (c1.IsNotLike(c5)) {
            e02 = c4;
            e03 = c4;
            e13 = c4;
          } else {
            e02 = sPixel.Interpolate(c1, c4, 1, 1);
            e03 = sPixel.Interpolate(c1, c5, 1, 1);
            e13 = sPixel.Interpolate(c4, c5, 1, 1);
          }
        }
        break;
        case 23:
        case 55: {
          e10 = sPixel.Interpolate(c4, c3, 5, 3);
          e11 = sPixel.Interpolate(c4, c3, 7, 1);
          e20 = sPixel.Interpolate(c4, c3, c7, 5, 2, 1);
          e21 = sPixel.Interpolate(c4, c3, c7, 6, 1, 1);
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c8, 3, 1);
          e30 = sPixel.Interpolate(c4, c3, c7, 2, 1, 1);
          e31 = sPixel.Interpolate(c4, c7, c3, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c7, c8, 5, 2, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
          if (c1.IsNotLike(c5)) {
            e00 = sPixel.Interpolate(c4, c3, 5, 3);
            e01 = sPixel.Interpolate(c4, c3, 7, 1);
            e02 = c4;
            e03 = c4;
            e12 = c4;
            e13 = c4;
          } else {
            e00 = sPixel.Interpolate(c4, c1, 3, 1);
            e01 = sPixel.Interpolate(c1, c4, 3, 1);
            e02 = sPixel.Interpolate(c1, c5, 5, 3);
            e03 = sPixel.Interpolate(c1, c5, 1, 1);
            e12 = sPixel.Interpolate(c4, c1, c5, 6, 1, 1);
            e13 = sPixel.Interpolate(c5, c1, c4, 2, 1, 1);
          }
        }
        break;
        case 24: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c1, c0, 5, 2, 1);
          e02 = sPixel.Interpolate(c4, c1, c2, 5, 2, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e10 = sPixel.Interpolate(c4, c0, 3, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c2, 3, 1);
          e20 = sPixel.Interpolate(c4, c6, 3, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c8, 3, 1);
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c7, c6, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c7, c8, 5, 2, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
        }
        break;
        case 25: {
          e00 = sPixel.Interpolate(c4, c1, 5, 3);
          e01 = sPixel.Interpolate(c4, c1, 5, 3);
          e02 = sPixel.Interpolate(c4, c1, c2, 5, 2, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e10 = sPixel.Interpolate(c4, c1, 7, 1);
          e11 = sPixel.Interpolate(c4, c1, 7, 1);
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c2, 3, 1);
          e20 = sPixel.Interpolate(c4, c6, 3, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c8, 3, 1);
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c7, c6, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c7, c8, 5, 2, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
        }
        break;
        case 26:
        case 31: {
          e11 = c4;
          e12 = c4;
          e20 = sPixel.Interpolate(c4, c6, 3, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c8, 3, 1);
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c7, c6, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c7, c8, 5, 2, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
          if (c1.IsNotLike(c3)) {
            e00 = c4;
            e01 = c4;
            e10 = c4;
          } else {
            e00 = sPixel.Interpolate(c1, c3, 1, 1);
            e01 = sPixel.Interpolate(c1, c4, 1, 1);
            e10 = sPixel.Interpolate(c3, c4, 1, 1);
          }
          if (c1.IsNotLike(c5)) {
            e02 = c4;
            e03 = c4;
            e13 = c4;
          } else {
            e02 = sPixel.Interpolate(c1, c4, 1, 1);
            e03 = sPixel.Interpolate(c1, c5, 1, 1);
            e13 = sPixel.Interpolate(c4, c5, 1, 1);
          }
        }
        break;
        case 27: {
          e02 = sPixel.Interpolate(c4, c2, 3, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e11 = c4;
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c2, 3, 1);
          e20 = sPixel.Interpolate(c4, c6, 3, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c8, 3, 1);
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c7, c6, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c7, c8, 5, 2, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
          if (c1.IsNotLike(c3)) {
            e00 = c4;
            e01 = c4;
            e10 = c4;
          } else {
            e00 = sPixel.Interpolate(c1, c3, 1, 1);
            e01 = sPixel.Interpolate(c1, c4, 1, 1);
            e10 = sPixel.Interpolate(c3, c4, 1, 1);
          }
        }
        break;
        case 28: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c1, c0, 5, 2, 1);
          e02 = sPixel.Interpolate(c4, c1, 5, 3);
          e03 = sPixel.Interpolate(c4, c1, 5, 3);
          e10 = sPixel.Interpolate(c4, c0, 3, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = sPixel.Interpolate(c4, c1, 7, 1);
          e13 = sPixel.Interpolate(c4, c1, 7, 1);
          e20 = sPixel.Interpolate(c4, c6, 3, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c8, 3, 1);
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c7, c6, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c7, c8, 5, 2, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
        }
        break;
        case 29: {
          e00 = sPixel.Interpolate(c4, c1, 5, 3);
          e01 = sPixel.Interpolate(c4, c1, 5, 3);
          e02 = sPixel.Interpolate(c4, c1, 5, 3);
          e03 = sPixel.Interpolate(c4, c1, 5, 3);
          e10 = sPixel.Interpolate(c4, c1, 7, 1);
          e11 = sPixel.Interpolate(c4, c1, 7, 1);
          e12 = sPixel.Interpolate(c4, c1, 7, 1);
          e13 = sPixel.Interpolate(c4, c1, 7, 1);
          e20 = sPixel.Interpolate(c4, c6, 3, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c8, 3, 1);
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c7, c6, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c7, c8, 5, 2, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
        }
        break;
        case 30: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c0, 3, 1);
          e10 = sPixel.Interpolate(c4, c0, 3, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = c4;
          e20 = sPixel.Interpolate(c4, c6, 3, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c8, 3, 1);
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c7, c6, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c7, c8, 5, 2, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
          if (c1.IsNotLike(c5)) {
            e02 = c4;
            e03 = c4;
            e13 = c4;
          } else {
            e02 = sPixel.Interpolate(c1, c4, 1, 1);
            e03 = sPixel.Interpolate(c1, c5, 1, 1);
            e13 = sPixel.Interpolate(c4, c5, 1, 1);
          }
        }
        break;
        case 40:
        case 44:
        case 168:
        case 172: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c1, c0, 5, 2, 1);
          e02 = sPixel.Interpolate(c4, c1, c5, 5, 2, 1);
          e03 = sPixel.Interpolate(c4, c1, c5, 2, 1, 1);
          e10 = sPixel.Interpolate(c4, c0, 3, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = sPixel.Interpolate(c4, c1, c5, 6, 1, 1);
          e13 = sPixel.Interpolate(c4, c5, c1, 5, 2, 1);
          e20 = sPixel.Interpolate(c4, c7, 7, 1);
          e21 = sPixel.Interpolate(c4, c7, 7, 1);
          e22 = sPixel.Interpolate(c4, c5, c7, 6, 1, 1);
          e23 = sPixel.Interpolate(c4, c5, c7, 5, 2, 1);
          e30 = sPixel.Interpolate(c4, c7, 5, 3);
          e31 = sPixel.Interpolate(c4, c7, 5, 3);
          e32 = sPixel.Interpolate(c4, c7, c5, 5, 2, 1);
          e33 = sPixel.Interpolate(c4, c5, c7, 2, 1, 1);
        }
        break;
        case 41:
        case 45:
        case 169:
        case 173: {
          e00 = sPixel.Interpolate(c4, c1, 5, 3);
          e01 = sPixel.Interpolate(c4, c1, 5, 3);
          e02 = sPixel.Interpolate(c4, c1, c5, 5, 2, 1);
          e03 = sPixel.Interpolate(c4, c1, c5, 2, 1, 1);
          e10 = sPixel.Interpolate(c4, c1, 7, 1);
          e11 = sPixel.Interpolate(c4, c1, 7, 1);
          e12 = sPixel.Interpolate(c4, c1, c5, 6, 1, 1);
          e13 = sPixel.Interpolate(c4, c5, c1, 5, 2, 1);
          e20 = sPixel.Interpolate(c4, c7, 7, 1);
          e21 = sPixel.Interpolate(c4, c7, 7, 1);
          e22 = sPixel.Interpolate(c4, c5, c7, 6, 1, 1);
          e23 = sPixel.Interpolate(c4, c5, c7, 5, 2, 1);
          e30 = sPixel.Interpolate(c4, c7, 5, 3);
          e31 = sPixel.Interpolate(c4, c7, 5, 3);
          e32 = sPixel.Interpolate(c4, c7, c5, 5, 2, 1);
          e33 = sPixel.Interpolate(c4, c5, c7, 2, 1, 1);
        }
        break;
        case 42:
        case 170: {
          e02 = sPixel.Interpolate(c4, c2, 3, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c5, c2, 5, 2, 1);
          e21 = sPixel.Interpolate(c4, c7, 7, 1);
          e22 = sPixel.Interpolate(c4, c5, c7, 6, 1, 1);
          e23 = sPixel.Interpolate(c4, c5, c7, 5, 2, 1);
          e31 = sPixel.Interpolate(c4, c7, 5, 3);
          e32 = sPixel.Interpolate(c4, c7, c5, 5, 2, 1);
          e33 = sPixel.Interpolate(c4, c5, c7, 2, 1, 1);
          if (c1.IsNotLike(c3)) {
            e00 = sPixel.Interpolate(c4, c0, 5, 3);
            e01 = sPixel.Interpolate(c4, c0, 3, 1);
            e10 = sPixel.Interpolate(c4, c0, 3, 1);
            e11 = sPixel.Interpolate(c4, c0, 7, 1);
            e20 = sPixel.Interpolate(c4, c7, 7, 1);
            e30 = sPixel.Interpolate(c4, c7, 5, 3);
          } else {
            e00 = sPixel.Interpolate(c1, c3, 1, 1);
            e01 = sPixel.Interpolate(c1, c3, c4, 2, 1, 1);
            e10 = sPixel.Interpolate(c3, c1, 5, 3);
            e11 = sPixel.Interpolate(c4, c1, c3, 6, 1, 1);
            e20 = sPixel.Interpolate(c3, c4, 3, 1);
            e30 = sPixel.Interpolate(c4, c3, 3, 1);
          }
        }
        break;
        case 43:
        case 171: {
          e02 = sPixel.Interpolate(c4, c2, 3, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c5, c2, 5, 2, 1);
          e21 = sPixel.Interpolate(c4, c7, 7, 1);
          e22 = sPixel.Interpolate(c4, c5, c7, 6, 1, 1);
          e23 = sPixel.Interpolate(c4, c5, c7, 5, 2, 1);
          e31 = sPixel.Interpolate(c4, c7, 5, 3);
          e32 = sPixel.Interpolate(c4, c7, c5, 5, 2, 1);
          e33 = sPixel.Interpolate(c4, c5, c7, 2, 1, 1);
          if (c1.IsNotLike(c3)) {
            e00 = c4;
            e01 = c4;
            e10 = c4;
            e11 = c4;
            e20 = sPixel.Interpolate(c4, c7, 7, 1);
            e30 = sPixel.Interpolate(c4, c7, 5, 3);
          } else {
            e00 = sPixel.Interpolate(c1, c3, 1, 1);
            e01 = sPixel.Interpolate(c1, c3, c4, 2, 1, 1);
            e10 = sPixel.Interpolate(c3, c1, 5, 3);
            e11 = sPixel.Interpolate(c4, c1, c3, 6, 1, 1);
            e20 = sPixel.Interpolate(c3, c4, 3, 1);
            e30 = sPixel.Interpolate(c4, c3, 3, 1);
          }
        }
        break;
        case 46:
        case 174: {
          e02 = sPixel.Interpolate(c4, c5, 7, 1);
          e03 = sPixel.Interpolate(c4, c5, 5, 3);
          e12 = sPixel.Interpolate(c4, c5, 7, 1);
          e13 = sPixel.Interpolate(c4, c5, 5, 3);
          e20 = sPixel.Interpolate(c4, c7, 7, 1);
          e21 = sPixel.Interpolate(c4, c7, 7, 1);
          e22 = sPixel.Interpolate(c4, c5, c7, 6, 1, 1);
          e23 = sPixel.Interpolate(c4, c5, c7, 5, 2, 1);
          e30 = sPixel.Interpolate(c4, c7, 5, 3);
          e31 = sPixel.Interpolate(c4, c7, 5, 3);
          e32 = sPixel.Interpolate(c4, c7, c5, 5, 2, 1);
          e33 = sPixel.Interpolate(c4, c5, c7, 2, 1, 1);
          if (c1.IsNotLike(c3)) {
            e00 = sPixel.Interpolate(c4, c0, 5, 3);
            e01 = sPixel.Interpolate(c4, c0, 3, 1);
            e10 = sPixel.Interpolate(c4, c0, 3, 1);
            e11 = sPixel.Interpolate(c4, c0, 7, 1);
          } else {
            e00 = sPixel.Interpolate(c4, c1, c3, 2, 1, 1);
            e01 = sPixel.Interpolate(c4, c1, 3, 1);
            e10 = sPixel.Interpolate(c4, c3, 3, 1);
            e11 = c4;
          }
        }
        break;
        case 47:
        case 175: {
          e01 = c4;
          e02 = sPixel.Interpolate(c4, c5, 7, 1);
          e03 = sPixel.Interpolate(c4, c5, 5, 3);
          e10 = c4;
          e11 = c4;
          e12 = sPixel.Interpolate(c4, c5, 7, 1);
          e13 = sPixel.Interpolate(c4, c5, 5, 3);
          e20 = sPixel.Interpolate(c4, c7, 7, 1);
          e21 = sPixel.Interpolate(c4, c7, 7, 1);
          e22 = sPixel.Interpolate(c4, c5, c7, 6, 1, 1);
          e23 = sPixel.Interpolate(c4, c5, c7, 5, 2, 1);
          e30 = sPixel.Interpolate(c4, c7, 5, 3);
          e31 = sPixel.Interpolate(c4, c7, 5, 3);
          e32 = sPixel.Interpolate(c4, c7, c5, 5, 2, 1);
          e33 = sPixel.Interpolate(c4, c5, c7, 2, 1, 1);
          e00 = (c1.IsNotLike(c3)) ? (c4) : (sPixel.Interpolate(c4, c1, c3, 2, 1, 1));
        }
        break;
        case 56: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c1, c0, 5, 2, 1);
          e02 = sPixel.Interpolate(c4, c1, c2, 5, 2, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e10 = sPixel.Interpolate(c4, c0, 3, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c2, 3, 1);
          e20 = sPixel.Interpolate(c4, c7, 7, 1);
          e21 = sPixel.Interpolate(c4, c7, 7, 1);
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c8, 3, 1);
          e30 = sPixel.Interpolate(c4, c7, 5, 3);
          e31 = sPixel.Interpolate(c4, c7, 5, 3);
          e32 = sPixel.Interpolate(c4, c7, c8, 5, 2, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
        }
        break;
        case 57: {
          e00 = sPixel.Interpolate(c4, c1, 5, 3);
          e01 = sPixel.Interpolate(c4, c1, 5, 3);
          e02 = sPixel.Interpolate(c4, c1, c2, 5, 2, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e10 = sPixel.Interpolate(c4, c1, 7, 1);
          e11 = sPixel.Interpolate(c4, c1, 7, 1);
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c2, 3, 1);
          e20 = sPixel.Interpolate(c4, c7, 7, 1);
          e21 = sPixel.Interpolate(c4, c7, 7, 1);
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c8, 3, 1);
          e30 = sPixel.Interpolate(c4, c7, 5, 3);
          e31 = sPixel.Interpolate(c4, c7, 5, 3);
          e32 = sPixel.Interpolate(c4, c7, c8, 5, 2, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
        }
        break;
        case 58: {
          e20 = sPixel.Interpolate(c4, c7, 7, 1);
          e21 = sPixel.Interpolate(c4, c7, 7, 1);
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c8, 3, 1);
          e30 = sPixel.Interpolate(c4, c7, 5, 3);
          e31 = sPixel.Interpolate(c4, c7, 5, 3);
          e32 = sPixel.Interpolate(c4, c7, c8, 5, 2, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
          if (c1.IsNotLike(c3)) {
            e00 = sPixel.Interpolate(c4, c0, 5, 3);
            e01 = sPixel.Interpolate(c4, c0, 3, 1);
            e10 = sPixel.Interpolate(c4, c0, 3, 1);
            e11 = sPixel.Interpolate(c4, c0, 7, 1);
          } else {
            e00 = sPixel.Interpolate(c4, c1, c3, 2, 1, 1);
            e01 = sPixel.Interpolate(c4, c1, 3, 1);
            e10 = sPixel.Interpolate(c4, c3, 3, 1);
            e11 = c4;
          }
          if (c1.IsNotLike(c5)) {
            e02 = sPixel.Interpolate(c4, c2, 3, 1);
            e03 = sPixel.Interpolate(c4, c2, 5, 3);
            e12 = sPixel.Interpolate(c4, c2, 7, 1);
            e13 = sPixel.Interpolate(c4, c2, 3, 1);
          } else {
            e02 = sPixel.Interpolate(c4, c1, 3, 1);
            e03 = sPixel.Interpolate(c4, c1, c5, 2, 1, 1);
            e12 = c4;
            e13 = sPixel.Interpolate(c4, c5, 3, 1);
          }
        }
        break;
        case 59: {
          e11 = c4;
          e20 = sPixel.Interpolate(c4, c7, 7, 1);
          e21 = sPixel.Interpolate(c4, c7, 7, 1);
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c8, 3, 1);
          e30 = sPixel.Interpolate(c4, c7, 5, 3);
          e31 = sPixel.Interpolate(c4, c7, 5, 3);
          e32 = sPixel.Interpolate(c4, c7, c8, 5, 2, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
          if (c1.IsNotLike(c3)) {
            e00 = c4;
            e01 = c4;
            e10 = c4;
          } else {
            e00 = sPixel.Interpolate(c1, c3, 1, 1);
            e01 = sPixel.Interpolate(c1, c4, 1, 1);
            e10 = sPixel.Interpolate(c3, c4, 1, 1);
          }
          if (c1.IsNotLike(c5)) {
            e02 = sPixel.Interpolate(c4, c2, 3, 1);
            e03 = sPixel.Interpolate(c4, c2, 5, 3);
            e12 = sPixel.Interpolate(c4, c2, 7, 1);
            e13 = sPixel.Interpolate(c4, c2, 3, 1);
          } else {
            e02 = sPixel.Interpolate(c4, c1, 3, 1);
            e03 = sPixel.Interpolate(c4, c1, c5, 2, 1, 1);
            e12 = c4;
            e13 = sPixel.Interpolate(c4, c5, 3, 1);
          }
        }
        break;
        case 60: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c1, c0, 5, 2, 1);
          e02 = sPixel.Interpolate(c4, c1, 5, 3);
          e03 = sPixel.Interpolate(c4, c1, 5, 3);
          e10 = sPixel.Interpolate(c4, c0, 3, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = sPixel.Interpolate(c4, c1, 7, 1);
          e13 = sPixel.Interpolate(c4, c1, 7, 1);
          e20 = sPixel.Interpolate(c4, c7, 7, 1);
          e21 = sPixel.Interpolate(c4, c7, 7, 1);
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c8, 3, 1);
          e30 = sPixel.Interpolate(c4, c7, 5, 3);
          e31 = sPixel.Interpolate(c4, c7, 5, 3);
          e32 = sPixel.Interpolate(c4, c7, c8, 5, 2, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
        }
        break;
        case 61: {
          e00 = sPixel.Interpolate(c4, c1, 5, 3);
          e01 = sPixel.Interpolate(c4, c1, 5, 3);
          e02 = sPixel.Interpolate(c4, c1, 5, 3);
          e03 = sPixel.Interpolate(c4, c1, 5, 3);
          e10 = sPixel.Interpolate(c4, c1, 7, 1);
          e11 = sPixel.Interpolate(c4, c1, 7, 1);
          e12 = sPixel.Interpolate(c4, c1, 7, 1);
          e13 = sPixel.Interpolate(c4, c1, 7, 1);
          e20 = sPixel.Interpolate(c4, c7, 7, 1);
          e21 = sPixel.Interpolate(c4, c7, 7, 1);
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c8, 3, 1);
          e30 = sPixel.Interpolate(c4, c7, 5, 3);
          e31 = sPixel.Interpolate(c4, c7, 5, 3);
          e32 = sPixel.Interpolate(c4, c7, c8, 5, 2, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
        }
        break;
        case 62: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c0, 3, 1);
          e10 = sPixel.Interpolate(c4, c0, 3, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = c4;
          e20 = sPixel.Interpolate(c4, c7, 7, 1);
          e21 = sPixel.Interpolate(c4, c7, 7, 1);
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c8, 3, 1);
          e30 = sPixel.Interpolate(c4, c7, 5, 3);
          e31 = sPixel.Interpolate(c4, c7, 5, 3);
          e32 = sPixel.Interpolate(c4, c7, c8, 5, 2, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
          if (c1.IsNotLike(c5)) {
            e02 = c4;
            e03 = c4;
            e13 = c4;
          } else {
            e02 = sPixel.Interpolate(c1, c4, 1, 1);
            e03 = sPixel.Interpolate(c1, c5, 1, 1);
            e13 = sPixel.Interpolate(c4, c5, 1, 1);
          }
        }
        break;
        case 63: {
          e01 = c4;
          e10 = c4;
          e11 = c4;
          e12 = c4;
          e20 = sPixel.Interpolate(c4, c7, 7, 1);
          e21 = sPixel.Interpolate(c4, c7, 7, 1);
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c8, 3, 1);
          e30 = sPixel.Interpolate(c4, c7, 5, 3);
          e31 = sPixel.Interpolate(c4, c7, 5, 3);
          e32 = sPixel.Interpolate(c4, c7, c8, 5, 2, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
          e00 = (c1.IsNotLike(c3)) ? (c4) : (sPixel.Interpolate(c4, c1, c3, 2, 1, 1));
          if (c1.IsNotLike(c5)) {
            e02 = c4;
            e03 = c4;
            e13 = c4;
          } else {
            e02 = sPixel.Interpolate(c1, c4, 1, 1);
            e03 = sPixel.Interpolate(c1, c5, 1, 1);
            e13 = sPixel.Interpolate(c4, c5, 1, 1);
          }
        }
        break;
        case 64:
        case 65:
        case 68:
        case 69: {
          e00 = sPixel.Interpolate(c4, c1, c3, 2, 1, 1);
          e01 = sPixel.Interpolate(c4, c1, c3, 5, 2, 1);
          e02 = sPixel.Interpolate(c4, c1, c5, 5, 2, 1);
          e03 = sPixel.Interpolate(c4, c1, c5, 2, 1, 1);
          e10 = sPixel.Interpolate(c4, c3, c1, 5, 2, 1);
          e11 = sPixel.Interpolate(c4, c1, c3, 6, 1, 1);
          e12 = sPixel.Interpolate(c4, c1, c5, 6, 1, 1);
          e13 = sPixel.Interpolate(c4, c5, c1, 5, 2, 1);
          e20 = sPixel.Interpolate(c4, c3, c6, 5, 2, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c5, c8, 5, 2, 1);
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c6, 3, 1);
          e32 = sPixel.Interpolate(c4, c8, 3, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
        }
        break;
        case 66: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c0, 3, 1);
          e02 = sPixel.Interpolate(c4, c2, 3, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e10 = sPixel.Interpolate(c4, c3, c0, 5, 2, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c5, c2, 5, 2, 1);
          e20 = sPixel.Interpolate(c4, c3, c6, 5, 2, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c5, c8, 5, 2, 1);
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c6, 3, 1);
          e32 = sPixel.Interpolate(c4, c8, 3, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
        }
        break;
        case 67: {
          e00 = sPixel.Interpolate(c4, c3, 5, 3);
          e01 = sPixel.Interpolate(c4, c3, 7, 1);
          e02 = sPixel.Interpolate(c4, c2, 3, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e10 = sPixel.Interpolate(c4, c3, 5, 3);
          e11 = sPixel.Interpolate(c4, c3, 7, 1);
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c5, c2, 5, 2, 1);
          e20 = sPixel.Interpolate(c4, c3, c6, 5, 2, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c5, c8, 5, 2, 1);
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c6, 3, 1);
          e32 = sPixel.Interpolate(c4, c8, 3, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
        }
        break;
        case 70: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c0, 3, 1);
          e02 = sPixel.Interpolate(c4, c5, 7, 1);
          e03 = sPixel.Interpolate(c4, c5, 5, 3);
          e10 = sPixel.Interpolate(c4, c3, c0, 5, 2, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = sPixel.Interpolate(c4, c5, 7, 1);
          e13 = sPixel.Interpolate(c4, c5, 5, 3);
          e20 = sPixel.Interpolate(c4, c3, c6, 5, 2, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c5, c8, 5, 2, 1);
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c6, 3, 1);
          e32 = sPixel.Interpolate(c4, c8, 3, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
        }
        break;
        case 71: {
          e00 = sPixel.Interpolate(c4, c3, 5, 3);
          e01 = sPixel.Interpolate(c4, c3, 7, 1);
          e02 = sPixel.Interpolate(c4, c5, 7, 1);
          e03 = sPixel.Interpolate(c4, c5, 5, 3);
          e10 = sPixel.Interpolate(c4, c3, 5, 3);
          e11 = sPixel.Interpolate(c4, c3, 7, 1);
          e12 = sPixel.Interpolate(c4, c5, 7, 1);
          e13 = sPixel.Interpolate(c4, c5, 5, 3);
          e20 = sPixel.Interpolate(c4, c3, c6, 5, 2, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c5, c8, 5, 2, 1);
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c6, 3, 1);
          e32 = sPixel.Interpolate(c4, c8, 3, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
        }
        break;
        case 72:
        case 76: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c1, c0, 5, 2, 1);
          e02 = sPixel.Interpolate(c4, c1, c5, 5, 2, 1);
          e03 = sPixel.Interpolate(c4, c1, c5, 2, 1, 1);
          e10 = sPixel.Interpolate(c4, c0, 3, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = sPixel.Interpolate(c4, c1, c5, 6, 1, 1);
          e13 = sPixel.Interpolate(c4, c5, c1, 5, 2, 1);
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c5, c8, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c8, 3, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
          if (c7.IsNotLike(c3)) {
            e20 = sPixel.Interpolate(c4, c6, 3, 1);
            e21 = sPixel.Interpolate(c4, c6, 7, 1);
            e30 = sPixel.Interpolate(c4, c6, 5, 3);
            e31 = sPixel.Interpolate(c4, c6, 3, 1);
          } else {
            e20 = sPixel.Interpolate(c3, c4, 1, 1);
            e21 = c4;
            e30 = sPixel.Interpolate(c3, c7, 1, 1);
            e31 = sPixel.Interpolate(c4, c7, 1, 1);
          }
        }
        break;
        case 73:
        case 77: {
          e01 = sPixel.Interpolate(c4, c1, 5, 3);
          e02 = sPixel.Interpolate(c4, c1, c5, 5, 2, 1);
          e03 = sPixel.Interpolate(c4, c1, c5, 2, 1, 1);
          e11 = sPixel.Interpolate(c4, c1, 7, 1);
          e12 = sPixel.Interpolate(c4, c1, c5, 6, 1, 1);
          e13 = sPixel.Interpolate(c4, c5, c1, 5, 2, 1);
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c5, c8, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c8, 3, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
          if (c7.IsNotLike(c3)) {
            e00 = sPixel.Interpolate(c4, c1, 5, 3);
            e10 = sPixel.Interpolate(c4, c1, 7, 1);
            e20 = sPixel.Interpolate(c4, c6, 3, 1);
            e21 = sPixel.Interpolate(c4, c6, 7, 1);
            e30 = sPixel.Interpolate(c4, c6, 5, 3);
            e31 = sPixel.Interpolate(c4, c6, 3, 1);
          } else {
            e00 = sPixel.Interpolate(c4, c3, 3, 1);
            e10 = sPixel.Interpolate(c3, c4, 3, 1);
            e20 = sPixel.Interpolate(c3, c7, 5, 3);
            e21 = sPixel.Interpolate(c4, c3, c7, 6, 1, 1);
            e30 = sPixel.Interpolate(c3, c7, 1, 1);
            e31 = sPixel.Interpolate(c7, c3, c4, 2, 1, 1);
          }
        }
        break;
        case 74:
        case 107: {
          e02 = sPixel.Interpolate(c4, c2, 3, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e11 = c4;
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c5, c2, 5, 2, 1);
          e21 = c4;
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c5, c8, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c8, 3, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
          if (c7.IsNotLike(c3)) {
            e20 = c4;
            e30 = c4;
            e31 = c4;
          } else {
            e20 = sPixel.Interpolate(c3, c4, 1, 1);
            e30 = sPixel.Interpolate(c3, c7, 1, 1);
            e31 = sPixel.Interpolate(c4, c7, 1, 1);
          }
          if (c1.IsNotLike(c3)) {
            e00 = c4;
            e01 = c4;
            e10 = c4;
          } else {
            e00 = sPixel.Interpolate(c1, c3, 1, 1);
            e01 = sPixel.Interpolate(c1, c4, 1, 1);
            e10 = sPixel.Interpolate(c3, c4, 1, 1);
          }
        }
        break;
        case 75: {
          e02 = sPixel.Interpolate(c4, c2, 3, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e11 = c4;
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c5, c2, 5, 2, 1);
          e20 = sPixel.Interpolate(c4, c6, 3, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c5, c8, 5, 2, 1);
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c6, 3, 1);
          e32 = sPixel.Interpolate(c4, c8, 3, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
          if (c1.IsNotLike(c3)) {
            e00 = c4;
            e01 = c4;
            e10 = c4;
          } else {
            e00 = sPixel.Interpolate(c1, c3, 1, 1);
            e01 = sPixel.Interpolate(c1, c4, 1, 1);
            e10 = sPixel.Interpolate(c3, c4, 1, 1);
          }
        }
        break;
        case 78: {
          e02 = sPixel.Interpolate(c4, c5, 7, 1);
          e03 = sPixel.Interpolate(c4, c5, 5, 3);
          e12 = sPixel.Interpolate(c4, c5, 7, 1);
          e13 = sPixel.Interpolate(c4, c5, 5, 3);
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c5, c8, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c8, 3, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
          if (c7.IsNotLike(c3)) {
            e20 = sPixel.Interpolate(c4, c6, 3, 1);
            e21 = sPixel.Interpolate(c4, c6, 7, 1);
            e30 = sPixel.Interpolate(c4, c6, 5, 3);
            e31 = sPixel.Interpolate(c4, c6, 3, 1);
          } else {
            e20 = sPixel.Interpolate(c4, c3, 3, 1);
            e21 = c4;
            e30 = sPixel.Interpolate(c4, c3, c7, 2, 1, 1);
            e31 = sPixel.Interpolate(c4, c7, 3, 1);
          }
          if (c1.IsNotLike(c3)) {
            e00 = sPixel.Interpolate(c4, c0, 5, 3);
            e01 = sPixel.Interpolate(c4, c0, 3, 1);
            e10 = sPixel.Interpolate(c4, c0, 3, 1);
            e11 = sPixel.Interpolate(c4, c0, 7, 1);
          } else {
            e00 = sPixel.Interpolate(c4, c1, c3, 2, 1, 1);
            e01 = sPixel.Interpolate(c4, c1, 3, 1);
            e10 = sPixel.Interpolate(c4, c3, 3, 1);
            e11 = c4;
          }
        }
        break;
        case 79: {
          e02 = sPixel.Interpolate(c4, c5, 7, 1);
          e03 = sPixel.Interpolate(c4, c5, 5, 3);
          e11 = c4;
          e12 = sPixel.Interpolate(c4, c5, 7, 1);
          e13 = sPixel.Interpolate(c4, c5, 5, 3);
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c5, c8, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c8, 3, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
          if (c7.IsNotLike(c3)) {
            e20 = sPixel.Interpolate(c4, c6, 3, 1);
            e21 = sPixel.Interpolate(c4, c6, 7, 1);
            e30 = sPixel.Interpolate(c4, c6, 5, 3);
            e31 = sPixel.Interpolate(c4, c6, 3, 1);
          } else {
            e20 = sPixel.Interpolate(c4, c3, 3, 1);
            e21 = c4;
            e30 = sPixel.Interpolate(c4, c3, c7, 2, 1, 1);
            e31 = sPixel.Interpolate(c4, c7, 3, 1);
          }
          if (c1.IsNotLike(c3)) {
            e00 = c4;
            e01 = c4;
            e10 = c4;
          } else {
            e00 = sPixel.Interpolate(c1, c3, 1, 1);
            e01 = sPixel.Interpolate(c1, c4, 1, 1);
            e10 = sPixel.Interpolate(c3, c4, 1, 1);
          }
        }
        break;
        case 80:
        case 81: {
          e00 = sPixel.Interpolate(c4, c1, c3, 2, 1, 1);
          e01 = sPixel.Interpolate(c4, c1, c3, 5, 2, 1);
          e02 = sPixel.Interpolate(c4, c1, c2, 5, 2, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e10 = sPixel.Interpolate(c4, c3, c1, 5, 2, 1);
          e11 = sPixel.Interpolate(c4, c1, c3, 6, 1, 1);
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c2, 3, 1);
          e20 = sPixel.Interpolate(c4, c3, c6, 5, 2, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c6, 3, 1);
          if (c7.IsNotLike(c5)) {
            e22 = sPixel.Interpolate(c4, c8, 7, 1);
            e23 = sPixel.Interpolate(c4, c8, 3, 1);
            e32 = sPixel.Interpolate(c4, c8, 3, 1);
            e33 = sPixel.Interpolate(c4, c8, 5, 3);
          } else {
            e22 = c4;
            e23 = sPixel.Interpolate(c4, c5, 1, 1);
            e32 = sPixel.Interpolate(c4, c7, 1, 1);
            e33 = sPixel.Interpolate(c5, c7, 1, 1);
          }
        }
        break;
        case 82:
        case 214: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c0, 3, 1);
          e10 = sPixel.Interpolate(c4, c3, c0, 5, 2, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = c4;
          e20 = sPixel.Interpolate(c4, c3, c6, 5, 2, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = c4;
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c6, 3, 1);
          if (c7.IsNotLike(c5)) {
            e23 = c4;
            e32 = c4;
            e33 = c4;
          } else {
            e23 = sPixel.Interpolate(c4, c5, 1, 1);
            e32 = sPixel.Interpolate(c4, c7, 1, 1);
            e33 = sPixel.Interpolate(c5, c7, 1, 1);
          }
          if (c1.IsNotLike(c5)) {
            e02 = c4;
            e03 = c4;
            e13 = c4;
          } else {
            e02 = sPixel.Interpolate(c1, c4, 1, 1);
            e03 = sPixel.Interpolate(c1, c5, 1, 1);
            e13 = sPixel.Interpolate(c4, c5, 1, 1);
          }
        }
        break;
        case 83: {
          e00 = sPixel.Interpolate(c4, c3, 5, 3);
          e01 = sPixel.Interpolate(c4, c3, 7, 1);
          e10 = sPixel.Interpolate(c4, c3, 5, 3);
          e11 = sPixel.Interpolate(c4, c3, 7, 1);
          e20 = sPixel.Interpolate(c4, c3, c6, 5, 2, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c6, 3, 1);
          if (c7.IsNotLike(c5)) {
            e22 = sPixel.Interpolate(c4, c8, 7, 1);
            e23 = sPixel.Interpolate(c4, c8, 3, 1);
            e32 = sPixel.Interpolate(c4, c8, 3, 1);
            e33 = sPixel.Interpolate(c4, c8, 5, 3);
          } else {
            e22 = c4;
            e23 = sPixel.Interpolate(c4, c5, 3, 1);
            e32 = sPixel.Interpolate(c4, c7, 3, 1);
            e33 = sPixel.Interpolate(c4, c5, c7, 2, 1, 1);
          }
          if (c1.IsNotLike(c5)) {
            e02 = sPixel.Interpolate(c4, c2, 3, 1);
            e03 = sPixel.Interpolate(c4, c2, 5, 3);
            e12 = sPixel.Interpolate(c4, c2, 7, 1);
            e13 = sPixel.Interpolate(c4, c2, 3, 1);
          } else {
            e02 = sPixel.Interpolate(c4, c1, 3, 1);
            e03 = sPixel.Interpolate(c4, c1, c5, 2, 1, 1);
            e12 = c4;
            e13 = sPixel.Interpolate(c4, c5, 3, 1);
          }
        }
        break;
        case 84:
        case 85: {
          e00 = sPixel.Interpolate(c4, c1, c3, 2, 1, 1);
          e01 = sPixel.Interpolate(c4, c1, c3, 5, 2, 1);
          e02 = sPixel.Interpolate(c4, c1, 5, 3);
          e10 = sPixel.Interpolate(c4, c3, c1, 5, 2, 1);
          e11 = sPixel.Interpolate(c4, c1, c3, 6, 1, 1);
          e12 = sPixel.Interpolate(c4, c1, 7, 1);
          e20 = sPixel.Interpolate(c4, c3, c6, 5, 2, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c6, 3, 1);
          if (c7.IsNotLike(c5)) {
            e03 = sPixel.Interpolate(c4, c1, 5, 3);
            e13 = sPixel.Interpolate(c4, c1, 7, 1);
            e22 = sPixel.Interpolate(c4, c8, 7, 1);
            e23 = sPixel.Interpolate(c4, c8, 3, 1);
            e32 = sPixel.Interpolate(c4, c8, 3, 1);
            e33 = sPixel.Interpolate(c4, c8, 5, 3);
          } else {
            e03 = sPixel.Interpolate(c4, c5, 3, 1);
            e13 = sPixel.Interpolate(c5, c4, 3, 1);
            e22 = sPixel.Interpolate(c4, c5, c7, 6, 1, 1);
            e23 = sPixel.Interpolate(c5, c7, 5, 3);
            e32 = sPixel.Interpolate(c7, c4, c5, 2, 1, 1);
            e33 = sPixel.Interpolate(c5, c7, 1, 1);
          }
        }
        break;
        case 86: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c0, 3, 1);
          e10 = sPixel.Interpolate(c4, c3, c0, 5, 2, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = c4;
          e20 = sPixel.Interpolate(c4, c3, c6, 5, 2, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c8, 3, 1);
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c6, 3, 1);
          e32 = sPixel.Interpolate(c4, c8, 3, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
          if (c1.IsNotLike(c5)) {
            e02 = c4;
            e03 = c4;
            e13 = c4;
          } else {
            e02 = sPixel.Interpolate(c1, c4, 1, 1);
            e03 = sPixel.Interpolate(c1, c5, 1, 1);
            e13 = sPixel.Interpolate(c4, c5, 1, 1);
          }
        }
        break;
        case 87: {
          e00 = sPixel.Interpolate(c4, c3, 5, 3);
          e01 = sPixel.Interpolate(c4, c3, 7, 1);
          e10 = sPixel.Interpolate(c4, c3, 5, 3);
          e11 = sPixel.Interpolate(c4, c3, 7, 1);
          e12 = c4;
          e20 = sPixel.Interpolate(c4, c3, c6, 5, 2, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c6, 3, 1);
          if (c7.IsNotLike(c5)) {
            e22 = sPixel.Interpolate(c4, c8, 7, 1);
            e23 = sPixel.Interpolate(c4, c8, 3, 1);
            e32 = sPixel.Interpolate(c4, c8, 3, 1);
            e33 = sPixel.Interpolate(c4, c8, 5, 3);
          } else {
            e22 = c4;
            e23 = sPixel.Interpolate(c4, c5, 3, 1);
            e32 = sPixel.Interpolate(c4, c7, 3, 1);
            e33 = sPixel.Interpolate(c4, c5, c7, 2, 1, 1);
          }
          if (c1.IsNotLike(c5)) {
            e02 = c4;
            e03 = c4;
            e13 = c4;
          } else {
            e02 = sPixel.Interpolate(c1, c4, 1, 1);
            e03 = sPixel.Interpolate(c1, c5, 1, 1);
            e13 = sPixel.Interpolate(c4, c5, 1, 1);
          }
        }
        break;
        case 88:
        case 248: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c1, c0, 5, 2, 1);
          e02 = sPixel.Interpolate(c4, c1, c2, 5, 2, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e10 = sPixel.Interpolate(c4, c0, 3, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c2, 3, 1);
          e21 = c4;
          e22 = c4;
          if (c7.IsNotLike(c3)) {
            e20 = c4;
            e30 = c4;
            e31 = c4;
          } else {
            e20 = sPixel.Interpolate(c3, c4, 1, 1);
            e30 = sPixel.Interpolate(c3, c7, 1, 1);
            e31 = sPixel.Interpolate(c4, c7, 1, 1);
          }
          if (c7.IsNotLike(c5)) {
            e23 = c4;
            e32 = c4;
            e33 = c4;
          } else {
            e23 = sPixel.Interpolate(c4, c5, 1, 1);
            e32 = sPixel.Interpolate(c4, c7, 1, 1);
            e33 = sPixel.Interpolate(c5, c7, 1, 1);
          }
        }
        break;
        case 89: {
          e00 = sPixel.Interpolate(c4, c1, 5, 3);
          e01 = sPixel.Interpolate(c4, c1, 5, 3);
          e02 = sPixel.Interpolate(c4, c1, c2, 5, 2, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e10 = sPixel.Interpolate(c4, c1, 7, 1);
          e11 = sPixel.Interpolate(c4, c1, 7, 1);
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c2, 3, 1);
          if (c7.IsNotLike(c3)) {
            e20 = sPixel.Interpolate(c4, c6, 3, 1);
            e21 = sPixel.Interpolate(c4, c6, 7, 1);
            e30 = sPixel.Interpolate(c4, c6, 5, 3);
            e31 = sPixel.Interpolate(c4, c6, 3, 1);
          } else {
            e20 = sPixel.Interpolate(c4, c3, 3, 1);
            e21 = c4;
            e30 = sPixel.Interpolate(c4, c3, c7, 2, 1, 1);
            e31 = sPixel.Interpolate(c4, c7, 3, 1);
          }
          if (c7.IsNotLike(c5)) {
            e22 = sPixel.Interpolate(c4, c8, 7, 1);
            e23 = sPixel.Interpolate(c4, c8, 3, 1);
            e32 = sPixel.Interpolate(c4, c8, 3, 1);
            e33 = sPixel.Interpolate(c4, c8, 5, 3);
          } else {
            e22 = c4;
            e23 = sPixel.Interpolate(c4, c5, 3, 1);
            e32 = sPixel.Interpolate(c4, c7, 3, 1);
            e33 = sPixel.Interpolate(c4, c5, c7, 2, 1, 1);
          }
        }
        break;
        case 90: {
          if (c7.IsNotLike(c3)) {
            e20 = sPixel.Interpolate(c4, c6, 3, 1);
            e21 = sPixel.Interpolate(c4, c6, 7, 1);
            e30 = sPixel.Interpolate(c4, c6, 5, 3);
            e31 = sPixel.Interpolate(c4, c6, 3, 1);
          } else {
            e20 = sPixel.Interpolate(c4, c3, 3, 1);
            e21 = c4;
            e30 = sPixel.Interpolate(c4, c3, c7, 2, 1, 1);
            e31 = sPixel.Interpolate(c4, c7, 3, 1);
          }
          if (c7.IsNotLike(c5)) {
            e22 = sPixel.Interpolate(c4, c8, 7, 1);
            e23 = sPixel.Interpolate(c4, c8, 3, 1);
            e32 = sPixel.Interpolate(c4, c8, 3, 1);
            e33 = sPixel.Interpolate(c4, c8, 5, 3);
          } else {
            e22 = c4;
            e23 = sPixel.Interpolate(c4, c5, 3, 1);
            e32 = sPixel.Interpolate(c4, c7, 3, 1);
            e33 = sPixel.Interpolate(c4, c5, c7, 2, 1, 1);
          }
          if (c1.IsNotLike(c3)) {
            e00 = sPixel.Interpolate(c4, c0, 5, 3);
            e01 = sPixel.Interpolate(c4, c0, 3, 1);
            e10 = sPixel.Interpolate(c4, c0, 3, 1);
            e11 = sPixel.Interpolate(c4, c0, 7, 1);
          } else {
            e00 = sPixel.Interpolate(c4, c1, c3, 2, 1, 1);
            e01 = sPixel.Interpolate(c4, c1, 3, 1);
            e10 = sPixel.Interpolate(c4, c3, 3, 1);
            e11 = c4;
          }
          if (c1.IsNotLike(c5)) {
            e02 = sPixel.Interpolate(c4, c2, 3, 1);
            e03 = sPixel.Interpolate(c4, c2, 5, 3);
            e12 = sPixel.Interpolate(c4, c2, 7, 1);
            e13 = sPixel.Interpolate(c4, c2, 3, 1);
          } else {
            e02 = sPixel.Interpolate(c4, c1, 3, 1);
            e03 = sPixel.Interpolate(c4, c1, c5, 2, 1, 1);
            e12 = c4;
            e13 = sPixel.Interpolate(c4, c5, 3, 1);
          }
        }
        break;
        case 91: {
          e11 = c4;
          if (c7.IsNotLike(c3)) {
            e20 = sPixel.Interpolate(c4, c6, 3, 1);
            e21 = sPixel.Interpolate(c4, c6, 7, 1);
            e30 = sPixel.Interpolate(c4, c6, 5, 3);
            e31 = sPixel.Interpolate(c4, c6, 3, 1);
          } else {
            e20 = sPixel.Interpolate(c4, c3, 3, 1);
            e21 = c4;
            e30 = sPixel.Interpolate(c4, c3, c7, 2, 1, 1);
            e31 = sPixel.Interpolate(c4, c7, 3, 1);
          }
          if (c7.IsNotLike(c5)) {
            e22 = sPixel.Interpolate(c4, c8, 7, 1);
            e23 = sPixel.Interpolate(c4, c8, 3, 1);
            e32 = sPixel.Interpolate(c4, c8, 3, 1);
            e33 = sPixel.Interpolate(c4, c8, 5, 3);
          } else {
            e22 = c4;
            e23 = sPixel.Interpolate(c4, c5, 3, 1);
            e32 = sPixel.Interpolate(c4, c7, 3, 1);
            e33 = sPixel.Interpolate(c4, c5, c7, 2, 1, 1);
          }
          if (c1.IsNotLike(c3)) {
            e00 = c4;
            e01 = c4;
            e10 = c4;
          } else {
            e00 = sPixel.Interpolate(c1, c3, 1, 1);
            e01 = sPixel.Interpolate(c1, c4, 1, 1);
            e10 = sPixel.Interpolate(c3, c4, 1, 1);
          }
          if (c1.IsNotLike(c5)) {
            e02 = sPixel.Interpolate(c4, c2, 3, 1);
            e03 = sPixel.Interpolate(c4, c2, 5, 3);
            e12 = sPixel.Interpolate(c4, c2, 7, 1);
            e13 = sPixel.Interpolate(c4, c2, 3, 1);
          } else {
            e02 = sPixel.Interpolate(c4, c1, 3, 1);
            e03 = sPixel.Interpolate(c4, c1, c5, 2, 1, 1);
            e12 = c4;
            e13 = sPixel.Interpolate(c4, c5, 3, 1);
          }
        }
        break;
        case 92: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c1, c0, 5, 2, 1);
          e02 = sPixel.Interpolate(c4, c1, 5, 3);
          e03 = sPixel.Interpolate(c4, c1, 5, 3);
          e10 = sPixel.Interpolate(c4, c0, 3, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = sPixel.Interpolate(c4, c1, 7, 1);
          e13 = sPixel.Interpolate(c4, c1, 7, 1);
          if (c7.IsNotLike(c3)) {
            e20 = sPixel.Interpolate(c4, c6, 3, 1);
            e21 = sPixel.Interpolate(c4, c6, 7, 1);
            e30 = sPixel.Interpolate(c4, c6, 5, 3);
            e31 = sPixel.Interpolate(c4, c6, 3, 1);
          } else {
            e20 = sPixel.Interpolate(c4, c3, 3, 1);
            e21 = c4;
            e30 = sPixel.Interpolate(c4, c3, c7, 2, 1, 1);
            e31 = sPixel.Interpolate(c4, c7, 3, 1);
          }
          if (c7.IsNotLike(c5)) {
            e22 = sPixel.Interpolate(c4, c8, 7, 1);
            e23 = sPixel.Interpolate(c4, c8, 3, 1);
            e32 = sPixel.Interpolate(c4, c8, 3, 1);
            e33 = sPixel.Interpolate(c4, c8, 5, 3);
          } else {
            e22 = c4;
            e23 = sPixel.Interpolate(c4, c5, 3, 1);
            e32 = sPixel.Interpolate(c4, c7, 3, 1);
            e33 = sPixel.Interpolate(c4, c5, c7, 2, 1, 1);
          }
        }
        break;
        case 93: {
          e00 = sPixel.Interpolate(c4, c1, 5, 3);
          e01 = sPixel.Interpolate(c4, c1, 5, 3);
          e02 = sPixel.Interpolate(c4, c1, 5, 3);
          e03 = sPixel.Interpolate(c4, c1, 5, 3);
          e10 = sPixel.Interpolate(c4, c1, 7, 1);
          e11 = sPixel.Interpolate(c4, c1, 7, 1);
          e12 = sPixel.Interpolate(c4, c1, 7, 1);
          e13 = sPixel.Interpolate(c4, c1, 7, 1);
          if (c7.IsNotLike(c3)) {
            e20 = sPixel.Interpolate(c4, c6, 3, 1);
            e21 = sPixel.Interpolate(c4, c6, 7, 1);
            e30 = sPixel.Interpolate(c4, c6, 5, 3);
            e31 = sPixel.Interpolate(c4, c6, 3, 1);
          } else {
            e20 = sPixel.Interpolate(c4, c3, 3, 1);
            e21 = c4;
            e30 = sPixel.Interpolate(c4, c3, c7, 2, 1, 1);
            e31 = sPixel.Interpolate(c4, c7, 3, 1);
          }
          if (c7.IsNotLike(c5)) {
            e22 = sPixel.Interpolate(c4, c8, 7, 1);
            e23 = sPixel.Interpolate(c4, c8, 3, 1);
            e32 = sPixel.Interpolate(c4, c8, 3, 1);
            e33 = sPixel.Interpolate(c4, c8, 5, 3);
          } else {
            e22 = c4;
            e23 = sPixel.Interpolate(c4, c5, 3, 1);
            e32 = sPixel.Interpolate(c4, c7, 3, 1);
            e33 = sPixel.Interpolate(c4, c5, c7, 2, 1, 1);
          }
        }
        break;
        case 94: {
          e12 = c4;
          if (c7.IsNotLike(c3)) {
            e20 = sPixel.Interpolate(c4, c6, 3, 1);
            e21 = sPixel.Interpolate(c4, c6, 7, 1);
            e30 = sPixel.Interpolate(c4, c6, 5, 3);
            e31 = sPixel.Interpolate(c4, c6, 3, 1);
          } else {
            e20 = sPixel.Interpolate(c4, c3, 3, 1);
            e21 = c4;
            e30 = sPixel.Interpolate(c4, c3, c7, 2, 1, 1);
            e31 = sPixel.Interpolate(c4, c7, 3, 1);
          }
          if (c7.IsNotLike(c5)) {
            e22 = sPixel.Interpolate(c4, c8, 7, 1);
            e23 = sPixel.Interpolate(c4, c8, 3, 1);
            e32 = sPixel.Interpolate(c4, c8, 3, 1);
            e33 = sPixel.Interpolate(c4, c8, 5, 3);
          } else {
            e22 = c4;
            e23 = sPixel.Interpolate(c4, c5, 3, 1);
            e32 = sPixel.Interpolate(c4, c7, 3, 1);
            e33 = sPixel.Interpolate(c4, c5, c7, 2, 1, 1);
          }
          if (c1.IsNotLike(c3)) {
            e00 = sPixel.Interpolate(c4, c0, 5, 3);
            e01 = sPixel.Interpolate(c4, c0, 3, 1);
            e10 = sPixel.Interpolate(c4, c0, 3, 1);
            e11 = sPixel.Interpolate(c4, c0, 7, 1);
          } else {
            e00 = sPixel.Interpolate(c4, c1, c3, 2, 1, 1);
            e01 = sPixel.Interpolate(c4, c1, 3, 1);
            e10 = sPixel.Interpolate(c4, c3, 3, 1);
            e11 = c4;
          }
          if (c1.IsNotLike(c5)) {
            e02 = c4;
            e03 = c4;
            e13 = c4;
          } else {
            e02 = sPixel.Interpolate(c1, c4, 1, 1);
            e03 = sPixel.Interpolate(c1, c5, 1, 1);
            e13 = sPixel.Interpolate(c4, c5, 1, 1);
          }
        }
        break;
        case 95: {
          e11 = c4;
          e12 = c4;
          e20 = sPixel.Interpolate(c4, c6, 3, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c8, 3, 1);
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c6, 3, 1);
          e32 = sPixel.Interpolate(c4, c8, 3, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
          if (c1.IsNotLike(c3)) {
            e00 = c4;
            e01 = c4;
            e10 = c4;
          } else {
            e00 = sPixel.Interpolate(c1, c3, 1, 1);
            e01 = sPixel.Interpolate(c1, c4, 1, 1);
            e10 = sPixel.Interpolate(c3, c4, 1, 1);
          }
          if (c1.IsNotLike(c5)) {
            e02 = c4;
            e03 = c4;
            e13 = c4;
          } else {
            e02 = sPixel.Interpolate(c1, c4, 1, 1);
            e03 = sPixel.Interpolate(c1, c5, 1, 1);
            e13 = sPixel.Interpolate(c4, c5, 1, 1);
          }
        }
        break;
        case 96:
        case 97:
        case 100:
        case 101: {
          e00 = sPixel.Interpolate(c4, c1, c3, 2, 1, 1);
          e01 = sPixel.Interpolate(c4, c1, c3, 5, 2, 1);
          e02 = sPixel.Interpolate(c4, c1, c5, 5, 2, 1);
          e03 = sPixel.Interpolate(c4, c1, c5, 2, 1, 1);
          e10 = sPixel.Interpolate(c4, c3, c1, 5, 2, 1);
          e11 = sPixel.Interpolate(c4, c1, c3, 6, 1, 1);
          e12 = sPixel.Interpolate(c4, c1, c5, 6, 1, 1);
          e13 = sPixel.Interpolate(c4, c5, c1, 5, 2, 1);
          e20 = sPixel.Interpolate(c4, c3, 5, 3);
          e21 = sPixel.Interpolate(c4, c3, 7, 1);
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c5, c8, 5, 2, 1);
          e30 = sPixel.Interpolate(c4, c3, 5, 3);
          e31 = sPixel.Interpolate(c4, c3, 7, 1);
          e32 = sPixel.Interpolate(c4, c8, 3, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
        }
        break;
        case 98: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c0, 3, 1);
          e02 = sPixel.Interpolate(c4, c2, 3, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e10 = sPixel.Interpolate(c4, c3, c0, 5, 2, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c5, c2, 5, 2, 1);
          e20 = sPixel.Interpolate(c4, c3, 5, 3);
          e21 = sPixel.Interpolate(c4, c3, 7, 1);
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c5, c8, 5, 2, 1);
          e30 = sPixel.Interpolate(c4, c3, 5, 3);
          e31 = sPixel.Interpolate(c4, c3, 7, 1);
          e32 = sPixel.Interpolate(c4, c8, 3, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
        }
        break;
        case 99: {
          e00 = sPixel.Interpolate(c4, c3, 5, 3);
          e01 = sPixel.Interpolate(c4, c3, 7, 1);
          e02 = sPixel.Interpolate(c4, c2, 3, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e10 = sPixel.Interpolate(c4, c3, 5, 3);
          e11 = sPixel.Interpolate(c4, c3, 7, 1);
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c5, c2, 5, 2, 1);
          e20 = sPixel.Interpolate(c4, c3, 5, 3);
          e21 = sPixel.Interpolate(c4, c3, 7, 1);
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c5, c8, 5, 2, 1);
          e30 = sPixel.Interpolate(c4, c3, 5, 3);
          e31 = sPixel.Interpolate(c4, c3, 7, 1);
          e32 = sPixel.Interpolate(c4, c8, 3, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
        }
        break;
        case 102: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c0, 3, 1);
          e02 = sPixel.Interpolate(c4, c5, 7, 1);
          e03 = sPixel.Interpolate(c4, c5, 5, 3);
          e10 = sPixel.Interpolate(c4, c3, c0, 5, 2, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = sPixel.Interpolate(c4, c5, 7, 1);
          e13 = sPixel.Interpolate(c4, c5, 5, 3);
          e20 = sPixel.Interpolate(c4, c3, 5, 3);
          e21 = sPixel.Interpolate(c4, c3, 7, 1);
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c5, c8, 5, 2, 1);
          e30 = sPixel.Interpolate(c4, c3, 5, 3);
          e31 = sPixel.Interpolate(c4, c3, 7, 1);
          e32 = sPixel.Interpolate(c4, c8, 3, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
        }
        break;
        case 103: {
          e00 = sPixel.Interpolate(c4, c3, 5, 3);
          e01 = sPixel.Interpolate(c4, c3, 7, 1);
          e02 = sPixel.Interpolate(c4, c5, 7, 1);
          e03 = sPixel.Interpolate(c4, c5, 5, 3);
          e10 = sPixel.Interpolate(c4, c3, 5, 3);
          e11 = sPixel.Interpolate(c4, c3, 7, 1);
          e12 = sPixel.Interpolate(c4, c5, 7, 1);
          e13 = sPixel.Interpolate(c4, c5, 5, 3);
          e20 = sPixel.Interpolate(c4, c3, 5, 3);
          e21 = sPixel.Interpolate(c4, c3, 7, 1);
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c5, c8, 5, 2, 1);
          e30 = sPixel.Interpolate(c4, c3, 5, 3);
          e31 = sPixel.Interpolate(c4, c3, 7, 1);
          e32 = sPixel.Interpolate(c4, c8, 3, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
        }
        break;
        case 104:
        case 108: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c1, c0, 5, 2, 1);
          e02 = sPixel.Interpolate(c4, c1, c5, 5, 2, 1);
          e03 = sPixel.Interpolate(c4, c1, c5, 2, 1, 1);
          e10 = sPixel.Interpolate(c4, c0, 3, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = sPixel.Interpolate(c4, c1, c5, 6, 1, 1);
          e13 = sPixel.Interpolate(c4, c5, c1, 5, 2, 1);
          e21 = c4;
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c5, c8, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c8, 3, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
          if (c7.IsNotLike(c3)) {
            e20 = c4;
            e30 = c4;
            e31 = c4;
          } else {
            e20 = sPixel.Interpolate(c3, c4, 1, 1);
            e30 = sPixel.Interpolate(c3, c7, 1, 1);
            e31 = sPixel.Interpolate(c4, c7, 1, 1);
          }
        }
        break;
        case 105:
        case 109: {
          e01 = sPixel.Interpolate(c4, c1, 5, 3);
          e02 = sPixel.Interpolate(c4, c1, c5, 5, 2, 1);
          e03 = sPixel.Interpolate(c4, c1, c5, 2, 1, 1);
          e11 = sPixel.Interpolate(c4, c1, 7, 1);
          e12 = sPixel.Interpolate(c4, c1, c5, 6, 1, 1);
          e13 = sPixel.Interpolate(c4, c5, c1, 5, 2, 1);
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c5, c8, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c8, 3, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
          if (c7.IsNotLike(c3)) {
            e00 = sPixel.Interpolate(c4, c1, 5, 3);
            e10 = sPixel.Interpolate(c4, c1, 7, 1);
            e20 = c4;
            e21 = c4;
            e30 = c4;
            e31 = c4;
          } else {
            e00 = sPixel.Interpolate(c4, c3, 3, 1);
            e10 = sPixel.Interpolate(c3, c4, 3, 1);
            e20 = sPixel.Interpolate(c3, c7, 5, 3);
            e21 = sPixel.Interpolate(c4, c3, c7, 6, 1, 1);
            e30 = sPixel.Interpolate(c3, c7, 1, 1);
            e31 = sPixel.Interpolate(c7, c3, c4, 2, 1, 1);
          }
        }
        break;
        case 106: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c0, 3, 1);
          e02 = sPixel.Interpolate(c4, c2, 3, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e10 = sPixel.Interpolate(c4, c0, 3, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c5, c2, 5, 2, 1);
          e21 = c4;
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c5, c8, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c8, 3, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
          if (c7.IsNotLike(c3)) {
            e20 = c4;
            e30 = c4;
            e31 = c4;
          } else {
            e20 = sPixel.Interpolate(c3, c4, 1, 1);
            e30 = sPixel.Interpolate(c3, c7, 1, 1);
            e31 = sPixel.Interpolate(c4, c7, 1, 1);
          }
        }
        break;
        case 110: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c0, 3, 1);
          e02 = sPixel.Interpolate(c4, c5, 7, 1);
          e03 = sPixel.Interpolate(c4, c5, 5, 3);
          e10 = sPixel.Interpolate(c4, c0, 3, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = sPixel.Interpolate(c4, c5, 7, 1);
          e13 = sPixel.Interpolate(c4, c5, 5, 3);
          e21 = c4;
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c5, c8, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c8, 3, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
          if (c7.IsNotLike(c3)) {
            e20 = c4;
            e30 = c4;
            e31 = c4;
          } else {
            e20 = sPixel.Interpolate(c3, c4, 1, 1);
            e30 = sPixel.Interpolate(c3, c7, 1, 1);
            e31 = sPixel.Interpolate(c4, c7, 1, 1);
          }
        }
        break;
        case 111: {
          e01 = c4;
          e02 = sPixel.Interpolate(c4, c5, 7, 1);
          e03 = sPixel.Interpolate(c4, c5, 5, 3);
          e10 = c4;
          e11 = c4;
          e12 = sPixel.Interpolate(c4, c5, 7, 1);
          e13 = sPixel.Interpolate(c4, c5, 5, 3);
          e21 = c4;
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c5, c8, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c8, 3, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
          if (c7.IsNotLike(c3)) {
            e20 = c4;
            e30 = c4;
            e31 = c4;
          } else {
            e20 = sPixel.Interpolate(c3, c4, 1, 1);
            e30 = sPixel.Interpolate(c3, c7, 1, 1);
            e31 = sPixel.Interpolate(c4, c7, 1, 1);
          }
          e00 = (c1.IsNotLike(c3)) ? (c4) : (sPixel.Interpolate(c4, c1, c3, 2, 1, 1));
        }
        break;
        case 112:
        case 113: {
          e00 = sPixel.Interpolate(c4, c1, c3, 2, 1, 1);
          e01 = sPixel.Interpolate(c4, c1, c3, 5, 2, 1);
          e02 = sPixel.Interpolate(c4, c1, c2, 5, 2, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e10 = sPixel.Interpolate(c4, c3, c1, 5, 2, 1);
          e11 = sPixel.Interpolate(c4, c1, c3, 6, 1, 1);
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c2, 3, 1);
          e20 = sPixel.Interpolate(c4, c3, 5, 3);
          e21 = sPixel.Interpolate(c4, c3, 7, 1);
          if (c7.IsNotLike(c5)) {
            e22 = sPixel.Interpolate(c4, c8, 7, 1);
            e23 = sPixel.Interpolate(c4, c8, 3, 1);
            e30 = sPixel.Interpolate(c4, c3, 5, 3);
            e31 = sPixel.Interpolate(c4, c3, 7, 1);
            e32 = sPixel.Interpolate(c4, c8, 3, 1);
            e33 = sPixel.Interpolate(c4, c8, 5, 3);
          } else {
            e22 = sPixel.Interpolate(c4, c5, c7, 6, 1, 1);
            e23 = sPixel.Interpolate(c5, c4, c7, 2, 1, 1);
            e30 = sPixel.Interpolate(c4, c7, 3, 1);
            e31 = sPixel.Interpolate(c7, c4, 3, 1);
            e32 = sPixel.Interpolate(c7, c5, 5, 3);
            e33 = sPixel.Interpolate(c5, c7, 1, 1);
          }
        }
        break;
        case 114: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c0, 3, 1);
          e10 = sPixel.Interpolate(c4, c3, c0, 5, 2, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e20 = sPixel.Interpolate(c4, c3, 5, 3);
          e21 = sPixel.Interpolate(c4, c3, 7, 1);
          e30 = sPixel.Interpolate(c4, c3, 5, 3);
          e31 = sPixel.Interpolate(c4, c3, 7, 1);
          if (c7.IsNotLike(c5)) {
            e22 = sPixel.Interpolate(c4, c8, 7, 1);
            e23 = sPixel.Interpolate(c4, c8, 3, 1);
            e32 = sPixel.Interpolate(c4, c8, 3, 1);
            e33 = sPixel.Interpolate(c4, c8, 5, 3);
          } else {
            e22 = c4;
            e23 = sPixel.Interpolate(c4, c5, 3, 1);
            e32 = sPixel.Interpolate(c4, c7, 3, 1);
            e33 = sPixel.Interpolate(c4, c5, c7, 2, 1, 1);
          }
          if (c1.IsNotLike(c5)) {
            e02 = sPixel.Interpolate(c4, c2, 3, 1);
            e03 = sPixel.Interpolate(c4, c2, 5, 3);
            e12 = sPixel.Interpolate(c4, c2, 7, 1);
            e13 = sPixel.Interpolate(c4, c2, 3, 1);
          } else {
            e02 = sPixel.Interpolate(c4, c1, 3, 1);
            e03 = sPixel.Interpolate(c4, c1, c5, 2, 1, 1);
            e12 = c4;
            e13 = sPixel.Interpolate(c4, c5, 3, 1);
          }
        }
        break;
        case 115: {
          e00 = sPixel.Interpolate(c4, c3, 5, 3);
          e01 = sPixel.Interpolate(c4, c3, 7, 1);
          e10 = sPixel.Interpolate(c4, c3, 5, 3);
          e11 = sPixel.Interpolate(c4, c3, 7, 1);
          e20 = sPixel.Interpolate(c4, c3, 5, 3);
          e21 = sPixel.Interpolate(c4, c3, 7, 1);
          e30 = sPixel.Interpolate(c4, c3, 5, 3);
          e31 = sPixel.Interpolate(c4, c3, 7, 1);
          if (c7.IsNotLike(c5)) {
            e22 = sPixel.Interpolate(c4, c8, 7, 1);
            e23 = sPixel.Interpolate(c4, c8, 3, 1);
            e32 = sPixel.Interpolate(c4, c8, 3, 1);
            e33 = sPixel.Interpolate(c4, c8, 5, 3);
          } else {
            e22 = c4;
            e23 = sPixel.Interpolate(c4, c5, 3, 1);
            e32 = sPixel.Interpolate(c4, c7, 3, 1);
            e33 = sPixel.Interpolate(c4, c5, c7, 2, 1, 1);
          }
          if (c1.IsNotLike(c5)) {
            e02 = sPixel.Interpolate(c4, c2, 3, 1);
            e03 = sPixel.Interpolate(c4, c2, 5, 3);
            e12 = sPixel.Interpolate(c4, c2, 7, 1);
            e13 = sPixel.Interpolate(c4, c2, 3, 1);
          } else {
            e02 = sPixel.Interpolate(c4, c1, 3, 1);
            e03 = sPixel.Interpolate(c4, c1, c5, 2, 1, 1);
            e12 = c4;
            e13 = sPixel.Interpolate(c4, c5, 3, 1);
          }
        }
        break;
        case 116:
        case 117: {
          e00 = sPixel.Interpolate(c4, c1, c3, 2, 1, 1);
          e01 = sPixel.Interpolate(c4, c1, c3, 5, 2, 1);
          e02 = sPixel.Interpolate(c4, c1, 5, 3);
          e03 = sPixel.Interpolate(c4, c1, 5, 3);
          e10 = sPixel.Interpolate(c4, c3, c1, 5, 2, 1);
          e11 = sPixel.Interpolate(c4, c1, c3, 6, 1, 1);
          e12 = sPixel.Interpolate(c4, c1, 7, 1);
          e13 = sPixel.Interpolate(c4, c1, 7, 1);
          e20 = sPixel.Interpolate(c4, c3, 5, 3);
          e21 = sPixel.Interpolate(c4, c3, 7, 1);
          e30 = sPixel.Interpolate(c4, c3, 5, 3);
          e31 = sPixel.Interpolate(c4, c3, 7, 1);
          if (c7.IsNotLike(c5)) {
            e22 = sPixel.Interpolate(c4, c8, 7, 1);
            e23 = sPixel.Interpolate(c4, c8, 3, 1);
            e32 = sPixel.Interpolate(c4, c8, 3, 1);
            e33 = sPixel.Interpolate(c4, c8, 5, 3);
          } else {
            e22 = c4;
            e23 = sPixel.Interpolate(c4, c5, 3, 1);
            e32 = sPixel.Interpolate(c4, c7, 3, 1);
            e33 = sPixel.Interpolate(c4, c5, c7, 2, 1, 1);
          }
        }
        break;
        case 118: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c0, 3, 1);
          e10 = sPixel.Interpolate(c4, c3, c0, 5, 2, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = c4;
          e20 = sPixel.Interpolate(c4, c3, 5, 3);
          e21 = sPixel.Interpolate(c4, c3, 7, 1);
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c8, 3, 1);
          e30 = sPixel.Interpolate(c4, c3, 5, 3);
          e31 = sPixel.Interpolate(c4, c3, 7, 1);
          e32 = sPixel.Interpolate(c4, c8, 3, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
          if (c1.IsNotLike(c5)) {
            e02 = c4;
            e03 = c4;
            e13 = c4;
          } else {
            e02 = sPixel.Interpolate(c1, c4, 1, 1);
            e03 = sPixel.Interpolate(c1, c5, 1, 1);
            e13 = sPixel.Interpolate(c4, c5, 1, 1);
          }
        }
        break;
        case 119: {
          e10 = sPixel.Interpolate(c4, c3, 5, 3);
          e11 = sPixel.Interpolate(c4, c3, 7, 1);
          e20 = sPixel.Interpolate(c4, c3, 5, 3);
          e21 = sPixel.Interpolate(c4, c3, 7, 1);
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c8, 3, 1);
          e30 = sPixel.Interpolate(c4, c3, 5, 3);
          e31 = sPixel.Interpolate(c4, c3, 7, 1);
          e32 = sPixel.Interpolate(c4, c8, 3, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
          if (c1.IsNotLike(c5)) {
            e00 = sPixel.Interpolate(c4, c3, 5, 3);
            e01 = sPixel.Interpolate(c4, c3, 7, 1);
            e02 = c4;
            e03 = c4;
            e12 = c4;
            e13 = c4;
          } else {
            e00 = sPixel.Interpolate(c4, c1, 3, 1);
            e01 = sPixel.Interpolate(c1, c4, 3, 1);
            e02 = sPixel.Interpolate(c1, c5, 5, 3);
            e03 = sPixel.Interpolate(c1, c5, 1, 1);
            e12 = sPixel.Interpolate(c4, c1, c5, 6, 1, 1);
            e13 = sPixel.Interpolate(c5, c1, c4, 2, 1, 1);
          }
        }
        break;
        case 120: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c1, c0, 5, 2, 1);
          e02 = sPixel.Interpolate(c4, c1, c2, 5, 2, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e10 = sPixel.Interpolate(c4, c0, 3, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c2, 3, 1);
          e21 = c4;
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c8, 3, 1);
          e32 = sPixel.Interpolate(c4, c8, 3, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
          if (c7.IsNotLike(c3)) {
            e20 = c4;
            e30 = c4;
            e31 = c4;
          } else {
            e20 = sPixel.Interpolate(c3, c4, 1, 1);
            e30 = sPixel.Interpolate(c3, c7, 1, 1);
            e31 = sPixel.Interpolate(c4, c7, 1, 1);
          }
        }
        break;
        case 121: {
          e00 = sPixel.Interpolate(c4, c1, 5, 3);
          e01 = sPixel.Interpolate(c4, c1, 5, 3);
          e02 = sPixel.Interpolate(c4, c1, c2, 5, 2, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e10 = sPixel.Interpolate(c4, c1, 7, 1);
          e11 = sPixel.Interpolate(c4, c1, 7, 1);
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c2, 3, 1);
          e21 = c4;
          if (c7.IsNotLike(c3)) {
            e20 = c4;
            e30 = c4;
            e31 = c4;
          } else {
            e20 = sPixel.Interpolate(c3, c4, 1, 1);
            e30 = sPixel.Interpolate(c3, c7, 1, 1);
            e31 = sPixel.Interpolate(c4, c7, 1, 1);
          }
          if (c7.IsNotLike(c5)) {
            e22 = sPixel.Interpolate(c4, c8, 7, 1);
            e23 = sPixel.Interpolate(c4, c8, 3, 1);
            e32 = sPixel.Interpolate(c4, c8, 3, 1);
            e33 = sPixel.Interpolate(c4, c8, 5, 3);
          } else {
            e22 = c4;
            e23 = sPixel.Interpolate(c4, c5, 3, 1);
            e32 = sPixel.Interpolate(c4, c7, 3, 1);
            e33 = sPixel.Interpolate(c4, c5, c7, 2, 1, 1);
          }
        }
        break;
        case 122: {
          e21 = c4;
          if (c7.IsNotLike(c3)) {
            e20 = c4;
            e30 = c4;
            e31 = c4;
          } else {
            e20 = sPixel.Interpolate(c3, c4, 1, 1);
            e30 = sPixel.Interpolate(c3, c7, 1, 1);
            e31 = sPixel.Interpolate(c4, c7, 1, 1);
          }
          if (c7.IsNotLike(c5)) {
            e22 = sPixel.Interpolate(c4, c8, 7, 1);
            e23 = sPixel.Interpolate(c4, c8, 3, 1);
            e32 = sPixel.Interpolate(c4, c8, 3, 1);
            e33 = sPixel.Interpolate(c4, c8, 5, 3);
          } else {
            e22 = c4;
            e23 = sPixel.Interpolate(c4, c5, 3, 1);
            e32 = sPixel.Interpolate(c4, c7, 3, 1);
            e33 = sPixel.Interpolate(c4, c5, c7, 2, 1, 1);
          }
          if (c1.IsNotLike(c3)) {
            e00 = sPixel.Interpolate(c4, c0, 5, 3);
            e01 = sPixel.Interpolate(c4, c0, 3, 1);
            e10 = sPixel.Interpolate(c4, c0, 3, 1);
            e11 = sPixel.Interpolate(c4, c0, 7, 1);
          } else {
            e00 = sPixel.Interpolate(c4, c1, c3, 2, 1, 1);
            e01 = sPixel.Interpolate(c4, c1, 3, 1);
            e10 = sPixel.Interpolate(c4, c3, 3, 1);
            e11 = c4;
          }
          if (c1.IsNotLike(c5)) {
            e02 = sPixel.Interpolate(c4, c2, 3, 1);
            e03 = sPixel.Interpolate(c4, c2, 5, 3);
            e12 = sPixel.Interpolate(c4, c2, 7, 1);
            e13 = sPixel.Interpolate(c4, c2, 3, 1);
          } else {
            e02 = sPixel.Interpolate(c4, c1, 3, 1);
            e03 = sPixel.Interpolate(c4, c1, c5, 2, 1, 1);
            e12 = c4;
            e13 = sPixel.Interpolate(c4, c5, 3, 1);
          }
        }
        break;
        case 123: {
          e02 = sPixel.Interpolate(c4, c2, 3, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e11 = c4;
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c2, 3, 1);
          e21 = c4;
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c8, 3, 1);
          e32 = sPixel.Interpolate(c4, c8, 3, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
          if (c7.IsNotLike(c3)) {
            e20 = c4;
            e30 = c4;
            e31 = c4;
          } else {
            e20 = sPixel.Interpolate(c3, c4, 1, 1);
            e30 = sPixel.Interpolate(c3, c7, 1, 1);
            e31 = sPixel.Interpolate(c4, c7, 1, 1);
          }
          if (c1.IsNotLike(c3)) {
            e00 = c4;
            e01 = c4;
            e10 = c4;
          } else {
            e00 = sPixel.Interpolate(c1, c3, 1, 1);
            e01 = sPixel.Interpolate(c1, c4, 1, 1);
            e10 = sPixel.Interpolate(c3, c4, 1, 1);
          }
        }
        break;
        case 124: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c1, c0, 5, 2, 1);
          e02 = sPixel.Interpolate(c4, c1, 5, 3);
          e03 = sPixel.Interpolate(c4, c1, 5, 3);
          e10 = sPixel.Interpolate(c4, c0, 3, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = sPixel.Interpolate(c4, c1, 7, 1);
          e13 = sPixel.Interpolate(c4, c1, 7, 1);
          e21 = c4;
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c8, 3, 1);
          e32 = sPixel.Interpolate(c4, c8, 3, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
          if (c7.IsNotLike(c3)) {
            e20 = c4;
            e30 = c4;
            e31 = c4;
          } else {
            e20 = sPixel.Interpolate(c3, c4, 1, 1);
            e30 = sPixel.Interpolate(c3, c7, 1, 1);
            e31 = sPixel.Interpolate(c4, c7, 1, 1);
          }
        }
        break;
        case 125: {
          e01 = sPixel.Interpolate(c4, c1, 5, 3);
          e02 = sPixel.Interpolate(c4, c1, 5, 3);
          e03 = sPixel.Interpolate(c4, c1, 5, 3);
          e11 = sPixel.Interpolate(c4, c1, 7, 1);
          e12 = sPixel.Interpolate(c4, c1, 7, 1);
          e13 = sPixel.Interpolate(c4, c1, 7, 1);
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c8, 3, 1);
          e32 = sPixel.Interpolate(c4, c8, 3, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
          if (c7.IsNotLike(c3)) {
            e00 = sPixel.Interpolate(c4, c1, 5, 3);
            e10 = sPixel.Interpolate(c4, c1, 7, 1);
            e20 = c4;
            e21 = c4;
            e30 = c4;
            e31 = c4;
          } else {
            e00 = sPixel.Interpolate(c4, c3, 3, 1);
            e10 = sPixel.Interpolate(c3, c4, 3, 1);
            e20 = sPixel.Interpolate(c3, c7, 5, 3);
            e21 = sPixel.Interpolate(c4, c3, c7, 6, 1, 1);
            e30 = sPixel.Interpolate(c3, c7, 1, 1);
            e31 = sPixel.Interpolate(c7, c3, c4, 2, 1, 1);
          }
        }
        break;
        case 126: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c0, 3, 1);
          e10 = sPixel.Interpolate(c4, c0, 3, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = c4;
          e21 = c4;
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c8, 3, 1);
          e32 = sPixel.Interpolate(c4, c8, 3, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
          if (c7.IsNotLike(c3)) {
            e20 = c4;
            e30 = c4;
            e31 = c4;
          } else {
            e20 = sPixel.Interpolate(c3, c4, 1, 1);
            e30 = sPixel.Interpolate(c3, c7, 1, 1);
            e31 = sPixel.Interpolate(c4, c7, 1, 1);
          }
          if (c1.IsNotLike(c5)) {
            e02 = c4;
            e03 = c4;
            e13 = c4;
          } else {
            e02 = sPixel.Interpolate(c1, c4, 1, 1);
            e03 = sPixel.Interpolate(c1, c5, 1, 1);
            e13 = sPixel.Interpolate(c4, c5, 1, 1);
          }
        }
        break;
        case 127: {
          e01 = c4;
          e10 = c4;
          e11 = c4;
          e12 = c4;
          e21 = c4;
          e22 = sPixel.Interpolate(c4, c8, 7, 1);
          e23 = sPixel.Interpolate(c4, c8, 3, 1);
          e32 = sPixel.Interpolate(c4, c8, 3, 1);
          e33 = sPixel.Interpolate(c4, c8, 5, 3);
          if (c7.IsNotLike(c3)) {
            e20 = c4;
            e30 = c4;
            e31 = c4;
          } else {
            e20 = sPixel.Interpolate(c3, c4, 1, 1);
            e30 = sPixel.Interpolate(c3, c7, 1, 1);
            e31 = sPixel.Interpolate(c4, c7, 1, 1);
          }
          e00 = (c1.IsNotLike(c3)) ? (c4) : (sPixel.Interpolate(c4, c1, c3, 2, 1, 1));
          if (c1.IsNotLike(c5)) {
            e02 = c4;
            e03 = c4;
            e13 = c4;
          } else {
            e02 = sPixel.Interpolate(c1, c4, 1, 1);
            e03 = sPixel.Interpolate(c1, c5, 1, 1);
            e13 = sPixel.Interpolate(c4, c5, 1, 1);
          }
        }
        break;
        case 144:
        case 145:
        case 176:
        case 177: {
          e00 = sPixel.Interpolate(c4, c1, c3, 2, 1, 1);
          e01 = sPixel.Interpolate(c4, c1, c3, 5, 2, 1);
          e02 = sPixel.Interpolate(c4, c1, c2, 5, 2, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e10 = sPixel.Interpolate(c4, c3, c1, 5, 2, 1);
          e11 = sPixel.Interpolate(c4, c1, c3, 6, 1, 1);
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c2, 3, 1);
          e20 = sPixel.Interpolate(c4, c3, c7, 5, 2, 1);
          e21 = sPixel.Interpolate(c4, c3, c7, 6, 1, 1);
          e22 = sPixel.Interpolate(c4, c7, 7, 1);
          e23 = sPixel.Interpolate(c4, c7, 7, 1);
          e30 = sPixel.Interpolate(c4, c3, c7, 2, 1, 1);
          e31 = sPixel.Interpolate(c4, c7, c3, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c7, 5, 3);
          e33 = sPixel.Interpolate(c4, c7, 5, 3);
        }
        break;
        case 146:
        case 178: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c0, 3, 1);
          e10 = sPixel.Interpolate(c4, c3, c0, 5, 2, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e20 = sPixel.Interpolate(c4, c3, c7, 5, 2, 1);
          e21 = sPixel.Interpolate(c4, c3, c7, 6, 1, 1);
          e22 = sPixel.Interpolate(c4, c7, 7, 1);
          e30 = sPixel.Interpolate(c4, c3, c7, 2, 1, 1);
          e31 = sPixel.Interpolate(c4, c7, c3, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c7, 5, 3);
          if (c1.IsNotLike(c5)) {
            e02 = sPixel.Interpolate(c4, c2, 3, 1);
            e03 = sPixel.Interpolate(c4, c2, 5, 3);
            e12 = sPixel.Interpolate(c4, c2, 7, 1);
            e13 = sPixel.Interpolate(c4, c2, 3, 1);
            e23 = sPixel.Interpolate(c4, c7, 7, 1);
            e33 = sPixel.Interpolate(c4, c7, 5, 3);
          } else {
            e02 = sPixel.Interpolate(c1, c4, c5, 2, 1, 1);
            e03 = sPixel.Interpolate(c1, c5, 1, 1);
            e12 = sPixel.Interpolate(c4, c1, c5, 6, 1, 1);
            e13 = sPixel.Interpolate(c5, c1, 5, 3);
            e23 = sPixel.Interpolate(c5, c4, 3, 1);
            e33 = sPixel.Interpolate(c4, c5, 3, 1);
          }
        }
        break;
        case 147:
        case 179: {
          e00 = sPixel.Interpolate(c4, c3, 5, 3);
          e01 = sPixel.Interpolate(c4, c3, 7, 1);
          e10 = sPixel.Interpolate(c4, c3, 5, 3);
          e11 = sPixel.Interpolate(c4, c3, 7, 1);
          e20 = sPixel.Interpolate(c4, c3, c7, 5, 2, 1);
          e21 = sPixel.Interpolate(c4, c3, c7, 6, 1, 1);
          e22 = sPixel.Interpolate(c4, c7, 7, 1);
          e23 = sPixel.Interpolate(c4, c7, 7, 1);
          e30 = sPixel.Interpolate(c4, c3, c7, 2, 1, 1);
          e31 = sPixel.Interpolate(c4, c7, c3, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c7, 5, 3);
          e33 = sPixel.Interpolate(c4, c7, 5, 3);
          if (c1.IsNotLike(c5)) {
            e02 = sPixel.Interpolate(c4, c2, 3, 1);
            e03 = sPixel.Interpolate(c4, c2, 5, 3);
            e12 = sPixel.Interpolate(c4, c2, 7, 1);
            e13 = sPixel.Interpolate(c4, c2, 3, 1);
          } else {
            e02 = sPixel.Interpolate(c4, c1, 3, 1);
            e03 = sPixel.Interpolate(c4, c1, c5, 2, 1, 1);
            e12 = c4;
            e13 = sPixel.Interpolate(c4, c5, 3, 1);
          }
        }
        break;
        case 148:
        case 149:
        case 180:
        case 181: {
          e00 = sPixel.Interpolate(c4, c1, c3, 2, 1, 1);
          e01 = sPixel.Interpolate(c4, c1, c3, 5, 2, 1);
          e02 = sPixel.Interpolate(c4, c1, 5, 3);
          e03 = sPixel.Interpolate(c4, c1, 5, 3);
          e10 = sPixel.Interpolate(c4, c3, c1, 5, 2, 1);
          e11 = sPixel.Interpolate(c4, c1, c3, 6, 1, 1);
          e12 = sPixel.Interpolate(c4, c1, 7, 1);
          e13 = sPixel.Interpolate(c4, c1, 7, 1);
          e20 = sPixel.Interpolate(c4, c3, c7, 5, 2, 1);
          e21 = sPixel.Interpolate(c4, c3, c7, 6, 1, 1);
          e22 = sPixel.Interpolate(c4, c7, 7, 1);
          e23 = sPixel.Interpolate(c4, c7, 7, 1);
          e30 = sPixel.Interpolate(c4, c3, c7, 2, 1, 1);
          e31 = sPixel.Interpolate(c4, c7, c3, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c7, 5, 3);
          e33 = sPixel.Interpolate(c4, c7, 5, 3);
        }
        break;
        case 150:
        case 182: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c0, 3, 1);
          e10 = sPixel.Interpolate(c4, c3, c0, 5, 2, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e20 = sPixel.Interpolate(c4, c3, c7, 5, 2, 1);
          e21 = sPixel.Interpolate(c4, c3, c7, 6, 1, 1);
          e22 = sPixel.Interpolate(c4, c7, 7, 1);
          e30 = sPixel.Interpolate(c4, c3, c7, 2, 1, 1);
          e31 = sPixel.Interpolate(c4, c7, c3, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c7, 5, 3);
          if (c1.IsNotLike(c5)) {
            e02 = c4;
            e03 = c4;
            e12 = c4;
            e13 = c4;
            e23 = sPixel.Interpolate(c4, c7, 7, 1);
            e33 = sPixel.Interpolate(c4, c7, 5, 3);
          } else {
            e02 = sPixel.Interpolate(c1, c4, c5, 2, 1, 1);
            e03 = sPixel.Interpolate(c1, c5, 1, 1);
            e12 = sPixel.Interpolate(c4, c1, c5, 6, 1, 1);
            e13 = sPixel.Interpolate(c5, c1, 5, 3);
            e23 = sPixel.Interpolate(c5, c4, 3, 1);
            e33 = sPixel.Interpolate(c4, c5, 3, 1);
          }
        }
        break;
        case 151:
        case 183: {
          e00 = sPixel.Interpolate(c4, c3, 5, 3);
          e01 = sPixel.Interpolate(c4, c3, 7, 1);
          e02 = c4;
          e10 = sPixel.Interpolate(c4, c3, 5, 3);
          e11 = sPixel.Interpolate(c4, c3, 7, 1);
          e12 = c4;
          e13 = c4;
          e20 = sPixel.Interpolate(c4, c3, c7, 5, 2, 1);
          e21 = sPixel.Interpolate(c4, c3, c7, 6, 1, 1);
          e22 = sPixel.Interpolate(c4, c7, 7, 1);
          e23 = sPixel.Interpolate(c4, c7, 7, 1);
          e30 = sPixel.Interpolate(c4, c3, c7, 2, 1, 1);
          e31 = sPixel.Interpolate(c4, c7, c3, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c7, 5, 3);
          e33 = sPixel.Interpolate(c4, c7, 5, 3);
          e03 = (c1.IsNotLike(c5)) ? (c4) : (sPixel.Interpolate(c4, c1, c5, 2, 1, 1));
        }
        break;
        case 152: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c1, c0, 5, 2, 1);
          e02 = sPixel.Interpolate(c4, c1, c2, 5, 2, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e10 = sPixel.Interpolate(c4, c0, 3, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c2, 3, 1);
          e20 = sPixel.Interpolate(c4, c6, 3, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = sPixel.Interpolate(c4, c7, 7, 1);
          e23 = sPixel.Interpolate(c4, c7, 7, 1);
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c7, c6, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c7, 5, 3);
          e33 = sPixel.Interpolate(c4, c7, 5, 3);
        }
        break;
        case 153: {
          e00 = sPixel.Interpolate(c4, c1, 5, 3);
          e01 = sPixel.Interpolate(c4, c1, 5, 3);
          e02 = sPixel.Interpolate(c4, c1, c2, 5, 2, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e10 = sPixel.Interpolate(c4, c1, 7, 1);
          e11 = sPixel.Interpolate(c4, c1, 7, 1);
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c2, 3, 1);
          e20 = sPixel.Interpolate(c4, c6, 3, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = sPixel.Interpolate(c4, c7, 7, 1);
          e23 = sPixel.Interpolate(c4, c7, 7, 1);
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c7, c6, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c7, 5, 3);
          e33 = sPixel.Interpolate(c4, c7, 5, 3);
        }
        break;
        case 154: {
          e20 = sPixel.Interpolate(c4, c6, 3, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = sPixel.Interpolate(c4, c7, 7, 1);
          e23 = sPixel.Interpolate(c4, c7, 7, 1);
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c7, c6, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c7, 5, 3);
          e33 = sPixel.Interpolate(c4, c7, 5, 3);
          if (c1.IsNotLike(c3)) {
            e00 = sPixel.Interpolate(c4, c0, 5, 3);
            e01 = sPixel.Interpolate(c4, c0, 3, 1);
            e10 = sPixel.Interpolate(c4, c0, 3, 1);
            e11 = sPixel.Interpolate(c4, c0, 7, 1);
          } else {
            e00 = sPixel.Interpolate(c4, c1, c3, 2, 1, 1);
            e01 = sPixel.Interpolate(c4, c1, 3, 1);
            e10 = sPixel.Interpolate(c4, c3, 3, 1);
            e11 = c4;
          }
          if (c1.IsNotLike(c5)) {
            e02 = sPixel.Interpolate(c4, c2, 3, 1);
            e03 = sPixel.Interpolate(c4, c2, 5, 3);
            e12 = sPixel.Interpolate(c4, c2, 7, 1);
            e13 = sPixel.Interpolate(c4, c2, 3, 1);
          } else {
            e02 = sPixel.Interpolate(c4, c1, 3, 1);
            e03 = sPixel.Interpolate(c4, c1, c5, 2, 1, 1);
            e12 = c4;
            e13 = sPixel.Interpolate(c4, c5, 3, 1);
          }
        }
        break;
        case 155: {
          e02 = sPixel.Interpolate(c4, c2, 3, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e11 = c4;
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c2, 3, 1);
          e20 = sPixel.Interpolate(c4, c6, 3, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = sPixel.Interpolate(c4, c7, 7, 1);
          e23 = sPixel.Interpolate(c4, c7, 7, 1);
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c7, c6, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c7, 5, 3);
          e33 = sPixel.Interpolate(c4, c7, 5, 3);
          if (c1.IsNotLike(c3)) {
            e00 = c4;
            e01 = c4;
            e10 = c4;
          } else {
            e00 = sPixel.Interpolate(c1, c3, 1, 1);
            e01 = sPixel.Interpolate(c1, c4, 1, 1);
            e10 = sPixel.Interpolate(c3, c4, 1, 1);
          }
        }
        break;
        case 156: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c1, c0, 5, 2, 1);
          e02 = sPixel.Interpolate(c4, c1, 5, 3);
          e03 = sPixel.Interpolate(c4, c1, 5, 3);
          e10 = sPixel.Interpolate(c4, c0, 3, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = sPixel.Interpolate(c4, c1, 7, 1);
          e13 = sPixel.Interpolate(c4, c1, 7, 1);
          e20 = sPixel.Interpolate(c4, c6, 3, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = sPixel.Interpolate(c4, c7, 7, 1);
          e23 = sPixel.Interpolate(c4, c7, 7, 1);
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c7, c6, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c7, 5, 3);
          e33 = sPixel.Interpolate(c4, c7, 5, 3);
        }
        break;
        case 157: {
          e00 = sPixel.Interpolate(c4, c1, 5, 3);
          e01 = sPixel.Interpolate(c4, c1, 5, 3);
          e02 = sPixel.Interpolate(c4, c1, 5, 3);
          e03 = sPixel.Interpolate(c4, c1, 5, 3);
          e10 = sPixel.Interpolate(c4, c1, 7, 1);
          e11 = sPixel.Interpolate(c4, c1, 7, 1);
          e12 = sPixel.Interpolate(c4, c1, 7, 1);
          e13 = sPixel.Interpolate(c4, c1, 7, 1);
          e20 = sPixel.Interpolate(c4, c6, 3, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = sPixel.Interpolate(c4, c7, 7, 1);
          e23 = sPixel.Interpolate(c4, c7, 7, 1);
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c7, c6, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c7, 5, 3);
          e33 = sPixel.Interpolate(c4, c7, 5, 3);
        }
        break;
        case 158: {
          e12 = c4;
          e20 = sPixel.Interpolate(c4, c6, 3, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = sPixel.Interpolate(c4, c7, 7, 1);
          e23 = sPixel.Interpolate(c4, c7, 7, 1);
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c7, c6, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c7, 5, 3);
          e33 = sPixel.Interpolate(c4, c7, 5, 3);
          if (c1.IsNotLike(c3)) {
            e00 = sPixel.Interpolate(c4, c0, 5, 3);
            e01 = sPixel.Interpolate(c4, c0, 3, 1);
            e10 = sPixel.Interpolate(c4, c0, 3, 1);
            e11 = sPixel.Interpolate(c4, c0, 7, 1);
          } else {
            e00 = sPixel.Interpolate(c4, c1, c3, 2, 1, 1);
            e01 = sPixel.Interpolate(c4, c1, 3, 1);
            e10 = sPixel.Interpolate(c4, c3, 3, 1);
            e11 = c4;
          }
          if (c1.IsNotLike(c5)) {
            e02 = c4;
            e03 = c4;
            e13 = c4;
          } else {
            e02 = sPixel.Interpolate(c1, c4, 1, 1);
            e03 = sPixel.Interpolate(c1, c5, 1, 1);
            e13 = sPixel.Interpolate(c4, c5, 1, 1);
          }
        }
        break;
        case 159: {
          e02 = c4;
          e11 = c4;
          e12 = c4;
          e13 = c4;
          e20 = sPixel.Interpolate(c4, c6, 3, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = sPixel.Interpolate(c4, c7, 7, 1);
          e23 = sPixel.Interpolate(c4, c7, 7, 1);
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c7, c6, 5, 2, 1);
          e32 = sPixel.Interpolate(c4, c7, 5, 3);
          e33 = sPixel.Interpolate(c4, c7, 5, 3);
          if (c1.IsNotLike(c3)) {
            e00 = c4;
            e01 = c4;
            e10 = c4;
          } else {
            e00 = sPixel.Interpolate(c1, c3, 1, 1);
            e01 = sPixel.Interpolate(c1, c4, 1, 1);
            e10 = sPixel.Interpolate(c3, c4, 1, 1);
          }
          e03 = (c1.IsNotLike(c5)) ? (c4) : (sPixel.Interpolate(c4, c1, c5, 2, 1, 1));
        }
        break;
        case 184: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c1, c0, 5, 2, 1);
          e02 = sPixel.Interpolate(c4, c1, c2, 5, 2, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e10 = sPixel.Interpolate(c4, c0, 3, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c2, 3, 1);
          e20 = sPixel.Interpolate(c4, c7, 7, 1);
          e21 = sPixel.Interpolate(c4, c7, 7, 1);
          e22 = sPixel.Interpolate(c4, c7, 7, 1);
          e23 = sPixel.Interpolate(c4, c7, 7, 1);
          e30 = sPixel.Interpolate(c4, c7, 5, 3);
          e31 = sPixel.Interpolate(c4, c7, 5, 3);
          e32 = sPixel.Interpolate(c4, c7, 5, 3);
          e33 = sPixel.Interpolate(c4, c7, 5, 3);
        }
        break;
        case 185: {
          e00 = sPixel.Interpolate(c4, c1, 5, 3);
          e01 = sPixel.Interpolate(c4, c1, 5, 3);
          e02 = sPixel.Interpolate(c4, c1, c2, 5, 2, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e10 = sPixel.Interpolate(c4, c1, 7, 1);
          e11 = sPixel.Interpolate(c4, c1, 7, 1);
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c2, 3, 1);
          e20 = sPixel.Interpolate(c4, c7, 7, 1);
          e21 = sPixel.Interpolate(c4, c7, 7, 1);
          e22 = sPixel.Interpolate(c4, c7, 7, 1);
          e23 = sPixel.Interpolate(c4, c7, 7, 1);
          e30 = sPixel.Interpolate(c4, c7, 5, 3);
          e31 = sPixel.Interpolate(c4, c7, 5, 3);
          e32 = sPixel.Interpolate(c4, c7, 5, 3);
          e33 = sPixel.Interpolate(c4, c7, 5, 3);
        }
        break;
        case 186: {
          e20 = sPixel.Interpolate(c4, c7, 7, 1);
          e21 = sPixel.Interpolate(c4, c7, 7, 1);
          e22 = sPixel.Interpolate(c4, c7, 7, 1);
          e23 = sPixel.Interpolate(c4, c7, 7, 1);
          e30 = sPixel.Interpolate(c4, c7, 5, 3);
          e31 = sPixel.Interpolate(c4, c7, 5, 3);
          e32 = sPixel.Interpolate(c4, c7, 5, 3);
          e33 = sPixel.Interpolate(c4, c7, 5, 3);
          if (c1.IsNotLike(c3)) {
            e00 = sPixel.Interpolate(c4, c0, 5, 3);
            e01 = sPixel.Interpolate(c4, c0, 3, 1);
            e10 = sPixel.Interpolate(c4, c0, 3, 1);
            e11 = sPixel.Interpolate(c4, c0, 7, 1);
          } else {
            e00 = sPixel.Interpolate(c4, c1, c3, 2, 1, 1);
            e01 = sPixel.Interpolate(c4, c1, 3, 1);
            e10 = sPixel.Interpolate(c4, c3, 3, 1);
            e11 = c4;
          }
          if (c1.IsNotLike(c5)) {
            e02 = sPixel.Interpolate(c4, c2, 3, 1);
            e03 = sPixel.Interpolate(c4, c2, 5, 3);
            e12 = sPixel.Interpolate(c4, c2, 7, 1);
            e13 = sPixel.Interpolate(c4, c2, 3, 1);
          } else {
            e02 = sPixel.Interpolate(c4, c1, 3, 1);
            e03 = sPixel.Interpolate(c4, c1, c5, 2, 1, 1);
            e12 = c4;
            e13 = sPixel.Interpolate(c4, c5, 3, 1);
          }
        }
        break;
        case 187: {
          e02 = sPixel.Interpolate(c4, c2, 3, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c2, 3, 1);
          e21 = sPixel.Interpolate(c4, c7, 7, 1);
          e22 = sPixel.Interpolate(c4, c7, 7, 1);
          e23 = sPixel.Interpolate(c4, c7, 7, 1);
          e31 = sPixel.Interpolate(c4, c7, 5, 3);
          e32 = sPixel.Interpolate(c4, c7, 5, 3);
          e33 = sPixel.Interpolate(c4, c7, 5, 3);
          if (c1.IsNotLike(c3)) {
            e00 = c4;
            e01 = c4;
            e10 = c4;
            e11 = c4;
            e20 = sPixel.Interpolate(c4, c7, 7, 1);
            e30 = sPixel.Interpolate(c4, c7, 5, 3);
          } else {
            e00 = sPixel.Interpolate(c1, c3, 1, 1);
            e01 = sPixel.Interpolate(c1, c3, c4, 2, 1, 1);
            e10 = sPixel.Interpolate(c3, c1, 5, 3);
            e11 = sPixel.Interpolate(c4, c1, c3, 6, 1, 1);
            e20 = sPixel.Interpolate(c3, c4, 3, 1);
            e30 = sPixel.Interpolate(c4, c3, 3, 1);
          }
        }
        break;
        case 188: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c1, c0, 5, 2, 1);
          e02 = sPixel.Interpolate(c4, c1, 5, 3);
          e03 = sPixel.Interpolate(c4, c1, 5, 3);
          e10 = sPixel.Interpolate(c4, c0, 3, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = sPixel.Interpolate(c4, c1, 7, 1);
          e13 = sPixel.Interpolate(c4, c1, 7, 1);
          e20 = sPixel.Interpolate(c4, c7, 7, 1);
          e21 = sPixel.Interpolate(c4, c7, 7, 1);
          e22 = sPixel.Interpolate(c4, c7, 7, 1);
          e23 = sPixel.Interpolate(c4, c7, 7, 1);
          e30 = sPixel.Interpolate(c4, c7, 5, 3);
          e31 = sPixel.Interpolate(c4, c7, 5, 3);
          e32 = sPixel.Interpolate(c4, c7, 5, 3);
          e33 = sPixel.Interpolate(c4, c7, 5, 3);
        }
        break;
        case 189: {
          e00 = sPixel.Interpolate(c4, c1, 5, 3);
          e01 = sPixel.Interpolate(c4, c1, 5, 3);
          e02 = sPixel.Interpolate(c4, c1, 5, 3);
          e03 = sPixel.Interpolate(c4, c1, 5, 3);
          e10 = sPixel.Interpolate(c4, c1, 7, 1);
          e11 = sPixel.Interpolate(c4, c1, 7, 1);
          e12 = sPixel.Interpolate(c4, c1, 7, 1);
          e13 = sPixel.Interpolate(c4, c1, 7, 1);
          e20 = sPixel.Interpolate(c4, c7, 7, 1);
          e21 = sPixel.Interpolate(c4, c7, 7, 1);
          e22 = sPixel.Interpolate(c4, c7, 7, 1);
          e23 = sPixel.Interpolate(c4, c7, 7, 1);
          e30 = sPixel.Interpolate(c4, c7, 5, 3);
          e31 = sPixel.Interpolate(c4, c7, 5, 3);
          e32 = sPixel.Interpolate(c4, c7, 5, 3);
          e33 = sPixel.Interpolate(c4, c7, 5, 3);
        }
        break;
        case 190: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c0, 3, 1);
          e10 = sPixel.Interpolate(c4, c0, 3, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e20 = sPixel.Interpolate(c4, c7, 7, 1);
          e21 = sPixel.Interpolate(c4, c7, 7, 1);
          e22 = sPixel.Interpolate(c4, c7, 7, 1);
          e30 = sPixel.Interpolate(c4, c7, 5, 3);
          e31 = sPixel.Interpolate(c4, c7, 5, 3);
          e32 = sPixel.Interpolate(c4, c7, 5, 3);
          if (c1.IsNotLike(c5)) {
            e02 = c4;
            e03 = c4;
            e12 = c4;
            e13 = c4;
            e23 = sPixel.Interpolate(c4, c7, 7, 1);
            e33 = sPixel.Interpolate(c4, c7, 5, 3);
          } else {
            e02 = sPixel.Interpolate(c1, c4, c5, 2, 1, 1);
            e03 = sPixel.Interpolate(c1, c5, 1, 1);
            e12 = sPixel.Interpolate(c4, c1, c5, 6, 1, 1);
            e13 = sPixel.Interpolate(c5, c1, 5, 3);
            e23 = sPixel.Interpolate(c5, c4, 3, 1);
            e33 = sPixel.Interpolate(c4, c5, 3, 1);
          }
        }
        break;
        case 191: {
          e01 = c4;
          e02 = c4;
          e10 = c4;
          e11 = c4;
          e12 = c4;
          e13 = c4;
          e20 = sPixel.Interpolate(c4, c7, 7, 1);
          e21 = sPixel.Interpolate(c4, c7, 7, 1);
          e22 = sPixel.Interpolate(c4, c7, 7, 1);
          e23 = sPixel.Interpolate(c4, c7, 7, 1);
          e30 = sPixel.Interpolate(c4, c7, 5, 3);
          e31 = sPixel.Interpolate(c4, c7, 5, 3);
          e32 = sPixel.Interpolate(c4, c7, 5, 3);
          e33 = sPixel.Interpolate(c4, c7, 5, 3);
          e00 = (c1.IsNotLike(c3)) ? (c4) : (sPixel.Interpolate(c4, c1, c3, 2, 1, 1));
          e03 = (c1.IsNotLike(c5)) ? (c4) : (sPixel.Interpolate(c4, c1, c5, 2, 1, 1));
        }
        break;
        case 192:
        case 193:
        case 196:
        case 197: {
          e00 = sPixel.Interpolate(c4, c1, c3, 2, 1, 1);
          e01 = sPixel.Interpolate(c4, c1, c3, 5, 2, 1);
          e02 = sPixel.Interpolate(c4, c1, c5, 5, 2, 1);
          e03 = sPixel.Interpolate(c4, c1, c5, 2, 1, 1);
          e10 = sPixel.Interpolate(c4, c3, c1, 5, 2, 1);
          e11 = sPixel.Interpolate(c4, c1, c3, 6, 1, 1);
          e12 = sPixel.Interpolate(c4, c1, c5, 6, 1, 1);
          e13 = sPixel.Interpolate(c4, c5, c1, 5, 2, 1);
          e20 = sPixel.Interpolate(c4, c3, c6, 5, 2, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = sPixel.Interpolate(c4, c5, 7, 1);
          e23 = sPixel.Interpolate(c4, c5, 5, 3);
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c6, 3, 1);
          e32 = sPixel.Interpolate(c4, c5, 7, 1);
          e33 = sPixel.Interpolate(c4, c5, 5, 3);
        }
        break;
        case 194: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c0, 3, 1);
          e02 = sPixel.Interpolate(c4, c2, 3, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e10 = sPixel.Interpolate(c4, c3, c0, 5, 2, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c5, c2, 5, 2, 1);
          e20 = sPixel.Interpolate(c4, c3, c6, 5, 2, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = sPixel.Interpolate(c4, c5, 7, 1);
          e23 = sPixel.Interpolate(c4, c5, 5, 3);
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c6, 3, 1);
          e32 = sPixel.Interpolate(c4, c5, 7, 1);
          e33 = sPixel.Interpolate(c4, c5, 5, 3);
        }
        break;
        case 195: {
          e00 = sPixel.Interpolate(c4, c3, 5, 3);
          e01 = sPixel.Interpolate(c4, c3, 7, 1);
          e02 = sPixel.Interpolate(c4, c2, 3, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e10 = sPixel.Interpolate(c4, c3, 5, 3);
          e11 = sPixel.Interpolate(c4, c3, 7, 1);
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c5, c2, 5, 2, 1);
          e20 = sPixel.Interpolate(c4, c3, c6, 5, 2, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = sPixel.Interpolate(c4, c5, 7, 1);
          e23 = sPixel.Interpolate(c4, c5, 5, 3);
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c6, 3, 1);
          e32 = sPixel.Interpolate(c4, c5, 7, 1);
          e33 = sPixel.Interpolate(c4, c5, 5, 3);
        }
        break;
        case 198: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c0, 3, 1);
          e02 = sPixel.Interpolate(c4, c5, 7, 1);
          e03 = sPixel.Interpolate(c4, c5, 5, 3);
          e10 = sPixel.Interpolate(c4, c3, c0, 5, 2, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = sPixel.Interpolate(c4, c5, 7, 1);
          e13 = sPixel.Interpolate(c4, c5, 5, 3);
          e20 = sPixel.Interpolate(c4, c3, c6, 5, 2, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = sPixel.Interpolate(c4, c5, 7, 1);
          e23 = sPixel.Interpolate(c4, c5, 5, 3);
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c6, 3, 1);
          e32 = sPixel.Interpolate(c4, c5, 7, 1);
          e33 = sPixel.Interpolate(c4, c5, 5, 3);
        }
        break;
        case 199: {
          e00 = sPixel.Interpolate(c4, c3, 5, 3);
          e01 = sPixel.Interpolate(c4, c3, 7, 1);
          e02 = sPixel.Interpolate(c4, c5, 7, 1);
          e03 = sPixel.Interpolate(c4, c5, 5, 3);
          e10 = sPixel.Interpolate(c4, c3, 5, 3);
          e11 = sPixel.Interpolate(c4, c3, 7, 1);
          e12 = sPixel.Interpolate(c4, c5, 7, 1);
          e13 = sPixel.Interpolate(c4, c5, 5, 3);
          e20 = sPixel.Interpolate(c4, c3, c6, 5, 2, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = sPixel.Interpolate(c4, c5, 7, 1);
          e23 = sPixel.Interpolate(c4, c5, 5, 3);
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c6, 3, 1);
          e32 = sPixel.Interpolate(c4, c5, 7, 1);
          e33 = sPixel.Interpolate(c4, c5, 5, 3);
        }
        break;
        case 200:
        case 204: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c1, c0, 5, 2, 1);
          e02 = sPixel.Interpolate(c4, c1, c5, 5, 2, 1);
          e03 = sPixel.Interpolate(c4, c1, c5, 2, 1, 1);
          e10 = sPixel.Interpolate(c4, c0, 3, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = sPixel.Interpolate(c4, c1, c5, 6, 1, 1);
          e13 = sPixel.Interpolate(c4, c5, c1, 5, 2, 1);
          e22 = sPixel.Interpolate(c4, c5, 7, 1);
          e23 = sPixel.Interpolate(c4, c5, 5, 3);
          if (c7.IsNotLike(c3)) {
            e20 = sPixel.Interpolate(c4, c6, 3, 1);
            e21 = sPixel.Interpolate(c4, c6, 7, 1);
            e30 = sPixel.Interpolate(c4, c6, 5, 3);
            e31 = sPixel.Interpolate(c4, c6, 3, 1);
            e32 = sPixel.Interpolate(c4, c5, 7, 1);
            e33 = sPixel.Interpolate(c4, c5, 5, 3);
          } else {
            e20 = sPixel.Interpolate(c3, c4, c7, 2, 1, 1);
            e21 = sPixel.Interpolate(c4, c3, c7, 6, 1, 1);
            e30 = sPixel.Interpolate(c3, c7, 1, 1);
            e31 = sPixel.Interpolate(c7, c3, 5, 3);
            e32 = sPixel.Interpolate(c7, c4, 3, 1);
            e33 = sPixel.Interpolate(c4, c7, 3, 1);
          }
        }
        break;
        case 201:
        case 205: {
          e00 = sPixel.Interpolate(c4, c1, 5, 3);
          e01 = sPixel.Interpolate(c4, c1, 5, 3);
          e02 = sPixel.Interpolate(c4, c1, c5, 5, 2, 1);
          e03 = sPixel.Interpolate(c4, c1, c5, 2, 1, 1);
          e10 = sPixel.Interpolate(c4, c1, 7, 1);
          e11 = sPixel.Interpolate(c4, c1, 7, 1);
          e12 = sPixel.Interpolate(c4, c1, c5, 6, 1, 1);
          e13 = sPixel.Interpolate(c4, c5, c1, 5, 2, 1);
          e22 = sPixel.Interpolate(c4, c5, 7, 1);
          e23 = sPixel.Interpolate(c4, c5, 5, 3);
          e32 = sPixel.Interpolate(c4, c5, 7, 1);
          e33 = sPixel.Interpolate(c4, c5, 5, 3);
          if (c7.IsNotLike(c3)) {
            e20 = sPixel.Interpolate(c4, c6, 3, 1);
            e21 = sPixel.Interpolate(c4, c6, 7, 1);
            e30 = sPixel.Interpolate(c4, c6, 5, 3);
            e31 = sPixel.Interpolate(c4, c6, 3, 1);
          } else {
            e20 = sPixel.Interpolate(c4, c3, 3, 1);
            e21 = c4;
            e30 = sPixel.Interpolate(c4, c3, c7, 2, 1, 1);
            e31 = sPixel.Interpolate(c4, c7, 3, 1);
          }
        }
        break;
        case 202: {
          e02 = sPixel.Interpolate(c4, c2, 3, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c5, c2, 5, 2, 1);
          e22 = sPixel.Interpolate(c4, c5, 7, 1);
          e23 = sPixel.Interpolate(c4, c5, 5, 3);
          e32 = sPixel.Interpolate(c4, c5, 7, 1);
          e33 = sPixel.Interpolate(c4, c5, 5, 3);
          if (c7.IsNotLike(c3)) {
            e20 = sPixel.Interpolate(c4, c6, 3, 1);
            e21 = sPixel.Interpolate(c4, c6, 7, 1);
            e30 = sPixel.Interpolate(c4, c6, 5, 3);
            e31 = sPixel.Interpolate(c4, c6, 3, 1);
          } else {
            e20 = sPixel.Interpolate(c4, c3, 3, 1);
            e21 = c4;
            e30 = sPixel.Interpolate(c4, c3, c7, 2, 1, 1);
            e31 = sPixel.Interpolate(c4, c7, 3, 1);
          }
          if (c1.IsNotLike(c3)) {
            e00 = sPixel.Interpolate(c4, c0, 5, 3);
            e01 = sPixel.Interpolate(c4, c0, 3, 1);
            e10 = sPixel.Interpolate(c4, c0, 3, 1);
            e11 = sPixel.Interpolate(c4, c0, 7, 1);
          } else {
            e00 = sPixel.Interpolate(c4, c1, c3, 2, 1, 1);
            e01 = sPixel.Interpolate(c4, c1, 3, 1);
            e10 = sPixel.Interpolate(c4, c3, 3, 1);
            e11 = c4;
          }
        }
        break;
        case 203: {
          e02 = sPixel.Interpolate(c4, c2, 3, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e11 = c4;
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c5, c2, 5, 2, 1);
          e20 = sPixel.Interpolate(c4, c6, 3, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = sPixel.Interpolate(c4, c5, 7, 1);
          e23 = sPixel.Interpolate(c4, c5, 5, 3);
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c6, 3, 1);
          e32 = sPixel.Interpolate(c4, c5, 7, 1);
          e33 = sPixel.Interpolate(c4, c5, 5, 3);
          if (c1.IsNotLike(c3)) {
            e00 = c4;
            e01 = c4;
            e10 = c4;
          } else {
            e00 = sPixel.Interpolate(c1, c3, 1, 1);
            e01 = sPixel.Interpolate(c1, c4, 1, 1);
            e10 = sPixel.Interpolate(c3, c4, 1, 1);
          }
        }
        break;
        case 206: {
          e02 = sPixel.Interpolate(c4, c5, 7, 1);
          e03 = sPixel.Interpolate(c4, c5, 5, 3);
          e12 = sPixel.Interpolate(c4, c5, 7, 1);
          e13 = sPixel.Interpolate(c4, c5, 5, 3);
          e22 = sPixel.Interpolate(c4, c5, 7, 1);
          e23 = sPixel.Interpolate(c4, c5, 5, 3);
          e32 = sPixel.Interpolate(c4, c5, 7, 1);
          e33 = sPixel.Interpolate(c4, c5, 5, 3);
          if (c7.IsNotLike(c3)) {
            e20 = sPixel.Interpolate(c4, c6, 3, 1);
            e21 = sPixel.Interpolate(c4, c6, 7, 1);
            e30 = sPixel.Interpolate(c4, c6, 5, 3);
            e31 = sPixel.Interpolate(c4, c6, 3, 1);
          } else {
            e20 = sPixel.Interpolate(c4, c3, 3, 1);
            e21 = c4;
            e30 = sPixel.Interpolate(c4, c3, c7, 2, 1, 1);
            e31 = sPixel.Interpolate(c4, c7, 3, 1);
          }
          if (c1.IsNotLike(c3)) {
            e00 = sPixel.Interpolate(c4, c0, 5, 3);
            e01 = sPixel.Interpolate(c4, c0, 3, 1);
            e10 = sPixel.Interpolate(c4, c0, 3, 1);
            e11 = sPixel.Interpolate(c4, c0, 7, 1);
          } else {
            e00 = sPixel.Interpolate(c4, c1, c3, 2, 1, 1);
            e01 = sPixel.Interpolate(c4, c1, 3, 1);
            e10 = sPixel.Interpolate(c4, c3, 3, 1);
            e11 = c4;
          }
        }
        break;
        case 207: {
          e12 = sPixel.Interpolate(c4, c5, 7, 1);
          e13 = sPixel.Interpolate(c4, c5, 5, 3);
          e20 = sPixel.Interpolate(c4, c6, 3, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = sPixel.Interpolate(c4, c5, 7, 1);
          e23 = sPixel.Interpolate(c4, c5, 5, 3);
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c6, 3, 1);
          e32 = sPixel.Interpolate(c4, c5, 7, 1);
          e33 = sPixel.Interpolate(c4, c5, 5, 3);
          if (c1.IsNotLike(c3)) {
            e00 = c4;
            e01 = c4;
            e02 = sPixel.Interpolate(c4, c5, 7, 1);
            e03 = sPixel.Interpolate(c4, c5, 5, 3);
            e10 = c4;
            e11 = c4;
          } else {
            e00 = sPixel.Interpolate(c1, c3, 1, 1);
            e01 = sPixel.Interpolate(c1, c3, 5, 3);
            e02 = sPixel.Interpolate(c1, c4, 3, 1);
            e03 = sPixel.Interpolate(c4, c1, 3, 1);
            e10 = sPixel.Interpolate(c3, c1, c4, 2, 1, 1);
            e11 = sPixel.Interpolate(c4, c1, c3, 6, 1, 1);
          }
        }
        break;
        case 208:
        case 209: {
          e00 = sPixel.Interpolate(c4, c1, c3, 2, 1, 1);
          e01 = sPixel.Interpolate(c4, c1, c3, 5, 2, 1);
          e02 = sPixel.Interpolate(c4, c1, c2, 5, 2, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e10 = sPixel.Interpolate(c4, c3, c1, 5, 2, 1);
          e11 = sPixel.Interpolate(c4, c1, c3, 6, 1, 1);
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c2, 3, 1);
          e20 = sPixel.Interpolate(c4, c3, c6, 5, 2, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = c4;
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c6, 3, 1);
          if (c7.IsNotLike(c5)) {
            e23 = c4;
            e32 = c4;
            e33 = c4;
          } else {
            e23 = sPixel.Interpolate(c4, c5, 1, 1);
            e32 = sPixel.Interpolate(c4, c7, 1, 1);
            e33 = sPixel.Interpolate(c5, c7, 1, 1);
          }
        }
        break;
        case 210: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c0, 3, 1);
          e02 = sPixel.Interpolate(c4, c2, 3, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e10 = sPixel.Interpolate(c4, c3, c0, 5, 2, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c2, 3, 1);
          e20 = sPixel.Interpolate(c4, c3, c6, 5, 2, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = c4;
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c6, 3, 1);
          if (c7.IsNotLike(c5)) {
            e23 = c4;
            e32 = c4;
            e33 = c4;
          } else {
            e23 = sPixel.Interpolate(c4, c5, 1, 1);
            e32 = sPixel.Interpolate(c4, c7, 1, 1);
            e33 = sPixel.Interpolate(c5, c7, 1, 1);
          }
        }
        break;
        case 211: {
          e00 = sPixel.Interpolate(c4, c3, 5, 3);
          e01 = sPixel.Interpolate(c4, c3, 7, 1);
          e02 = sPixel.Interpolate(c4, c2, 3, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e10 = sPixel.Interpolate(c4, c3, 5, 3);
          e11 = sPixel.Interpolate(c4, c3, 7, 1);
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c2, 3, 1);
          e20 = sPixel.Interpolate(c4, c3, c6, 5, 2, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = c4;
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c6, 3, 1);
          if (c7.IsNotLike(c5)) {
            e23 = c4;
            e32 = c4;
            e33 = c4;
          } else {
            e23 = sPixel.Interpolate(c4, c5, 1, 1);
            e32 = sPixel.Interpolate(c4, c7, 1, 1);
            e33 = sPixel.Interpolate(c5, c7, 1, 1);
          }
        }
        break;
        case 212:
        case 213: {
          e00 = sPixel.Interpolate(c4, c1, c3, 2, 1, 1);
          e01 = sPixel.Interpolate(c4, c1, c3, 5, 2, 1);
          e02 = sPixel.Interpolate(c4, c1, 5, 3);
          e10 = sPixel.Interpolate(c4, c3, c1, 5, 2, 1);
          e11 = sPixel.Interpolate(c4, c1, c3, 6, 1, 1);
          e12 = sPixel.Interpolate(c4, c1, 7, 1);
          e20 = sPixel.Interpolate(c4, c3, c6, 5, 2, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c6, 3, 1);
          if (c7.IsNotLike(c5)) {
            e03 = sPixel.Interpolate(c4, c1, 5, 3);
            e13 = sPixel.Interpolate(c4, c1, 7, 1);
            e22 = c4;
            e23 = c4;
            e32 = c4;
            e33 = c4;
          } else {
            e03 = sPixel.Interpolate(c4, c5, 3, 1);
            e13 = sPixel.Interpolate(c5, c4, 3, 1);
            e22 = sPixel.Interpolate(c4, c5, c7, 6, 1, 1);
            e23 = sPixel.Interpolate(c5, c7, 5, 3);
            e32 = sPixel.Interpolate(c7, c4, c5, 2, 1, 1);
            e33 = sPixel.Interpolate(c5, c7, 1, 1);
          }
        }
        break;
        case 215: {
          e00 = sPixel.Interpolate(c4, c3, 5, 3);
          e01 = sPixel.Interpolate(c4, c3, 7, 1);
          e02 = c4;
          e10 = sPixel.Interpolate(c4, c3, 5, 3);
          e11 = sPixel.Interpolate(c4, c3, 7, 1);
          e12 = c4;
          e13 = c4;
          e20 = sPixel.Interpolate(c4, c3, c6, 5, 2, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = c4;
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c6, 3, 1);
          if (c7.IsNotLike(c5)) {
            e23 = c4;
            e32 = c4;
            e33 = c4;
          } else {
            e23 = sPixel.Interpolate(c4, c5, 1, 1);
            e32 = sPixel.Interpolate(c4, c7, 1, 1);
            e33 = sPixel.Interpolate(c5, c7, 1, 1);
          }
          e03 = (c1.IsNotLike(c5)) ? (c4) : (sPixel.Interpolate(c4, c1, c5, 2, 1, 1));
        }
        break;
        case 216: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c1, c0, 5, 2, 1);
          e02 = sPixel.Interpolate(c4, c1, c2, 5, 2, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e10 = sPixel.Interpolate(c4, c0, 3, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c2, 3, 1);
          e20 = sPixel.Interpolate(c4, c6, 3, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = c4;
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c6, 3, 1);
          if (c7.IsNotLike(c5)) {
            e23 = c4;
            e32 = c4;
            e33 = c4;
          } else {
            e23 = sPixel.Interpolate(c4, c5, 1, 1);
            e32 = sPixel.Interpolate(c4, c7, 1, 1);
            e33 = sPixel.Interpolate(c5, c7, 1, 1);
          }
        }
        break;
        case 217: {
          e00 = sPixel.Interpolate(c4, c1, 5, 3);
          e01 = sPixel.Interpolate(c4, c1, 5, 3);
          e02 = sPixel.Interpolate(c4, c1, c2, 5, 2, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e10 = sPixel.Interpolate(c4, c1, 7, 1);
          e11 = sPixel.Interpolate(c4, c1, 7, 1);
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c2, 3, 1);
          e20 = sPixel.Interpolate(c4, c6, 3, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = c4;
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c6, 3, 1);
          if (c7.IsNotLike(c5)) {
            e23 = c4;
            e32 = c4;
            e33 = c4;
          } else {
            e23 = sPixel.Interpolate(c4, c5, 1, 1);
            e32 = sPixel.Interpolate(c4, c7, 1, 1);
            e33 = sPixel.Interpolate(c5, c7, 1, 1);
          }
        }
        break;
        case 218: {
          e22 = c4;
          if (c7.IsNotLike(c3)) {
            e20 = sPixel.Interpolate(c4, c6, 3, 1);
            e21 = sPixel.Interpolate(c4, c6, 7, 1);
            e30 = sPixel.Interpolate(c4, c6, 5, 3);
            e31 = sPixel.Interpolate(c4, c6, 3, 1);
          } else {
            e20 = sPixel.Interpolate(c4, c3, 3, 1);
            e21 = c4;
            e30 = sPixel.Interpolate(c4, c3, c7, 2, 1, 1);
            e31 = sPixel.Interpolate(c4, c7, 3, 1);
          }
          if (c7.IsNotLike(c5)) {
            e23 = c4;
            e32 = c4;
            e33 = c4;
          } else {
            e23 = sPixel.Interpolate(c4, c5, 1, 1);
            e32 = sPixel.Interpolate(c4, c7, 1, 1);
            e33 = sPixel.Interpolate(c5, c7, 1, 1);
          }
          if (c1.IsNotLike(c3)) {
            e00 = sPixel.Interpolate(c4, c0, 5, 3);
            e01 = sPixel.Interpolate(c4, c0, 3, 1);
            e10 = sPixel.Interpolate(c4, c0, 3, 1);
            e11 = sPixel.Interpolate(c4, c0, 7, 1);
          } else {
            e00 = sPixel.Interpolate(c4, c1, c3, 2, 1, 1);
            e01 = sPixel.Interpolate(c4, c1, 3, 1);
            e10 = sPixel.Interpolate(c4, c3, 3, 1);
            e11 = c4;
          }
          if (c1.IsNotLike(c5)) {
            e02 = sPixel.Interpolate(c4, c2, 3, 1);
            e03 = sPixel.Interpolate(c4, c2, 5, 3);
            e12 = sPixel.Interpolate(c4, c2, 7, 1);
            e13 = sPixel.Interpolate(c4, c2, 3, 1);
          } else {
            e02 = sPixel.Interpolate(c4, c1, 3, 1);
            e03 = sPixel.Interpolate(c4, c1, c5, 2, 1, 1);
            e12 = c4;
            e13 = sPixel.Interpolate(c4, c5, 3, 1);
          }
        }
        break;
        case 219: {
          e02 = sPixel.Interpolate(c4, c2, 3, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e11 = c4;
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c2, 3, 1);
          e20 = sPixel.Interpolate(c4, c6, 3, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = c4;
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c6, 3, 1);
          if (c7.IsNotLike(c5)) {
            e23 = c4;
            e32 = c4;
            e33 = c4;
          } else {
            e23 = sPixel.Interpolate(c4, c5, 1, 1);
            e32 = sPixel.Interpolate(c4, c7, 1, 1);
            e33 = sPixel.Interpolate(c5, c7, 1, 1);
          }
          if (c1.IsNotLike(c3)) {
            e00 = c4;
            e01 = c4;
            e10 = c4;
          } else {
            e00 = sPixel.Interpolate(c1, c3, 1, 1);
            e01 = sPixel.Interpolate(c1, c4, 1, 1);
            e10 = sPixel.Interpolate(c3, c4, 1, 1);
          }
        }
        break;
        case 220: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c1, c0, 5, 2, 1);
          e02 = sPixel.Interpolate(c4, c1, 5, 3);
          e03 = sPixel.Interpolate(c4, c1, 5, 3);
          e10 = sPixel.Interpolate(c4, c0, 3, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = sPixel.Interpolate(c4, c1, 7, 1);
          e13 = sPixel.Interpolate(c4, c1, 7, 1);
          e22 = c4;
          if (c7.IsNotLike(c3)) {
            e20 = sPixel.Interpolate(c4, c6, 3, 1);
            e21 = sPixel.Interpolate(c4, c6, 7, 1);
            e30 = sPixel.Interpolate(c4, c6, 5, 3);
            e31 = sPixel.Interpolate(c4, c6, 3, 1);
          } else {
            e20 = sPixel.Interpolate(c4, c3, 3, 1);
            e21 = c4;
            e30 = sPixel.Interpolate(c4, c3, c7, 2, 1, 1);
            e31 = sPixel.Interpolate(c4, c7, 3, 1);
          }
          if (c7.IsNotLike(c5)) {
            e23 = c4;
            e32 = c4;
            e33 = c4;
          } else {
            e23 = sPixel.Interpolate(c4, c5, 1, 1);
            e32 = sPixel.Interpolate(c4, c7, 1, 1);
            e33 = sPixel.Interpolate(c5, c7, 1, 1);
          }
        }
        break;
        case 221: {
          e00 = sPixel.Interpolate(c4, c1, 5, 3);
          e01 = sPixel.Interpolate(c4, c1, 5, 3);
          e02 = sPixel.Interpolate(c4, c1, 5, 3);
          e10 = sPixel.Interpolate(c4, c1, 7, 1);
          e11 = sPixel.Interpolate(c4, c1, 7, 1);
          e12 = sPixel.Interpolate(c4, c1, 7, 1);
          e20 = sPixel.Interpolate(c4, c6, 3, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c6, 3, 1);
          if (c7.IsNotLike(c5)) {
            e03 = sPixel.Interpolate(c4, c1, 5, 3);
            e13 = sPixel.Interpolate(c4, c1, 7, 1);
            e22 = c4;
            e23 = c4;
            e32 = c4;
            e33 = c4;
          } else {
            e03 = sPixel.Interpolate(c4, c5, 3, 1);
            e13 = sPixel.Interpolate(c5, c4, 3, 1);
            e22 = sPixel.Interpolate(c4, c5, c7, 6, 1, 1);
            e23 = sPixel.Interpolate(c5, c7, 5, 3);
            e32 = sPixel.Interpolate(c7, c4, c5, 2, 1, 1);
            e33 = sPixel.Interpolate(c5, c7, 1, 1);
          }
        }
        break;
        case 222: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c0, 3, 1);
          e10 = sPixel.Interpolate(c4, c0, 3, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = c4;
          e20 = sPixel.Interpolate(c4, c6, 3, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = c4;
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c6, 3, 1);
          if (c7.IsNotLike(c5)) {
            e23 = c4;
            e32 = c4;
            e33 = c4;
          } else {
            e23 = sPixel.Interpolate(c4, c5, 1, 1);
            e32 = sPixel.Interpolate(c4, c7, 1, 1);
            e33 = sPixel.Interpolate(c5, c7, 1, 1);
          }
          if (c1.IsNotLike(c5)) {
            e02 = c4;
            e03 = c4;
            e13 = c4;
          } else {
            e02 = sPixel.Interpolate(c1, c4, 1, 1);
            e03 = sPixel.Interpolate(c1, c5, 1, 1);
            e13 = sPixel.Interpolate(c4, c5, 1, 1);
          }
        }
        break;
        case 223: {
          e02 = c4;
          e11 = c4;
          e12 = c4;
          e13 = c4;
          e20 = sPixel.Interpolate(c4, c6, 3, 1);
          e21 = sPixel.Interpolate(c4, c6, 7, 1);
          e22 = c4;
          e30 = sPixel.Interpolate(c4, c6, 5, 3);
          e31 = sPixel.Interpolate(c4, c6, 3, 1);
          if (c7.IsNotLike(c5)) {
            e23 = c4;
            e32 = c4;
            e33 = c4;
          } else {
            e23 = sPixel.Interpolate(c4, c5, 1, 1);
            e32 = sPixel.Interpolate(c4, c7, 1, 1);
            e33 = sPixel.Interpolate(c5, c7, 1, 1);
          }
          if (c1.IsNotLike(c3)) {
            e00 = c4;
            e01 = c4;
            e10 = c4;
          } else {
            e00 = sPixel.Interpolate(c1, c3, 1, 1);
            e01 = sPixel.Interpolate(c1, c4, 1, 1);
            e10 = sPixel.Interpolate(c3, c4, 1, 1);
          }
          e03 = (c1.IsNotLike(c5)) ? (c4) : (sPixel.Interpolate(c4, c1, c5, 2, 1, 1));
        }
        break;
        case 224:
        case 225:
        case 228:
        case 229: {
          e00 = sPixel.Interpolate(c4, c1, c3, 2, 1, 1);
          e01 = sPixel.Interpolate(c4, c1, c3, 5, 2, 1);
          e02 = sPixel.Interpolate(c4, c1, c5, 5, 2, 1);
          e03 = sPixel.Interpolate(c4, c1, c5, 2, 1, 1);
          e10 = sPixel.Interpolate(c4, c3, c1, 5, 2, 1);
          e11 = sPixel.Interpolate(c4, c1, c3, 6, 1, 1);
          e12 = sPixel.Interpolate(c4, c1, c5, 6, 1, 1);
          e13 = sPixel.Interpolate(c4, c5, c1, 5, 2, 1);
          e20 = sPixel.Interpolate(c4, c3, 5, 3);
          e21 = sPixel.Interpolate(c4, c3, 7, 1);
          e22 = sPixel.Interpolate(c4, c5, 7, 1);
          e23 = sPixel.Interpolate(c4, c5, 5, 3);
          e30 = sPixel.Interpolate(c4, c3, 5, 3);
          e31 = sPixel.Interpolate(c4, c3, 7, 1);
          e32 = sPixel.Interpolate(c4, c5, 7, 1);
          e33 = sPixel.Interpolate(c4, c5, 5, 3);
        }
        break;
        case 226: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c0, 3, 1);
          e02 = sPixel.Interpolate(c4, c2, 3, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e10 = sPixel.Interpolate(c4, c3, c0, 5, 2, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c5, c2, 5, 2, 1);
          e20 = sPixel.Interpolate(c4, c3, 5, 3);
          e21 = sPixel.Interpolate(c4, c3, 7, 1);
          e22 = sPixel.Interpolate(c4, c5, 7, 1);
          e23 = sPixel.Interpolate(c4, c5, 5, 3);
          e30 = sPixel.Interpolate(c4, c3, 5, 3);
          e31 = sPixel.Interpolate(c4, c3, 7, 1);
          e32 = sPixel.Interpolate(c4, c5, 7, 1);
          e33 = sPixel.Interpolate(c4, c5, 5, 3);
        }
        break;
        case 227: {
          e00 = sPixel.Interpolate(c4, c3, 5, 3);
          e01 = sPixel.Interpolate(c4, c3, 7, 1);
          e02 = sPixel.Interpolate(c4, c2, 3, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e10 = sPixel.Interpolate(c4, c3, 5, 3);
          e11 = sPixel.Interpolate(c4, c3, 7, 1);
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c5, c2, 5, 2, 1);
          e20 = sPixel.Interpolate(c4, c3, 5, 3);
          e21 = sPixel.Interpolate(c4, c3, 7, 1);
          e22 = sPixel.Interpolate(c4, c5, 7, 1);
          e23 = sPixel.Interpolate(c4, c5, 5, 3);
          e30 = sPixel.Interpolate(c4, c3, 5, 3);
          e31 = sPixel.Interpolate(c4, c3, 7, 1);
          e32 = sPixel.Interpolate(c4, c5, 7, 1);
          e33 = sPixel.Interpolate(c4, c5, 5, 3);
        }
        break;
        case 230: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c0, 3, 1);
          e02 = sPixel.Interpolate(c4, c5, 7, 1);
          e03 = sPixel.Interpolate(c4, c5, 5, 3);
          e10 = sPixel.Interpolate(c4, c3, c0, 5, 2, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = sPixel.Interpolate(c4, c5, 7, 1);
          e13 = sPixel.Interpolate(c4, c5, 5, 3);
          e20 = sPixel.Interpolate(c4, c3, 5, 3);
          e21 = sPixel.Interpolate(c4, c3, 7, 1);
          e22 = sPixel.Interpolate(c4, c5, 7, 1);
          e23 = sPixel.Interpolate(c4, c5, 5, 3);
          e30 = sPixel.Interpolate(c4, c3, 5, 3);
          e31 = sPixel.Interpolate(c4, c3, 7, 1);
          e32 = sPixel.Interpolate(c4, c5, 7, 1);
          e33 = sPixel.Interpolate(c4, c5, 5, 3);
        }
        break;
        case 231: {
          e00 = sPixel.Interpolate(c4, c3, 5, 3);
          e01 = sPixel.Interpolate(c4, c3, 7, 1);
          e02 = sPixel.Interpolate(c4, c5, 7, 1);
          e03 = sPixel.Interpolate(c4, c5, 5, 3);
          e10 = sPixel.Interpolate(c4, c3, 5, 3);
          e11 = sPixel.Interpolate(c4, c3, 7, 1);
          e12 = sPixel.Interpolate(c4, c5, 7, 1);
          e13 = sPixel.Interpolate(c4, c5, 5, 3);
          e20 = sPixel.Interpolate(c4, c3, 5, 3);
          e21 = sPixel.Interpolate(c4, c3, 7, 1);
          e22 = sPixel.Interpolate(c4, c5, 7, 1);
          e23 = sPixel.Interpolate(c4, c5, 5, 3);
          e30 = sPixel.Interpolate(c4, c3, 5, 3);
          e31 = sPixel.Interpolate(c4, c3, 7, 1);
          e32 = sPixel.Interpolate(c4, c5, 7, 1);
          e33 = sPixel.Interpolate(c4, c5, 5, 3);
        }
        break;
        case 232:
        case 236: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c1, c0, 5, 2, 1);
          e02 = sPixel.Interpolate(c4, c1, c5, 5, 2, 1);
          e03 = sPixel.Interpolate(c4, c1, c5, 2, 1, 1);
          e10 = sPixel.Interpolate(c4, c0, 3, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = sPixel.Interpolate(c4, c1, c5, 6, 1, 1);
          e13 = sPixel.Interpolate(c4, c5, c1, 5, 2, 1);
          e22 = sPixel.Interpolate(c4, c5, 7, 1);
          e23 = sPixel.Interpolate(c4, c5, 5, 3);
          if (c7.IsNotLike(c3)) {
            e20 = c4;
            e21 = c4;
            e30 = c4;
            e31 = c4;
            e32 = sPixel.Interpolate(c4, c5, 7, 1);
            e33 = sPixel.Interpolate(c4, c5, 5, 3);
          } else {
            e20 = sPixel.Interpolate(c3, c4, c7, 2, 1, 1);
            e21 = sPixel.Interpolate(c4, c3, c7, 6, 1, 1);
            e30 = sPixel.Interpolate(c3, c7, 1, 1);
            e31 = sPixel.Interpolate(c7, c3, 5, 3);
            e32 = sPixel.Interpolate(c7, c4, 3, 1);
            e33 = sPixel.Interpolate(c4, c7, 3, 1);
          }
        }
        break;
        case 233:
        case 237: {
          e00 = sPixel.Interpolate(c4, c1, 5, 3);
          e01 = sPixel.Interpolate(c4, c1, 5, 3);
          e02 = sPixel.Interpolate(c4, c1, c5, 5, 2, 1);
          e03 = sPixel.Interpolate(c4, c1, c5, 2, 1, 1);
          e10 = sPixel.Interpolate(c4, c1, 7, 1);
          e11 = sPixel.Interpolate(c4, c1, 7, 1);
          e12 = sPixel.Interpolate(c4, c1, c5, 6, 1, 1);
          e13 = sPixel.Interpolate(c4, c5, c1, 5, 2, 1);
          e20 = c4;
          e21 = c4;
          e22 = sPixel.Interpolate(c4, c5, 7, 1);
          e23 = sPixel.Interpolate(c4, c5, 5, 3);
          e31 = c4;
          e32 = sPixel.Interpolate(c4, c5, 7, 1);
          e33 = sPixel.Interpolate(c4, c5, 5, 3);
          e30 = (c7.IsNotLike(c3)) ? (c4) : (sPixel.Interpolate(c4, c3, c7, 2, 1, 1));
        }
        break;
        case 234: {
          e02 = sPixel.Interpolate(c4, c2, 3, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c5, c2, 5, 2, 1);
          e21 = c4;
          e22 = sPixel.Interpolate(c4, c5, 7, 1);
          e23 = sPixel.Interpolate(c4, c5, 5, 3);
          e32 = sPixel.Interpolate(c4, c5, 7, 1);
          e33 = sPixel.Interpolate(c4, c5, 5, 3);
          if (c7.IsNotLike(c3)) {
            e20 = c4;
            e30 = c4;
            e31 = c4;
          } else {
            e20 = sPixel.Interpolate(c3, c4, 1, 1);
            e30 = sPixel.Interpolate(c3, c7, 1, 1);
            e31 = sPixel.Interpolate(c4, c7, 1, 1);
          }
          if (c1.IsNotLike(c3)) {
            e00 = sPixel.Interpolate(c4, c0, 5, 3);
            e01 = sPixel.Interpolate(c4, c0, 3, 1);
            e10 = sPixel.Interpolate(c4, c0, 3, 1);
            e11 = sPixel.Interpolate(c4, c0, 7, 1);
          } else {
            e00 = sPixel.Interpolate(c4, c1, c3, 2, 1, 1);
            e01 = sPixel.Interpolate(c4, c1, 3, 1);
            e10 = sPixel.Interpolate(c4, c3, 3, 1);
            e11 = c4;
          }
        }
        break;
        case 235: {
          e02 = sPixel.Interpolate(c4, c2, 3, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e11 = c4;
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c5, c2, 5, 2, 1);
          e20 = c4;
          e21 = c4;
          e22 = sPixel.Interpolate(c4, c5, 7, 1);
          e23 = sPixel.Interpolate(c4, c5, 5, 3);
          e31 = c4;
          e32 = sPixel.Interpolate(c4, c5, 7, 1);
          e33 = sPixel.Interpolate(c4, c5, 5, 3);
          e30 = (c7.IsNotLike(c3)) ? (c4) : (sPixel.Interpolate(c4, c3, c7, 2, 1, 1));
          if (c1.IsNotLike(c3)) {
            e00 = c4;
            e01 = c4;
            e10 = c4;
          } else {
            e00 = sPixel.Interpolate(c1, c3, 1, 1);
            e01 = sPixel.Interpolate(c1, c4, 1, 1);
            e10 = sPixel.Interpolate(c3, c4, 1, 1);
          }
        }
        break;
        case 238: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c0, 3, 1);
          e02 = sPixel.Interpolate(c4, c5, 7, 1);
          e03 = sPixel.Interpolate(c4, c5, 5, 3);
          e10 = sPixel.Interpolate(c4, c0, 3, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = sPixel.Interpolate(c4, c5, 7, 1);
          e13 = sPixel.Interpolate(c4, c5, 5, 3);
          e22 = sPixel.Interpolate(c4, c5, 7, 1);
          e23 = sPixel.Interpolate(c4, c5, 5, 3);
          if (c7.IsNotLike(c3)) {
            e20 = c4;
            e21 = c4;
            e30 = c4;
            e31 = c4;
            e32 = sPixel.Interpolate(c4, c5, 7, 1);
            e33 = sPixel.Interpolate(c4, c5, 5, 3);
          } else {
            e20 = sPixel.Interpolate(c3, c4, c7, 2, 1, 1);
            e21 = sPixel.Interpolate(c4, c3, c7, 6, 1, 1);
            e30 = sPixel.Interpolate(c3, c7, 1, 1);
            e31 = sPixel.Interpolate(c7, c3, 5, 3);
            e32 = sPixel.Interpolate(c7, c4, 3, 1);
            e33 = sPixel.Interpolate(c4, c7, 3, 1);
          }
        }
        break;
        case 239: {
          e01 = c4;
          e02 = sPixel.Interpolate(c4, c5, 7, 1);
          e03 = sPixel.Interpolate(c4, c5, 5, 3);
          e10 = c4;
          e11 = c4;
          e12 = sPixel.Interpolate(c4, c5, 7, 1);
          e13 = sPixel.Interpolate(c4, c5, 5, 3);
          e20 = c4;
          e21 = c4;
          e22 = sPixel.Interpolate(c4, c5, 7, 1);
          e23 = sPixel.Interpolate(c4, c5, 5, 3);
          e31 = c4;
          e32 = sPixel.Interpolate(c4, c5, 7, 1);
          e33 = sPixel.Interpolate(c4, c5, 5, 3);
          e30 = (c7.IsNotLike(c3)) ? (c4) : (sPixel.Interpolate(c4, c3, c7, 2, 1, 1));
          e00 = (c1.IsNotLike(c3)) ? (c4) : (sPixel.Interpolate(c4, c1, c3, 2, 1, 1));
        }
        break;
        case 240:
        case 241: {
          e00 = sPixel.Interpolate(c4, c1, c3, 2, 1, 1);
          e01 = sPixel.Interpolate(c4, c1, c3, 5, 2, 1);
          e02 = sPixel.Interpolate(c4, c1, c2, 5, 2, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e10 = sPixel.Interpolate(c4, c3, c1, 5, 2, 1);
          e11 = sPixel.Interpolate(c4, c1, c3, 6, 1, 1);
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c2, 3, 1);
          e20 = sPixel.Interpolate(c4, c3, 5, 3);
          e21 = sPixel.Interpolate(c4, c3, 7, 1);
          if (c7.IsNotLike(c5)) {
            e22 = c4;
            e23 = c4;
            e30 = sPixel.Interpolate(c4, c3, 5, 3);
            e31 = sPixel.Interpolate(c4, c3, 7, 1);
            e32 = c4;
            e33 = c4;
          } else {
            e22 = sPixel.Interpolate(c4, c5, c7, 6, 1, 1);
            e23 = sPixel.Interpolate(c5, c4, c7, 2, 1, 1);
            e30 = sPixel.Interpolate(c4, c7, 3, 1);
            e31 = sPixel.Interpolate(c7, c4, 3, 1);
            e32 = sPixel.Interpolate(c7, c5, 5, 3);
            e33 = sPixel.Interpolate(c5, c7, 1, 1);
          }
        }
        break;
        case 242: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c0, 3, 1);
          e10 = sPixel.Interpolate(c4, c3, c0, 5, 2, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e20 = sPixel.Interpolate(c4, c3, 5, 3);
          e21 = sPixel.Interpolate(c4, c3, 7, 1);
          e22 = c4;
          e30 = sPixel.Interpolate(c4, c3, 5, 3);
          e31 = sPixel.Interpolate(c4, c3, 7, 1);
          if (c7.IsNotLike(c5)) {
            e23 = c4;
            e32 = c4;
            e33 = c4;
          } else {
            e23 = sPixel.Interpolate(c4, c5, 1, 1);
            e32 = sPixel.Interpolate(c4, c7, 1, 1);
            e33 = sPixel.Interpolate(c5, c7, 1, 1);
          }
          if (c1.IsNotLike(c5)) {
            e02 = sPixel.Interpolate(c4, c2, 3, 1);
            e03 = sPixel.Interpolate(c4, c2, 5, 3);
            e12 = sPixel.Interpolate(c4, c2, 7, 1);
            e13 = sPixel.Interpolate(c4, c2, 3, 1);
          } else {
            e02 = sPixel.Interpolate(c4, c1, 3, 1);
            e03 = sPixel.Interpolate(c4, c1, c5, 2, 1, 1);
            e12 = c4;
            e13 = sPixel.Interpolate(c4, c5, 3, 1);
          }
        }
        break;
        case 243: {
          e00 = sPixel.Interpolate(c4, c3, 5, 3);
          e01 = sPixel.Interpolate(c4, c3, 7, 1);
          e02 = sPixel.Interpolate(c4, c2, 3, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e10 = sPixel.Interpolate(c4, c3, 5, 3);
          e11 = sPixel.Interpolate(c4, c3, 7, 1);
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c2, 3, 1);
          e20 = sPixel.Interpolate(c4, c3, 5, 3);
          e21 = sPixel.Interpolate(c4, c3, 7, 1);
          if (c7.IsNotLike(c5)) {
            e22 = c4;
            e23 = c4;
            e30 = sPixel.Interpolate(c4, c3, 5, 3);
            e31 = sPixel.Interpolate(c4, c3, 7, 1);
            e32 = c4;
            e33 = c4;
          } else {
            e22 = sPixel.Interpolate(c4, c5, c7, 6, 1, 1);
            e23 = sPixel.Interpolate(c5, c4, c7, 2, 1, 1);
            e30 = sPixel.Interpolate(c4, c7, 3, 1);
            e31 = sPixel.Interpolate(c7, c4, 3, 1);
            e32 = sPixel.Interpolate(c7, c5, 5, 3);
            e33 = sPixel.Interpolate(c5, c7, 1, 1);
          }
        }
        break;
        case 244:
        case 245: {
          e00 = sPixel.Interpolate(c4, c1, c3, 2, 1, 1);
          e01 = sPixel.Interpolate(c4, c1, c3, 5, 2, 1);
          e02 = sPixel.Interpolate(c4, c1, 5, 3);
          e03 = sPixel.Interpolate(c4, c1, 5, 3);
          e10 = sPixel.Interpolate(c4, c3, c1, 5, 2, 1);
          e11 = sPixel.Interpolate(c4, c1, c3, 6, 1, 1);
          e12 = sPixel.Interpolate(c4, c1, 7, 1);
          e13 = sPixel.Interpolate(c4, c1, 7, 1);
          e20 = sPixel.Interpolate(c4, c3, 5, 3);
          e21 = sPixel.Interpolate(c4, c3, 7, 1);
          e22 = c4;
          e23 = c4;
          e30 = sPixel.Interpolate(c4, c3, 5, 3);
          e31 = sPixel.Interpolate(c4, c3, 7, 1);
          e32 = c4;
          e33 = (c7.IsNotLike(c5)) ? (c4) : (sPixel.Interpolate(c4, c5, c7, 2, 1, 1));
        }
        break;
        case 246: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c0, 3, 1);
          e10 = sPixel.Interpolate(c4, c3, c0, 5, 2, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = c4;
          e20 = sPixel.Interpolate(c4, c3, 5, 3);
          e21 = sPixel.Interpolate(c4, c3, 7, 1);
          e22 = c4;
          e23 = c4;
          e30 = sPixel.Interpolate(c4, c3, 5, 3);
          e31 = sPixel.Interpolate(c4, c3, 7, 1);
          e32 = c4;
          e33 = (c7.IsNotLike(c5)) ? (c4) : (sPixel.Interpolate(c4, c5, c7, 2, 1, 1));
          if (c1.IsNotLike(c5)) {
            e02 = c4;
            e03 = c4;
            e13 = c4;
          } else {
            e02 = sPixel.Interpolate(c1, c4, 1, 1);
            e03 = sPixel.Interpolate(c1, c5, 1, 1);
            e13 = sPixel.Interpolate(c4, c5, 1, 1);
          }
        }
        break;
        case 247: {
          e00 = sPixel.Interpolate(c4, c3, 5, 3);
          e01 = sPixel.Interpolate(c4, c3, 7, 1);
          e02 = c4;
          e10 = sPixel.Interpolate(c4, c3, 5, 3);
          e11 = sPixel.Interpolate(c4, c3, 7, 1);
          e12 = c4;
          e13 = c4;
          e20 = sPixel.Interpolate(c4, c3, 5, 3);
          e21 = sPixel.Interpolate(c4, c3, 7, 1);
          e22 = c4;
          e23 = c4;
          e30 = sPixel.Interpolate(c4, c3, 5, 3);
          e31 = sPixel.Interpolate(c4, c3, 7, 1);
          e32 = c4;
          e33 = (c7.IsNotLike(c5)) ? (c4) : (sPixel.Interpolate(c4, c5, c7, 2, 1, 1));
          e03 = (c1.IsNotLike(c5)) ? (c4) : (sPixel.Interpolate(c4, c1, c5, 2, 1, 1));
        }
        break;
        case 249: {
          e00 = sPixel.Interpolate(c4, c1, 5, 3);
          e01 = sPixel.Interpolate(c4, c1, 5, 3);
          e02 = sPixel.Interpolate(c4, c1, c2, 5, 2, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e10 = sPixel.Interpolate(c4, c1, 7, 1);
          e11 = sPixel.Interpolate(c4, c1, 7, 1);
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c2, 3, 1);
          e20 = c4;
          e21 = c4;
          e22 = c4;
          e31 = c4;
          e30 = (c7.IsNotLike(c3)) ? (c4) : (sPixel.Interpolate(c4, c3, c7, 2, 1, 1));
          if (c7.IsNotLike(c5)) {
            e23 = c4;
            e32 = c4;
            e33 = c4;
          } else {
            e23 = sPixel.Interpolate(c4, c5, 1, 1);
            e32 = sPixel.Interpolate(c4, c7, 1, 1);
            e33 = sPixel.Interpolate(c5, c7, 1, 1);
          }
        }
        break;
        case 250: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c0, 3, 1);
          e02 = sPixel.Interpolate(c4, c2, 3, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e10 = sPixel.Interpolate(c4, c0, 3, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c2, 3, 1);
          e21 = c4;
          e22 = c4;
          if (c7.IsNotLike(c3)) {
            e20 = c4;
            e30 = c4;
            e31 = c4;
          } else {
            e20 = sPixel.Interpolate(c3, c4, 1, 1);
            e30 = sPixel.Interpolate(c3, c7, 1, 1);
            e31 = sPixel.Interpolate(c4, c7, 1, 1);
          }
          if (c7.IsNotLike(c5)) {
            e23 = c4;
            e32 = c4;
            e33 = c4;
          } else {
            e23 = sPixel.Interpolate(c4, c5, 1, 1);
            e32 = sPixel.Interpolate(c4, c7, 1, 1);
            e33 = sPixel.Interpolate(c5, c7, 1, 1);
          }
        }
        break;
        case 251: {
          e02 = sPixel.Interpolate(c4, c2, 3, 1);
          e03 = sPixel.Interpolate(c4, c2, 5, 3);
          e11 = c4;
          e12 = sPixel.Interpolate(c4, c2, 7, 1);
          e13 = sPixel.Interpolate(c4, c2, 3, 1);
          e20 = c4;
          e21 = c4;
          e22 = c4;
          e31 = c4;
          e30 = (c7.IsNotLike(c3)) ? (c4) : (sPixel.Interpolate(c4, c3, c7, 2, 1, 1));
          if (c7.IsNotLike(c5)) {
            e23 = c4;
            e32 = c4;
            e33 = c4;
          } else {
            e23 = sPixel.Interpolate(c4, c5, 1, 1);
            e32 = sPixel.Interpolate(c4, c7, 1, 1);
            e33 = sPixel.Interpolate(c5, c7, 1, 1);
          }
          if (c1.IsNotLike(c3)) {
            e00 = c4;
            e01 = c4;
            e10 = c4;
          } else {
            e00 = sPixel.Interpolate(c1, c3, 1, 1);
            e01 = sPixel.Interpolate(c1, c4, 1, 1);
            e10 = sPixel.Interpolate(c3, c4, 1, 1);
          }
        }
        break;
        case 252: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c1, c0, 5, 2, 1);
          e02 = sPixel.Interpolate(c4, c1, 5, 3);
          e03 = sPixel.Interpolate(c4, c1, 5, 3);
          e10 = sPixel.Interpolate(c4, c0, 3, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = sPixel.Interpolate(c4, c1, 7, 1);
          e13 = sPixel.Interpolate(c4, c1, 7, 1);
          e21 = c4;
          e22 = c4;
          e23 = c4;
          e32 = c4;
          if (c7.IsNotLike(c3)) {
            e20 = c4;
            e30 = c4;
            e31 = c4;
          } else {
            e20 = sPixel.Interpolate(c3, c4, 1, 1);
            e30 = sPixel.Interpolate(c3, c7, 1, 1);
            e31 = sPixel.Interpolate(c4, c7, 1, 1);
          }
          e33 = (c7.IsNotLike(c5)) ? (c4) : (sPixel.Interpolate(c4, c5, c7, 2, 1, 1));
        }
        break;
        case 253: {
          e00 = sPixel.Interpolate(c4, c1, 5, 3);
          e01 = sPixel.Interpolate(c4, c1, 5, 3);
          e02 = sPixel.Interpolate(c4, c1, 5, 3);
          e03 = sPixel.Interpolate(c4, c1, 5, 3);
          e10 = sPixel.Interpolate(c4, c1, 7, 1);
          e11 = sPixel.Interpolate(c4, c1, 7, 1);
          e12 = sPixel.Interpolate(c4, c1, 7, 1);
          e13 = sPixel.Interpolate(c4, c1, 7, 1);
          e20 = c4;
          e21 = c4;
          e22 = c4;
          e23 = c4;
          e31 = c4;
          e32 = c4;
          e30 = (c7.IsNotLike(c3)) ? (c4) : (sPixel.Interpolate(c4, c3, c7, 2, 1, 1));
          e33 = (c7.IsNotLike(c5)) ? (c4) : (sPixel.Interpolate(c4, c5, c7, 2, 1, 1));
        }
        break;
        case 254: {
          e00 = sPixel.Interpolate(c4, c0, 5, 3);
          e01 = sPixel.Interpolate(c4, c0, 3, 1);
          e10 = sPixel.Interpolate(c4, c0, 3, 1);
          e11 = sPixel.Interpolate(c4, c0, 7, 1);
          e12 = c4;
          e21 = c4;
          e22 = c4;
          e23 = c4;
          e32 = c4;
          if (c7.IsNotLike(c3)) {
            e20 = c4;
            e30 = c4;
            e31 = c4;
          } else {
            e20 = sPixel.Interpolate(c3, c4, 1, 1);
            e30 = sPixel.Interpolate(c3, c7, 1, 1);
            e31 = sPixel.Interpolate(c4, c7, 1, 1);
          }
          e33 = (c7.IsNotLike(c5)) ? (c4) : (sPixel.Interpolate(c4, c5, c7, 2, 1, 1));
          if (c1.IsNotLike(c5)) {
            e02 = c4;
            e03 = c4;
            e13 = c4;
          } else {
            e02 = sPixel.Interpolate(c1, c4, 1, 1);
            e03 = sPixel.Interpolate(c1, c5, 1, 1);
            e13 = sPixel.Interpolate(c4, c5, 1, 1);
          }
        }
        break;
        case 255: {
          e01 = c4;
          e02 = c4;
          e10 = c4;
          e11 = c4;
          e12 = c4;
          e13 = c4;
          e20 = c4;
          e21 = c4;
          e22 = c4;
          e23 = c4;
          e31 = c4;
          e32 = c4;
          e30 = (c7.IsNotLike(c3)) ? (c4) : (sPixel.Interpolate(c4, c3, c7, 2, 1, 1));
          e33 = (c7.IsNotLike(c5)) ? (c4) : (sPixel.Interpolate(c4, c5, c7, 2, 1, 1));
          e00 = (c1.IsNotLike(c3)) ? (c4) : (sPixel.Interpolate(c4, c1, c3, 2, 1, 1));
          e03 = (c1.IsNotLike(c5)) ? (c4) : (sPixel.Interpolate(c4, c1, c5, 2, 1, 1));
        }
        break;
        #endregion
      }
      worker.TargetP0P0(e00);
      worker.TargetP1P0(e01);
      worker.TargetP2P0(e02);
      worker.TargetP3P0(e03);
      worker.TargetP0P1(e10);
      worker.TargetP1P1(e11);
      worker.TargetP2P1(e12);
      worker.TargetP3P1(e13);
      worker.TargetP0P2(e20);
      worker.TargetP1P2(e21);
      worker.TargetP2P2(e22);
      worker.TargetP3P2(e23);
      worker.TargetP0P3(e30);
      worker.TargetP1P3(e31);
      worker.TargetP2P3(e32);
      worker.TargetP3P3(e33);
    }
Beispiel #54
0
        /// <summary>
        /// SNES9x's EPXC modified by Hawkynt to support thresholds
        /// </summary>
        public static void EpxC(PixelWorker <sPixel> worker)
        {
            var    c0 = worker.SourceM1M1();
            var    c1 = worker.SourceP0M1();
            var    c2 = worker.SourceP1M1();
            var    c3 = worker.SourceM1P0();
            var    c4 = worker.SourceP0P0();
            var    c5 = worker.SourceP1P0();
            var    c6 = worker.SourceM1P1();
            var    c7 = worker.SourceP0P1();
            var    c8 = worker.SourceP1P1();
            sPixel e01, e10, e11;
            var    e00 = e01 = e10 = e11 = c4;

            if (c3.IsNotLike(c5) && c7.IsNotLike(c1))
            {
                var neq40 = c4.IsNotLike(c0);
                var neq41 = c4.IsNotLike(c1);
                var neq42 = c4.IsNotLike(c2);
                var neq43 = c4.IsNotLike(c3);
                var neq45 = c4.IsNotLike(c5);
                var neq46 = c4.IsNotLike(c6);
                var neq47 = c4.IsNotLike(c7);
                var neq48 = c4.IsNotLike(c8);

                var eq13 = c1.IsLike(c3) && (neq40 || neq48 || c1.IsNotLike(c2) || c3.IsNotLike(c6));
                var eq37 = c3.IsLike(c7) && (neq46 || neq42 || c3.IsNotLike(c0) || c7.IsNotLike(c8));
                var eq75 = c7.IsLike(c5) && (neq48 || neq40 || c7.IsNotLike(c6) || c5.IsNotLike(c2));
                var eq51 = c5.IsLike(c1) && (neq42 || neq46 || c5.IsNotLike(c8) || c1.IsNotLike(c0));
                if (
                    (!neq40) ||
                    (!neq41) ||
                    (!neq42) ||
                    (!neq43) ||
                    (!neq45) ||
                    (!neq46) ||
                    (!neq47) ||
                    (!neq48)
                    )
                {
                    sPixel c3A;
                    if ((eq13 && neq46) && (eq37 && neq40))
                    {
                        c3A = sPixel.Interpolate(c3, c1, c7);
                    }
                    else if (eq13 && neq46)
                    {
                        c3A = sPixel.Interpolate(c3, c1);
                    }
                    else if (eq37 && neq40)
                    {
                        c3A = sPixel.Interpolate(c3, c7);
                    }
                    else
                    {
                        c3A = c4;
                    }

                    sPixel c7B;
                    if ((eq37 && neq48) && (eq75 && neq46))
                    {
                        c7B = sPixel.Interpolate(c7, c3, c5);
                    }
                    else if (eq37 && neq48)
                    {
                        c7B = sPixel.Interpolate(c7, c3);
                    }
                    else if (eq75 && neq46)
                    {
                        c7B = sPixel.Interpolate(c7, c5);
                    }
                    else
                    {
                        c7B = c4;
                    }

                    sPixel c5C;
                    if ((eq75 && neq42) && (eq51 && neq48))
                    {
                        c5C = sPixel.Interpolate(c5, c1, c7);
                    }
                    else if (eq75 && neq42)
                    {
                        c5C = sPixel.Interpolate(c5, c7);
                    }
                    else if (eq51 && neq48)
                    {
                        c5C = sPixel.Interpolate(c5, c1);
                    }
                    else
                    {
                        c5C = c4;
                    }

                    sPixel c1D;

                    if ((eq51 && neq40) && (eq13 && neq42))
                    {
                        c1D = sPixel.Interpolate(c1, c3, c5);
                    }
                    else if (eq51 && neq40)
                    {
                        c1D = sPixel.Interpolate(c1, c5);
                    }
                    else if (eq13 && neq42)
                    {
                        c1D = sPixel.Interpolate(c1, c3);
                    }
                    else
                    {
                        c1D = c4;
                    }

                    if (eq13)
                    {
                        e00 = sPixel.Interpolate(c1, c3);
                    }
                    if (eq51)
                    {
                        e01 = sPixel.Interpolate(c5, c1);
                    }
                    if (eq37)
                    {
                        e10 = sPixel.Interpolate(c3, c7);
                    }
                    if (eq75)
                    {
                        e11 = sPixel.Interpolate(c7, c5);
                    }

                    e00 = sPixel.Interpolate(e00, c1D, c3A, c4, 5, 1, 1, 1);
                    e01 = sPixel.Interpolate(e01, c7B, c5C, c4, 5, 1, 1, 1);
                    e10 = sPixel.Interpolate(e10, c3A, c7B, c4, 5, 1, 1, 1);
                    e11 = sPixel.Interpolate(e11, c5C, c1D, c4, 5, 1, 1, 1);
                }
                else
                {
                    if (eq13)
                    {
                        e00 = sPixel.Interpolate(c1, c3);
                    }
                    if (eq51)
                    {
                        e01 = sPixel.Interpolate(c5, c1);
                    }
                    if (eq37)
                    {
                        e10 = sPixel.Interpolate(c3, c7);
                    }
                    if (eq75)
                    {
                        e11 = sPixel.Interpolate(c7, c5);
                    }

                    e00 = sPixel.Interpolate(c4, e00, 3, 1);
                    e01 = sPixel.Interpolate(c4, e01, 3, 1);
                    e10 = sPixel.Interpolate(c4, e10, 3, 1);
                    e11 = sPixel.Interpolate(c4, e11, 3, 1);
                }
            }

            worker.TargetP0P0(e00);
            worker.TargetP1P0(e01);
            worker.TargetP0P1(e10);
            worker.TargetP1P1(e11);
        }
Beispiel #55
0
        /// <summary>
        /// Andrea Mazzoleni's Scale3X modified by Hawkynt to support thresholds
        /// </summary>
        public static void Scale3x(PixelWorker <sPixel> worker)
        {
            var    c0 = worker.SourceM1M1();
            var    c1 = worker.SourceP0M1();
            var    c2 = worker.SourceP1M1();
            var    c3 = worker.SourceM1P0();
            var    c4 = worker.SourceP0P0();
            var    c5 = worker.SourceP1P0();
            var    c6 = worker.SourceM1P1();
            var    c7 = worker.SourceP0P1();
            var    c8 = worker.SourceP1P1();
            sPixel e01, e02, e10, e11, e12, e20, e21, e22 = c4;
            var    e00 = e01 = e02 = e10 = e11 = e12 = e20 = e21 = e22 = c4;

            if (c1.IsNotLike(c7) && c3.IsNotLike(c5))
            {
                if (c3.IsLike(c1))
                {
                    e00 = sPixel.Interpolate(c3, c1);
                }
                if (c1.IsLike(c5))
                {
                    e02 = sPixel.Interpolate(c1, c5);
                }
                if (c3.IsLike(c7))
                {
                    e20 = sPixel.Interpolate(c3, c7);
                }
                if (c7.IsLike(c5))
                {
                    e22 = sPixel.Interpolate(c7, c5);
                }

                if (
                    (c3.IsLike(c1) && c4.IsNotLike(c2)) &&
                    (c5.IsLike(c1) && c4.IsNotLike(c0))
                    )
                {
                    e01 = sPixel.Interpolate(c1, c3, c5);
                }
                else if (c3.IsLike(c1) && c4.IsNotLike(c2))
                {
                    e01 = sPixel.Interpolate(c3, c1);
                }
                else if (c5.IsLike(c1) && c4.IsNotLike(c0))
                {
                    e01 = sPixel.Interpolate(c5, c1);
                }

                if (
                    (c3.IsLike(c1) && c4.IsNotLike(c6)) &&
                    (c3.IsLike(c7) && c4.IsNotLike(c0))
                    )
                {
                    e10 = sPixel.Interpolate(c3, c1, c7);
                }
                else if (c3.IsLike(c1) && c4.IsNotLike(c6))
                {
                    e10 = sPixel.Interpolate(c3, c1);
                }
                else if (c3.IsLike(c7) && c4.IsNotLike(c0))
                {
                    e10 = sPixel.Interpolate(c3, c7);
                }

                if (
                    (c5.IsLike(c1) && c4.IsNotLike(c8)) &&
                    (c5.IsLike(c7) && c4.IsNotLike(c2))
                    )
                {
                    e12 = sPixel.Interpolate(c5, c1, c7);
                }
                else if (c5.IsLike(c1) && c4.IsNotLike(c8))
                {
                    e12 = sPixel.Interpolate(c5, c1);
                }
                else if (c5.IsLike(c7) && c4.IsNotLike(c2))
                {
                    e12 = sPixel.Interpolate(c5, c7);
                }

                if (
                    (c3.IsLike(c7) && c4.IsNotLike(c8)) &&
                    (c5.IsLike(c7) && c4.IsNotLike(c6))
                    )
                {
                    e21 = sPixel.Interpolate(c7, c3, c5);
                }
                else if (c3.IsLike(c7) && c4.IsNotLike(c8))
                {
                    e21 = sPixel.Interpolate(c3, c7);
                }
                else if (c5.IsLike(c7) && c4.IsNotLike(c6))
                {
                    e21 = sPixel.Interpolate(c5, c7);
                }
            }
            worker.TargetP0P0(e00);
            worker.TargetP1P0(e01);
            worker.TargetP2P0(e02);
            worker.TargetP0P1(e10);
            worker.TargetP1P1(e11);
            worker.TargetP2P1(e12);
            worker.TargetP0P2(e20);
            worker.TargetP1P2(e21);
            worker.TargetP2P2(e22);
        }
Beispiel #56
0
 public static void Lq2xKernel(byte pattern, sPixel c0, sPixel c1, sPixel c2, sPixel c3, sPixel c4, sPixel c5, sPixel c6, sPixel c7, sPixel c8, PixelWorker<sPixel> worker) {
   sPixel e01, e10, e11;
   var e00 = e01 = e10 = e11 = c4;
   switch (pattern) {
     #region LQ2x PATTERNS
     case 0:
     case 2:
     case 4:
     case 6:
     case 8:
     case 12:
     case 16:
     case 20:
     case 24:
     case 28:
     case 32:
     case 34:
     case 36:
     case 38:
     case 40:
     case 44:
     case 48:
     case 52:
     case 56:
     case 60:
     case 64:
     case 66:
     case 68:
     case 70:
     case 96:
     case 98:
     case 100:
     case 102:
     case 128:
     case 130:
     case 132:
     case 134:
     case 136:
     case 140:
     case 144:
     case 148:
     case 152:
     case 156:
     case 160:
     case 162:
     case 164:
     case 166:
     case 168:
     case 172:
     case 176:
     case 180:
     case 184:
     case 188:
     case 192:
     case 194:
     case 196:
     case 198:
     case 224:
     case 226:
     case 228:
     case 230: {
       e00 = c0;
       e01 = c0;
       e10 = c0;
       e11 = c0;
     }
     break;
     case 1:
     case 5:
     case 9:
     case 13:
     case 17:
     case 21:
     case 25:
     case 29:
     case 33:
     case 37:
     case 41:
     case 45:
     case 49:
     case 53:
     case 57:
     case 61:
     case 65:
     case 69:
     case 97:
     case 101:
     case 129:
     case 133:
     case 137:
     case 141:
     case 145:
     case 149:
     case 153:
     case 157:
     case 161:
     case 165:
     case 169:
     case 173:
     case 177:
     case 181:
     case 185:
     case 189:
     case 193:
     case 197:
     case 225:
     case 229: {
       e00 = c1;
       e01 = c1;
       e10 = c1;
       e11 = c1;
     }
     break;
     case 3:
     case 35:
     case 67:
     case 99:
     case 131:
     case 163:
     case 195:
     case 227: {
       e00 = c2;
       e01 = c2;
       e10 = c2;
       e11 = c2;
     }
     break;
     case 7:
     case 39:
     case 71:
     case 103:
     case 135:
     case 167:
     case 199:
     case 231: {
       e00 = c3;
       e01 = c3;
       e10 = c3;
       e11 = c3;
     }
     break;
     case 10:
     case 138: {
       e01 = c0;
       e10 = c0;
       e11 = c0;
       e00 = (c1.IsNotLike(c3)) ? (c0) : (sPixel.Interpolate(c0, c1, c3, 2, 1, 1));
     }
     break;
     case 11:
     case 27:
     case 75:
     case 139:
     case 155:
     case 203: {
       e01 = c2;
       e10 = c2;
       e11 = c2;
       e00 = (c1.IsNotLike(c3)) ? (c2) : (sPixel.Interpolate(c2, c1, c3, 2, 1, 1));
     }
     break;
     case 14:
     case 142: {
       e10 = c0;
       e11 = c0;
       if (c1.IsNotLike(c3)) {
         e00 = c0;
         e01 = c0;
       } else {
         e00 = sPixel.Interpolate(c1, c3, c0, 3, 3, 2);
         e01 = sPixel.Interpolate(c0, c1, 3, 1);
       }
     }
     break;
     case 15:
     case 143:
     case 207: {
       e10 = c4;
       e11 = c4;
       if (c1.IsNotLike(c3)) {
         e00 = c4;
         e01 = c4;
       } else {
         e00 = sPixel.Interpolate(c1, c3, c4, 3, 3, 2);
         e01 = sPixel.Interpolate(c4, c1, 3, 1);
       }
     }
     break;
     case 18:
     case 22:
     case 30:
     case 50:
     case 54:
     case 62:
     case 86:
     case 118: {
       e00 = c0;
       e10 = c0;
       e11 = c0;
       e01 = (c1.IsNotLike(c5)) ? (c0) : (sPixel.Interpolate(c0, c1, c5, 2, 1, 1));
     }
     break;
     case 19:
     case 51: {
       e10 = c2;
       e11 = c2;
       if (c1.IsNotLike(c5)) {
         e00 = c2;
         e01 = c2;
       } else {
         e00 = sPixel.Interpolate(c2, c1, 3, 1);
         e01 = sPixel.Interpolate(c1, c5, c2, 3, 3, 2);
       }
     }
     break;
     case 23:
     case 55:
     case 119: {
       e10 = c3;
       e11 = c3;
       if (c1.IsNotLike(c5)) {
         e00 = c3;
         e01 = c3;
       } else {
         e00 = sPixel.Interpolate(c3, c1, 3, 1);
         e01 = sPixel.Interpolate(c1, c5, c3, 3, 3, 2);
       }
     }
     break;
     case 26: {
       e10 = c0;
       e11 = c0;
       e00 = (c1.IsNotLike(c3)) ? (c0) : (sPixel.Interpolate(c0, c1, c3, 2, 1, 1));
       e01 = (c1.IsNotLike(c5)) ? (c0) : (sPixel.Interpolate(c0, c1, c5, 2, 1, 1));
     }
     break;
     case 31:
     case 95: {
       e10 = c4;
       e11 = c4;
       e00 = (c1.IsNotLike(c3)) ? (c4) : (sPixel.Interpolate(c4, c1, c3, 2, 1, 1));
       e01 = (c1.IsNotLike(c5)) ? (c4) : (sPixel.Interpolate(c4, c1, c5, 2, 1, 1));
     }
     break;
     case 42:
     case 170: {
       e01 = c0;
       e11 = c0;
       if (c1.IsNotLike(c3)) {
         e00 = c0;
         e10 = c0;
       } else {
         e00 = sPixel.Interpolate(c1, c3, c0, 3, 3, 2);
         e10 = sPixel.Interpolate(c0, c3, 3, 1);
       }
     }
     break;
     case 43:
     case 171:
     case 187: {
       e01 = c2;
       e11 = c2;
       if (c1.IsNotLike(c3)) {
         e00 = c2;
         e10 = c2;
       } else {
         e00 = sPixel.Interpolate(c1, c3, c2, 3, 3, 2);
         e10 = sPixel.Interpolate(c2, c3, 3, 1);
       }
     }
     break;
     case 46:
     case 174: {
       e01 = c0;
       e10 = c0;
       e11 = c0;
       e00 = (c1.IsNotLike(c3)) ? (c0) : (sPixel.Interpolate(c0, c1, c3, 6, 1, 1));
     }
     break;
     case 47:
     case 175: {
       e01 = c4;
       e10 = c4;
       e11 = c4;
       e00 = (c1.IsNotLike(c3)) ? (c4) : (sPixel.Interpolate(c4, c1, c3, 14, 1, 1));
     }
     break;
     case 58:
     case 154:
     case 186: {
       e10 = c0;
       e11 = c0;
       e00 = (c1.IsNotLike(c3)) ? (c0) : (sPixel.Interpolate(c0, c1, c3, 6, 1, 1));
       e01 = (c1.IsNotLike(c5)) ? (c0) : (sPixel.Interpolate(c0, c1, c5, 6, 1, 1));
     }
     break;
     case 59: {
       e10 = c2;
       e11 = c2;
       e00 = (c1.IsNotLike(c3)) ? (c2) : (sPixel.Interpolate(c2, c1, c3, 2, 1, 1));
       e01 = (c1.IsNotLike(c5)) ? (c2) : (sPixel.Interpolate(c2, c1, c5, 6, 1, 1));
     }
     break;
     case 63: {
       e10 = c4;
       e11 = c4;
       e00 = (c1.IsNotLike(c3)) ? (c4) : (sPixel.Interpolate(c4, c1, c3, 14, 1, 1));
       e01 = (c1.IsNotLike(c5)) ? (c4) : (sPixel.Interpolate(c4, c1, c5, 2, 1, 1));
     }
     break;
     case 72:
     case 76:
     case 104:
     case 106:
     case 108:
     case 110:
     case 120:
     case 124: {
       e00 = c0;
       e01 = c0;
       e11 = c0;
       e10 = (c7.IsNotLike(c3)) ? (c0) : (sPixel.Interpolate(c0, c3, c7, 2, 1, 1));
     }
     break;
     case 73:
     case 77:
     case 105:
     case 109:
     case 125: {
       e01 = c1;
       e11 = c1;
       if (c7.IsNotLike(c3)) {
         e00 = c1;
         e10 = c1;
       } else {
         e00 = sPixel.Interpolate(c1, c3, 3, 1);
         e10 = sPixel.Interpolate(c3, c7, c1, 3, 3, 2);
       }
     }
     break;
     case 74: {
       e01 = c0;
       e11 = c0;
       e10 = (c7.IsNotLike(c3)) ? (c0) : (sPixel.Interpolate(c0, c3, c7, 2, 1, 1));
       e00 = (c1.IsNotLike(c3)) ? (c0) : (sPixel.Interpolate(c0, c1, c3, 2, 1, 1));
     }
     break;
     case 78:
     case 202:
     case 206: {
       e01 = c0;
       e11 = c0;
       e10 = c7.IsNotLike(c3) ? c0 : sPixel.Interpolate(c0, c3, c7, 6, 1, 1);
       e00 = c1.IsNotLike(c3) ? c0 : sPixel.Interpolate(c0, c1, c3, 6, 1, 1);
     }
     break;
     case 79: {
       e01 = c4;
       e11 = c4;
       e10 = c7.IsNotLike(c3) ? c4 : sPixel.Interpolate(c4, c3, c7, 6, 1, 1);
       e00 = c1.IsNotLike(c3) ? c4 : sPixel.Interpolate(c4, c1, c3, 2, 1, 1);
     }
     break;
     case 80:
     case 208:
     case 210:
     case 216: {
       e00 = c0;
       e01 = c0;
       e10 = c0;
       e11 = c7.IsNotLike(c5) ? c0 : sPixel.Interpolate(c0, c5, c7, 2, 1, 1);
     }
     break;
     case 81:
     case 209:
     case 217: {
       e00 = c1;
       e01 = c1;
       e10 = c1;
       e11 = c7.IsNotLike(c5) ? c1 : sPixel.Interpolate(c1, c5, c7, 2, 1, 1);
     }
     break;
     case 82:
     case 214:
     case 222: {
       e00 = c0;
       e10 = c0;
       e11 = c7.IsNotLike(c5) ? c0 : sPixel.Interpolate(c0, c5, c7, 2, 1, 1);
       e01 = c1.IsNotLike(c5) ? c0 : sPixel.Interpolate(c0, c1, c5, 2, 1, 1);
     }
     break;
     case 83:
     case 115: {
       e00 = c2;
       e10 = c2;
       e11 = (c7.IsNotLike(c5)) ? (c2) : (sPixel.Interpolate(c2, c5, c7, 6, 1, 1));
       e01 = (c1.IsNotLike(c5)) ? (c2) : (sPixel.Interpolate(c2, c1, c5, 6, 1, 1));
     }
     break;
     case 84:
     case 212: {
       e00 = c0;
       e10 = c0;
       if (c7.IsNotLike(c5)) {
         e01 = c0;
         e11 = c0;
       } else {
         e01 = sPixel.Interpolate(c0, c5, 3, 1);
         e11 = sPixel.Interpolate(c5, c7, c0, 3, 3, 2);
       }
     }
     break;
     case 85:
     case 213:
     case 221: {
       e00 = c1;
       e10 = c1;
       if (c7.IsNotLike(c5)) {
         e01 = c1;
         e11 = c1;
       } else {
         e01 = sPixel.Interpolate(c1, c5, 3, 1);
         e11 = sPixel.Interpolate(c5, c7, c1, 3, 3, 2);
       }
     }
     break;
     case 87: {
       e00 = c3;
       e10 = c3;
       e11 = (c7.IsNotLike(c5)) ? (c3) : (sPixel.Interpolate(c3, c5, c7, 6, 1, 1));
       e01 = (c1.IsNotLike(c5)) ? (c3) : (sPixel.Interpolate(c3, c1, c5, 2, 1, 1));
     }
     break;
     case 88:
     case 248:
     case 250: {
       e00 = c0;
       e01 = c0;
       e10 = (c7.IsNotLike(c3)) ? (c0) : (sPixel.Interpolate(c0, c3, c7, 2, 1, 1));
       e11 = (c7.IsNotLike(c5)) ? (c0) : (sPixel.Interpolate(c0, c5, c7, 2, 1, 1));
     }
     break;
     case 89:
     case 93: {
       e00 = c1;
       e01 = c1;
       e10 = (c7.IsNotLike(c3)) ? (c1) : (sPixel.Interpolate(c1, c3, c7, 6, 1, 1));
       e11 = (c7.IsNotLike(c5)) ? (c1) : (sPixel.Interpolate(c1, c5, c7, 6, 1, 1));
     }
     break;
     case 90: {
       e10 = (c7.IsNotLike(c3)) ? (c0) : (sPixel.Interpolate(c0, c3, c7, 6, 1, 1));
       e11 = (c7.IsNotLike(c5)) ? (c0) : (sPixel.Interpolate(c0, c5, c7, 6, 1, 1));
       e00 = (c1.IsNotLike(c3)) ? (c0) : (sPixel.Interpolate(c0, c1, c3, 6, 1, 1));
       e01 = (c1.IsNotLike(c5)) ? (c0) : (sPixel.Interpolate(c0, c1, c5, 6, 1, 1));
     }
     break;
     case 91: {
       e10 = (c7.IsNotLike(c3)) ? (c2) : (sPixel.Interpolate(c2, c3, c7, 6, 1, 1));
       e11 = (c7.IsNotLike(c5)) ? (c2) : (sPixel.Interpolate(c2, c5, c7, 6, 1, 1));
       e00 = (c1.IsNotLike(c3)) ? (c2) : (sPixel.Interpolate(c2, c1, c3, 2, 1, 1));
       e01 = (c1.IsNotLike(c5)) ? (c2) : (sPixel.Interpolate(c2, c1, c5, 6, 1, 1));
     }
     break;
     case 92: {
       e00 = c0;
       e01 = c0;
       e10 = (c7.IsNotLike(c3)) ? (c0) : (sPixel.Interpolate(c0, c3, c7, 6, 1, 1));
       e11 = (c7.IsNotLike(c5)) ? (c0) : (sPixel.Interpolate(c0, c5, c7, 6, 1, 1));
     }
     break;
     case 94: {
       e10 = (c7.IsNotLike(c3)) ? (c0) : (sPixel.Interpolate(c0, c3, c7, 6, 1, 1));
       e11 = (c7.IsNotLike(c5)) ? (c0) : (sPixel.Interpolate(c0, c5, c7, 6, 1, 1));
       e00 = (c1.IsNotLike(c3)) ? (c0) : (sPixel.Interpolate(c0, c1, c3, 6, 1, 1));
       e01 = (c1.IsNotLike(c5)) ? (c0) : (sPixel.Interpolate(c0, c1, c5, 2, 1, 1));
     }
     break;
     case 107:
     case 123: {
       e01 = c2;
       e11 = c2;
       e10 = (c7.IsNotLike(c3)) ? (c2) : (sPixel.Interpolate(c2, c3, c7, 2, 1, 1));
       e00 = (c1.IsNotLike(c3)) ? (c2) : (sPixel.Interpolate(c2, c1, c3, 2, 1, 1));
     }
     break;
     case 111: {
       e01 = c4;
       e11 = c4;
       e10 = (c7.IsNotLike(c3)) ? (c4) : (sPixel.Interpolate(c4, c3, c7, 2, 1, 1));
       e00 = (c1.IsNotLike(c3)) ? (c4) : (sPixel.Interpolate(c4, c1, c3, 14, 1, 1));
     }
     break;
     case 112:
     case 240: {
       e00 = c0;
       e01 = c0;
       if (c7.IsNotLike(c5)) {
         e10 = c0;
         e11 = c0;
       } else {
         e10 = sPixel.Interpolate(c0, c7, 3, 1);
         e11 = sPixel.Interpolate(c5, c7, c0, 3, 3, 2);
       }
     }
     break;
     case 113:
     case 241: {
       e00 = c1;
       e01 = c1;
       if (c7.IsNotLike(c5)) {
         e10 = c1;
         e11 = c1;
       } else {
         e10 = sPixel.Interpolate(c1, c7, 3, 1);
         e11 = sPixel.Interpolate(c5, c7, c1, 3, 3, 2);
       }
     }
     break;
     case 114: {
       e00 = c0;
       e10 = c0;
       e11 = (c7.IsNotLike(c5)) ? (c0) : (sPixel.Interpolate(c0, c5, c7, 6, 1, 1));
       e01 = (c1.IsNotLike(c5)) ? (c0) : (sPixel.Interpolate(c0, c1, c5, 6, 1, 1));
     }
     break;
     case 116: {
       e00 = c0;
       e01 = c0;
       e10 = c0;
       e11 = (c7.IsNotLike(c5)) ? (c0) : (sPixel.Interpolate(c0, c5, c7, 6, 1, 1));
     }
     break;
     case 117: {
       e00 = c1;
       e01 = c1;
       e10 = c1;
       e11 = (c7.IsNotLike(c5)) ? (c1) : (sPixel.Interpolate(c1, c5, c7, 6, 1, 1));
     }
     break;
     case 121: {
       e00 = c1;
       e01 = c1;
       e10 = (c7.IsNotLike(c3)) ? (c1) : (sPixel.Interpolate(c1, c3, c7, 2, 1, 1));
       e11 = (c7.IsNotLike(c5)) ? (c1) : (sPixel.Interpolate(c1, c5, c7, 6, 1, 1));
     }
     break;
     case 122: {
       e10 = (c7.IsNotLike(c3)) ? (c0) : (sPixel.Interpolate(c0, c3, c7, 2, 1, 1));
       e11 = (c7.IsNotLike(c5)) ? (c0) : (sPixel.Interpolate(c0, c5, c7, 6, 1, 1));
       e00 = (c1.IsNotLike(c3)) ? (c0) : (sPixel.Interpolate(c0, c1, c3, 6, 1, 1));
       e01 = (c1.IsNotLike(c5)) ? (c0) : (sPixel.Interpolate(c0, c1, c5, 6, 1, 1));
     }
     break;
     case 126: {
       e00 = c0;
       e11 = c0;
       e10 = (c7.IsNotLike(c3)) ? (c0) : (sPixel.Interpolate(c0, c3, c7, 2, 1, 1));
       e01 = (c1.IsNotLike(c5)) ? (c0) : (sPixel.Interpolate(c0, c1, c5, 2, 1, 1));
     }
     break;
     case 127: {
       e11 = c4;
       e10 = (c7.IsNotLike(c3)) ? (c4) : (sPixel.Interpolate(c4, c3, c7, 2, 1, 1));
       e00 = (c1.IsNotLike(c3)) ? (c4) : (sPixel.Interpolate(c4, c1, c3, 14, 1, 1));
       e01 = (c1.IsNotLike(c5)) ? (c4) : (sPixel.Interpolate(c4, c1, c5, 2, 1, 1));
     }
     break;
     case 146:
     case 150:
     case 178:
     case 182:
     case 190: {
       e00 = c0;
       e10 = c0;
       if (c1.IsNotLike(c5)) {
         e01 = c0;
         e11 = c0;
       } else {
         e01 = sPixel.Interpolate(c1, c5, c0, 3, 3, 2);
         e11 = sPixel.Interpolate(c0, c5, 3, 1);
       }
     }
     break;
     case 147:
     case 179: {
       e00 = c2;
       e10 = c2;
       e11 = c2;
       e01 = (c1.IsNotLike(c5)) ? (c2) : (sPixel.Interpolate(c2, c1, c5, 6, 1, 1));
     }
     break;
     case 151:
     case 183: {
       e00 = c3;
       e10 = c3;
       e11 = c3;
       e01 = (c1.IsNotLike(c5)) ? (c3) : (sPixel.Interpolate(c3, c1, c5, 14, 1, 1));
     }
     break;
     case 158: {
       e10 = c0;
       e11 = c0;
       e00 = (c1.IsNotLike(c3)) ? (c0) : (sPixel.Interpolate(c0, c1, c3, 6, 1, 1));
       e01 = (c1.IsNotLike(c5)) ? (c0) : (sPixel.Interpolate(c0, c1, c5, 2, 1, 1));
     }
     break;
     case 159: {
       e10 = c4;
       e11 = c4;
       e00 = (c1.IsNotLike(c3)) ? (c4) : (sPixel.Interpolate(c4, c1, c3, 2, 1, 1));
       e01 = (c1.IsNotLike(c5)) ? (c4) : (sPixel.Interpolate(c4, c1, c5, 14, 1, 1));
     }
     break;
     case 191: {
       e10 = c4;
       e11 = c4;
       e00 = (c1.IsNotLike(c3)) ? (c4) : (sPixel.Interpolate(c4, c1, c3, 14, 1, 1));
       e01 = (c1.IsNotLike(c5)) ? (c4) : (sPixel.Interpolate(c4, c1, c5, 14, 1, 1));
     }
     break;
     case 200:
     case 204:
     case 232:
     case 236:
     case 238: {
       e00 = c0;
       e01 = c0;
       if (c7.IsNotLike(c3)) {
         e10 = c0;
         e11 = c0;
       } else {
         e10 = sPixel.Interpolate(c3, c7, c0, 3, 3, 2);
         e11 = sPixel.Interpolate(c0, c7, 3, 1);
       }
     }
     break;
     case 201:
     case 205: {
       e00 = c1;
       e01 = c1;
       e11 = c1;
       e10 = (c7.IsNotLike(c3)) ? (c1) : (sPixel.Interpolate(c1, c3, c7, 6, 1, 1));
     }
     break;
     case 211: {
       e00 = c2;
       e01 = c2;
       e10 = c2;
       e11 = (c7.IsNotLike(c5)) ? (c2) : (sPixel.Interpolate(c2, c5, c7, 2, 1, 1));
     }
     break;
     case 215: {
       e00 = c3;
       e10 = c3;
       e11 = (c7.IsNotLike(c5)) ? (c3) : (sPixel.Interpolate(c3, c5, c7, 2, 1, 1));
       e01 = (c1.IsNotLike(c5)) ? (c3) : (sPixel.Interpolate(c3, c1, c5, 14, 1, 1));
     }
     break;
     case 218: {
       e10 = (c7.IsNotLike(c3)) ? (c0) : (sPixel.Interpolate(c0, c3, c7, 6, 1, 1));
       e11 = (c7.IsNotLike(c5)) ? (c0) : (sPixel.Interpolate(c0, c5, c7, 2, 1, 1));
       e00 = (c1.IsNotLike(c3)) ? (c0) : (sPixel.Interpolate(c0, c1, c3, 6, 1, 1));
       e01 = (c1.IsNotLike(c5)) ? (c0) : (sPixel.Interpolate(c0, c1, c5, 6, 1, 1));
     }
     break;
     case 219: {
       e01 = c2;
       e10 = c2;
       e11 = (c7.IsNotLike(c5)) ? (c2) : (sPixel.Interpolate(c2, c5, c7, 2, 1, 1));
       e00 = (c1.IsNotLike(c3)) ? (c2) : (sPixel.Interpolate(c2, c1, c3, 2, 1, 1));
     }
     break;
     case 220: {
       e00 = c0;
       e01 = c0;
       e10 = (c7.IsNotLike(c3)) ? (c0) : (sPixel.Interpolate(c0, c3, c7, 6, 1, 1));
       e11 = (c7.IsNotLike(c5)) ? (c0) : (sPixel.Interpolate(c0, c5, c7, 2, 1, 1));
     }
     break;
     case 223: {
       e10 = c4;
       e11 = (c7.IsNotLike(c5)) ? (c4) : (sPixel.Interpolate(c4, c5, c7, 2, 1, 1));
       e00 = (c1.IsNotLike(c3)) ? (c4) : (sPixel.Interpolate(c4, c1, c3, 2, 1, 1));
       e01 = (c1.IsNotLike(c5)) ? (c4) : (sPixel.Interpolate(c4, c1, c5, 14, 1, 1));
     }
     break;
     case 233:
     case 237: {
       e00 = c1;
       e01 = c1;
       e11 = c1;
       e10 = (c7.IsNotLike(c3)) ? (c1) : (sPixel.Interpolate(c1, c3, c7, 14, 1, 1));
     }
     break;
     case 234: {
       e01 = c0;
       e11 = c0;
       e10 = (c7.IsNotLike(c3)) ? (c0) : (sPixel.Interpolate(c0, c3, c7, 2, 1, 1));
       e00 = (c1.IsNotLike(c3)) ? (c0) : (sPixel.Interpolate(c0, c1, c3, 6, 1, 1));
     }
     break;
     case 235: {
       e01 = c2;
       e11 = c2;
       e10 = (c7.IsNotLike(c3)) ? (c2) : (sPixel.Interpolate(c2, c3, c7, 14, 1, 1));
       e00 = (c1.IsNotLike(c3)) ? (c2) : (sPixel.Interpolate(c2, c1, c3, 2, 1, 1));
     }
     break;
     case 239: {
       e01 = c4;
       e11 = c4;
       e10 = (c7.IsNotLike(c3)) ? (c4) : (sPixel.Interpolate(c4, c3, c7, 14, 1, 1));
       e00 = (c1.IsNotLike(c3)) ? (c4) : (sPixel.Interpolate(c4, c1, c3, 14, 1, 1));
     }
     break;
     case 242: {
       e00 = c0;
       e10 = c0;
       e11 = (c7.IsNotLike(c5)) ? (c0) : (sPixel.Interpolate(c0, c5, c7, 2, 1, 1));
       e01 = (c1.IsNotLike(c5)) ? (c0) : (sPixel.Interpolate(c0, c1, c5, 6, 1, 1));
     }
     break;
     case 243: {
       e00 = c2;
       e01 = c2;
       if (c7.IsNotLike(c5)) {
         e10 = c2;
         e11 = c2;
       } else {
         e10 = sPixel.Interpolate(c2, c7, 3, 1);
         e11 = sPixel.Interpolate(c5, c7, c2, 3, 3, 2);
       }
     }
     break;
     case 244: {
       e00 = c0;
       e01 = c0;
       e10 = c0;
       e11 = (c7.IsNotLike(c5)) ? (c0) : (sPixel.Interpolate(c0, c5, c7, 14, 1, 1));
     }
     break;
     case 245: {
       e00 = c1;
       e01 = c1;
       e10 = c1;
       e11 = (c7.IsNotLike(c5)) ? (c1) : (sPixel.Interpolate(c1, c5, c7, 14, 1, 1));
     }
     break;
     case 246: {
       e00 = c0;
       e10 = c0;
       e11 = (c7.IsNotLike(c5)) ? (c0) : (sPixel.Interpolate(c0, c5, c7, 14, 1, 1));
       e01 = (c1.IsNotLike(c5)) ? (c0) : (sPixel.Interpolate(c0, c1, c5, 2, 1, 1));
     }
     break;
     case 247: {
       e00 = c3;
       e10 = c3;
       e11 = (c7.IsNotLike(c5)) ? (c3) : (sPixel.Interpolate(c3, c5, c7, 14, 1, 1));
       e01 = (c1.IsNotLike(c5)) ? (c3) : (sPixel.Interpolate(c3, c1, c5, 14, 1, 1));
     }
     break;
     case 249: {
       e00 = c1;
       e01 = c1;
       e10 = (c7.IsNotLike(c3)) ? (c1) : (sPixel.Interpolate(c1, c3, c7, 14, 1, 1));
       e11 = (c7.IsNotLike(c5)) ? (c1) : (sPixel.Interpolate(c1, c5, c7, 2, 1, 1));
     }
     break;
     case 251: {
       e01 = c2;
       e10 = (c7.IsNotLike(c3)) ? (c2) : (sPixel.Interpolate(c2, c3, c7, 14, 1, 1));
       e11 = (c7.IsNotLike(c5)) ? (c2) : (sPixel.Interpolate(c2, c5, c7, 2, 1, 1));
       e00 = (c1.IsNotLike(c3)) ? (c2) : (sPixel.Interpolate(c2, c1, c3, 2, 1, 1));
     }
     break;
     case 252: {
       e00 = c0;
       e01 = c0;
       e10 = (c7.IsNotLike(c3)) ? (c0) : (sPixel.Interpolate(c0, c3, c7, 2, 1, 1));
       e11 = (c7.IsNotLike(c5)) ? (c0) : (sPixel.Interpolate(c0, c5, c7, 14, 1, 1));
     }
     break;
     case 253: {
       e00 = c1;
       e01 = c1;
       e10 = (c7.IsNotLike(c3)) ? (c1) : (sPixel.Interpolate(c1, c3, c7, 14, 1, 1));
       e11 = (c7.IsNotLike(c5)) ? (c1) : (sPixel.Interpolate(c1, c5, c7, 14, 1, 1));
     }
     break;
     case 254: {
       e00 = c0;
       e10 = (c7.IsNotLike(c3)) ? (c0) : (sPixel.Interpolate(c0, c3, c7, 2, 1, 1));
       e11 = (c7.IsNotLike(c5)) ? (c0) : (sPixel.Interpolate(c0, c5, c7, 14, 1, 1));
       e01 = (c1.IsNotLike(c5)) ? (c0) : (sPixel.Interpolate(c0, c1, c5, 2, 1, 1));
     }
     break;
     case 255: {
       e10 = (c7.IsNotLike(c3)) ? (c4) : (sPixel.Interpolate(c4, c3, c7, 14, 1, 1));
       e11 = (c7.IsNotLike(c5)) ? (c4) : (sPixel.Interpolate(c4, c5, c7, 14, 1, 1));
       e00 = (c1.IsNotLike(c3)) ? (c4) : (sPixel.Interpolate(c4, c1, c3, 14, 1, 1));
       e01 = (c1.IsNotLike(c5)) ? (c4) : (sPixel.Interpolate(c4, c1, c5, 14, 1, 1));
     }
     break;
     #endregion
   }
   worker.TargetP0P0(e00);
   worker.TargetP1P0(e01);
   worker.TargetP0P1(e10);
   worker.TargetP1P1(e11);
 }
Beispiel #57
0
    /// <summary>
    /// Kreed's SuperSaI
    /// </summary>
    public static void SuperSaI(PixelWorker<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);
    }
Beispiel #58
0
 /// <summary>
 /// MAME's AdvInterp2x, very similar to Scale2x but uses interpolation, modified by Hawkynt to support thresholds
 /// </summary>
 public static void AdvInterp2x(PixelWorker<sPixel> worker) {
   var c1 = worker.SourceP0M1();
   var c3 = worker.SourceM1P0();
   var c4 = worker.SourceP0P0();
   var c5 = worker.SourceP1P0();
   var c7 = worker.SourceP0P1();
   sPixel e01, e10, e11;
   var e00 = e01 = e10 = e11 = c4;
   if (c1.IsNotLike(c7) && c3.IsNotLike(c5)) {
     if (c3.IsLike(c1))
       e00 = sPixel.Interpolate(sPixel.Interpolate(c1, c3), c4, 5, 3);
     if (c5.IsLike(c1))
       e01 = sPixel.Interpolate(sPixel.Interpolate(c1, c5), c4, 5, 3);
     if (c3.IsLike(c7))
       e10 = sPixel.Interpolate(sPixel.Interpolate(c7, c3), c4, 5, 3);
     if (c5.IsLike(c7))
       e11 = sPixel.Interpolate(sPixel.Interpolate(c7, c5), c4, 5, 3);
   }
   worker.TargetP0P0(e00);
   worker.TargetP1P0(e01);
   worker.TargetP0P1(e10);
   worker.TargetP1P1(e11);
 }
Beispiel #59
0
        /// <summary>
        /// SNES9x's EPXB modified by Hawkynt to support thresholds
        /// </summary>
        public static void EpxB(PixelWorker <sPixel> worker)
        {
            var    c0 = worker.SourceM1M1();
            var    c1 = worker.SourceP0M1();
            var    c2 = worker.SourceP1M1();
            var    c3 = worker.SourceM1P0();
            var    c4 = worker.SourceP0P0();
            var    c5 = worker.SourceP1P0();
            var    c6 = worker.SourceM1P1();
            var    c7 = worker.SourceP0P1();
            var    c8 = worker.SourceP1P1();
            sPixel e01, e10, e11;
            var    e00 = e01 = e10 = e11 = c4;

            if (
                c3.IsNotLike(c5) &&
                c1.IsNotLike(c7) && ( // diagonal
                    (
                        c4.IsLike(c3) ||
                        c4.IsLike(c7) ||
                        c4.IsLike(c5) ||
                        c4.IsLike(c1) || ( // edge smoothing
                            (
                                c0.IsNotLike(c8) ||
                                c4.IsLike(c6) ||
                                c4.IsLike(c2)
                            ) && (
                                c6.IsNotLike(c2) ||
                                c4.IsLike(c0) ||
                                c4.IsLike(c8)
                                )
                            )
                    )
                    )
                )
            {
                if (
                    c1.IsLike(c3) && (
                        c4.IsNotLike(c0) ||
                        c4.IsNotLike(c8) ||
                        c1.IsNotLike(c2) ||
                        c3.IsNotLike(c6)
                        )
                    )
                {
                    e00 = sPixel.Interpolate(c1, c3);
                }
                if (
                    c5.IsLike(c1) && (
                        c4.IsNotLike(c2) ||
                        c4.IsNotLike(c6) ||
                        c5.IsNotLike(c8) ||
                        c1.IsNotLike(c0)
                        )
                    )
                {
                    e01 = sPixel.Interpolate(c5, c1);
                }
                if (
                    c3.IsLike(c7) && (
                        c4.IsNotLike(c6) ||
                        c4.IsNotLike(c2) ||
                        c3.IsNotLike(c0) ||
                        c7.IsNotLike(c8)
                        )
                    )
                {
                    e10 = sPixel.Interpolate(c3, c7);
                }
                if (
                    c7.IsLike(c5) && (
                        c4.IsNotLike(c8) ||
                        c4.IsNotLike(c0) ||
                        c7.IsNotLike(c6) ||
                        c5.IsNotLike(c2)
                        )
                    )
                {
                    e11 = sPixel.Interpolate(c7, c5);
                }
            }

            worker.TargetP0P0(e00);
            worker.TargetP1P0(e01);
            worker.TargetP0P1(e10);
            worker.TargetP1P1(e11);
        }