|
|
本帖最后由 czvr 于 2012-3-3 16:11 编辑
private int[] proMinPixels(int newPixel[], int oldPixel[], int width, int height)
{
if(oldPixel == null || newPixel.length != oldPixel.length)
{
realNum = newPixel.length + 6;
buffer = new int[realNum];
buffer[0] = width;
buffer[1] = height;
buffer[4] = width;
buffer[5] = height;
System.arraycopy(newPixel, 0, buffer, 6, newPixel.length);
return buffer;
}
int len = newPixel.length;
int minX = 0x7fffffff;
int minY = 0x7fffffff;
int maxX = 0;
int maxY = 0;
for(int i = 0; i < len; i++)
if(newPixel != oldPixel)
{
int x = i % width;
int y = i / width;
if(x < minX)
minX = x;
if(x > maxX)
maxX = x;
if(y < minY)
minY = y;
if(y > maxY)
maxY = y;
}
if(minX == 0x7fffffff)
return null;
int resultWidth = (maxX - minX) + 1;
int resultHeight = (maxY - minY) + 1;
realNum = resultWidth * resultHeight + 6;
if(buffer.length < realNum)
buffer = new int[realNum];
buffer[0] = width;
buffer[1] = height;
buffer[2] = minX;
buffer[3] = minY;
buffer[4] = maxX + 1;
buffer[5] = maxY + 1;
int resultIndex = 6;
for(int i = 0; i < resultHeight; i++)
{
System.arraycopy(newPixel, (minY + i) * width + minX, buffer, resultIndex, resultWidth);
resultIndex += resultWidth;
}
return buffer;
}
private int[] compressData(int data[])
{
if(data == null)
return null;
int compressIndex = 6;
for(int i = 6; i < realNum
{
int j = i;
int p;
for(p = data; ++i < realNum && p == data ;
j = i - j;
if(j > 1)
buffer[compressIndex++] = j;
buffer[compressIndex++] = p;
}
if(compressIndex < buffer.length)
{
int temp[] = new int[compressIndex];
System.arraycopy(buffer, 0, temp, 0, compressIndex);
return temp;
} else
{
return buffer;
}
}
我用反编译软件得到的OutputProcessor.java 文件的部分代码
不过 看不太明白 麻烦楼主能解释一下么 |
|