I need to process and save images in their original bpp (1 – for BnW, 8 – for gray, 24 – color).
After processing I always have 24bpp (due to processing with Aforge.Net). I pass original bpp to saving function and I’m using the next code for saving:
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;
}
When I pass:
PixelFormat.Format8bppIndexed
I’m getting an exception: “Graphics object can’t create image in indexed pixel format” in the line:
Graphics g = Graphics.FromImage(retval);
I’ve tried the next code:
Bitmap s = new Bitmap("gray.jpg");
Bitmap NewPicture = s.Clone(new Rectangle(0, 0, s.Width, s.Height), PixelFormat.Format8bppIndexed);
After this “NewImage” has PixelFormat 8bppIndexed, but when I’m saving NewImage:
NewPicture.Save("hello.jpg", ImageFormat.Jpeg);
hello.jpg has 24bpp.
I need to keep bpp and image format of original image.
Why Bitmap.Save ignores PixelFormat of Bitmap?
=======================================================
Thanks guys, I’ve found a solution:
http://freeimage.sourceforge.net/license.html
With help of this free library it is possible to save images (especially JPEG ) to Grayscale 8-bit.
Here is the code that will convert a Bitmap to 1bpp/8bpp bitmap. 1bpp/8bpp in C#.
In your changePixelFormat method you can check what fixel format it needs to be converted to, then if it’s 1bpp or 8 bpp then use code from link and for all other formats use your code.
Graphics.FromImagedocumentation has remarks:NEW PART:
This is what i found after short googling:
8bpp greyscale images and 8bpp jpg is not supported with gdiplus version
1.0. There is a new version of gdiplus in Windows 7 that supports greyscale
images and more enhanced codec support.
8bpp indexed jpeg images are supported with
Microsoft’s WIC API.
You can try it yourself by downloading the WIC explorer from Microsoft’s
download site.
GDI+ 8 bit load/save bug
Standard JPEG only supports 24-bit image.