我在golang中使用sdl,想从窗口获取像素数据,但这不起作用

问题描述

我想使用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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...