【发布时间】:2014-03-29 19:31:54
【问题描述】:
我对使用 p/invoke 调用相当陌生,我想知道是否有人可以指导我如何从 hbitmap 中检索原始像素数据(无符号字符 *)。
这是我的场景:
我在 C# 端加载一个 .NET Bitmap 对象,并将它的 IntPtr 发送到我的非托管 c++ 方法。在 C++ 端收到 hbitmap ptr 后,我想访问位图的像素数据。我已经创建了一个接受 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++ 访问位图的原始数据?
【问题讨论】: