我是一个相当新的使用p/invoke调用,我想知道是否有人可以指导我如何从hbitmap检索原始像素数据(unsigned char*).
这是我的情景:
我在C#端加载一个.NET Bitmap对象,并将它的IntPtr发送到我的非托管c ++方法.一旦我在C++端收到hbitmap ptr ,我想访问Bitmaps 的像素数据.我已经创建了一个接受unsigned char*的方法,它表示来自c#的原始像素数据但是我发现从c#中提取byte []相当慢.这就是为什么我想发送Bitmap ptr而不是将Bitmap转换为byte []并将其发送到我的C++方法.
用于获取Bitmap IntPtr的C#代码
Bitmap srcBitmap = new Bitmap(m_testImage);
IntPtr hbitmap = srcBitmap.GetHbitmap();
Run Code Online (Sandbox Code Playgroud)
用于导入c ++方法的C#代码
[SuppressUnmanagedCodeSecurityAttribute()]
[DllImport("MyDll.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
public static extern int ResizeImage(IntPtr srcImg);
Run Code Online (Sandbox Code Playgroud)
将接收Hbitmap处理程序的C++方法
int Resize::ResizeImage(unsigned char* srcImg){
//access srcImgs raw pixel data (preferably in unsigned char* format)
//do work with that
return status;
}
Run Code Online (Sandbox Code Playgroud)
问题:
1)由于我发送的是IntPrt,我的C++方法参数可以是unsigned char*吗?
2)如果没有,我如何从c ++访问位图的原始数据?