颜色量化给出非常糟糕的结果?
Color quantizing giving very bad results?
我正在尝试让我的应用程序导出动画 gif,但是,一旦颜色超过 256,量化算法就会启动,事情就会出错。
这是我正在转换的文件,以及算法将其转换成的文件:
我使用的量化算法 is this, 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) 更快(呃)并且生成的文件更小。我做的每件事都是正确的还是这就是算法的工作原理?
您需要添加一个抖动算法.. google 它..我相信 Java 有一些内置算法,但是来自维基百科的直接 Java 示例对我有用。因为我想处理原始字节数组和整数数组以获得比仅使用 getPixel/setPixel
更高的效率
我最终放弃了 Quantize.java,找到了 Java Imaging Utilities (http://sourceforge.net/projects/jiu/),它提供了一些不错的 color/image 量化选项。它们不是完美的结果,但可以忍受。
我正在尝试让我的应用程序导出动画 gif,但是,一旦颜色超过 256,量化算法就会启动,事情就会出错。
这是我正在转换的文件,以及算法将其转换成的文件:
我使用的量化算法 is this, 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) 更快(呃)并且生成的文件更小。我做的每件事都是正确的还是这就是算法的工作原理?
您需要添加一个抖动算法.. google 它..我相信 Java 有一些内置算法,但是来自维基百科的直接 Java 示例对我有用。因为我想处理原始字节数组和整数数组以获得比仅使用 getPixel/setPixel
更高的效率我最终放弃了 Quantize.java,找到了 Java Imaging Utilities (http://sourceforge.net/projects/jiu/),它提供了一些不错的 color/image 量化选项。它们不是完美的结果,但可以忍受。