【问题标题】:Windows Forms Screenshot of whole screen, except the calling window?Windows Forms 整个屏幕的屏幕截图,除了调用窗口?
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

    • 我最终可能会朝那个方向发展...我想看看我能找到什么解决方案来解决这个问题,然后再继续并让这个问题悬而未决。 (不过我想得越多,它发生的可能性就越大)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-14
    • 2012-07-02
    相关资源
    最近更新 更多