static public Point GetZoomGaze() { ZoomBounds z = zoomBounds; float screenX = z.source.X + (smoothX - z.big.X) / z.zoomFactor; float screenY = z.source.Y + (smoothY - z.big.Y) / z.zoomFactor; return(new Point((int)screenX, (int)screenY)); }
public static void Zoom(bool autoClick = false) { ZoomBounds z = new ZoomBounds(gazeX, gazeY); zoomBounds = z; mainForm.Invoke((Action)(() => { if (zoomForm == null) { zoomForm = new Form(); zoomForm.Text = "Zoom"; zoomForm.FormBorderStyle = FormBorderStyle.None; zoomForm.ShowInTaskbar = false; zoomForm.TopMost = true; //zoomForm.Opacity = 0.7f; //zoomForm.TransparencyKey = Color.Red; zoomForm.FormClosed += OnZoomFormClosed; zoomPicture = new ZoomControl(); zoomPicture.Parent = zoomForm; zoomPicture.Paint += ZoomFormPaint; } zoomForm.Width = z.big.Width; zoomForm.Height = z.big.Height; zoomPicture.Width = z.big.Width; zoomPicture.Height = z.big.Height; zoomForm.Hide(); //lock (bitmapLock) { if (zoomBitmap != null) { zoomBitmap.Dispose(); zoomBackground.Dispose(); } zoomBitmap = new Bitmap(z.source.Width, z.source.Height); zoomBackground = new Bitmap(z.screenW, z.screenH); } zoomForm.Show(); zoomForm.Left = z.big.X; zoomForm.Top = z.big.Y; zoomStopwatch.Restart(); })); state = State.Following; zoomAutoClick = autoClick; }
static void ZoomFormPaint(object sender, System.Windows.Forms.PaintEventArgs e) { ZoomBounds z = zoomBounds; Graphics g = Graphics.FromImage(zoomBitmap); g.Clear(Color.Gray); g.CopyFromScreen(z.source.X, z.source.Y, 0, 0, z.source.Size, CopyPixelOperation.SourceCopy); float bX = (smoothX - z.big.X) / z.zoomFactor; float bY = (smoothY - z.big.Y) / z.zoomFactor; Pen crossPen = zoomHighlight ? Pens.Red : Pens.Black; g.DrawLine(crossPen, bX - 10, bY, bX + 10, bY); g.DrawLine(crossPen, bX, bY - 10, bX, bY + 10); g.Dispose(); // Other interpolation modes can get a very slow without hardware acceleration g = e.Graphics; g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; g.DrawImage(zoomBitmap, 0, 0, z.big.Width, z.big.Height); }