c – 如何从.net位图获取本机GDI位图
发布时间:2020-12-16 05:05:27 所属栏目:百科 来源:网络整理
导读:我想使用Pinvoke技术在本地库中使用.net位图,本机函数具有以下原型, int cropImage( bool aBlocking,Gdiplus::Bitmap *aInputImage,) 我打了下面的pinvoke public extern int cropImage( bool blocking,Intptr bitmap ) 而我这样称呼它 System.Drawing.Bitma
我想使用Pinvoke技术在本地库中使用.net位图,本机函数具有以下原型,
int cropImage( bool aBlocking,Gdiplus::Bitmap *aInputImage,) 我打了下面的pinvoke public extern int cropImage( bool blocking,Intptr bitmap ) 而我这样称呼它 System.Drawing.Bitmap b = new Syste.Drawing.Bitmap("Amour.jpg"); cropImage(true,b.getHitmap()); 但它不起作用,你有什么建议? 解决方法
Gdiplus :: Bitmap是一个C类,它在< GdiPlusHeaders.h>中声明. Windows SDK头文件.它是一个包装类,使相当不友好的低级GDI C接口更容易使用. System.Drawing.Bitmap不是这个C类的直接替代品,它也是围绕低级GDI api的包装类,但是用C#编写.它与C包装器完全没有任何关系.使用从Bitmap.GetHbitmap()获得的HBITMAP也不会工作,这是句柄,而不是C对象.
你不能直接从C#调用这个函数,pinvoke不支持创建C对象.您需要使用C/C++LI语言编写ref类包装器.一种支持编写托管代码和调用本机C代码而不需要pinvoke的语言.你可以#include< gdiplus.h>必要时,您可以创建Gdiplus :: Bitmap对象.另一种方法是使用C创建一个DLL,它有两个导出函数,一个用于创建Gdiplus :: Bitmap,另一个用于销毁它.这将允许您使用pinvoke,将参数声明为IntPtr. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |