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