gpt4 book ai didi

C# 为什么 Bitmap.Save 会忽略位图的 PixelFormat?

转载 作者:太空狗 更新时间:2023-10-30 00:27:54 26 4
gpt4 key购买 nike

我需要以原始 bpp 格式处理和保存图像(1 - BnW,8 - 灰色,24 - 彩色)。处理后我总是有 24bpp(由于使用 Aforge.Net 处理)。我将原始 bpp 传递给保存函数,我正在使用下一个代码进行保存:

private static Bitmap changePixelFormat(Bitmap input, PixelFormat format)
{
Bitmap retval = new Bitmap(input.Width, input.Height, format);
retval.SetResolution(input.HorizontalResolution, input.VerticalResolution);
Graphics g = Graphics.FromImage(retval);
g.DrawImage(input, 0, 0);
g.Dispose();
return retval;
}

当我通过时:

PixelFormat.Format8bppIndexed

我遇到异常:“图形对象无法以索引像素格式创建图像”:

Graphics g = Graphics.FromImage(retval);

我试过下一个代码:

Bitmap s = new Bitmap("gray.jpg");
Bitmap NewPicture = s.Clone(new Rectangle(0, 0, s.Width, s.Height), PixelFormat.Format8bppIndexed);

在这个“NewImage”有 PixelFormat 8bppIndexed 之后,但是当我保存 NewImage 时:

NewPicture.Save("hello.jpg", ImageFormat.Jpeg);

hello.jpg 有 24bpp。

我需要保留原始图像的 bpp 和图像格式。

为什么 Bitmap.Save 会忽略 Bitmap 的 PixelFormat?

============================================= ========

谢谢大家,我找到了解决办法: http://freeimage.sourceforge.net/license.html

借助这个免费库,可以将图像(尤其是 JPEG)保存为 8 位灰度。

最佳答案

我几乎可以肯定 JPEG 图像格式不支持索引图像。因此,即使您创建了指定 PixelFormat.Format8bppIndexed 的图像,当您尝试将其另存为 JPEG 时,GDI+ 也会将其转换为不同的格式。在这种情况下,您已经确定它是 24 bpp。

相反,您需要将图像保存为 BMP 或 GIF。例如:

NewPicture.Save("hello.jpg", ImageFormat.Bmp);

参见支持索引颜色的图像文件格式表 here on Wikipedia .

关于C# 为什么 Bitmap.Save 会忽略位图的 PixelFormat?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4679827/

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