Gox语言中进行基本图形绘制-GX22

Gox语言中集成了Go语言的第三方图形绘制库gg,这是非常优秀的一个图形绘制库,用它来进行图形绘制比使用Go语言的官方库更加简单直接。

下面来看一个用gg包绘制基本图形的例子,说是基本,其实已经比较复杂了,我们这次倒过来顺序,先看看我们要画什么东西。

Gox语言中进行基本图形绘制-GX22

我们要绘制的是一个经典的圆圈方块三角图形的堆叠图,三个形状各有特色,并且颜色不同,分别是红蓝绿三原色。其中方块最简单,是纯色的,当然有一些透明,可以显示出下方遮盖的图形部分,圆圈图案则使用了雷达辐射状的颜色渐变,而三角图形则是空心图,并且描边使用了线性的颜色渐变。

我们下面就来看看Gox语言代码怎样实现这样还稍有些复杂的图形绘制,代码中附有详细的中文解说,非常易于理解。


<code>// 导入color包和gg包
gg = import("gg")
color = import("image/color")

// 建立一个绘图环境,图片大小为 600×400 像素
contextT = gg.NewContext(600, 400)

// 用十六进制方式设置当前颜色
contextT.SetHexColor("FFFFFF")

// 用当前颜色来清空整个图片
contextT.Clear()

// 设置线宽为 2 个像素
contextT.SetLineWidth(2)

// 设置RGB颜色,每种颜色的数值范围是 0.0 - 1.0

contextT.SetRGB(0.0, 0.0, 1.0)

// 画一个圆,以坐标为 (200, 200) 的点为圆心,半径为 50像素
contextT.DrawCircle(250, 250, 60)

// 真正进行线条绘制,并且保留绘图路径以便后面填充颜色
contextT.StrokePreserve()

// 创建一个渐变色填充方案 gradientT
// 是两点之间的圆环式渐变色
gradientT = gg.NewRadialGradient(250, 250, 0, 250, 250, 80)

// 创建一个颜色的基本方法
colorT = make(color.RGBA)
colorT.R = 0
colorT.G = 0
colorT.B = 0
colorT.A = 255

gradientT.AddColorStop(0, colorT)

// 注意创建颜色的快捷方法
gradientT.AddColorStop(1, color.NewRGBA(0, 0, 255, 255))

// 设置用渐变色 gradientT 填充
contextT.SetFillStyle(gradientT)

// 真正进行填充,并清除绘画路径,因为后面已经不需要了
contextT.Fill()

// 开始用填充的方式绘制一个矩形

// 用RGBA色彩体系设置当前颜色
// 用 0 - 255 的数值范围表示颜色和透明度

// 设置一定的透明度以便显示出被覆盖住的图形(圆形)
contextT.SetRGBA255(0, 255, 0, 180)

// 绘制一个左上角点坐标为 (300, 200),宽 100,高 100的矩形
contextT.DrawRectangle(300, 200, 100, 100)

// 仅填充颜色不绘制边线
contextT.Fill()

// 开始用路径法画一个三角形

// 用十六进制字符串设置颜色
// 可以加上前面的“#”号,也可以后面加上一个字节表示透明度
contextT.SetHexColor("#FF000099")

// 将虚拟的画笔移动到坐标为 (300, 120) 的点
contextT.MoveTo(300, 120)

// 从当前点绘制一条线到坐标为 (240, 230)的点为止
// 当前点将随之移动到 (240, 230)
contextT.LineTo(240, 230)

// 继续绘制一条直线到 (360, 230)
contextT.LineTo(360, 230)

// 继续绘制一条直线到 (300, 120)
contextT.LineTo(300, 120)

// 创建一个新的线性渐变色
gradientT = gg.NewLinearGradient(240, 120, 360, 230)

// 注意从16进制数字创建颜色的方法

gradientT.AddColorStop(0, color.NewRGBAFromHex("#00FF00FF"))
gradientT.AddColorStop(1, color.NewRGBAFromHex("0000FFFF"))
gradientT.AddColorStop(0.5, color.NewRGBAFromHex("FF0000"))

// 渐变色也可以用于线条颜色的渐变
contextT.SetStrokeStyle(gradientT)

// 设置粗一点的线宽以体现渐变色
contextT.SetLineWidth(10)

// 真正绘制三角形
contextT.Stroke()

// 保存图像为PNG格式的图片文件
contextT.SavePNG(`c:\\test\\gg.png`)

/<code>

我们补充一些说明:

  • 首先,gg包在Gox Tiny版本中不提供,Gox标准版和命令行版本中都是支持的;
  • 使用前当然要导入gg包,如果要自定义颜色,还需要导入“image/color”包;
  • 调用gg.NewContext可以创建一个绘图上下文对象,这个context对象是使用gg包绘图的基础,大部分操作都将基于这个上下文环境进行,可以理解成“画布”。gg包中还有,

NewContextForImage(im image.Image) *ContextNewContextForRGBA(im *image.RGBA) *Context

这两个函数分别用于基于图像或颜色模板创建一个绘图用context对象;

  • 注意其中各种设置颜色的方法,用rgb数字的和用16进制字符串方式的;
  • context.Clear函数将以当前设定的颜色来“清除”整个画布;
  • 在调用stroke、strokePreserve、Fill、FillPreserve等函数前,不会进行真正的画图操作;
  • NewRadialGradient和NewLinearGradient函数分别用于创建圆形渐变色和线性渐变色,其中都会设置几个节点用于控制颜色的变化;
  • SavePNG函数则直接将画好的画布存如PNG格式的图片,还有SaveJPG函数也可以使用。

怎么样,使用Gox语言绘图相当的容易吧。


分享到:


相關文章: