gpt4 book ai didi

.net - 将内存中的 24 位图像转换为索引颜色

转载 作者:行者123 更新时间:2023-12-04 07:08:34 29 4
gpt4 key购买 nike

我在内存中创建了一个图像,格式为 Format24bppRgb。

我将其另存为 PNG,大小为 24kb。

如果我用 photoshop 将相同的图像保存为 24 位 PNG,它的大小大致相同,但如果我将其保存为只有 32 种颜色的 8 位 PNG,它会减小到 5kb。

如何使用 C#/GDI+/System.Drawing 创建 PNG 文件的索引版本?

我很难找到这个问题的任何答案,这些答案不仅仅适用于灰度图像或需要外部库。在 GDI+ 中是不可能的吗?

最佳答案

我最终使用了 FreeImageAPI DLL ,带有 C# 包装器。我尽量避免使用 3rd 方库,但我认为没有其他选择。它似乎是一个非常标准且使用良好的库。

就我而言,我有一个 System.Drawing.Image对象 'image'这是动态创建的 - 我想将其作为压缩图像保存到 HttpContext 输出流。请注意 Image没有需要的GetHbitmap()方法,但是 Bitmap做。

// convert image to a 'FreeImageAPI' image
var fiBitmap = FreeImageAPI.FreeImageBitmap.FromHbitmap((image as Bitmap).GetHbitmap());
fiBitmap.ConvertColorDepth(FreeImageAPI.FREE_IMAGE_COLOR_DEPTH.FICD_08_BPP);

// see http://stackoverflow.com/questions/582766
MemoryStream ms = new MemoryStream();
fiBitmap.Save(ms, FreeImageAPI.FREE_IMAGE_FORMAT.FIF_PNG, FreeImageAPI.FREE_IMAGE_SAVE_FLAGS.PNG_Z_BEST_COMPRESSION);
context.HttpContext.Response.OutputStream.Write(ms.ToArray(), 0, (int)ms.Length);

我的 24kb 位图现在只有 9kb :-)

提示:运行它时,请确保在您的 bin 中同时提供“FreeImageNET”和“FreeImage”dll。目前,C# 示例项目包含对“Library.DLL”的引用,该引用似乎不存在于其 zip 文件中。使用 FreeImageNET.dllFreeImage.dll虽然有效。如果您没有意识到 FreeImageNet,您将收到一个烦人的文件未找到错误。 != FreeImage !

关于.net - 将内存中的 24 位图像转换为索引颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/727987/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com