gpt4 book ai didi

c# - 以较低的位深度保存 jpg(例如 24 到 16)(C#)

转载 作者:行者123 更新时间:2023-11-30 20:11:13 27 4
gpt4 key购买 nike

我需要将 24 位和 32 位 jpeg 和 png 文件转换为较低的位深度 (16)。我找到了一些代码来执行此操作,但生成的图像保留了原始文件的位深度,尽管文件大小较小。

Image img = Image.FromFile(filePathOriginal);
Bitmap bmp = ConvertTo16bpp(img);
EncoderParameters parameters = new EncoderParameters();
parameters.Param[0] = new EncoderParameter(Encoder.ColorDepth, 16);
bmp.Save(filePathNew, jpgCodec, parameters);
bmp.Dispose();
img.Dispose();

...

private static Bitmap ConvertTo16bpp(Image img) {
var bmp = new Bitmap(img.Width, img.Height, System.Drawing.Imaging.PixelFormat.Format16bppRgb555);
using (var gr = Graphics.FromImage(bmp))
{
gr.DrawImage(img, new Rectangle(0, 0, img.Width, img.Height));
}

return bmp;
}

知道出了什么问题吗?

谢谢,弗兰克

最佳答案

JPEG 是一种三色格式。通常每种颜色有 8 位,但也可以有 12 位或 16 位。因此 24=3x8 位颜色是合理的,但 16 位或 32 位根本不可能。它只是不除以三。 3x16=48 是可能的,但这是更高的颜色深度。 JPEG 专为照片而设计,支持低于 3x8 的位深度没有意义。那没有任何好处。

现在,您的代码中的 16 位图像是什么?这是原始内存中不精确的近似值,仅使用 65535 种颜色。当你把它保存回来时,你会得到一个 24 位的 JPEG。显然您的 JPEG 编码器不知道如何创建 48 位 JPEG。即便如此,这也是一种比特浪费,因为内存中的图像无论如何只有 65536 种颜色。

总结一下:出了问题的是任务。没有 65536 色 JPEG 这样的东西。

关于c# - 以较低的位深度保存 jpg(例如 24 到 16)(C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4050619/

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