Use palettized images
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
package conv
|
||||
|
||||
import (
|
||||
"image"
|
||||
|
||||
"github.com/hajimehoshi/ebiten"
|
||||
|
||||
"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 {
|
||||
w := int(rawSpr.Width)
|
||||
h := int(rawSpr.Height)
|
||||
data := spriteToData(name, i, rawSpr)
|
||||
|
||||
image, err := ebiten.NewImage(w, h, ebiten.FilterDefault)
|
||||
stdImage := spriteToImage(rawSpr)
|
||||
ebitenImage, err := ebiten.NewImageFromImage(stdImage, ebiten.FilterDefault)
|
||||
if err != nil {
|
||||
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
|
||||
}
|
||||
|
||||
func spriteToData(name string, idx int, sprite *data.Sprite) []byte {
|
||||
width := int(sprite.Width)
|
||||
height := int(sprite.Height)
|
||||
out := make([]byte, 0, 4*width*height)
|
||||
|
||||
for _, palette := range sprite.Data {
|
||||
color := data.ColorPalette[int(palette)]
|
||||
out = append(out, color.R, color.G, color.B, color.A)
|
||||
func spriteToImage(sprite *data.Sprite) image.Image {
|
||||
return &image.Paletted{
|
||||
Pix: sprite.Data,
|
||||
Stride: int(sprite.Width),
|
||||
Rect: image.Rect(0, 0, int(sprite.Width), int(sprite.Height)),
|
||||
Palette: data.ColorPalette,
|
||||
}
|
||||
|
||||
return out
|
||||
}
|
||||
|
@@ -5,7 +5,7 @@ import "image/color"
|
||||
var (
|
||||
Transparent = color.RGBA{R: 0, G: 0, B: 0, A: 0}
|
||||
|
||||
ColorPalette = []color.RGBA{
|
||||
ColorPalette = color.Palette{
|
||||
Transparent,
|
||||
color.RGBA{R: 128, G: 0, B: 0, A: 255},
|
||||
color.RGBA{R: 0, G: 128, B: 0, A: 255},
|
||||
|
Reference in New Issue
Block a user