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語言繪圖相當的容易吧。


分享到:


相關文章: