F#初学者,我想使用ImageSharp绘制多边形。构建失败,并显示以下信息:
方法DrawPolygon没有重载匹配。可用的过载如下所示。错误FS0001:此表达式的类型应为'Image',但此处的类型应为'a *'b'。
let renderRect(img:Image<Rgba32>) =
let points: PointF list = [
new PointF(float32 2.0, float32 8.0);
new PointF(float32 4.0, float32 1.0);
new PointF(float32 1.0, float32 7.0);
new PointF(float32 5.0, float32 2.0);
]
img.Mutate (fun x -> x.DrawPolygon(Rgba32.White, 1.0, points))
img
我要调用的方法的签名:
static IImageProcessingContext<TPixel> DrawPolygon<TPixel>(this IImageProcessingContext<TPixel> source, TPixel color, float thickness, params PointF[] points) where TPixel : struct, IPixel<TPixel>
答案 0 :(得分:4)
我看到了几个问题:
DrawPolygon
的第二个参数应该是float32
,而不是float
。注意,除了调用float32
函数外,您还可以通过添加后缀1.0f
来使用正确类型的文字。Mutate
的第二个参数必须是Action<_>
,因此它不应该返回任何内容。这意味着您应该忽略DrawPolygon
调用的结果,而不要返回它。您可以通过在通话后放置|> ignore
来实现此目的。这是您的代码的版本,解决了以下问题:
let renderRect(img:Image<Rgba32>) =
let points = [|
PointF(2.0f, 8.0f);
PointF(4.0f, 1.0f);
PointF(1.0f, 7.0f);
PointF(5.0f, 2.0f);
|]
img.Mutate (fun x -> x.DrawPolygon(Rgba32.White, 1.0f, points) |> ignore)
img
由于您没有提供完整的副本(甚至没有错误消息中建议的重载列表!),因此很难知道是否还有其他需要更改的地方。
答案 1 :(得分:3)
您正在传递一个点列表,但是该方法的签名需要一个点数组。我建议要么将点作为hSubmit = () => {
this.setState({
id: this.state.id++,
name: "",
});
}
内联传递,要么将点定义为数组:
params