C#调用C++API后,获得内存地址中的信息。求助高人!分数不够开贴再加
有C++做的dll,描述如下:
C/C++ code
BOOL PlayM4_GetBMP(LONG nPort,PBYTE pBitmap,DWORD nBufSize,DWORD* pBmpSize);
/*说明: 抓取bmp图像
参数: nPort: 通道号
pBitmap: 存放BMP图像数据地址,由用户分配,不得小于bmp图像大小,即sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + w * h * 4, 其中w和h分别为图像宽高。
nBufSize: 申请的缓冲区大小。
pBmpSize: 获取到的实际bmp图像大小。
返回值: TRUE: 获取成功
FALSE: 获取失败 */
这是一个播放器的调用接口,用于抓取播放图像。
我的问题是如何调用此函数,并得到抓取到的bmp图像。
事实上我调用已经“成功”,但是不知道如何从内存中拿到图像,我调用的方法如下
C# code
[DllImport("PlayCtrl.dll")]
private static extern bool PlayM4_GetBMP(Int32 _Port,System.UInt16[] pBitmap,System.UInt32 nBufSize,out Int32 pBmpSize);
各位高人,我调用的方法是否正确,我该怎么做才能得到图像呢?
------解决方案--------------------
System.UInt16[] System.UInt16[] pBitmap应该就是图片。转化为 MemoryStream.
MemoryStream stram = new MemoryStream(pBitmap);
(如果编译器说格式不对,可以转成 byte[],反正都是同一样的东西)
然后用 Image.FromStream(stream) 试试
ps: 不保证正确
------解决方案--------------------http://www.cnblogs.com/over140/archive/2009/03/16/1410262.html
这里肯定有你要的答案。
[DllImport("PlayCtrl.dll")]
private static extern bool PlayM4_GetBMP(Int32 _Port,System.UInt16[] pBitmap,System.UInt32 nBufSize,out Int32 pBmpSize);
农民伯伯帮你弄好这些东西了。
------解决方案--------------------
视频监控