我正在尝试使用ImageSharp进行一些图像处理。我想得到一个单独像素的HSL值。为此,我认为需要将PixelFormat转换为ColorSpace。如何转换/访问Hsl颜色空间值?
我尝试了下面的ColorSpaceConverter,但没有结果。
for (int y = 0; y < image.Height; y++)
{
Span<Rgb24> pixelRowSpan = image.GetPixelRowSpan(y);
Span<Hsl> hslRowSpan = new Span<Hsl>();
var converter = new ColorSpaceConverter();
converter.Convert(pixelRowSpan, hslRowSpan);
}
我确实得到了以下错误:
error CS1503: Argument 1: cannot convert from
'System.Span<SixLabors.ImageSharp.PixelFormats.Rgb24>' to
'System.ReadOnlySpan<SixLabors.ImageSharp.ColorSpaces.CieLch>'
error CS1503: Argument 2: cannot convert from
'System.Span<SixLabors.ImageSharp.ColorSpaces.Hsl>' to 'System.Span<SixLabors.ImageSharp.ColorSpaces.CieLab>'
发布于 2022-01-25 06:26:16
Rgb24
有一个向Rgb
的隐式转换,但正如您已经发现的,它不允许跨范围的隐式转换。
我将在循环外分配相当于一行Rgb
的池缓冲区,并为每个y
填充缓冲区。
// I would probably pool these buffers.
Span<Rgb> rgb = new Rgb[image.Width];
Span<Hsl> hsl = new Hsl[image.Width];
ColorSpaceConverter converter = new();
for (int y = 0; y < image.Height; y++)
{
Span<Rgb24> row = image.GetPixelRowSpan(y);
for (int x = 0; x < row.Length; x++)
{
rgb[x] = row[x];
}
converter.Convert(rgb, hsl);
}
https://stackoverflow.com/questions/70773788
复制相似问题