【发布时间】: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() 您可以在其中指定算法和调色板大小。
谢谢。
【问题讨论】: