Tiff文件解析和PackBits解压缩

实现了Tiff图片文件格式的解析,对Tiff文件中的PackBits压缩格式进行解压缩,对Tiff文件中每一个Frame转换成BufferedImage显示。

Java语言实现,Eclipse下开发,AWT显示图片。

public static TIFF Parse(final byte[] bytes) throws IllegalAccessException {
		BinaryBuffer is = new BinaryBuffer(bytes);
		
		TIFF tiff = new TIFF();
		FileHeader header = new FileHeader();
		header.setByteOrder( is.ReadAsciiString(2));
		
		if (header.getByteOrder().equals("II"))
			is.SetByteOrder(ByteOrder.LITTLE_ENDIAN);
		else if (header.getByteOrder().equals( "MM"))
			is.SetByteOrder(ByteOrder.BIG_ENDIAN);
		else
			throw new java.lang.IllegalAccessException(header.getByteOrder());

		header.setLabel( is.ReadBytes(2));
		header.setOffset( is.ReadUInt32());
		tiff.setHeader(header);
		
		int position = (int) header.getOffset();			
		
		while (position != 0 ) {
			is.SetPosition(position);
			FileDirectory ifd = new FileDirectory();
			ifd.setEntryCount( is.ReadUInt16() );
			
			for (int i=0; i

解析Tiff文件第1个Frame的结构:

Tiff文件解析和PackBits解压缩_第1张图片

PackBits解压缩代码:

	public static byte[] uncompress(byte[] input) {
		ByteArrayOutputStream os = new ByteArrayOutputStream();
		
		int i = 0;
		do {
			byte n = input[i++];
			
			if (n < 0 && n > -128) {
				byte b = input[i++];
				
				for (int j=0; j<-n+1; j++)
					os.write(b);
			}
			else if (n >= 0 && n<=127) {
				int count = n + 1;
				for (int j=0; j

在AWT显示Tiff图像中32个Frame图像,采用GridLayout布局,效果如下

Tiff文件解析和PackBits解压缩_第2张图片

你可能感兴趣的:(ui,Tiff,PackBits)