Windows窗体整个屏幕的屏幕截图,除了调用窗口?

时间:2010-02-16 03:52:25

标签: c# winforms screenshot

为了接受挑战,我决定编写一个应用程序来仅放大屏幕的特定部分(鼠标下方,鼠标后面)。我能想到的最好方法是截取表单下的空格,放大并在表单上绘画。我正在使用此部分代码将图片捕捉到计时器中:

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 :(得分:0)

我认为你最好不要在光标上显示放大的图像偏移(例如,查看iPhone文本选择/编辑界面),并为屏幕边缘添加一些智能处理。这样您就不必继续更改不透明度,只需更新表单的图像和/或放置即可。