介绍
Wireless Bitmap(WBMP)是一种移动设备使用的图像格式。这种格式被用于Wireless Application Protocol(WAP)网页中。
WBMP只支持1位颜色,即WBMP图像只包含黑色和白色像素。
WBMP格式
WBMP文件开头是"Header" 头部。Header的第一个字节表示图片类型,目前只有0,即非压缩的黑白位图。第二个字节固定为0。
第三个字节开始,分别是图像的宽度和高度。宽度和高度都使用多字节整数格式存储,见下文。
WBMP只支持1位颜色,即WBMP图像只包含黑色和白色像素。
WBMP格式
WBMP文件开头是"Header" 头部。Header的第一个字节表示图片类型,目前只有0,即非压缩的黑白位图。第二个字节固定为0。
第三个字节开始,分别是图像的宽度和高度。宽度和高度都使用多字节整数格式存储,见下文。
紧接着是图像数据,每一个bit表示一个象素:1白,0黑。
一个Wbmp文件结构如图:
多字节整数:一个多字节整数由一个或多个字节构成,每个字节的左边第一位表示后边的字节是否为当前整数的一部分。
如果当前字节的左边第一位为0,表示后面没有更多的字节了,该多字节整数结束;
如果当前字节的左边第一位为1,表示后边的字节也用来构成该多字节整数。
如果当前字节的左边第一位为0,表示后面没有更多的字节了,该多字节整数结束;
如果当前字节的左边第一位为1,表示后边的字节也用来构成该多字节整数。
WBMP图片处理和转换
获取Wbmp图片的宽高,转换为jpeg图片:
public void test() throws Exception { String fileName = "/tmp/WBMP.wbmp"; getWbmpWH(fileName); convertWbmp2Jpeg(fileName, "/tmp/wbmp.jpg"); } // 获取Wbmp图片的宽高 public void getWbmpWH(String wbmpName) throws Exception { File wbmp = new File(wbmpName); byte[] datas = FileUtils.readFileToByteArray(wbmp); byte tmp; int width = 0, height = 0, offset = 2; do { tmp = datas[offset++]; width = (width << 7) | (tmp & 0x7f); } while ((tmp & 0x80) != 0); do { tmp = datas[offset++]; height = (height << 7) | (tmp & 0x7f); } while ((tmp & 0x80) != 0); System.out.println("width:" + width); System.out.println("height:" + height); } // 转换Wbmp图片为jpeg图片 public void convertWbmp2Jpeg(String wbmpName, String jpgName) throws Exception { BufferedImage image = ImageIO.read(new File(wbmpName)); ImageIO.write(image, "JPG", new File(jpgName)); } |
参考
http://blog.csdn.net/openlab/article/details/152688
http://blog.csdn.net/jiajinhao/article/details/6904877