相关疑难解决方法(0)

c ++从hbitmap获取原始像素数据

我是一个相当新的使用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 ++访问位图的原始数据?

c# c++ pinvoke bitmap

6
推荐指数
1
解决办法
5092
查看次数

标签 统计

bitmap ×1

c# ×1

c++ ×1

pinvoke ×1