DIB数据位图
图像的 DIB 数据保存到内存中,byte[] pBuffer
请问一下如何生成位图bmp.
BYTE* pDIBHead, const BYTE* pDIBits
pDIBHead 指向 DIB 头(即 BITMAPINFO*),pDIBits 指向点阵数据
又是如何生成位图..
HRESULT DSStream_GetCurrentDib(int iCardID, BYTE* pBuffer, long* pSize)将当前图像的 DIB 数据保存到内存中。视频流状态为 STOP 时,保存失败。
pBuffer:
指向预先分配的内存。可以为 NULL,此时 pSize 将得到保存图像需要的内存大小。
pSize:
若 pBuffer 不为 NULL,pSize 指示 pBuffer 的大小。为 pBuffer 为 NULL, pSize 得到保存图像需要的内存大小。
HRESULT DSStream_GetVideoStream(int iCardID, VideoStreamProc proc, LPVOID pParam)
启动或停止数据流回调。如果启动数据流回调,每当有一帧新的图像产生时,函数 proc 都将被调用。
proc:
数据流回调函数的函数指针。若 proc 不为 NULL,开始数据流回调;若为 NULL,停止数据流回调。
回调函数的定义为 extern "c" void proc (const BYTE* pDIBHead, const BYTE* pDIBits, LPVOID pParam)。
pDIBHead 指向 DIB 头(即 BITMAPINFO*),pDIBits 指向点阵数据,pParam 是用户在DSStream_GetVideoStream中自定义的参数。
pParam:
用户自定义的参数。每次回调函数 proc 被调用时,pParam 都被传回给用户。
我在C#使用为:
pBuffer:
指向预先分配的内存。可以为 NULL,此时 pSize 将得到保存图像需要的内存大小。
pSize:
若 pBuffer 不为 NULL,pSize 指示 pBuffer 的大小。为 pBuffer 为 NULL, pSize 得到保存图像需要的内存大小。
HRESULT DSStream_GetVideoStream(int iCardID, VideoStreamProc proc, LPVOID pParam)
启动或停止数据流回调。如果启动数据流回调,每当有一帧新的图像产生时,函数 proc 都将被调用。
proc:
数据流回调函数的函数指针。若 proc 不为 NULL,开始数据流回调;若为 NULL,停止数据流回调。
回调函数的定义为 extern "c" void proc (const BYTE* pDIBHead, const BYTE* pDIBits, LPVOID pParam)。
pDIBHead 指向 DIB 头(即 BITMAPINFO*),pDIBits 指向点阵数据,pParam 是用户在DSStream_GetVideoStream中自定义的参数。
pParam:
用户自定义的参数。每次回调函数 proc 被调用时,pParam 都被传回给用户。
我在C#使用为:
/// <summary>
/// 将当前图像的 DIB 数据保存到内存中
/// </summary>
/// <param name="iCardID">指向预先分配的内存,可以为 NULL,
/// 此时 pSize 将得到保存图像需要的内存大小
/// </param>
/// <param name="pBuffer">若 pBuffer 不为 NULL,pSize 指示 pBuffer 的大小
/// 。为 pBuffer 为 NULL, pSize 得到保存图像需要的内存大小</param>
/// <param name="pSize"></param>
/// <returns></returns>
[DllImport("DSStream.dll", EntryPoint = "DSStream_GetCurrentDib")]
public static extern int GetCurrentDib(int iCardID,byte[] pBuffer,out int pSize);
/// <summary>
/// 启动或停止数据流回调
/// </summary>
/// <param name="iCardID"></param>
/// <param name="proc"></param>
/// <param name="pParam"></param>
/// <returns></returns>
[DllImport("DSStream.dll", EntryPoint = "DSStream_GetVideoStream")]
public static extern int GetVideoStream(int iCardID, VideoStreamProc proc,IntPtr pParam);
/// <summary>
/// 回调函数
/// </summary>
/// <param name="pDIBHead"></param>
/// <param name="pDIBits"></param>
/// <param name="pParam"></param>
public delegate void VideoStreamProc(IntPtr pDIBHead, IntPtr pDIBits, IntPtr pParam);
/// 将当前图像的 DIB 数据保存到内存中
/// </summary>
/// <param name="iCardID">指向预先分配的内存,可以为 NULL,
/// 此时 pSize 将得到保存图像需要的内存大小
/// </param>
/// <param name="pBuffer">若 pBuffer 不为 NULL,pSize 指示 pBuffer 的大小
/// 。为 pBuffer 为 NULL, pSize 得到保存图像需要的内存大小</param>
/// <param name="pSize"></param>
/// <returns></returns>
[DllImport("DSStream.dll", EntryPoint = "DSStream_GetCurrentDib")]
public static extern int GetCurrentDib(int iCardID,byte[] pBuffer,out int pSize);
/// <summary>
/// 启动或停止数据流回调
/// </summary>
/// <param name="iCardID"></param>
/// <param name="proc"></param>
/// <param name="pParam"></param>
/// <returns></returns>
[DllImport("DSStream.dll", EntryPoint = "DSStream_GetVideoStream")]
public static extern int GetVideoStream(int iCardID, VideoStreamProc proc,IntPtr pParam);
/// <summary>
/// 回调函数
/// </summary>
/// <param name="pDIBHead"></param>
/// <param name="pDIBits"></param>
/// <param name="pParam"></param>
public delegate void VideoStreamProc(IntPtr pDIBHead, IntPtr pDIBits, IntPtr pParam);
希各位老师们帮我想想办法..谢谢
[ 本帖最后由 baikil 于 2009-12-1 17:28 编辑 ]