https://tour.go-zh.org/methods/25
一、題目描述
還記得之前編寫的圖片生成器嗎?我們再來編寫另外一個,不過這次它將會返回一個 image.Image
的實現而非一個數據切片。
定義你自己的 Image
類型,實現必要的方法並調用 pic.ShowImage
。
Bounds
應當返回一個 image.Rectangle
,例如 image.Rect(0, 0, w, h)
。
ColorModel
應當返回 color.RGBAModel
。
At
應當返回一個顏色。上一個圖片生成器的值 v
對應於此次的 color.RGBA{v, v, 255, 255}
。
二、題目分析
image
包定義了 Image
接口:
package image type Image interface { ColorModel() color.Model //顏色模式 Bounds() Rectangle //圖片邊界 At(x, y int) color.Color //圖像上某個點的顏色 }
*注意:* Bounds
方法的返回值 Rectangle
實際上是一個 image.Rectangle
,它在 image
包中聲明。
了解官方的Image包的結構后,接下來就可以自己寫方法。
三、Go代碼
package main import ( "golang.org/x/tour/pic" "image/color" "image" ) type Image struct{} //新建一個Image結構體 func (i Image) ColorModel() color.Model{ //實現Image包中顏色模式的方法 return color.RGBAModel } func (i Image) Bounds() image.Rectangle{ //實現Image包中生成圖片邊界的方法 return image.Rect(0,0,200,200) } func (i Image) At(x,y int) color.Color{ //實現Image包中生成圖像某個點的方法 return color.RGBA{uint8(x),uint8(y),uint8(255),uint8(255)} } func main() { m := Image{} pic.ShowImage(m) //調用 }
四、參考資料
https://linkscue.com/2018/02/28/go-tour-practice-image/