我需要以原始 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 位。