创建图片(3)

sin 2021-09-21 PM 690℃ 0条

创建一张纯色图片

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)
}

img1

这里存在一个问题,那就是我们使用xgraphics.New创建了一个 xgraphics.Image对象,这个对象包含一个 X pixmap,我们在不使用的时候需要调用ximg.Destroy()方法显示得销毁这个X pixmap对象

创建一张美丽图片

我们需要显示一张美丽的图片

img2

图片我们命名为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)
}

执行结果

img3

这里需要注意的是golang的标准库image库中的Color对象和 xgb中的BGRA对象不一致,甚至连数据取值范围都不是我们以为的 0-255,而是0-65535。关于image库,我们后续其他博客给出更仔细研究。

标签: none

非特殊说明,本博所有文章均为博主原创。

上一篇 窗体的创建(2)
下一篇 wingo-ipc(4)

评论啦~