2

我正在使用 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,调色板有限,一个 la PIL convert(),您可以在其中指定算法和调色板大小。

谢谢。

4

1 回答 1

1

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

于 2012-04-09T14:33:36.330 回答