创建一张纯色图片
package main
import (
"image"
"log"
"github.com/BurntSushi/xgbutil"
"github.com/BurntSushi/xgbutil/xevent"
"github.com/BurntSushi/xgbutil/xgraphics"
)
func main() {
// 建立X连接
X, err := xgbutil.NewConn()
if err != nil {
log.Fatal(err)
}
// 创建一张图片并且设置每个像素的颜色 RGB 0x3366ff
color := xgraphics.BGRA{R: 0x33, G: 0x66, B: 0xff, A: 0xff}
// 创建一个图片,大小是300x300
ximg := xgraphics.New(X, image.Rect(0, 0, 300, 300))
// 对每一个像素点做设置
ximg.For(func(x, y int) xgraphics.BGRA {
return color
})
// 创建一个窗体并显示
ximg.XShowExtra("纯色", true)
xevent.Main(X)
}
这里存在一个问题,那就是我们使用xgraphics.New创建了一个 xgraphics.Image对象,这个对象包含一个 X pixmap,我们在不使用的时候需要调用ximg.Destroy()方法显示得销毁这个X pixmap对象
创建一张美丽图片
我们需要显示一张美丽的图片
图片我们命名为wld.jpg
package main
import (
"bytes"
"image"
"image/color"
_ "image/jpeg"
"io/ioutil"
"log"
"github.com/BurntSushi/xgbutil"
"github.com/BurntSushi/xgbutil/xevent"
"github.com/BurntSushi/xgbutil/xgraphics"
)
// 返回王珞丹图片
func wld() image.Image {
data, err := ioutil.ReadFile("wld.jpg")
if err != nil {
log.Fatal(err)
}
image, _, err := image.Decode(bytes.NewReader(data))
if err != nil {
log.Fatal(err)
}
return image
}
func main() {
// 建立X连接
X, err := xgbutil.NewConn()
if err != nil {
log.Fatal(err)
}
// 创建一个图片,大小是556x720
ximg := xgraphics.New(X, image.Rect(0, 0, 556, 720))
wld_pic := wld()
// 对每一个像素点做设置
ximg.For(func(x, y int) xgraphics.BGRA {
// 获取对应左边的像素点
r, g, b, a := color.RGBAModel.Convert(wld_pic.At(x, y)).RGBA()
// 把RGBA数据装载成xgraphics.BGRA对象
return xgraphics.BGRA{R: uint8(r), G: uint8(g), B: uint8(b), A: uint8(a)}
})
// 创建一个窗体并显示
ximg.XShowExtra("王珞丹", true)
xevent.Main(X)
}
执行结果
这里需要注意的是golang的标准库image库中的Color对象和 xgb中的BGRA对象不一致,甚至连数据取值范围都不是我们以为的 0-255,而是0-65535。关于image库,我们后续其他博客给出更仔细研究。