| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3186 人关注过本帖
标题:DIB数据位图
取消只看楼主 加入收藏
baikil
Rank: 10Rank: 10Rank: 10
来 自:X星球
等 级:青峰侠
威 望:4
帖 子:282
专家分:1580
注 册:2009-7-20
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:5 
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#使用为:
               /// <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);

希各位老师们帮我想想办法..谢谢

[ 本帖最后由 baikil 于 2009-12-1 17:28 编辑 ]
搜索更多相关主题的帖子: 数据 DIB 位图 
2009-12-01 08:50
baikil
Rank: 10Rank: 10Rank: 10
来 自:X星球
等 级:青峰侠
威 望:4
帖 子:282
专家分:1580
注 册:2009-7-20
收藏
得分:0 
兄弟们再想想别的办法啊,

自创QQ群64885635,方便C#学习交流.希望各项工作路好学都好入!
2009-12-01 17:29
baikil
Rank: 10Rank: 10Rank: 10
来 自:X星球
等 级:青峰侠
威 望:4
帖 子:282
专家分:1580
注 册:2009-7-20
收藏
得分:0 
它只有40位的bitmap头后面全是bitmap数据,使用memorystream来构造不出来的.

自创QQ群64885635,方便C#学习交流.希望各项工作路好学都好入!
2009-12-02 11:38
baikil
Rank: 10Rank: 10Rank: 10
来 自:X星球
等 级:青峰侠
威 望:4
帖 子:282
专家分:1580
注 册:2009-7-20
收藏
得分:0 
我详细分析一下得到的数据,   320*240=76800
          bitmap的数据数    76800*2=153600
            我得到的为    153640-153600=40 40为头文件字节数
这个图片的格式为YUY2 16位,须要2个字节来存储.宽320 高240 像素

自创QQ群64885635,方便C#学习交流.希望各项工作路好学都好入!
2009-12-02 11:49
baikil
Rank: 10Rank: 10Rank: 10
来 自:X星球
等 级:青峰侠
威 望:4
帖 子:282
专家分:1580
注 册:2009-7-20
收藏
得分:0 
头部份资料也找过:基本如下
public struct BITMAPINFOHEADER
{
        /// <summary>
        /// 指定结构的大小,以字节
        /// </summary>
        public ushort biSize;
        /// <summary>
        /// 位图的宽度
        /// </summary>
        public int biWidth;
        /// <summary>
        /// 位图的高度
        /// </summary>
        public int biHeight;
        /// <summary>
        /// 目标的设备数量。该值必须设置为1
        /// </summary>
        public short biPlanes;
        /// <summary>
        /// 每个像素的位数
        /// </summary>
        public short biBitCount;
        /// <summary>
        /// 指定压缩压缩自下而上型图
        /// </summary>
        public short biCompression;
        /// <summary>
        /// 指定的大小,这可能是设置为0
        /// </summary>
        public short biSizeImage;
        /// <summary>
        /// 水平分辨率
        /// </summary>
        public short biXPelsPerMeter;
        /// <summary>
        /// 垂直分辨率
        /// </summary>
        public short biYPelsPerMeter;
        /// <summary>
        /// 指定颜色索引的颜色表的,实际上是由位图的数字
        /// </summary>
        public int biClrUsed;
        /// <summary>
        /// 指定颜色索引数位图的显示要求。如果此值是零,所有颜色是必需的
        /// </summary>
        public int biClrImportant;
}
和我上面分析得到结果一至

自创QQ群64885635,方便C#学习交流.希望各项工作路好学都好入!
2009-12-02 11:55
baikil
Rank: 10Rank: 10Rank: 10
来 自:X星球
等 级:青峰侠
威 望:4
帖 子:282
专家分:1580
注 册:2009-7-20
收藏
得分:0 
bitBitcount可以为16 还可以24这个是看我这的一个数据流的格式调整可以变换的.
但这个知道,我也不知道如何去结构出一个BMP图片来啊.

自创QQ群64885635,方便C#学习交流.希望各项工作路好学都好入!
2009-12-02 16:07
快速回复:DIB数据位图
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024586 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved