如何从 HBITMAP 转换为 .NET 的 Bitmap 类?

Posted

技术标签:

【中文标题】如何从 HBITMAP 转换为 .NET 的 Bitmap 类?【英文标题】:How to convert from HBITMAP to .NET's Bitmap class? 【发布时间】:2008-12-04 18:31:17 【问题描述】:

我正在使用一些使用CreateDIBSection 函数创建位图并返回HBITMAP 句柄的C++ 代码。将此信息导入我的 .NET 程序集的最佳方法是什么?

【问题讨论】:

【参考方案1】:

静态方法Image.FromHbitmap(IntPtr hbitmap) 可能就是您要找的。​​p>

【讨论】:

但是我必须从 C# 中释放位图吗? 是的,你可以调用 Dispose(): using (Bitmap bmp = Image.FromHbitmap(hbitmap)) /* 对位图做一些工作 */ 我发现我需要调用 DeleteObject 来摆脱 gdi 位图。托管位图是一个副本,因此可以安全地立即调用。 [System.Runtime.InteropServices.DllImport("gdi32.dll")] public static extern bool DeleteObject(IntPtr hObject);【参考方案2】:

您是否尝试过为您的位图编组字节数组,将其加载到 MemoryStream 中,然后使用该流构建位图类?

【讨论】:

以上是关于如何从 HBITMAP 转换为 .NET 的 Bitmap 类?的主要内容,如果未能解决你的问题,请参考以下文章

加载 HBITMAP 并将其转换为 OpenGL 纹理

如何通过 Bitmap::GetHBITMAP 将位图转换为带有 alpha 的 HBITMAP?

将位数组转换为 HBITMAP 后 bmBits 的 NULL 指针

来自 HBITMAP 的 QImage

在 C# 中使用本机 HBitmap,同时保留 Alpha 通道/透明度

VC++使用GDI+实现HBITMAP与图片文件之间的相互转换(附源码)