本人刚接触EMS,还有很多地方不明 这个程序对16*16,32*32,72*14有效,可直接得到要发送的byte[140],40*35还没测试,本着公开源码的精神,献丑了
//victorachc@163.com import java.io.*;
public class preResult{ //pos is the pixel data start postion private int pos; //bitmap's width and height private byte w; private byte h; //bmp is byte[] of the bmp file private byte[] bmp; //result is the byte[] which save the result private byte[] result = new byte[140]; //result[] length private int rlen;
protected preResult(String fn) throws IOException { FileInputStream fin = new FileInputStream(fn); //read bmpdata to byte array bmp int bmplen = fin.available(); bmp = new byte[bmplen]; fin.read(bmp); w=bmp[18]; h=bmp[22]; fin.close(); }
//check if it is 1 bit/pixel public void isValid() throws Exception { if(bmp[28]==1) return; else throw new Exception("pixel is not 1"); }
//check if the bmp length is valid public boolean checkDataLen() throws Exception { int len=(bmp[2]-bmp[10])>=0?(bmp[2]-bmp[10]):(bmp[2]-bmp[10]+256); if (len==(w*h/8)){ return true; } else if(len*3/4==w*h/8){ System.out.println("This is variable bmp!"); return true; } else throw new Exception("length is invalid"); }
public void getHead() throws Exception { if(w==16&&h==16){ result[0]=35; result[1]=17; result[2]=33; result[3]=0; pos=4; rlen=36; return; } else if(w==32&&h==32){ result[0]=-125; result[1]=16; result[2]=-127; result[3]=0; pos=4; rlen=132; return; } else if(((w%8)==0)&&((w*h)<=1024)){ int p=w*h/8+5; result[0]=(byte)((p<=127)?p:(p-256)); result[1]=18; result[2]=(byte)(result[0]-2); result[3]=0; result[4]=(byte)(w/8); result[5]=h;
|