1

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

要在 C# 中进行图像突变,看起来您只需使用mutate 方法和 lambda

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

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

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

当我这样做时,我收到以下错误:

方法“变异”没有重载匹配。可用的重载如下所示(或在错误列表窗口中)。

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

4

2 回答 2

5

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

image.Mutate(fun x -> x.Kodachrome() |> ignore)
于 2017-10-20T08:26:24.263 回答
2

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

image.Mutate <| Action<_> (fun x -> x.Kodachrome ())
于 2017-10-20T08:09:50.727 回答