Мне нужно обработать и сохранить изображения в их исходном 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 игнорирует PixelFormat для Bitmap?
=============================================== ========
Спасибо, ребята, я нашел решение:
http://freeimage.sourceforge.net/license.html
С помощью этой бесплатной библиотеки можно сохранять изображения (особенно JPEG) в 8-битном оттенке серого.