首先,我们取得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;
新闻热点
疑难解答