Генерировать файл изображения с глубинами младшего бита?

У меня была та же проблема с IntelliJ 2019.1, снимите флажок, эта опция работает для меня. enter image description here

11
задан Robinicks 27 January 2009 в 11:18
поделиться

4 ответа

Попробуйте это:

ImageCodecInfo pngCodec = ImageCodecInfo.GetImageEncoders().Where(codec => codec.FormatID.Equals(ImageFormat.Png.Guid)).FirstOrDefault();
if (pngCodec != null)
{
    EncoderParameters parameters = new EncoderParameters();
    parameters.Param[0] = new EncoderParameter(Encoder.ColorDepth, 8);
    myImage.Save(myStream, pngCodec, parameters);
}
0
ответ дан 3 December 2019 в 08:57
поделиться

Все форматы изображения эффективно поддерживают глубины младшего бита. Вы просто оставляете последние биты неиспользованными, если не нужный. GIF только поддерживает низкий цвет; Вы ограничиваетесь 256 цветами.

0
ответ дан 3 December 2019 в 08:57
поделиться

Непротестированный код -

Image myImage = new Image();
EncoderParameters parameters = new EncoderParameters(1);   
parameters.Param[0] = new EncoderParameter(Encoder.ColorDepth, 8);
myImage.Save(somestream, ImageFormat.Png, parameters);

Посмотрите на Систему. Рисование. Пространство имен обработки изображений и имеет игру с установками параметров Encoder.xxx и изображением. Сохраните метод. HTH.

Обновление, которое также стоит отметить, что, если Вы хотите маленькое изображение (количество младшего байта) можно попытаться сохранить как JPEG Кодер использования. Сжатие сжатия, но в качестве изображения стоится.

-1
ответ дан 3 December 2019 в 08:57
поделиться

Я не думаю, что другой ответ проверил свой код, поскольку GDI + PNG не поддерживает Encoder.BitDepth EncoderParameter. Фактически, единственный кодек, который это делает, - это TIFF.

Вам необходимо изменить PixelFormat вашего изображения перед сохранением, чтобы иметь какой-либо эффект на выходе. Это не всегда дает ожидаемый PixelFormat. См. мой пост здесь для получения дополнительной информации о том, какие форматы PixelFormats во что превращаются.

Что касается преобразований PixelFormat, будет работать что-то вроде следующего:

private Bitmap ChangePixelFormat(Bitmap inputImage, PixelFormat newFormat)
{
  Bitmap bmp = new Bitmap(inputImage.Width, inputImage.Height, newFormat);
  using (Graphics g = Graphics.FromImage(bmp))
  {
    g.DrawImage(inputImage, 0, 0);
  }
  return bmp;
}

К сожалению, эти преобразования могут привести к очень плохому результату. Это особенно верно в случае, когда вы выполняете преобразование с потерями (большая битовая глубина в меньшую).

13
ответ дан 3 December 2019 в 08:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: