4

我试图让我的应用程序导出动画 gif,但是,一旦颜色超过 256,量化算法就会启动,事情就会出错。

这是我正在转换的文件,以及算法将其转换为的内容:

在此处输入图像描述

我正在使用的量化算法是 Quantize.java,它显然是ImageMagick中使用的量化的 Java 端口,所以我觉得它应该是可靠的?

我这样使用它:

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)更小。我做的一切都是正确的还是这就是算法的工作原理?

4

2 回答 2

0

您需要添加一个抖动算法.. google it.. 我相信 Java 内置了一些算法,但是来自维基百科的直接 Java 示例对我有用。因为我想使用原始字节数组和整数数组来获得比仅使用 getPixel/setPixel 更高的效率

于 2015-03-30T00:49:35.350 回答
0

我最终放弃了 Quantize.java 并找到了 Java Imaging Utilities ( http://sourceforge.net/projects/jiu/ ),它提供了一些不错的颜色/图像量化选项。它们不是完美的结果,但可以忍受。

于 2015-04-02T22:30:32.377 回答