【问题标题】:Modifying a C# Bitmap in an external DLL在外部 DLL 中修改 C# 位图
【发布时间】:2016-12-16 04:29:11
【问题描述】:

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

Bitmap.GetHbitmap();

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

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

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

有什么提示吗?

【问题讨论】:

  • 也许您正在寻找Image.FromHbitmap()
  • @VisualVincent 是的!这是我需要的,它有效。我猜你可以输入这个作为答案。
  • 很高兴听到它成功了!

标签: c# windows bitmap gdi


【解决方案1】:

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

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

【讨论】:

  • 栅格数据确实是重复的,需要复制回来。我本来希望直接访问 .NET 位图的缓冲区,但恐怕这是不可行的。
  • @YvesDaoust :嗯,我不知道有什么方法可以这样做,所以我想没有。
猜你喜欢
  • 2012-08-17
  • 2016-05-19
  • 1970-01-01
  • 1970-01-01
  • 2018-11-26
  • 2020-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多