Сохранение двухцветного индексированного PNG-файла (1 бит на пиксель) с помощью Image Sharp
Я использую Image Sharp в проекте ASP.Net Core и теперь мне нужно подготовить PNG-изображения для устройства, которое может обрабатывать только 2 цветных PNG-изображения.
Если я использую следующий код, то изображения сохраняются как двухцветные изображения на поддонах, но результат искажен, и мне кажется, что упаковка пикселей не происходит.
private void ConvertToMonoPng(Stream stream, string fileName)
{
Image<Rgba32> image = Image.Load(fileName);
PngEncoder enc = new PngEncoder();
enc.CompressionLevel = 9;
enc.ColorType = PngColorType.Palette;
enc.BitDepth = PngBitDepth.Bit1;
image.Save(stream, enc);
image.Dispose();
}
Результаты:
Исходное изображение
Выходное изображение
Я знаю, что библиотека ImageSharp в настоящее время не поддерживает упакованные в суббайты пиксели в памяти, но поскольку в PNGEncoder действительно есть некоторая поддержка, я надеюсь, что сохранение монохромных PNG поддерживается, и я просто делаю что-то не так,
1 ответ
Начиная с версии 1.0.0-dev001921 это стало возможным. Я добавил поддержку 1,2- и 4-битного кодирования, чтобы сопровождать существующее 8- и 16-битное кодирование.
Вы можете установить пакет через ночной канал MyGet, используя следующую команду.
PM> Install-Package SixLabors.ImageSharp -Version 1.0.0-dev001921 -Source
https://www.myget.org/F/sixlabors/api/v3/index.json
Вот вывод.
1 битная палитра
2-битная палитра
4-битная палитра
1 бит в оттенках серого
2-битная шкала серого
4-битная шкала серого