diff --git a/util/image/generate.go b/util/image/generate.go
index 81c69f7..9635b87 100644
--- a/util/image/generate.go
+++ b/util/image/generate.go
@@ -5,6 +5,7 @@ import (
"fmt"
"image"
"image/color"
+ "image/color/palette"
"image/png"
"math/rand"
"time"
@@ -76,7 +77,7 @@ func init() {
}
// Generate function
-func Generate(state *shogi.State, options *StyleOptions) (image.Image, error) {
+func Generate(state *shogi.State, options *StyleOptions) (*image.Paletted, error) {
options = checkOptions(options)
boardImg, err := boardImage(options.Board)
if err != nil {
@@ -90,7 +91,8 @@ func Generate(state *shogi.State, options *StyleOptions) (image.Image, error) {
xStep := 387.0 / 9.0
yStep := 432.0 / 9.0
xOffset := 138
- dst := image.NewRGBA(image.Rectangle{Min: image.ZP, Max: boardImg.Bounds().Size().Add(image.Pt(276, 0))})
+ // dst := image.NewRGBA(image.Rectangle{Min: image.ZP, Max: boardImg.Bounds().Size().Add(image.Pt(276, 0))})
+ dst := image.NewPaletted(image.Rectangle{Min: image.ZP, Max: boardImg.Bounds().Size().Add(image.Pt(276, 0))}, palette.WebSafe)
for i := 0; i < dst.Bounds().Dx(); i++ {
for j := 0; j < dst.Bounds().Dy(); j++ {
dst.Set(i, j, color.White)
package main
import (
"fmt"
"image"
"image/gif"
"log"
"os"
"strings"
"github.com/sugyan/shogi/format/csa"
"github.com/sugyan/shogi/logic/problem/generator"
"github.com/sugyan/shogi/logic/problem/solver"
"github.com/sugyan/shogi/record"
shogiImage "github.com/sugyan/shogi/util/image"
)
func main() {
state, _ := generator.Generate(generator.Type5)
answer := solver.Solve(state)
record := &record.Record{
State: state,
Moves: answer,
}
println(record.ConvertToString(csa.NewConverter(nil)))
answerStr, err := state.MoveStrings(answer)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Answer: %s\n", strings.Join(answerStr, " -> "))
var images []*image.Paletted
var delays []int
for i := 0; i <= len(answer); i++ {
if i > 0 {
state.Apply(answer[i-1])
}
img, err := shogiImage.Generate(state, &shogiImage.StyleOptions{
Piece: shogiImage.PieceKinki,
})
if err != nil {
log.Fatal(err)
}
images = append(images, img)
if i < len(answer) {
delays = append(delays, 150)
} else {
delays = append(delays, 500)
}
}
out, err := os.Create("out.gif")
if err != nil {
log.Fatal(err)
}
err = gif.EncodeAll(out, &gif.GIF{
Image: images,
Delay: delays,
})
if err != nil {
log.Fatal(err)
}
out.Close()
}
Licensed in NYSL
Related links