Сохранение двухцветного индексированного 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 битная палитра

1 битная палитра

2-битная палитра

2-битная палитра

4-битная палитра

4-битная палитра

1 бит в оттенках серого

1 бит в оттенках серого

2-битная шкала серого

2-битная шкала серого

4-битная шкала серого

4-битная шкала серого

Другие вопросы по тегам