Use palettized images

This commit is contained in:
2020-03-19 19:02:32 +00:00
parent d50a160f02
commit 34d12edc2a
2 changed files with 12 additions and 16 deletions

View File

@@ -1,6 +1,8 @@
package conv package conv
import ( import (
"image"
"github.com/hajimehoshi/ebiten" "github.com/hajimehoshi/ebiten"
"code.ur.gs/lupine/ordoor/internal/data" "code.ur.gs/lupine/ordoor/internal/data"
@@ -41,29 +43,23 @@ func ConvertObject(rawObj *data.Object, name string) (*Object, error) {
for i, rawSpr := range rawObj.Sprites { for i, rawSpr := range rawObj.Sprites {
w := int(rawSpr.Width) w := int(rawSpr.Width)
h := int(rawSpr.Height) h := int(rawSpr.Height)
data := spriteToData(name, i, rawSpr) stdImage := spriteToImage(rawSpr)
ebitenImage, err := ebiten.NewImageFromImage(stdImage, ebiten.FilterDefault)
image, err := ebiten.NewImage(w, h, ebiten.FilterDefault)
if err != nil { if err != nil {
return nil, err return nil, err
} }
_ = image.ReplacePixels(data)
out.Sprites[i] = &Sprite{Width: w, Height: h, Image: image} out.Sprites[i] = &Sprite{Width: w, Height: h, Image: ebitenImage}
} }
return out, nil return out, nil
} }
func spriteToData(name string, idx int, sprite *data.Sprite) []byte { func spriteToImage(sprite *data.Sprite) image.Image {
width := int(sprite.Width) return &image.Paletted{
height := int(sprite.Height) Pix: sprite.Data,
out := make([]byte, 0, 4*width*height) Stride: int(sprite.Width),
Rect: image.Rect(0, 0, int(sprite.Width), int(sprite.Height)),
for _, palette := range sprite.Data { Palette: data.ColorPalette,
color := data.ColorPalette[int(palette)]
out = append(out, color.R, color.G, color.B, color.A)
} }
return out
} }

View File

@@ -5,7 +5,7 @@ import "image/color"
var ( var (
Transparent = color.RGBA{R: 0, G: 0, B: 0, A: 0} Transparent = color.RGBA{R: 0, G: 0, B: 0, A: 0}
ColorPalette = []color.RGBA{ ColorPalette = color.Palette{
Transparent, Transparent,
color.RGBA{R: 128, G: 0, B: 0, A: 255}, color.RGBA{R: 128, G: 0, B: 0, A: 255},
color.RGBA{R: 0, G: 128, B: 0, A: 255}, color.RGBA{R: 0, G: 128, B: 0, A: 255},