【发布时间】:2014-06-23 02:34:40
【问题描述】:
为了迎接挑战,我决定编写一个应用程序来仅放大屏幕的特定部分(在鼠标下方,跟随鼠标)。我能想到的最好的方法是截取表格下方的空间,放大并在表格上绘画。我正在使用这部分代码在计时器内拍摄图片:
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... 这会产生闪烁。有没有一种方法可以在不改变不透明度或隐藏/显示表单的情况下获得表单下方的位图?我想要表单下内容的实时图像,而不仅仅是应用程序启动时间的快照。
我不是在寻找其他可以做到这一点的应用程序,我正在研究这个,所以当我解决这些问题时,我可以学习解决方案。我尝试在窗口上使用显示和隐藏、SetVisibleCore(bool) 更改不透明度(到各种级别),但没有将闪烁降低到可接受的水平。有什么想法吗?
【问题讨论】:
标签: c# winforms screenshot