mirror of
https://github.com/brain-hackers/lab
synced 2024-11-14 14:18:01 +09:00
commit
27fb64ac7b
@ -7,6 +7,7 @@
|
||||
- [read_keys_SH3.c](read_keys_SH3.c) Scan key matrix and return key name rewritten with C. nice performance
|
||||
- [x1](x1) Executable to analyze `[JHSBA]1` gen
|
||||
- [lcdbench](lcdbench) Benchmark fb0 fill and show results
|
||||
- [tmemo_converter](tmemo_converter) Converts 手書き暗記メモ into PNGs (2G or older)
|
||||
|
||||
|
||||
### License
|
||||
|
1
tmemo_converter/.gitignore
vendored
Normal file
1
tmemo_converter/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
!*.exe
|
16
tmemo_converter/README.md
Normal file
16
tmemo_converter/README.md
Normal file
@ -0,0 +1,16 @@
|
||||
### Prerequisites
|
||||
- Go 1.1x
|
||||
|
||||
|
||||
### Run
|
||||
|
||||
```shell-session
|
||||
$ # Example 1
|
||||
$ go run main.go tmemo000.tmd
|
||||
|
||||
$ # Example 2
|
||||
$ go run main.go tmemo000.tmd tmemo001.tmd
|
||||
|
||||
$ # Example 3
|
||||
$ go run main.go *.tmd
|
||||
```
|
71
tmemo_converter/main.go
Normal file
71
tmemo_converter/main.go
Normal file
@ -0,0 +1,71 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"image"
|
||||
"image/color"
|
||||
"image/png"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
)
|
||||
|
||||
const (
|
||||
bytesPerPixel = 2
|
||||
width = 480
|
||||
height = 320
|
||||
toolbarHeight = 16
|
||||
actualHeight = height - toolbarHeight
|
||||
|
||||
total = width * actualHeight * bytesPerPixel
|
||||
)
|
||||
|
||||
func main() {
|
||||
if len(os.Args) == 1 {
|
||||
fmt.Printf("Usage: %s INPUT ...\n", os.Args[0])
|
||||
fmt.Printf("Example: %s tmemo000.tmd tmemo001.tmd\n", os.Args[0])
|
||||
os.Exit(0)
|
||||
}
|
||||
|
||||
for _, a := range os.Args[1:] {
|
||||
err := convert(a)
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "failed to convert %s: %s\n", a, err)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func convert(fn string) error {
|
||||
raw, err := ioutil.ReadFile(fn)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to read %s: %s", fn, err)
|
||||
}
|
||||
|
||||
if len(raw) != total {
|
||||
return fmt.Errorf("unexpected binary length: expect=%d, actual=%d", total, len(raw))
|
||||
}
|
||||
|
||||
rgba := image.NewRGBA(image.Rect(0, 0, width, actualHeight))
|
||||
|
||||
for i := 0; i < width*actualHeight; i++ {
|
||||
pixel := uint16(raw[i*2+1])<<8 + uint16(raw[i*2])
|
||||
r := float64(pixel&0xf800>>11) * 255 / 31
|
||||
g := float64(pixel&0x07e0>>5) * 255 / 63
|
||||
b := float64(pixel&0x001f) * 255 / 31
|
||||
rgba.SetRGBA(i%width, actualHeight-i/width, color.RGBA{R: uint8(r), G: uint8(g), B: uint8(b), A: 255})
|
||||
}
|
||||
|
||||
newFn := fn + ".png"
|
||||
out, err := os.Create(newFn)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create a file %s: %s", newFn, err)
|
||||
}
|
||||
defer out.Close()
|
||||
|
||||
err = png.Encode(out, rgba)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to compress the image into PNG: %s", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
BIN
tmemo_converter/tmemo_converter_darwin_amd64
Executable file
BIN
tmemo_converter/tmemo_converter_darwin_amd64
Executable file
Binary file not shown.
BIN
tmemo_converter/tmemo_converter_darwin_arm64
Executable file
BIN
tmemo_converter/tmemo_converter_darwin_arm64
Executable file
Binary file not shown.
BIN
tmemo_converter/tmemo_converter_linux_amd64
Executable file
BIN
tmemo_converter/tmemo_converter_linux_amd64
Executable file
Binary file not shown.
BIN
tmemo_converter/tmemo_converter_windows_amd64.exe
Executable file
BIN
tmemo_converter/tmemo_converter_windows_amd64.exe
Executable file
Binary file not shown.
Loading…
Reference in New Issue
Block a user