F# 中的 Imagesharp 突变

Imagesharp mutate in F#

我正在尝试使用 ImageSharp 在 F# 中编辑图片。我正在努力让图像突变工作

要在 C# 中进行图像突变,看起来您只需使用 mutate method and a lambda:

image.Mutate(x => x.Kodachrome())

通常,要将 C# lambdas 更改为 F#,我只会使用匿名函数,如下所示:

image.Mutate(fun x -> x.Kodachrome())

当我这样做时,出现以下错误:

No overloads match for method 'Mutate'. The available overloads are shown below (or in the Error List window).

看起来 Mutate 方法接受一个 ImageProcessor,但出于某种原因,在 F# 中,编译器无法确定匿名函数是一个 ImageProcessor。如何让图像突变在 F# 中工作?

您需要将 F# lambda 显式转换为 Action:

image.Mutate <| Action<_> (fun x -> x.Kodachrome ())

F# 可以自动从匿名函数 (fun ...) 转换为 System.Action<_>,但前提是类型完全匹配。在这里,他们没有,因为 Kodachrome() 没有 return unit。所以你需要忽略它的 return 值:

image.Mutate(fun x -> x.Kodachrome() |> ignore)