我需要在项目中使用LoadImage pinvoke。我需要使用它,以便我得到一个透明的BMP。以下代码工作正常,但需要一个路径。
Dim hbitmap As IntPtr = NativeMethodsEX.LoadImage(Nothing, "C:\Users\username\Desktop\mickey32.bmp", NativeMethodsEX.IMAGE_BITMAP, 0, 0, NativeMethodsEX.LR_LOADFROMFILE Or NativeMethodsEX.LR_CREATEDIBSECTION)
我的问题是我可以做同样的事情,但是我的项目中嵌入了一个文件吗?或者是在某个阶段我将文件复制到文件系统以便在LoadImage方法中使用的唯一方法。
编辑:我想避免的是在文件系统中有一个图像文件,例如可以被用户删除。
编辑 - 我在做什么? 我inserting a menu item into an existing windows hmenu as I indicate in this question of mine.。我想添加一个透明背景的图像。
编辑 - 为什么我不使用.net来获取我的图像?
本论坛中的文档很好,以下内容不起作用。此外,我无法让它发挥作用。
Dim bm As Bitmap = My.Resources.mickey32.bmp
Dim hbitmap As IntPtr = nbm.GetHbitmap
在这个问题下面的评论之后,为什么我不使用.NET,我甚至尝试过以下suggestions which included a format.。仍然没有运气。
Dim bm As Bitmap = My.Resources.mickey32.bmp
Dim bm1 As Bitmap = New Bitmap(bm)
Dim nbm As Bitmap = bm1.Clone(New Rectangle(0, 0, bm1.Width, bm1.Height), Imaging.PixelFormat.Format32bppArgb)
Dim hbitmap As IntPtr = nbm.GetHbitmap
使用PNG进行编辑
此代码使用PNG文件。它加载正常但透明背景变白。
Dim bm As Bitmap = My.Resources.mickey32.png
Dim hbitmap As IntPtr = bm.GetHbitmap
我的解决方案或我最后做了什么
我的主要问题是获得具有透明背景的图像。我认为唯一的方法是使用带有位图图像的LoadImage API。感谢下面的广泛评论,我再次尝试使用.net方法和一个png文件(我错误地认为这不起作用)。我then found this forum question.解决方案是使用它;
hbitmap = bm.GetHbitmap(Color.Black)
现在我正确地显示了它。
在我的搜索中,我还发现this forum answer as well.接受的答案说;
在与GDI(和Win32)进行互操作时,GDI +存在许多与alpha混合相关的问题。在这种情况下,对bmp.GetHbitmap()的调用会将您的图像与黑色背景混合。
我没有测试代码,但至少看起来它也可能是我的解决方案。