C# 在窗口上绘制图像
我有一个windows窗体窗口,它被另一个进程绘制在它的顶部。如果我尝试使用C# 在窗口上绘制图像,c#,windows,windows-7,directx,C#,Windows,Windows 7,Directx,我有一个windows窗体窗口,它被另一个进程绘制在它的顶部。如果我尝试使用PrintWindow或设备上下文复制来复制窗口图像,则仅显示下面的窗口: 通过另一个过程绘制之前的窗口: 油漆后的窗户: 执行PrintWindow或BitBlt时得到的窗口: 是否可以直接从窗口读取窗口绘图,而不发送绘制参数?我可以直接从图形卡中读取它吗?如果我的回答正确,您想复制通过某些DirectX过程渲染的窗口吗 您可以这样做,但您需要了解,您不能直接从窗口复制内存,因为winows窗体并没有您的图像,它
PrintWindow
或设备上下文复制来复制窗口图像,则仅显示下面的窗口:
通过另一个过程绘制之前的窗口:
油漆后的窗户:
执行PrintWindow
或BitBlt时得到的窗口:
是否可以直接从窗口读取窗口绘图,而不发送绘制参数?我可以直接从图形卡中读取它吗?如果我的回答正确,您想复制通过某些DirectX过程渲染的窗口吗 您可以这样做,但您需要了解,您不能直接从窗口复制内存,因为winows窗体并没有您的图像,它只有一个用于渲染图像的占位符。 这只是一种融合,图像是在形式内呈现的。 你们需要做的是从显卡上拷贝内存,但不幸的是我不知道怎么做 最简单的方法是获得像alt+print屏幕一样的窗口截图,删除边框并将该图像复制到窗口中 也许会有帮助德米特里是对的。
您只能按照他的建议从屏幕复制:
您可以修改源代码以创建与窗口一样大的位图,并仅复制屏幕的该部分。DirectX违反规则,无法使
PrintWindow()
正常工作。使用Graphics.CopyFromScreen()
也不起作用,它有一个严重的错误,阻止您传递正确的CopyPixelOperation值。一个在Windows8中由Windows本身解决的问题,你还不能依赖它
您需要回退到
BitBlt()
。关键选项是CopyPixelOperation.CaptureBlt
,以便在副本中包含视频覆盖。您将在中找到所需的代码。是否要制作屏幕截图?您必须显示一些代码。你所说的…是什么意思?是用另一种方法在上面画的。如果我尝试复制窗口图像,在哪里?您可以使用CopyFromScreen
方法抓取屏幕:我认为问题在于,在每帧窗口被清除和重新绘制,并且在清除后和绘制前打印,请尝试在不同的位置调用PrintWindow。