Просто чтобы принять вызов, я решил написать приложение, чтобы увеличить только определенный участок экрана (под мышкой, следуя за мышью). Лучший способ сделать это - сделать снимок экрана под формой, увеличить его и нарисовать на форме. Я использую этот раздел кода, чтобы привязать картинку внутри таймера:
timer1.Stop();
//Reposition window
this.Left = Cursor.Position.X - this.Width / 2;
this.Top = Cursor.Position.Y - this.Height / 2;
//Bitmap to save image to
Bitmap bmpScreenshot = new Bitmap(this.Width, this.Height, PixelFormat.Format32bppArgb);
Graphics gfxScreenshot = Graphics.FromImage(bmpScreenshot);
//Grab section of screen shot
this.Opacity = 0.01;
gfxScreenshot.CopyFromScreen(this.Left, this.Top, 0, 0, this.Size, CopyPixelOperation.SourceCopy);
this.Opacity = 1;
//Save to class level so Paint can paint it
frame = bmpScreenshot;
//Make Double Buffered Panel repaint
dbPanel1.Invalidate();
timer1.Start();
Чтобы получить рабочий стол (или какие-либо окна / содержимое) под формой, я установил непрозрачность на 0,01 (чтобы он по-прежнему можно было щелкать, а щелчок закрывает приложение. Абсолютный 0 не активируется) перед изображение, а затем 1 после создания снимка ... Это создает мерцание. Есть ли способ получить растровое изображение того, что находится под формой, без изменения прозрачности или скрытия / отображения формы? Мне нужно живое изображение того, что находится под формой, а не просто моментальный снимок, когда приложение запускалось.
Я не ищу другие приложения, которые делают это, я работаю над этим, поэтому, когда я подхожу к этим проблемам, я могу найти решение. Я попытался изменить непрозрачность (для всех видов уровней), используя Show и Hide, SetVisibleCore (bool) в окне, но ничто не понижает мерцание до приемлемого уровня. Есть мысли?