public static void Run(string[] args) { int[] ra = Range.OfInts(52).ToArray(); string test = "decode.exe options.ini " + string.Join(" ", ra.Select(i => string.Format("picture-{0:000}.bmp", i)).ToArray()); test.ToArray(); string dir = @"C:\Users\ASUS\git\procamtools-v1\Debug"; Thread.Sleep(100); ExCamera xcam = new ExCamera(); Projector proj = new Projector(); var main = OpenTK.DisplayDevice.AvailableDisplays.First(row => row.IsPrimary); var display = new BitmapWindow(main.Bounds.Left + 50, 50, 1280, 960); display.Load(); display.ResizeGraphics(); proj.DrawBackground(Color.White); int c = 0; foreach (var file in Directory.GetFiles(dir, "pattern-*.bmp")) { var map = new Bitmap(Path.Combine(dir, file)); proj.DrawBitmap(map); var pic = xcam.TakePicture(); display.DrawBitmap(pic); var bits = (Bitmap)pic.Clone(new Rectangle(0, 0, pic.Width, pic.Height), PixelFormat.Format32bppRgb); bits.Save(Path.Combine(dir, string.Format("picture-{0:000}.bmp", c++)), ImageFormat.Bmp); } display.Close(); proj.Close(); xcam.Dispose(); }
public static double[] BinarySL(Projector projector, Camera camera, PointF[] corners, Bitmap nolight, Color fullColor, bool vertical) { int[] horizontal = new int[corners.Length]; int max = (int)Math.Floor(Math.Log((vertical ? projector.bitmap.Width : projector.bitmap.Height), 2)) + 1; int subdivisions = 1; var nol = Classifier(nolight); for (var step = 1; step <= max - 4; step++) { projector.DrawBackground(Color.Black); camera.TakePicture(5).Dispose(); projector.DrawBinary(step, vertical, fullColor); var light = camera.TakePicture(2); var classifier = nol(light, step); int idx = 0; Bitmap withCorners = null; foreach (var point in corners) { var hit = classifier(point); var h = horizontal[idx]; h = h << 1; h = h | (hit ? 1 : 0); horizontal[idx] = h; idx++; if (DebugWindow != null) { withCorners = light; QuickDraw.Start(withCorners) .Color(hit ? Color.Gray : Color.White) .DrawPoint(point.X, point.Y, 5) .Finish(); } } if (DebugWindow != null) DebugWindow.DrawBitmap(withCorners); light.Dispose(); subdivisions++; } var result = horizontal.Select(row => ((double)row / Math.Pow(2, max - 4)) * (vertical ? projector.bitmap.Width : projector.bitmap.Height)).ToArray(); using (var bitmap = new Bitmap(projector.bitmap.Width, projector.bitmap.Height)) { using (var fast = new FastBitmap(bitmap)) { for (var x = 0; x < bitmap.Width; x++) for (var y = 0; y < bitmap.Height; y++) if (result.Contains(vertical ? x : y)) fast[x, y] = Color.FromArgb(255, 255, 255, 255); else fast[x, y] = Color.FromArgb(255, 0, 0, 0); } projector.DrawBitmap(bitmap); } return result; }