我需要处理由C#程序提供的图像作为Bitmap
对象。处理在C ++ DLL中执行,该DLL接收从Bitmap创建的GDI对象(HBITMAP
)的句柄,通过
Bitmap.GetHbitmap();
在C#和DLL之间传递的参数工作正常,并且GDI对象具有预期的特征。我可以在DLL中读取图像的像素。
无论如何,当我尝试通过DLL修改图像时,更改不会反映在C#应用程序中,就像图像是只读的一样。我怀疑必须执行某些操作才能从GDI对象转换回Bitmap
实例,但我在.NET API中看不到任何内容。
我知道LockBits/UnlockBits
机制,如果没有别的办法,我可以使用它,但我目前的要求是只传递句柄。
任何提示?
答案 0 :(得分:1)
您正在寻找的是Image.FromHbitmap()
方法。使用它,您将能够从HBITMAP
转换为.NET Bitmap
。
Bitmap bmp = Image.FromHbitmap(<HBITMAP pointer here>);