修改外部 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>);
我需要处理由 C# 程序作为 Bitmap
对象提供的图像。该处理是在 C++ DLL 中执行的,它通过
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>);