将图片转化为比特流C语言,C++二进制流怎么用

满意答案

02ae427d08e371d7e90d5b995e828d6d.png

shirleyrae

2013.08.25

02ae427d08e371d7e90d5b995e828d6d.png

采纳率:45%    等级:11

已帮助:11337人

你的问题属于多媒体开发中的基本问题,在本科院校计算机学院的《多媒体技术》这门课中都有相应的解答,并有国外经典教材的中译本,这些可以上网查找。

具体到你的问题,其实三个问题都是对于多媒体文件格式及其解析的困惑。

首先,所有多媒体文件都是有标准格式的,这些格式是由各种国际组织制定颁布,全球统一的。比如各种图像格式,一般会在文件的前几十个字节中直接用二进制数值标明图像的格式、图像的大小、图像的分辨率等属性,接下来大量的二进制字节都是图像具体数据。这就是文件的内部结构,音频和视频文件同理。所以这种结构是存在的,但不同于程序语言的结构体这种用高级语言定义的结构,而是纯粹的二进制数据,只不过我们规定了文件头部的这些二进制数值的含义,而这些都是由国际组织规定的。

其次,程序具体怎样解析多媒体文件?我们可以想到的最直接的办法就是我们将多媒体文件本身作为输入流,然后用某种编程语言(如C++)提供的各种二进制处理函数一段一段解析文件,首先解析头(文件的前面几十个字节),从头中得出文件的格式等信息(这个需要参照国际标准,比如文件第二个字节的前四个bit可能表明了文件格式),然后再调用声卡驱动,将你解析得到的格式信息和剩下的二进制流(需要进行一定的处理)作为函数的参数,声卡会根据你提供的格式采用相应的办法把二进制数据转换为声音。所以需要直接处理大量二进制数据的是声卡驱动程序。

但是在具体实现的时候一般不会这么原始,因为有强大的操作系统在,并且各种程序设计语言本身又对各种多媒体操作进行了函数封装。具体而言,windows操作系统封装了声卡驱动提供的函数,然后将封装后的函数作为win api;各种编程语言又对win api进行了封装,再给出自己的多媒体操作函数;而对于以上我提到的解析多媒体文件头部的工作,各种编程语言也都进行了自己的封装,我们只需要调用它们即可。比如,我们可以用输入流打开一个音频文件,然后将流作为参数传递给某函数,从这个函数的返回值我们可以直接得到文件的格式等信息,调用另一个函数,这个函数可能会直接播放文件。而这些函数内部,其实都会调用win api,然后win api再通过操作系统调用声卡驱动,声卡驱动最终解析二进制数据完成发声工作。

最后,关于你的最后一个问题,这很有可能是VC提供的录音函数保存数据的格式与众不同,导致只有VC本身的播放函数才能播放;或者千千和酷我本身无法播放wav格式文件,因为它们不支持这种格式。

如果还有什么疑问,请站内短信。

如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!

Vae团队招人!!!欢迎各位加入!!!走过路过不要错过!!!迅猛发展中!!!

vaela

00分享举报

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值