ebiten/ebitenutil/gen.go
2024-07-29 16:29:57 +09:00

91 lines
1.9 KiB
Go

// Copyright 2022 The Ebitengine Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//go:build ignore
package main
import (
"bufio"
"fmt"
"image"
"image/color"
"image/png"
"os"
"github.com/hajimehoshi/bitmapfont/v3"
"golang.org/x/image/font"
"golang.org/x/image/math/fixed"
)
func main() {
if err := run(); err != nil {
fmt.Fprintf(os.Stderr, "%v\n", err)
}
}
func run() error {
// These values are copied from an example in github.com/hajimehoshi/bitmapfont.
const (
charWidth = 6
lineHeight = 16
)
var lines []string
for j := 0; j < 8; j++ {
var line string
for i := 0; i < 32; i++ {
line += string(rune(i + j*32))
}
lines = append(lines, line)
}
dst := image.NewRGBA(image.Rect(0, 0, charWidth*32, lineHeight*8))
for i, clr := range []color.Color{color.RGBA{0, 0, 0, 0x80}, color.White} {
var offsetX int
var offsetY int
if i == 0 {
offsetX = 1
offsetY = 1
}
d := font.Drawer{
Dst: dst,
Src: image.NewUniform(clr),
Face: bitmapfont.Face,
Dot: fixed.Point26_6{X: fixed.I(offsetX), Y: bitmapfont.Face.Metrics().Ascent + fixed.I(offsetY)},
}
for _, line := range lines {
d.Dot.X = fixed.I(offsetX)
d.DrawString(line)
d.Dot.Y += fixed.I(lineHeight)
}
}
f, err := os.Create("text.png")
if err != nil {
return err
}
defer f.Close()
w := bufio.NewWriter(f)
if err := png.Encode(w, dst); err != nil {
return err
}
if err := w.Flush(); err != nil {
return err
}
return nil
}