Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在窗口上绘制图像_C#_Windows_Windows 7_Directx - Fatal编程技术网

C# 在窗口上绘制图像

C# 在窗口上绘制图像,c#,windows,windows-7,directx,C#,Windows,Windows 7,Directx,我有一个windows窗体窗口,它被另一个进程绘制在它的顶部。如果我尝试使用PrintWindow或设备上下文复制来复制窗口图像,则仅显示下面的窗口: 通过另一个过程绘制之前的窗口: 油漆后的窗户: 执行PrintWindow或BitBlt时得到的窗口: 是否可以直接从窗口读取窗口绘图,而不发送绘制参数?我可以直接从图形卡中读取它吗?如果我的回答正确,您想复制通过某些DirectX过程渲染的窗口吗 您可以这样做,但您需要了解,您不能直接从窗口复制内存,因为winows窗体并没有您的图像,它

我有一个windows窗体窗口,它被另一个进程绘制在它的顶部。如果我尝试使用
PrintWindow
或设备上下文复制来复制窗口图像,则仅显示下面的窗口:

通过另一个过程绘制之前的窗口:

油漆后的窗户:

执行
PrintWindow
或BitBlt时得到的窗口:


是否可以直接从窗口读取窗口绘图,而不发送绘制参数?我可以直接从图形卡中读取它吗?

如果我的回答正确,您想复制通过某些DirectX过程渲染的窗口吗

您可以这样做,但您需要了解,您不能直接从窗口复制内存,因为winows窗体并没有您的图像,它只有一个用于渲染图像的占位符。 这只是一种融合,图像是在形式内呈现的。 你们需要做的是从显卡上拷贝内存,但不幸的是我不知道怎么做

最简单的方法是获得像alt+print屏幕一样的窗口截图,删除边框并将该图像复制到窗口中

也许会有帮助

德米特里是对的。
您只能按照他的建议从屏幕复制:


您可以修改源代码以创建与窗口一样大的位图,并仅复制屏幕的该部分。DirectX违反规则,无法使
PrintWindow()
正常工作。使用
Graphics.CopyFromScreen()
也不起作用,它有一个严重的错误,阻止您传递正确的CopyPixelOperation值。一个在Windows8中由Windows本身解决的问题,你还不能依赖它


您需要回退到
BitBlt()
。关键选项是
CopyPixelOperation.CaptureBlt
,以便在副本中包含视频覆盖。您将在中找到所需的代码。

是否要制作屏幕截图?您必须显示一些代码。你所说的…是什么意思?是用另一种方法在上面画的。如果我尝试复制窗口图像,在哪里?您可以使用
CopyFromScreen
方法抓取屏幕:我认为问题在于,在每帧窗口被清除和重新绘制,并且在清除后和绘制前打印,请尝试在不同的位置调用PrintWindow。