JBuilder設計獲取圖片屬性程序
一、 基本概述
圖片的應用越來越深入到我們的日常生活中, 譬如目前盛行的短信業務和初露頭角的彩信業務等。因此,我們很有必要獲取圖片的字節數、格式、色彩數、寬度和高度等信息,以更好地在手機上達到完美的效果,滿足消費者的迫切需要,提高業務的終合競爭力。
二、 圖片相關信息說明
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",獲取圖片的相關信息,是本文的重點所在。詳細代碼如下:
PicsModel.java代碼:
/*****************************************************************
* File name: PicsModel.java
* Create date: 2003-11-18
* Copyright: Copyright (c) 2003 by HEKAI
* @Version: 1.0
* Modify History
* Author Date Description
* hekai 2003-11-18 Create the PicsModel.java
*****************************************************************/
//請用你的相應包名進行替換
package bmptest;
import java.io.Serializable;
public class PicsModel implements Serializable
{
private String picsExtendName = null;
private int picsWidth = 0;
private int picsHeight = 0;
private String picsColor = null;
private String picsSize = null;
public PicsModel()
{
}
public String getpicsExtendName()
{
return picsExtendName;
}
public void setpicsExtendName(String picsExtendName)
{
this.picsExtendName = picsExtendName;
}
public int getpicsWidth()
{
return picsWidth;
}
public void setpicsWidth(int picsWidth)
{
this.picsWidth = picsWidth;
}
public int getpicsHeight()
{
return picsHeight;
}
public void setpicsHeight(int picsHeight)
{
this.picsHeight = picsHeight;
}
public String getpicsColor()
{
return picsColor;
}
public void setpicsColor(String picsColor)
{
this.picsColor = picsColor;
}
public String getpicsSize()
{
return picsSize;
}
public void setpicsSize(String picsSize)
{
this.picsSize = picsSize;
}
}
readpic.java代碼:
/*****************************************************************
* File name: readpic.java
* Create date: 2003-11-18