private static void drawPixel(bool Left, double i, double j, Color c) { if (c.a > 0) { switch (Graph3d.glass) { case Glass.None: Color back = Graph.getpixel((int)i, (int)j); dest.SetPixel((int)i, (int)j, Color.PutAonB(c, back)); break; case Glass.Anaglyph: Color anaglyph = Left ? Graph3dDraw.AnaglyphLeft(c, (int)j, Graph.bitmap, (int)i) : Graph3dDraw.AnaglyphRight(c, (int)j, Graph.bitmap, (int)i); dest.SetPixel((int)i, (int)j, anaglyph); break; case Glass.TV3D: if (!Left) { if (i < Graph.width) { back = Graph.getpixel((int)(i / 2), (int)j); dest.SetPixel((int)(i / 2), (int)j, Color.PutAonB(c, back)); } } else { if (i >= 0) { back = Graph.getpixel((int)((i + Graph.width) / 2), (int)j); dest.SetPixel((int)((i + Graph.width) / 2), (int)j, Color.PutAonB(c, back)); } } break; } } }
public Bitmap Convert3DToAnaglyph(bool LeftEyeIsLeft) { Bitmap result = new Bitmap(Width / 2, Height); if (LeftEyeIsLeft) { for (int i = 0; i < Width / 2; i++) { for (int j = 0; j < Height; j++) { Color c = GetPixel(i, j); c = Graph3dDraw.AnaglyphLeft(c, j, result, i); result.SetPixel(i, j, c); c = GetPixel(i + Width / 2, j); c = Graph3dDraw.AnaglyphRight(c, j, result, i); result.SetPixel(i, j, c); } } } else { for (int i = 0; i < Width / 2; i++) { for (int j = 0; j < Height; j++) { Color c = GetPixel(i, j); c = Graph3dDraw.AnaglyphRight(c, j, result, i); result.SetPixel(i, j, c); c = GetPixel(i + Width / 2, j); c = Graph3dDraw.AnaglyphLeft(c, j, result, i); result.SetPixel(i, j, c); } } } return(result); }