`
312758107
  • 浏览: 11349 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

文件格式与协议之Bmp文件的存储

 
阅读更多
上篇博客我们做了一个bmp读取器,算是对文件协议有了深入一些的了解吧,那么了解之后如何更加灵活的利用这一协议呢?我们可以写第三个小程序,bmp文件的存储器

bmp读取器,是将bmp文件中的内容读取出来,按照一定的规则显示在屏幕上,而bmp存储器正好相反,我们需要把一张图片按照bmp文件协议的形式,写入计算机中,达到保存为bmp文件的目的。我们可以把这项工作分成两部分来做,首先,读取一张bmp文件,并将它存储,相当于“另存为”功能;然后,我们可以在JFrame上画一些图形,将这些图形保存为bmp文件,用电脑的画图板打开,实现自定义图片的存储。

我们先来实现第一部分
将一张读取进来的bmp文件另存为,听来很简单,但实际上还需要我们费些功夫。bmp读取时,我们只需要知道bmp文件中的有用信息,其他不需要的我们可以一概不读!但是在存储时,我们必须把每个字节都写进文件中才行。这就需要我们对bmp协议更加深入的了解,深入到知道每个字节都是干什么的。具体步骤如下:
(1)通过bmp读取器,读到所有有用的字节,做好准备
(2)写入一些“不必要”的字节,如:
0-1字节,读取文件时不需要读,但是写时必须要写
dos.write(0x42);
dos.write(0x4D);

2-5字节,为文件的大小,读取文件时不需要读,但写时必须要写(以后略),由于并无太大影响,可以直接写入0
dos.write(0);
dos.write(0);
dos.write(0);
dos.write(0);


。。。
如此,写下前53个字节,从第54个字节开始,按照从左到右,从下到上,BGR的顺序逐个写入(1)步骤中准备好的数据,即可做到bmp的“另存为”功能


第一部分还是很容易的,我们的挑战主要来自第二部分
如何在画板中画一些图形,并保存成bmp文件的格式呢?
我们自己画的图形,很难得到它的RGB值,而没有RGB值就无法存储bmp文件,怎么办呢?

经过大神的指点,我终于找到了解决办法,那就是Robot().createScreenCapture方法。这是一个截屏的方法,可以对屏幕某一坐标范围内的一定区域进行截屏。得到的文件存储成BufferedImage类的对象,即可解决最难得一步,具体代码如下:
BufferedImage image = new Robot().createScreenCapture(new Rectangle());//传入截屏的范围参数
for(int i=0;i<h;i++){//纵行
for(int j=0;j<w;j++){//横行
color [j][i] = image.getRGB(j, i);
}
}


for(int i=h-1;i>=0;i--){
for(int j=0;j<w;j++){
abc[0]=(byte)color[j][i];
color [j][i] = color[j][i]>>8;
abc[1]=(byte)color[j][i];
color [j][i] = color[j][i]>>8;
abc[2]=(byte)color[j][i];
color [j][i] = color[j][i]>>8;
dos.write(abc[0]);
dos.write(abc[1]);
dos.write(abc[2]);
}
}


如此便可完成最核心的部分了,其他的都很简单了,在此不作详述

经过一番周折,bmp存储器也做好了,接下来我们就可以给我们自制的画图板添加一项新的功能:"存储"。成功后,我们的画图板也将"与国际接轨了"。

经过这三篇博客,对这一星期的学习成果做一个总结,其实最终的认知只有一个:
有了协议,有了规则,我们可以破解任意的文件。

over~~

分享到:
评论

相关推荐

    医学影像DICOM格式转换的研究与实现.pdf

    本研究严格遵循DICOM 3.0标准,采用面向对象的方法,并借助中间文件的方式,设计并实现了一种通用图像/媒体文件(如BMP、TIFF、GIF、JPEG和AVI)格式与DICOM影像格式相互转换的软件。本软件具有结构模块化、灵活性和...

    ImageEn3.02_Full_Source_Include_Libs

    加载和保存压缩和未经压缩的2,16,256或16M颜色到BMP文件中 加载和保存未经压缩的黑/白WBMP(Wireless位图)图像 加载和保存压缩和未经压缩的2,16,256或16M颜色到PCX文件中 加载并储存为2,4,8,16,32,64,128...

    多媒体技术及应用 — 课程学习

     6.1 BMP文件格式  6.2 GIF文件格式  6.3 JPEG格式  6.4 PNG格式  6.5 图像文件后缀一览表  练习与思考题  参考文献和站点 第7章 彩色数字电视基础  7.1 彩色电视制式  7.2 彩色电视信号的类型  7.3 ...

    计算机笔试试题带答案.doc

    19. 图象文件格式:bmp、tif 和 jpg 是图象文件的格式。 20. 视频文件格式:AVI、RM 和 MPEG 是视频文件的格式。 21. 文件管理:在 Windows 操作系统中,改变文件和文件夹的显示方式应选查看菜单。 22. 杀毒软件...

    数字音乐资源库的资源集合方式与途径.pdf

    这些数字信息可以存储在 JPEG 图形文件、GIF、BMP、TIFF 等常见的格式中,也可以存储在 PDF 电子文件格式中。同时,也可以将已转换的文本格式进行编码的转换方式,使其便于检索、复制、粘贴等使用。 第二,数字序列...

    网管教程 从入门到精通软件篇.txt

    BMP:Windows或OS/2位图文件 BOOK:Adobe FrameMaker Book文件 BOX:Lotus Notes的邮箱文件 BPL:Borlard Delph 4打包库 BSP:Quake图形文件 BUN:CakeWalk 声音捆绑文件(一种MIDI程序) C C0l:台风波形文件 ...

    USB接口打印机的单片机控制系统开发

    第三,解析基千 U 盘的 BMP 文件格式及存储规则, 实现 51 单片机对移动存储设备 U 盘内 BMP 格式图片有效数据的提取; 第四,根据对指定喷墨打印机指令集分析和研究,总结原始文档至点阵数据的变换算法; 最后,...

    Matlab读取BMP文件代码-3DReconstructionViaStructuredLight:3DReconstructionViaS

    Matlab读取BMP文件代码使用结构化光源进行3D重建 免责声明该存储库收集在[1]的开发过程中开发的代码。 它没有维护,并且仅出于研究目的而设计。 当时的目标是专注于理论和新思想,因此,此代码并不像您期望的那样被...

    初中信息技术基础练习题.doc

    2.图像文件扩展名有多种,例如 ·BMP、·JPG 等。 3.计算机上常用的 CD-ROM 驱动器是指光盘驱动器。 4.在 Windows 中,用鼠标选定多个不连续文件时,需同时按住 Ctrl 键。 5. PC 机的“Pentium”、“PentiumⅡ”指的...

    20秋东大《计算机应用基础》在线平时作业1.doc

    文件中的西文有"全角"和"半角"之分 答案:C 10.以下哪种不是图像文件格式____。 A.BMP B.JPG C.GIF D.MPG 答案:D 11.所谓计算机"病毒"实质是()。 A.计算机供电不稳定造成的计算机工作不稳定 B.隐藏在计算机中的一段...

    云南省特岗教师招聘初中信息技术教师考试试题二.pdf

    1. 静态图像文件格式有 GIF、BMP、PCX 等,但 MPG 是动态图像文件格式。 2. 代理服务器的作用包括充当局域网和外部网络的连接的出口、临时存储大量网上信息,加快网络访问、对局域网内的用户访问外网权限进行限制等...

    数据可视化智能软件主要性能指标.doc

    N 支持不同格式的多媒体文件,包括支持幻灯片播放,图片显示(BMP、JPG、PNG),GIF 动画文件播放,Flash文件播放,Windows Media Player所支持的全部文件格式。 4) 工业报警 A 支持ISA18.2标准,可以单独设立报警...

    Visual C++程序开发范例宝典(光盘) 第四部分

    5.3 与文件目录相关的命令操作 实例141 删除文件目录 实例142 重命名文件目录 5.4 文件、文件夹的复制和移动 实例143 批量移动文件 实例144 网络文件夹复制 实例145 文件复制过程中显示进度条 5.5 文件修改 ...

    Visual C++程序开发范例宝典(光盘) 第八部分

    5.3 与文件目录相关的命令操作 实例141 删除文件目录 实例142 重命名文件目录 5.4 文件、文件夹的复制和移动 实例143 批量移动文件 实例144 网络文件夹复制 实例145 文件复制过程中显示进度条 5.5 文件修改 ...

    《C语言高级编程与实例剖析》源码

    8.2 BMP图像格式 318 8.3 TC环境下的256色显示 324 8.3.1 VGA的DAC色彩寄存器知识 324 8.3.2 置256色图形模式 324 8.3.3 访问显存 325 8.3.4 显示卡换页 326 8.3.5 硬件无关屏幕初始化 327 8.4...

    vc++ 应用源码包_1

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    vc++ 应用源码包_2

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    vc++ 应用源码包_6

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    vc++ 应用源码包_5

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

Global site tag (gtag.js) - Google Analytics