首先,我們取得png圖片的二進制數據,修改其中的調色板域(PLTE chunk)數據,再使用createImage(byte[] imageData,int imageOffset,int imageLength)將修改后的二進制數據生成新的png對象。(換色是基于對圖像格式的熟悉來進行的,所以你必須先了解PNG圖片的格式,這個可以參考http://www.w3.org/TR/PNG/)
下面是獲得圖片調色板數據的方法(感謝飄飄白云的代碼)
/**
* 修改png圖片的調色板數據生成新的png圖片
* @param imageSrc png圖片的二進制數據字節數組
* @return 修改后的png圖片
*/
public Image getPLTEModifidImage(byte[] imageSrc)
{
if (imageSrc == null imageSrc.length <= 1)
return null;
if (crcTable == null)
makeCrcTable();
// PLTE chunk數據域的類型標識
// see http://www.w3.org/TR/PNG/#11PLTE
String[] sPLTE = {"50", "4c", "54", "45"};
int i,j;
int pos = 0,startPos = 0;
byte[] data = imageSrc;
for (i = 0; i < data.length; i++)
{
if (Integer.toHexString(data[i]).equals(sPLTE[0])
&& Integer.toHexString(data[i + 1]).equals(sPLTE[1])
&& Integer.toHexString(data[i + 2]).equals(sPLTE[2])
&& Integer.toHexString(data[i + 3]).equals(sPLTE[3]))
{
pos = i;
break;
}
}
pos -= 4;
startPos = pos;
新聞熱點
疑難解答