我需要处理并保存图像,保留它们原始的bpp值(1-黑白,8-灰度,24-彩色)。 处理后,由于使用了Aforge.Net进行处理,图像总是变成了24bpp。我将原始的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 object can't create image in indexed pixel format”,出现在以下代码行中:
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位。
Bitmap.Save
忽略正在保存的图像的PixelFormat
?或者,我该如何解决使用索引像素格式时Graphics.FromImage
抛出的异常? - Cody Gray