【问题标题】:Reduce Color Count in PNG-8 Palette using FreeImage Library (C#)使用 FreeImage 库 (C#) 减少 PNG-8 调色板中的颜色计数
【发布时间】:2012-03-03 03:47:20
【问题描述】:

我使用 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() 您可以在其中指定算法和调色板大小。

谢谢。

【问题讨论】:

    标签: c# image freeimage png-8


    【解决方案1】:

    最终通过使用来自互联网的开源代码重新实现量化。

    【讨论】:

    • Awww,可能你不能,但很想在你的答案中看到一些源代码或更多细节,因为我自己也在做同样的事情。
    • 我也是。另外,您决定采用哪种算法?
    • 有一段时间没查,我用的是八叉树量化,代码在这里github.com/nisheeth-barthwal/Overmind/tree/master/NX_Unsafe/…
    猜你喜欢
    • 2011-10-13
    • 2014-03-18
    • 2013-01-15
    • 2013-10-23
    • 1970-01-01
    • 2011-05-11
    • 2011-09-06
    • 2017-05-01
    相关资源
    最近更新 更多