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)
我正在尝试使用 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)