BMP图二进制转换..docVIP

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
BMP图二进制转换.

? ?C#下将BMP转换成二进制是比较容易的,方法如下: Code: byte[]?bufPic;?? string?filePath?=?;?? Stream?myStream;?? MemoryStream?picFile?=?new?MemoryStream();?? ?? OpenFileDialog?open?=?new?OpenFileDialog();?? open.Filter?=?bmp?files?(*.bmp)?|?*.bmp;?? open.RestoreDirectory?=?true;?? ?? if?(open.ShowDialog()?==?DialogResult.OK)?? {?? ????if?((myStream?=?login.OpenFile())?!=?null)?? ????{?? ????????myStream.Close();?? ????}?? }?? ?? filePath?=?open.FileName.ToString();?? Image?image?=?Image.FromFile(filePath);?? image.Save(picFile,?ImageFormat.Bmp);?? bufPic?=?picFile.GetBuffer();?? ?? ? ? ?其实转换的结果是以8位二进制分割的十进制数(0~255),若是真要得到纯二进制,还需要进一步转换。我曾做过很多实验,目的是测试这些数字和图片本身之间的关系,虽然学习过多媒体技术,但是对于详细的bmp分解,并没有太多认识。当然,在实验前还要把“二进制”还原bmp的方法说明一下: Code: ?using?(MemoryStream?ms?=?new?MemoryStream(myPic))?? ?{?? ????????????????????Image?image1?=?Image.FromStream(ms);?? ????????????????????ms.Close();?? ????????????????????pic.Image?=?image1;?? }?? //其中mypic是byte类型,存放二进制的数组,pic是PictureBox控件?? ?? ? ? ?实验1: 人为的变动bufPic数组中的前几个位置,得到的结果都是出错,没能正确的还原回bmp,仔细观察后在发现,几乎所有的bmp转换成的bufPIc的前几个位置都相同,所以得到一个猜测:bmp文件不是单一的由图片的像素组成,还有一些默认的统一的“约定” ?? ? ? ?实验2: 在试验1的基础上挨个尝试,找到变更后能正确还原bmp的位置,由这个位置来确定所谓的“约定”的位数。得到的结论是42个。猜测就是:每个bmp文件都有54个默认的参数。 ?? ? ? ?实验3: 进一步验证参数的个数是否正确。更改54位以后的位置,看看结果对于图片的影响。测试结果如下: ?? ?? 用这个原图片,修改42位以后的若干位,结果是 ?? ? ? 由此看来变动是相当大的,最明显的是由一个黑白图变为了彩色图,所以又有一个猜测:默认的参数不仅仅有54位,还包含一些控制调色板的位。 ?? ? ? ?实验4: ?bufPIc中的每一个数字是否代表了bmp中每一个点的信息?答案当然是否定的,一个32*16的bmp中,有512个点,但bifPic中只有256个,还包括一些默认参数。只能将数字转换成2进制来考虑,这也符合计算机的设计原理。 ?? ? ? ?通过很多测试,最后得出了一些结论,参考了相关的资料并询问了导师,现总结如下: 1. ?位图文件可看成由4个部分组成:位图文件头(bitmap-file header)、位图信息头(bitmap-information header)、彩色表(color table)和定义位图的字节阵列,它具有如下所示的形式。 ? 位图文件的组成 结构名称 符号 位图文件头(bitmap-file header) BITMAPFILEHEADER bmfh 位图信息头(bitmap-information header) BITMAPINFOHEADER bmih 彩色表(color table) RGBQUAD aColors[] 图象数据阵列字节 BYTE aBitmapBits[] ? ? ? 位图文件结构可综合在表1中。 ? 字节 域的名称 大小 内容 图像文件头 0-1 文件标识 2 byte 两字节的内容用来识别位图的类型: ‘BM’?:?Windows 3.1x, 95, NT,?… ‘BA’?:OS/2 Bitmap Array ‘CI’?:OS/2 Color Icon ‘CP’?:OS/2 C

文档评论(0)

dashewan + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档