C# 在透明控件上调用drawtobitmap()

C# 在透明控件上调用drawtobitmap(),c#,winforms,imaging,C#,Winforms,Imaging,我有一个透明/不透明的表单,我希望利用它来“解释”在透明表单下面的程序中发生了什么 为了评估正在发生的事情,我需要drawtobitmap返回控件在屏幕上的实际外观,并具有透明度,但它只是捕获表单的实体版本-基本上是没有设置不透明值时的外观 我是否可以使用一些OnPaint override技巧来解决这个问题,或者我必须使用graphics.copyfromscreen()和相关矩形?正如评论中所建议的,DrawToBitmap()只会绘制窗口本身。 在这种情况下无法看到透明度/不透明度。 另

我有一个透明/不透明的表单,我希望利用它来“解释”在透明表单下面的程序中发生了什么

为了评估正在发生的事情,我需要drawtobitmap返回控件在屏幕上的实际外观,并具有透明度,但它只是捕获表单的实体版本-基本上是没有设置不透明值时的外观


我是否可以使用一些OnPaint override技巧来解决这个问题,或者我必须使用graphics.copyfromscreen()和相关矩形?

正如评论中所建议的,
DrawToBitmap()
只会绘制窗口本身。
在这种情况下无法看到透明度/不透明度。


另一方面,
Graphics.CopyFromScreen()
将复制当前图形上下文中的所有像素,这样可以使透明度/不透明度可见。

您可以尝试自己发送WM_打印消息(p/invoke
SendMessage()
),提供引用您自己位图的
HDC
。然后,您可以将位图初始化为透明(所有像素alpha为0),而不是获取
DrawToBitmap()
开头的任何内容。您要求窗口自行绘制,以便只获取窗口的外观,而不是下面可见的所有其他窗口的外观。当然,您需要CopyFromScreen()来捕捉所有像素。