文件处理

除了部分已有封装库的文件格式,在操作文件时最好根据文件的结构,将字节流对应到字符中或者像素中.

常见图像文件:


BMP即为bitmap.不对图像进行压缩,所以相对较大.

文件由文件头,位图信息头,颜色信息和图形数据组成.


结构体名称 可选 大小 用途 备注
位图文件头14字节存储位图文件通用信息仅在读取文件时有用
DIB头固定(存在7种不同版本)存储位图详细信息及像素格式紧接在位图文件头后
附加位掩码3或4 DWORD(12或16字节)定义像素格式仅在DIB头是BITMAPINFOHEADER时存在
调色板见备注可变定义图像数据(像素数组)所用颜色色深≤ 8时不能省略
填充区A可变结构体对齐位图文件头中像素数组偏移量的产物
像素数组可变定义实际的像素数值像素数据在DIB头和附加位掩码中定义。像素数组中每行均以4字节对齐
填充区B可变结构体对齐DIB头中ICC色彩特性数据偏移量的产物
ICC色彩特性数据可变定义色彩特性可以包含外部文件路径,由该文件来定义色彩特性

文件格式

偏移量 大小 用途
0000h2字节用于标识BMP和DIB文件的魔数,一般为0x42 0x4D,即ASCII的BM。以下为可能的取值:
  • BM – Windows 3.1x, 95, NT, ... etc.
  • BA – OS/2 struct Bitmap Array
  • CI – OS/2 struct Color Icon
  • CP – OS/2 const Color Pointer
  • IC – OS/2 struct Icon
  • PT – OS/2 Pointer
0002h4字节BMP文件的大小(单位为字节)
0006h2字节保留;实际值因创建程序而异
0008h2字节保留;实际值因创建程序而异
000Ah4字节位图数据(像素数组)的地址偏移,也就是起始地址。

文件头格式(14字节)


BM标识2字节

文件大小(字节4字节

保留位2+2字节

像素数组的地址4字节




偏移量 大小 用途
0Eh4该头结构的大小(40字节)
12h4位图宽度,单位为像素(有符号整数)
16h4位图高度,单位为像素(有符号整数)
1Ah2色彩平面数;只有1为有效值
1Ch2每个像素所占位数,即图像的色深。典型值为1、4、8、16、24和32
1Eh4所使用的压缩方法,可取值见下表。
22h4图像大小。指原始位图数据的大小(详见后文),与文件大小不是同一个概念。
26h4图像的横向分辨率,单位为像素每米(有符号整数)
2Ah4图像的纵向分辨率,单位为像素每米(有符号整数)
2Eh4调色板的颜色数,为0时表示颜色数为默认的2色深
32h4重要颜色数,为0时表示所有颜色都是重要的;通常不使用本项

DIB头格式(根据操作系统的不同而不同)(之后基本都是124位


DIB头的大写(40字节


图片长宽像素大小


色彩平面数(为1时才有效/这是做什么鬼用(摔)


每个像素所占的位数


好了.其他的都暂时不是很重要....(其实我这种人读到0x000A(数组开始位置)的时候就已经不想继续了,然后想想好像还有像素宽高和像素所占位置才继续了.

之后就相对简单了,读入流里,读取头信息扔到对应的变量后就可以把头信息截掉,再根据字节和像素的关系直接操作数组就好.

对了,记得老师在用数组的时候好像不喜欢用二维数组,都是 int arr[w * h].

上文中左右的表格来自维基百科,截图来自,咳王老师.


读取txt文件.

public static BufferedReader readTxt (String filePath,String encoding) throws IOException{
		File file = new File(filePath);
		InputStreamReader read = null;
		BufferedReader bReader = null;
		
		try{
			if(file.isFile() && file.exists()){
			read = new InputStreamReader(new FileInputStream(file),encoding);
			bReader = new BufferedReader(read);
			String lineTxt = null;
            while((lineTxt = bReader.readLine()) != null){
                System.out.println(lineTxt);
            }
			} else
				System.out.println("找不到指定文件");
		} catch (IOException e) {
			System.out.println("读取异常");
		} finally{
			read.close();
		}
		
		return bReader;
	}




资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在当今的软件开发领域,自动化构建与发布是提升开发效率和项目质量的关键环节。Jenkins Pipeline作为一种强大的自动化工具,能够有效助力Java项目的快速构建、测试及部署。本文将详细介绍如何利用Jenkins Pipeline实现Java项目的自动化构建与发布。 Jenkins Pipeline简介 Jenkins Pipeline是运行在Jenkins上的一套工作流框架,它将原本分散在单个或多个节点上独立运行的任务串联起来,实现复杂流程的编排与可视化。它是Jenkins 2.X的核心特性之一,推动了Jenkins从持续集成(CI)向持续交付(CD)及DevOps的转变。 创建Pipeline项目 要使用Jenkins Pipeline自动化构建发布Java项目,首先需要创建Pipeline项目。具体步骤如下: 登录Jenkins,点击“新建项”,选择“Pipeline”。 输入项目名称和描述,点击“确定”。 在Pipeline脚本中定义项目字典、发版脚本和预发布脚本。 编写Pipeline脚本 Pipeline脚本是Jenkins Pipeline的核心,用于定义自动化构建和发布的流程。以下是一个简单的Pipeline脚本示例: 在上述脚本中,定义了四个阶段:Checkout、Build、Push package和Deploy/Rollback。每个阶段都可以根据实际需求进行配置和调整。 通过Jenkins Pipeline自动化构建发布Java项目,可以显著提升开发效率和项目质量。借助Pipeline,我们能够轻松实现自动化构建、测试和部署,从而提高项目的整体质量和可靠性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值