我正在尝试使用ImageSharp编辑F#中的图片。我正在努力让图像突变工作
要在C#中进行图像变异,看起来好像只使用mutate method and a lambda:
image.Mutate(x => x.Kodachrome())
通常,要将C#lambdas更改为F#,我只会使用匿名函数,如下所示:
image.Mutate(fun x -> x.Kodachrome())
当我这样做时,我收到以下错误:
方法'Mutate'没有重载匹配。可用的重载如下所示(或在错误列表窗口中)。
看起来Mutate方法需要一个ImageProcessor,但由于某种原因在F#中编译器无法弄清楚匿名函数是一个ImageProcessor。如何在F#中使用图像变异?
答案 0 :(得分:5)
F#可以自动从匿名函数(fun ...
)转换为System.Action<_>
,但前提是这些类型完全匹配。在这里,他们没有,因为Kodachrome()
没有返回unit
。所以你需要忽略它的返回值:
image.Mutate(fun x -> x.Kodachrome() |> ignore)
答案 1 :(得分:2)
您需要将F#lambda明确转换为Action:
image.Mutate <| Action<_> (fun x -> x.Kodachrome ())