首先,我們?nèi)〉胮ng圖片的二進(jìn)制數(shù)據(jù),修改其中的調(diào)色板域(PLTE chunk)數(shù)據(jù),再使用createImage(byte[] imageData,int imageOffset,int imageLength)將修改后的二進(jìn)制數(shù)據(jù)生成新的png對(duì)象。(換色是基于對(duì)圖像格式的熟悉來進(jìn)行的,所以你必須先了解PNG圖片的格式,這個(gè)可以參考http://www.w3.org/TR/PNG/)
下面是獲得圖片調(diào)色板數(shù)據(jù)的方法(感謝飄飄白云的代碼)
/**
* 修改png圖片的調(diào)色板數(shù)據(jù)生成新的png圖片
* @param imageSrc png圖片的二進(jìn)制數(shù)據(jù)字節(jié)數(shù)組
* @return 修改后的png圖片
*/
public Image getPLTEModifidImage(byte[] imageSrc)
{
if (imageSrc == null imageSrc.length <= 1)
return null;
if (crcTable == null)
makeCrcTable();
// PLTE chunk數(shù)據(jù)域的類型標(biāo)識(shí)
// 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;
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注