/
write.go
52 lines (47 loc) · 982 Bytes
/
write.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package io
import (
"image"
"os"
"github.com/aethiopicuschan/kaban/merge"
"github.com/aethiopicuschan/odori/sprite"
)
func Write(ch chan error, bytes []byte, path string) {
file, err := os.Create(path)
if err != nil {
ch <- err
return
}
defer file.Close()
_, err = file.Write(bytes)
ch <- err
}
type WriteSpriteSheetResult struct {
RectsMap map[string]image.Rectangle
Err error
}
func WriteSpriteSheet(ch chan WriteSpriteSheetResult, sprites []sprite.Sprite, path string) {
result := WriteSpriteSheetResult{}
defer func() {
ch <- result
}()
imgs := make([]image.Image, len(sprites))
for i, s := range sprites {
if !s.IsEmpty() {
imgs[i] = s.Image
}
}
img, rects, err := merge.Merge(imgs)
if err != nil {
result.Err = err
return
}
err = WritePng(img, path)
if err != nil {
result.Err = err
return
}
result.RectsMap = make(map[string]image.Rectangle)
for i, rect := range rects {
result.RectsMap[sprites[i].Id()] = rect
}
}