最近、ebitenを触り始めたので、気づいたことを共有していきたい。
ネット上にあったサンプルコードを参考に、まずは適当に画像ファイルを表示しようとしたのが以下のコード。
main.go
package main
import (
"bytes"
_ "embed"
"log"
"image"
"image/color"
"github.com/hajimehoshi/ebiten/v2"
)
//go:embed resource/sample.png
var byteSampleImg []byte
type Game struct {
stage int
}
func NewGame() *Game {
g := &Game{}
return g
}
func (g *Game) Update() error {
return nil
}
func (g *Game) Draw(screen *ebiten.Image) {
img, _, err := image.Decode(bytes.NewReader(byteSampleImg))
if err != nil {
log.Fatal(err)
}
sampleImg = ebiten.NewImageFromImage(img)
screen.Fill(color.White)
op := &ebiten.DrawImageOptions{}
op.GeoM.Translate(100, 100)
op.Filter = ebiten.FilterLinear
screen.DrawImage(sampleImg, op)
}
# 略
これで、
2023/06/11 23:31:06 image: unknown format
というエラーになった。pngファイルのビット深度とかに規定があるのかな、と思ったけど、ネット上にあるサンプルコードのpngファイルを使っても変化なし。
答えは単純で、image/png
をimport する必要があっただけだった。
package main
import (
"bytes"
_ "embed"
"log"
"image"
_ "image/png"
"image/color"
"github.com/hajimehoshi/ebiten/v2"
)
//go:embed resource/sample.png
var byteSampleImg []byte
type Game struct {
stage int
}
func NewGame() *Game {
g := &Game{}
return g
}
func (g *Game) Update() error {
return nil
}
func (g *Game) Draw(screen *ebiten.Image) {
img, _, err := image.Decode(bytes.NewReader(byteSampleImg))
if err != nil {
log.Fatal(err)
}
sampleImg = ebiten.NewImageFromImage(img)
screen.Fill(color.White)
op := &ebiten.DrawImageOptions{}
op.GeoM.Translate(100, 100)
op.Filter = ebiten.FilterLinear
screen.DrawImage(sampleImg, op)
}
# 略
これでOK。
jpegの場合は image/jpeg
を import すればよい。