Загружайте и сохраняйте непрозрачные 8-битные файлы PNG, используя ImageSharp

Я пытаюсь загрузить -> манипулировать байтовый массив напрямую -> сохранить 8-битное изображение PNG.

Я хотел бы использовать ImageSharp для сравнения его скоростей с моей текущей библиотекой, однако в своем примере кода они требуют определения типа пикселя (они используют Rgba32):

using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Processing;

// Image.Load(string path) is a shortcut for our default type. 
// Other pixel formats use Image.Load<TPixel>(string path))
using (Image<Rgba32> image = Image.Load("foo.jpg"))
{
    image.Mutate(x => x
         .Resize(image.Width / 2, image.Height / 2)
         .Grayscale());
    image.Save("bar.jpg"); // Automatic encoder selected based on extension.
}

Я просмотрел типы пикселей: https://github.com/SixLabors/ImageSharp/tree/master/src/ImageSharp/PixelFormats

Но нет 8-битного пиксельного типа в оттенках серого.

1 ответ

Начиная с 1.0.0-бета0005, отсутствует формат пикселей Gray8, потому что мы не могли решить, какую цветовую модель использовать при конвертации из Rgb (нам это нужно внутренне). Рекомендация МСЭ-R BT.709 кажется разумным решением, потому что это то, что поддерживает png и что мы используем при сохранении изображения как 8-битного png в градациях серого, поэтому оно находится в моем списке TODO.

https://en.wikipedia.org/wiki/Grayscale

Итак... в настоящее время вам нужно использовать либо Rgb24 или же Rgba32 при декодировании изображений.

Обновить.

Начиная с 1.0.0-dev002094 это стало возможным! У нас есть два новых формата пикселей. Gray8 а также Gray16 которые несут только компонент яркости пикселя.

using (Image<Gray8> image = Image.Load<Gray8>("foo.png"))
{
    image.Mutate(x => x
         .Resize(image.Width / 2, image.Height / 2));

    image.Save("bar.png");
}

Заметка. Кодировщик png по умолчанию сохранит изображение в соответствии с типом входного цвета и глубиной цвета. Если вы хотите закодировать изображение в другой цветовой тип, вам нужно будет PngEncoder экземпляр с ColorType а также BitDepth свойства установлены.

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