一、 基本概述
图片的应用越来越深入到我们的日常生活中, 譬如目前盛行的短信业务和初露头角的彩信业务等。
因此,我们很有必要获取图片的字节数、格式、色彩数、宽度和高度等信息,以更好地在手机上达到完美的效果,满足消费者的迫切需要,提高业务的终合竞争力。
二、 图片相关信息说明
1、GIF图片
GIF图片格式标识符为GIF87A/GIF89A两种,但我们一般看到的GIF图片后缀名均为"GIF"。利用UltraEdit软件打开某个GIF图片文件(例如178×42×32 GIF),你将会看到类似如下图(1)的内容(注重要点击那个"H"按钮哟!)。其格式、宽度、高度和色彩数信息位置不变,而且也是连续一起的。其中,蓝色框内的字符集显示图片格式信息,将十六进制的"47"转换为十进制就是"71",即"G"的ASCII码值,其余的依此类推,就将获得"GIF89A",通过这种方式获取图片的格式比直接获取图片的后缀名要可靠的多。因其后缀名用户可随意更改;红色框内每两位分别显示其宽度和高度信息,并从右往左读取,则分别"00B2"和"002A",即十进制为"178"和"42",也就是图片的宽度和高度;绿色部分显示图片的色彩信息,转换十进制之后为"196",然后进行除"8"得余数为"4",最后将其加"1"并作为"2"的幂,最终就是"32",即"2^(196%8+1)=32"。【其它格式图片参上】
图(1)
2、JPG图片
JPG图片格式标识符为"JFIF",而且其信息位置不变。但高度、宽度和色彩数信息位置不太确定,但他们是连续一起的。如下两图(2)[例如761×150×16M JPG]和图(3)[例如1984×1384×16M JPG]所示,并且不止这两种情况。现就图(2)作一些补充说明:红色框内每两位分别显示其高度和宽度信息,并从左往右读取,则分别为"0096"和"02F9",即十进制为"150"和"761",也就是图片的高度和宽度;绿色部分显示图片的色彩信息,转换十进制之后为"03",然后进行乘以"8"得"24",最后将其作为"2"的幂,最终就是"16M",即"2^(3*8+1)=16M"。不过,似乎JPG图片的色彩数一般都是"16M"?!
图(2)
图(3)
注重:为了避免上述多种的情况的发生,从而导致我们处理非常麻烦,本人发现一个小小的技巧。利用Win操作系统自带的画图工具打开"JPG"文件,之后,不需作任何改变,只要保存替换即可。这时一个戏剧性的变化出来了,其高度、宽度和色彩数信息位置都变得跟图(2)类似,即图(4)是由图(3)变化二来的。
图(4)
3、BMP图片
BMP图片格式标识符为"BM",但其格式、宽度、高度和色彩数信息位置不变,但宽度、高度和色彩数信息位置是不连续的。如下图(5)[例如352×288×16M BMP]所示。现就图(5)作一些补充说明:红色框内每两位分别显示其宽度和高度信息,并从右往左读取,则分别为"0160"和"0120",即十进制为"352"和"288",也就是图片的宽度和高度;绿色部分显示图片的色彩信息,转换十进制之后为"24",然后将其作为"2"的幂,最终就是"16M",即"2^(24)=16M"。
图(5)
4、PNG图片
PNG图片格式标识符为"PNG",但其格式、宽度和高度信息位置不变,但宽度和高度信息位置是不连续的。如下图(6)[例如18×16×16M PNG]所示。由于其跟BMP图片非常相似,故不作重复说明。
图(6)
进入讨论组讨论。
三、 源代码及其说明
源代码由两部分组成,即两个文件组成。其一为"PicsModel.java",主要存储图片的相关信息;其二位"readpic.java",获取图片的相关信息,是本文的重点所在。具体代码如下: