我正在尝试加载->直接处理字节数组->保存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位像素类型。
答案 0 :(得分:3)
自this link起,没有Gray8像素格式,因为我们无法决定从Rgb转换时要使用哪种颜色模型(我们内部需要)。 ITU-R BT.709建议书似乎是一个明智的解决方案,因为这是png支持的功能,也是我们将图像保存为8位灰度png时使用的功能,因此它在我的TODO列表中。
所以...当前,在解码图像时,您需要使用 Rgb24
或Rgba32
。
更新。
从https://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale开始,这已经成为可能!我们有两种新的像素格式。 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
实例。