将HBitmap转换为保留alpha通道的位图

我一直在Google和Stack Overflow中搜索,但我找不到一个有效的例子。

我需要将HBitmap转换为Managed .NET位图,但以下代码不保留alpha通道

private static Bitmap GetBitmapFromHBitmap(IntPtr nativeHBitmap) { Bitmap bmp = Bitmap.FromHbitmap(nativeHBitmap); return bmp; } 

我在SO中找到了这个答案 ,但它对我不起作用,这个例子保留了透明度,但它将我的图像在Y轴上翻转180º并将其旋转180º。 我不知道为什么。

这个其他例子似乎有效,但它是C ++

有人在C#中工作,非常重要,没有内存泄漏?

提前致谢。


编辑 :关于@Hans Passant的评论,我使用以下代码获取HBitmap(它是一个shell调用,用于从操作系统获取缩略图或图标(仅限Vista和Win7)。

  private static IntPtr GetHBitmap(string fileName, int width, int height, ThumbnailOptions options) { IShellItem nativeShellItem; Guid shellItem2Guid = new Guid(IShellItem2Guid); int retCode = SHCreateItemFromParsingName(fileName, IntPtr.Zero, ref shellItem2Guid, out nativeShellItem); NativeSize nativeSize = new NativeSize(); nativeSize.Width = width; nativeSize.Height = height; IntPtr hBitmap; HResult hr = ((IShellItemImageFactory)nativeShellItem).GetImage(nativeSize, options, out hBitmap); Marshal.ReleaseComObject(nativeShellItem); if (hr == HResult.Ok) return hBitmap; throw Marshal.GetExceptionForHR((int) hr); } 

请在转换图像时查看保留Alpha通道 。 看来这是你的情况。