我目前想在循环上设置像素图像
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)
}
但是此功能存在问题。如果我想绘制一个像素,这就是它的外观
红色边框表示如果我转到下一个像素大小将被覆盖的广场将有多大
而不是寻找我想要的东西
我希望很清楚我想要实现的目标,但我真的不知道我应该使用哪种算法(如果我需要一个)或者只是纯粹的逻辑
答案 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)
您可能需要根据您的网格进行调整。