Сохранение двухцветного индексированного PNG-файла (1 бит на пиксель) с помощью Image Sharp - PullRequest
0 голосов
/ 25 сентября 2018

Я использую 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();
}

Результаты:

ИсточникИзображение

Source image

Выходное изображение

Output image

Я знаю, что библиотека ImageSharp в настоящее время не поддерживает упакованные в суббайты пиксели в памяти, но поскольку в PNGEncoder действительно есть некоторая поддержка, я надеюсь, что сохранение монохромных PNG поддерживается, и япросто делаю что-то не так.

1 Ответ

0 голосов
/ 28 сентября 2018

Начиная со сборки 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 bit palette

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

2 bit palette

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

4 bit palette

1битовая шкала серого

1 bit grayscale

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

2 bit grayscale

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

4 bit grayscale

...