使用FreeImage库(C#)减少PNG-8调色板中的颜色计数

时间:2012-02-10 17:08:11

标签: c# image freeimage png-8

我使用FreeImageNET库来量化我的位图

using (FreeImageAPI.FreeImageBitmap fiBitmap = FreeImageAPI.FreeImageBitmap.FromHbitmap(bmp.GetHbitmap()))
            {
                if (fiBitmap.ColorDepth > 24)
                {
                    fiBitmap.ConvertColorDepth(FreeImageAPI.FREE_IMAGE_COLOR_DEPTH.FICD_08_BPP);
                }

                //quantize using the NeuQuant neural-net quantization algorithm 
                fiBitmap.Quantize(FreeImageAPI.FREE_IMAGE_QUANTIZE.FIQ_NNQUANT, 256);


                fiBitmap.Save("test_z.png", FreeImageAPI.FREE_IMAGE_FORMAT.FIF_PNG, FreeImageAPI.FREE_IMAGE_SAVE_FLAGS.PNG_Z_BEST_COMPRESSION);

                //fiBitmap.Save(ms, FreeImageAPI.FREE_IMAGE_FORMAT.FIF_PNG, FreeImageAPI.FREE_IMAGE_SAVE_FLAGS.PNG_Z_DEFAULT_COMPRESSION);
            }

这给了我一个PNG-8,有256种颜色的调色板。 使用Photoshop我发现,如果我使用自适应算法减少调色板,例如128,64,16等,我可以进一步缩小尺寸。再次重新打开它会显示Photoshop在剩余(更高)索引中填充灰度级。

我无法让FreeImageAPI.FreeImageBitmap.Quantize()生成类似的PNG,使用有限的调色板, a la PIL convert(),您可以在其中指定算法和调色板大小。< / p>

感谢。

1 个答案:

答案 0 :(得分:1)

使用来自互联网的开源代码结束重新实施量化。