您的位置:首页 > 其它

文件处理

2015-12-13 15:44 190 查看
除了部分已有封装库的文件格式,在操作文件时最好根据文件的结构,将字节流对应到字符中或者像素中.

常见图像文件:

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: