去图像画广场

时间:2016-07-10 14:52:58

标签: image go

我目前想在循环上设置像素图像

func ParseMap(path string) {
    ...
    for _, h := range serverMap.Houses {
        houseData := Houses.GetHouse(h.ID)
        houseImage := image.NewRGBA(image.Rect(int(houseData.EntryX)-32, int(houseData.EntryY)-32, int(houseData.EntryX)+32, int(houseData.EntryY)+32))
        draw.Draw(houseImage, houseImage.Bounds(), &image.Uniform{
            backgroundColor,
        }, image.ZP, draw.Src)
        for _, tile := range h.Tiles {
            pos := tile.Position()
            if pos.Z != uint8(houseData.EntryZ) {
                continue
            }
            drawSquare(houseImage, tileColor, 12, int(pos.X), int(pos.Y))
        imgFile, _ := os.Create(fmt.Sprintf("%v/%v/%v.png", pigo.Config.String("template"), "public/houses", houseData.Name))
        png.Encode(imgFile, houseImage)
        imgFile.Close()
    }
    ...
}

我在一片包含X,Y,Z场的Tiles上循环,但由于1像素看起来非常小,我希望每个像素为6像素的正方形,具有给定的功能

func drawSquare(img *image.RGBA, c color.Color, size int, x, y int) {
    patch := image.NewRGBA(image.Rect(0, 0, size, size))
    draw.Draw(patch, patch.Bounds(), &image.Uniform{
        c,
    }, image.ZP, draw.Src)
    draw.Draw(img, image.Rect(x, y, x+size, y+size), patch, image.ZP, draw.Src)
}

但是此功能存在问题。如果我想绘制一个像素,这就是它的外观

enter image description here

红色边框表示如果我转到下一个像素大小将被覆盖的广场将有多大

enter image description here

而不是寻找我想要的东西

enter image description here

我希望很清楚我想要实现的目标,但我真的不知道我应该使用哪种算法(如果我需要一个)或者只是纯粹的逻辑

1 个答案:

答案 0 :(得分:1)

稍微思考一下,我想我知道这个问题。这是这一行:

draw.Draw(img, image.Rect(x, y, x+size, y+size), patch, image.ZP, draw.Src)

您只需添加尺寸以使每个矩形变大,但不要将其与位置相乘。

draw.Draw(img, image.Rect(x*size, y*size, x+size, y+size), patch, image.ZP, draw.Src)

您可能需要根据您的网格进行调整。