我试图让我的应用程序导出GIF动画,但是,一旦颜色超过256,量化算法就会启动并且事情变得错误。
这是我要转换的文件,以及算法将其转换为:
量化算法我使用is this, Quantize.java,它显然是 ImageMagick 中使用的量化的Java端口,所以我觉得它应该可靠吗? / p>
我这样使用它:
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
时算法将其转换为的内容:
看起来不一样,但仍然不对。
我真的很想让这个算法起作用,因为它快速(呃)并且产生比替代品(NeuQuant)更小的文件。我做的一切是正确的还是算法的运作方式?
答案 0 :(得分:0)
你需要添加一个抖动算法..谷歌它...我相信Java内置了一些算法,但维基百科的直接Java样本为我工作。因为我想要使用原始字节数组和int数组来获得更高的效率,而不仅仅是使用getPixel / setPixel
答案 1 :(得分:0)
我最终放弃了Quantize.java并找到了Java Imaging Utilities(http://sourceforge.net/projects/jiu/),它提供了一些不错的颜色/图像量化选项。它们不是完美的结果,但是可以忍受。