Go draw2d
最后修改时间 2024 年 4 月 11 日
在本文中,我们将展示如何在 Go 中使用 draw2d 处理图形。
draw2d 包是一个纯 Go 的二维矢量图形库。它支持多种输出设备,包括图像 (draw2d)、PDF 文档 (draw2dpdf) 和 opengl (draw2dgl)。
在我们的示例中,我们在图像输出设备上进行绘制。
绘制矩形
在第一个示例中,我们绘制一个矩形。
main.go
package main
import (
"image"
"github.com/llgcode/draw2d"
"github.com/llgcode/draw2d/draw2dimg"
"github.com/llgcode/draw2d/draw2dkit"
)
func main() {
dest := image.NewRGBA(image.Rect(0, 0, 300, 300))
gc := draw2dimg.NewGraphicContext(dest)
gc.SetStrokeColor(image.White)
draw2dkit.Rectangle(gc, 50, 50, 200, 200)
gc.Stroke()
draw2dimg.SaveToPngFile("srect.png", dest)
}
该示例在透明背景上绘制一个白色矩形。
dest := image.NewRGBA(image.Rect(0, 0, 300, 300))
创建了一个绘图目标。
gc := draw2dimg.NewGraphicContext(dest)
从目标中,我们创建一个绘图上下文。它是一个用于绘图的接口。
gc.SetStrokeColor(image.White)
我们使用 SetStrokeColor 将描边颜色设置为白色。
draw2dkit.Rectangle(gc, 50, 50, 200, 200)
我们使用 Rectangle 绘制一个矩形。参数是图形上下文以及矩形左上角和右下角的 x, y 坐标。
gc.Stroke()
使用 Stroke 描边矩形路径。
draw2dimg.SaveToPngFile("srect.png", dest)
我们使用 SaveToPngFile 将绘图保存到 PNG 文件。
绘制直线
在下一个示例中,我们绘制一条直线。
main.go
package main
import (
"image"
"github.com/llgcode/draw2d"
"github.com/llgcode/draw2d/draw2dimg"
"github.com/llgcode/draw2d/draw2dkit"
)
func main() {
dest := image.NewRGBA(image.Rect(0, 0, 300, 300))
gc := draw2dimg.NewGraphicContext(dest)
gc.SetFillColor(image.White)
draw2dkit.Rectangle(gc, 0, 0, 300, 300)
gc.Fill()
DrawLine(gc, 0, 0, 300, 300)
draw2dimg.SaveToPngFile("line.png", dest)
}
func DrawLine(gc draw2d.GraphicContext, x0, y0, x1, y1 float64) {
gc.MoveTo(x0, y0)
gc.LineTo(x1, y1)
gc.Stroke()
}
在白色背景上绘制一条对角黑色线。
gc.SetFillColor(image.White) draw2dkit.Rectangle(gc, 0, 0, 300, 300) gc.Fill()
我们将表面的背景填充为白色。
func DrawLine(gc draw2d.GraphicContext, x0, y0, x1, y1 float64) {
gc.MoveTo(x0, y0)
gc.LineTo(x1, y1)
gc.Stroke()
}
我们使用 MoveTo 和 LineTo 构建路径,然后使用 Stroke 描边它。
绘制圆形
使用 Ellipse 绘制圆形。
main.go
package main
import (
"image"
"image/color"
"github.com/llgcode/draw2d"
"github.com/llgcode/draw2d/draw2dimg"
"github.com/llgcode/draw2d/draw2dkit"
)
func main() {
dest := image.NewRGBA(image.Rect(0, 0, 300, 300))
gc := draw2dimg.NewGraphicContext(dest)
gc.SetFillColor(image.White)
draw2dkit.Rectangle(gc, 0, 0, 300, 300)
gc.Fill()
DrawCircle(gc, 0, 0, 300, 300)
draw2dimg.SaveToPngFile("circle.png", dest)
}
func DrawCircle(gc draw2d.GraphicContext) {
draw2dkit.Ellipse(gc, 150, 150, 80, 80)
gc.SetFillColor(color.RGBA{0x44, 0x44, 0x44, 0xff})
gc.SetStrokeColor(color.RGBA{0x44, 0x44, 0x44, 0xff})
gc.FillStroke()
}
在表面中间绘制一个灰色圆。
func DrawCircle(gc draw2d.GraphicContext) {
draw2dkit.Ellipse(gc, 150, 150, 80, 80)
gc.SetFillColor(color.RGBA{0x44, 0x44, 0x44, 0xff})
gc.SetStrokeColor(color.RGBA{0x44, 0x44, 0x44, 0xff})
gc.FillStroke()
}
我们使用 Ellipse 绘制圆。我们使用 SetFillColor 和 SetStrokeColor 设置填充和描边颜色。FillStroke 会填充路径然后描边路径。
绘制三次曲线
使用 CubicCurveTo 绘制三次曲线。
main.go
package main
import (
"image"
"github.com/llgcode/draw2d"
"github.com/llgcode/draw2d/draw2dimg"
"github.com/llgcode/draw2d/draw2dkit"
)
func main() {
dest := image.NewRGBA(image.Rect(0, 0, 300, 300))
gc := draw2dimg.NewGraphicContext(dest)
gc.SetFillColor(image.White)
draw2dkit.Rectangle(gc, 0, 0, 300, 300)
gc.Fill()
DrawCurvedLine(gc)
draw2dimg.SaveToPngFile("curved.png", dest)
}
func DrawCurvedLine(gc draw2d.GraphicContext) {
gc.MoveTo(30, 30)
gc.CubicCurveTo(200, 150, 250, 100, 280, 30)
gc.Stroke()
}
该示例绘制一条三次曲线。
func DrawCurvedLine(gc draw2d.GraphicContext) {
gc.MoveTo(30, 30)
gc.CubicCurveTo(200, 150, 250, 100, 280, 30)
gc.Stroke()
}
我们使用 MoveTo 前往起点。使用 CubicCurveTo,我们绘制三次曲线。前两个参数是两个控制点的 x, y 坐标。最后两个值是终点的坐标。
来源
在本文中,我们使用 draw2d 包在 Golang 中处理了图形。