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

                        ms.Position = 0;
                        ms.Write(buf, 0, (image_rev_W * 3 + 3) / 4 * 4 * image_rev_H  + 54);
                       
                        this.msgform.bmpRec = new Bitmap((Stream)ms);//构造bitmap
                        #endregion

        [DllImport("HHCom_dll.dll")]
        public static extern void HHCOM_getImageRecvd( byte[] pcImage, int iLen);//得到接受到得图像

是需要这个吗?

天涯无岁月,歧路有风尘,百年浑似醉,是非一片云
2009-12-01 13:04
ghl2312
Rank: 4
等 级:业余侠客
威 望:2
帖 子:208
专家分:226
注 册:2008-7-10
收藏
得分:10 
http://,希望这个是你需要的

向灰太狼学习
2009-12-01 16:23
baikil
Rank: 10Rank: 10Rank: 10
来 自:X星球
等 级:青峰侠
威 望:4
帖 子:282
专家分:1580
注 册:2009-7-20
收藏
得分:0 
兄弟们再想想别的办法啊,

自创QQ群64885635,方便C#学习交流.希望各项工作路好学都好入!
2009-12-01 17:29
jedypjd
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:9
帖 子:1096
专家分:4969
注 册:2009-7-27
收藏
得分:0 
有点难啊,我只知道bitmap从memorystream构造的过程,
就是54位的bitmap头(可以看一下bmp的资料)+bmp调色板纯数据==>memorystream,再用bitmap的构造方法,
bitmap的构造方法有好几个重载,有一个是可以从Intptr指向的调色板数据,以及图像的高宽参数直接构造,
DIB数据跟bitmap调色板的数据有啥不一样我不懂啊

天涯无岁月,歧路有风尘,百年浑似醉,是非一片云
2009-12-01 18:50
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
jedypjd
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:9
帖 子:1096
专家分:4969
注 册:2009-7-27
收藏
得分:0 
可以试试自己造一个bitmap头加到buffer数组前面,再用memorystream读buffer,再构造,我曾经这么干过,可以的
找一下bitmap的头结构资料,再用二进制编辑软件打开一个bitmap图,就可以仿造了

天涯无岁月,歧路有风尘,百年浑似醉,是非一片云
2009-12-02 11:48
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
jedypjd
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:9
帖 子:1096
专家分:4969
注 册:2009-7-27
收藏
得分:0 
bitmap调色板纯数据一般是3个字节记录1个像素,也就是一个字节记录RGB的一个,对应bitmap头中的biBitCount=24,也就是8,8,8的存储方式
也有5,6,5的存储方式,2个字节记录1个像素,用二进制软件打开图片看看你的数据是不是5,6,5的方式存的像素

天涯无岁月,歧路有风尘,百年浑似醉,是非一片云
2009-12-02 12:09
快速回复:DIB数据位图
数据加载中...
 
   



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

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