修改外部 DLL 中的 C# 位图

Modifying a C# Bitmap in an external DLL

我需要处理由 C# 程序作为 Bitmap 对象提供的图像。该处理是在 C++ DLL 中执行的,它通过

接收从位图创建的 GDI 对象 (HBITMAP) 的句柄
Bitmap.GetHbitmap();

在 C# 和 DLL 之间传递的参数工作正常,并且 GDI 对象具有预期的特征。我可以在 DLL 中读取图像的像素。

无论如何,当我尝试通过 DLL 修改图像时,更改没有反映在 C# 应用程序中,就好像图像是只读的一样。我怀疑必须执行一些操作才能从 GDI 对象转换回 Bitmap 实例,但我在 .NET API.

中看不到任何内容

我知道 LockBits/UnlockBits 机制,如果没有其他方法我可能会使用它,但我目前的要求是只传递一个句柄。

有什么提示吗?

您要查找的是 Image.FromHbitmap() 方法。使用它,您将能够从 HBITMAP 转换为 .NET Bitmap.

Bitmap bmp = Image.FromHbitmap(<HBITMAP pointer here>);