我对使用p/invoke调用相当陌生,并且想知道是否有人可以指导我如何从hbitmap中检索原始像素数据(unsigned char *)。C++从hbitmap获取原始像素数据
这是我的情景:
我加载在C#侧.NET位图对象,并发送它的IntPtr到我的非托管C++方法。一旦我在C++侧收到hbitmap ptr,我想访问Bitmaps的像素数据。我已经做了一个方法,接受一个无符号的char *,它表示来自c#的原始像素数据,但是我发现从c#中提取字节[]是相当缓慢的。这就是为什么我想发送Bitmap ptr而不是将Bitmap转换为byte []并将其发送给我的C++方法。
:用于获取位图的IntPtr
Bitmap srcBitmap = new Bitmap(m_testImage);
IntPtr hbitmap = srcBitmap.GetHbitmap();
C#代码用于导入C++方法将接收HBITMAP处理程序
int Resize::ResizeImage(unsigned char* srcImg){
//access srcImgs raw pixel data (preferably in unsigned char* format)
//do work with that
return status;
}
问题
[SuppressUnmanagedCodeSecurityAttribute()]
[DllImport("MyDll.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
public static extern int ResizeImage(IntPtr srcImg);
C++方法C#代码
1)由于我在IntPrt中发送,我的C++方法参数可以是一个unsigned char *吗?
2)如果不是,我如何从C++访问位图的原始数据?
感谢大卫,这正是我发现还!我发布我的代码作为答案,希望可以帮助其他人寻找相同的解决方案。 – Matthew
你当然可以这样做。但它也应该可以生成高效的托管代码。使用不安全和指针。 –