24位真彩BMP格式

BMP文件格式分析有很多,官方的资料已经通通涵盖在那份附件里了。这里具体些两个我遇到的问题...

No.1 BMP文件中低位在前。在读超过两个字节表示的数据时要格外小心一点:比如一个四字节的数据,共32位。这32位是一个整体,不能分成4个8位来看。以下是我的代码:

/**
 * 读取位图文件中的数字型标签
 * @param dins 数据输入流对象
 * @param tagLen 该数字型标签的长度
 * @return 位图文件中的数字型标签。读取异常则返回-1。
 */
private int readFileSize(java.io.DataInputStream dins, int tagLen){
	int fileSize = 0;
	try{
	      byte[][] size = new byte[tagLen][8];
	      //索引0->3,低位->高位。
	   for(int i=0; i<tagLen; i++){
	             byte s = dins.readByte();
	             if(s<0){
		short ss = (short) (s + 256);
		size[i] = myBitSet(ss);
	             }else{
		size[i] = myBitSet(s);
	             }
	             for(int j=0; j<8; j++){
	                  fileSize += size[i][j] * Math.pow(2, (i * 8 + j));
	             }
	      }
	      return fileSize;
	}catch(Exception e){
	      e.printStackTrace();
	      return -1;
	}

 

/**
 * 有一个byte值得到一个byte数组
 * @param b byte型值
 * @return 按索引0->7,低位->高位
 */
private byte[] myBitSet(short b){
              byte[] bs = new byte[8];
              for(int i=0; i<8; i++){
                       bs[i] = (byte) (b%2);
                       b = (byte) (b/2);
              }
              return bs;
}

 No.2 就是关于官方资料中不太明确的比特补满。这里只明确:它是在每一行的末尾如果出现不满足4的倍数时不上几个字节。我做的测试文件中,除四后的余数为3的,只需在每行末尾忽略一个字节;余数为1的...(我是没忽略什么也读过来了);目前还没找到余数为2的...

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值