我正在尝试让我的应用程序导出动画 GIF,但是一旦颜色超过 256,量化算法就会启动并且出现问题。
这是我要转换的文件以及算法将其转换为的内容:
这是我要转换的文件以及算法将其转换为的内容:
protected int[][] pixels; // 2D array of RGB pixels of image
protected byte[] indexedPixels;
// ...
/**
* Analyzes image colors and creates color map.
*/
protected void analyzePixels()
{
// Quantize the pixels, get reduced color map and indexed array.
// -------------------------------------------------------------
colorPalette = Quantize.quantizeImage(pixels, 256);
// Create indexed pixels array.
// ----------------------------
int i = 0;
for (int x = 0, xSize = pixels.length; x < xSize; ++x)
{
for (int y = 0, ySize = pixels[x].length; y < ySize; ++y)
indexedPixels[i++] = (byte) pixels[x][y];
}
}
注意 - 当我将 static final boolean QUICK
设置为 false
时,算法将转换为以下内容:
indexedPixels[i++] = (byte) pixels[x][y];
会做什么? - Douglas ZarecolorPalette = Quantize.quantizeImage(pixels, 256);
将 pixels[][] 的内容转换为 colorMap[] 中的索引,从而将每个像素指向 colorMap[] 中的一种颜色。你所提到的那行代码只是将其从二维数组中清空,并放入一个一维字节数组中,因为这是我正在使用的 LZWEncoder 所期望的格式。 - yesbutmaybeno