问题描述
我想使用surface.At()获取像素数据
package main
import (
"fmt"
"github.com/veandco/go-sdl2/sdl"
)
func main() {
var (
winTitle string = "Surface At"
winWidth,winHeight int32 = 1200,720
window *sdl.Window
renderer *sdl.Renderer
surface *sdl.Surface
)
window,_ = sdl.CreateWindow(winTitle,sdl.WINDOWPOS_CENTERED,winWidth,winHeight,sdl.WINDOW_SHOWN)
renderer,_ = sdl.CreateRenderer(window,-1,sdl.RENDERER_ACCELERATED)
renderer.SetDrawColor(35,80,180)
renderer.Clear()
renderer.Present()
surface,_ = window.GetSurface()
for x := 0; x < int(winWidth); x++ {
for y := 0; y < int(winHeight); y++ {
color := surface.At(x,y)
fmt.Println(color,"color",x,"x",y,"y")
}
}
sdl.Delay(1000)
sdl.Quit()
}
但是,它没有返回每个像素的实际颜色({35,180} color 0 x 0 y
),而是一直返回{0 0 0 255} color 0 x 0 y
直到最后。
如何解决此问题? 或者也许有些东西可以代替surface.At()使用?
解决方法
我发现出了什么问题,实际上我不得不对表面进行更改。代码如下:
package main
import (
"fmt"
"github.com/veandco/go-sdl2/sdl"
)
func main() {
var (
winTitle string = "Surface At"
winWidth,winHeight int32 = 1200,720
window *sdl.Window
surface *sdl.Surface
)
window,_ = sdl.CreateWindow(winTitle,sdl.WINDOWPOS_CENTERED,winWidth,winHeight,sdl.WINDOW_SHOWN)
surface,_ = window.GetSurface()
surface.FillRect(&sdl.Rect{50,50,600,300},39700) //Change color from x - {50; 600},y - {50; 300}
color1 := surface.At(100,100)
color2 := surface.At(5,5)
fmt.Printf("%v color at %d x,%d y\n",color1,100,100)
fmt.Printf("%v color at %d x,color2,5,5)
sdl.Delay(4000)
sdl.Quit()
}
输出为:
{20 155 0 255} 颜色在 100 x,100 y
{0 0 0 255} 颜色为 5 x,5 y