Imagesharp мутировать в F#
Я пытаюсь использовать ImageSharp для редактирования изображений в F#. Я изо всех сил пытаюсь заставить мутации изображения работать
Чтобы сделать мутацию изображения в C#, похоже, что вы просто используете метод mutate и лямбду:
image.Mutate(x => x.Kodachrome())
Обычно, чтобы изменить C# лямбды на F#, я бы просто использовал анонимные функции, например так:
image.Mutate(fun x -> x.Kodachrome())
Когда я это делаю, я получаю следующую ошибку:
Не найдены перегрузки для метода 'Mutate'. Доступные перегрузки показаны ниже (или в окне списка ошибок).
Похоже, что метод Mutate принимает ImageProcessor, но по какой-то причине в F# компилятор не может понять, что анонимная функция - это ImageProcessor. Как я могу заставить мутацию изображения работать в F#?
2 ответа
F# может автоматически конвертировать из анонимной функции (fun ...
) к System.Action<_>
, но только если типы точно совпадают. Здесь нет, потому что Kodachrome()
не возвращается unit
, Поэтому вам нужно игнорировать его возвращаемое значение:
image.Mutate(fun x -> x.Kodachrome() |> ignore)
Вам нужно будет явно преобразовать F# лямбду в Action:
image.Mutate <| Action<_> (fun x -> x.Kodachrome ())