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);
            }

これにより、256色のパレットを備えたPNG-8が得られます。私が見つけたPhotoshopを使用して、128、64、16などのカラーパレットを減らしたアダプティブアルゴリズムを使用すると、サイズをさらに小さくすることができます。もう一度開くと、Photoshopが残りの(より高い)インデックスのグレーレベルを塗りつぶします。

限られたパレットで、アルゴリズムとパレットサイズの両方を指定できるPILを使用FreeImageAPI.FreeImageBitmap.Quantize()して、同様のPNGを作成することはできません。convert()

ありがとう。

4

1 に答える 1

1

インターネットからのオープンソースコードを使用して、量子化を再実装することになりました。

于 2012-04-09T14:33:36.330 に答える