1

我在 ASP.Net Core 项目中使用 Image Sharp,现在需要为只能处理 2 个颜色索引 PNG 图像的设备准备 PNG 图像。

如果我使用以下代码,则图像将保存为托盘 2 色图像,但结果已损坏,在我看来,没有发生像素打包。

private void ConvertToMonoPng(Stream stream, string fileName)
{
    Image<Rgba32> image = Image.Load(fileName);

    var enc = new PngEncoder();
    enc.CompressionLevel = PngCompressionLevel.Level9;
    enc.ColorType = PngColorType.Palette;
    enc.BitDepth = PngBitDepth.Bit1;

    image.Save(stream, enc);
    image.Dispose();
}

结果是:

源图像

源图像

输出图像

输出图像

我知道 ImageSharp 库目前不支持内存中的子字节打包像素,但是由于 PNGEncoder 中似乎确实有一些支持,我希望支持保存单色 PNG,我只是做错了.

4

1 回答 1

3

从 build 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位灰度

于 2018-09-28T11:24:42.217 回答