首先
下面是獲得圖片調色板數據的方法(感謝飄飄白雲的代碼)
/**
* 修改png圖片的調色板數據生成新的png圖片
* @param imageSrc png圖片的二進制數據字節數組
* @return 修改後的png圖片
*/
public Image getPLTEModifidImage(byte[] imageSrc)
{
if (imageSrc == null || imageSrc
return null;
if (crcTable == null)
makeCrcTable();
// PLTE chunk數據域的類型標識
// see #
String[] sPLTE = {
int i
int pos =
byte[] data = imageSrc;
for (i =
{
if (Integer
&& Integer
&& Integer
&& Integer
{
pos = i;
break;
}
}
pos
startPos = pos;
// 取得PLTE chunk數據域的數據長度()
int imageNbColors = (
((data[pos] <<
| ((data[pos +
| ((data[pos +
| ((data[pos +
// 計算的PLTE chunk數據個數(每個PLTE chunk數據由R
imageNbColors = imageNbColors/
// 為整形的PLTE chunk data分配空間
int imageRGBColors[] = new int[ imageNbColors ];
//
// for( i = pos
// if( j >=
// println(
// }
// System
// }
pos +=
// println(
if (imageRGBColors == null)
return null;
// 生成整形的PLTE chunk data
for( i =
{
imageRGBColors[i] = (
(data[pos +
| ((data[pos +
| ((data[pos +
pos +=
}
// 修改 PLTE chunk data
int l
// gray
for (j =
r = imageRGBColors[j];
g = (r &
b = r &
r = (r &
l = (b + g *
imageRGBColors[j] = l <<
}
break;
// 生成新的 PLTE chunk data
pos = startPos +
for( i =
{
data[pos ] = (byte)((imageRGBColors[i] >>
data[pos +
data[pos +
pos +=
}
// 更新 CRC 校驗碼
int crc = updateCrcChunk( data
data[pos +
data[pos +
data[pos +
data[pos +
pos = startPos;
return Image
}
其實這個方法只能簡單得修改圖片顏色
歡迎大家繼續探討
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19464.html