修改外部DLL中的C#位图

时间:2016-08-10 00:20:25

标签: c# windows bitmap gdi

我需要处理由C#程序提供的图像作为Bitmap对象。处理在C ++ DLL中执行,该DLL接收从Bitmap创建的GDI对象(HBITMAP)的句柄,通过

Bitmap.GetHbitmap();

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

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

我知道LockBits/UnlockBits机制,如果没有别的办法,我可以使用它,但我目前的要求是只传递句柄。

任何提示?

1 个答案:

答案 0 :(得分:1)

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

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