Windows Forms Скриншот всего экрана, кроме окна вызова? - PullRequest
2 голосов
/ 16 февраля 2010

Просто чтобы принять вызов, я решил написать приложение, чтобы увеличить только определенный участок экрана (под мышкой, следуя за мышью). Лучший способ сделать это - сделать снимок экрана под формой, увеличить его и нарисовать на форме. Я использую этот раздел кода, чтобы привязать картинку внутри таймера:

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) в окне, но ничто не понижает мерцание до приемлемого уровня. Есть мысли?

1 Ответ

0 голосов
/ 16 февраля 2010

Я бы подумал, что вам лучше отображать смещение увеличенного изображения от курсора (например, посмотрите на интерфейс выбора / редактирования текста iPhone) и добавьте некоторую умную обработку краев экрана. Таким образом, вам не нужно постоянно менять прозрачность, вы просто обновляете изображение и / или размещаете форму.

...