Go SDL2 游戏开发入门8-color keying 抠图
前言
SDL2 的教程上说这一节叫 color keying, 实在不懂这是什么意思
百度了一下说是抠图, 我实在是对应不上这两个词
通俗的解释一下吧, 就是比如你有一张图, 你想把背景色去掉, 那这个时候你就可以使用 color keying
代码
package main import ( "github.com/veandco/go-sdl2/img" "github.com/veandco/go-sdl2/sdl" ) const ( W = 670 H = 620 ) func main() { sdl.Init(sdl.INIT_EVERYTHING) defer sdl.Quit() window, _ := sdl.CreateWindow("test", sdl.WINDOWPOS_UNDEFINED, sdl.WINDOWPOS_UNDEFINED, W, H, sdl.WINDOW_SHOWN) defer window.Destroy() renderer, _ := sdl.CreateRenderer(window, -1, sdl.RENDERER_ACCELERATED) defer renderer.Destroy() renderer.SetDrawColor(128, 128, 128, 255) backImage, _ := img.Load("../asserts/image/background.png") backTexture, _ := renderer.CreateTextureFromSurface(backImage) backImage.Free() defer backTexture.Destroy() fooImage, _ := img.Load("../asserts/image/foo.png") //最重要的一行 fooImage.SetColorKey(true, sdl.MapRGB(fooImage.Format, 0, 255, 255)) fooTexture, _ := renderer.CreateTextureFromSurface(fooImage) fooImage.Free() defer fooTexture.Destroy() running := true for running { for event := sdl.PollEvent(); event != nil; event = sdl.PollEvent() { switch event.(type) { case *sdl.QuitEvent: println("Quit") running = false break } } renderer.Clear() renderer.Copy(backTexture, nil, nil) dst := sdl.Rect{300, 300, 100, 100} renderer.Copy(fooTexture, nil, &dst) renderer.Present() sdl.Delay(16) } }
- 这段代码很好理解呀, 就是渲染两张图片
- 最终要的一段代码就是 fooImage.SetColorKey 这个函数, 他的目的就是把 foo.png 这张图的背景色去掉
- 第 1 个参数要设置成 true, 第 2 个参数是一个 RGB 值, 这个值就是你想抠掉的颜色的 RGB 值
- 就这样咯