公司有绘制无反锯齿(without anti-aliasing)多边形图像的需求,谷歌了好久,尝试过了绝大多数的golang绘图库,无一例外,都默认开启了反锯齿,且无法关闭。
最终还是只能投靠OpenCV爸爸。这边采用了GOCV,进行填充无反锯齿的多边形。
img := gocv.NewMatWithSize(700, 700, gocv.MatTypeCV8UC3) //create 700*700 matrix
defer img.Close()
// make vertices' ponts
pts := [][]image.Point{
{
image.Pt(160,269),
image.Pt(148,341),
image.Pt(173,407),
image.Pt(289,426),
image.Pt(502,411),
image.Pt(599,276),
image.Pt(525,155),
image.Pt(514,201),
image.Pt(549,261),
image.Pt(542,303),
image.Pt(488,324),
image.Pt(458,280),
image.Pt(453,196),
image.Pt(426,141),
image.Pt(408,176),
image.Pt(422,235),
image.Pt(420,308),
image.Pt(430,348),
image.Pt(487,344),
image.Pt(504,361),
image.Pt(473,386),
image.Pt(408,386),
image.Pt(381,362),
image.Pt(384,315),
image.Pt(380,263),
image.Pt(375,138),
image.Pt(395,82),
image.Pt(466,52),
image.Pt(536,61),
image.Pt(598,64),
image.Pt(616,15),
image.Pt(555,3),
image.Pt(446,25),
image.Pt(377,37),
image.Pt(350,54),
image.Pt(340,122),
image.Pt(351,182),
image.Pt(346,233),
image.Pt(340,276),
image.Pt(293,238),
image.Pt(305,191),
image.Pt(259,99),
image.Pt(251,182),
image.Pt(280,258),
image.Pt(299,317),
image.Pt(295,326),
image.Pt(228,352),
image.Pt(210,263),
image.Pt(220,168),
image.Pt(172,128),
image.Pt(57,156),
image.Pt(18,205),
image.Pt(28,255),
image.Pt(81,200),
image.Pt(130,170),
image.Pt(154,195),
image.Pt(135,217),
image.Pt(121,245),
image.Pt(148,237),
image.Pt(167,241),
},
}
// Choose color
c := color.RGBA{2, 233, 233, 0}
// draw Polygon
gocv.FillPoly(&img, pts, c)
// Save to Image file
imageContent, _ := img.ToImage()
out, err := os.Create("./output.png")
if err != nil {
fmt.Println(err)
os.Exit(1)
}
err = png.Encode(out, imageContent)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
输出效果应该如下:
以上。