能否实现对被当前窗体所遮挡住的屏幕进行截图?

capsclock 2016-10-21 01:40:39
本意是想实现整个窗体工作区的毛玻璃效果,但是查到的方法挨个事了一遍都不好使。
于是脑洞一开,想着把被窗体工作区所遮挡住的部分截个图,再来个高斯模糊,再设置为窗体的背景图片,整一个假透明。
结果卡在了截图部分。
有什么方法能够实现吗?
...全文
378 3 打赏 收藏 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2016-10-21
  • 打赏
  • 举报
回复
也不能说一定就不可以,看你怎么截了
        public Form1()
{
InitializeComponent();
RegionCopy();
}

void RegionCopy()
{
Image objImage = new Bitmap(Width, Height);
Graphics gd = Graphics.FromImage(objImage);
gd.CopyFromScreen(Location, new Point(0, 0), Size);
IntPtr dc1 = gd.GetHdc();
gd.ReleaseHdc(dc1);
this.BackgroundImage = objImage;
}
john_QQ:2335298917 2016-10-21
  • 打赏
  • 举报
回复
这个的确比较难,因为windows的机理就是每个窗口负责自己的绘制。因此,系统可能没有办法获取相应的图像。除非,你得到被遮住窗口的DC,知道了它是怎么画的。
crystal_lz 2016-10-21
  • 打赏
  • 举报
回复
放弃吧 首先你高斯模糊的效率的有多高?你如何做到实时毛玻璃效果?你窗体背后是一张GIF动态图或者视频 你是不是需要实时刷新? 你一帧的图像得有一下步骤 获取桌面背景图 获取桌面所有在你窗体之下的窗体 把获取出来的窗体以及背景图按照z序列叠加一张图像出来 然后高斯模糊 然后设置背景图 你觉得这一个过程需要多少执行时间? 你可以使用BitBlt函数直接从窗体上拷贝目标窗体的图像 但是不是所有窗体都能让你拷贝 比如一些视屏播放器或者游戏 如果系统并没有为目标窗体缓存被挡住部分 你也没有办法 这个看系统的是否有为他缓存 如果能搞 早就有人捣鼓了 尤其是那些搞UI的人

111,128

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧