From 10eb4ef7acb3bfa2489c8db4d5ec3a364feb39da Mon Sep 17 00:00:00 2001 From: Ingmar uit de Bos Date: Wed, 9 Feb 2022 19:24:41 +0100 Subject: [PATCH 1/4] Fix encoding of TextColors using 3 bytes --- pkg/encode.go | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/pkg/encode.go b/pkg/encode.go index e28e347..961ca63 100644 --- a/pkg/encode.go +++ b/pkg/encode.go @@ -22,12 +22,18 @@ func (pl2 *PL2) Encode(w io.Writer) error { return pl2.encodeTextColorTransforms(w) } -func (pl2 *PL2) encodeColors(w io.Writer, src color.Palette) error { +func (pl2 *PL2) encodeColors(w io.Writer, src color.Palette, colorBytes int) error { for idx := range src { r, g, b, _ := src[idx].RGBA() - if _, err := w.Write([]byte{byte(r), byte(g), byte(b), 0}); err != nil { - return fmt.Errorf("could not encode colors, %w", err) + if colorBytes == 3 { + if _, err := w.Write([]byte{byte(r), byte(g), byte(b)}); err != nil { + return fmt.Errorf("could not encode colors, %w", err) + } + } else { + if _, err := w.Write([]byte{byte(r), byte(g), byte(b), 0}); err != nil { + return fmt.Errorf("could not encode colors, %w", err) + } } } @@ -37,13 +43,13 @@ func (pl2 *PL2) encodeColors(w io.Writer, src color.Palette) error { func (pl2 *PL2) encodeBasePalette(w io.Writer) error { pl2.SetMainPalette(pl2.BasePalette) // if nil, generates default - return pl2.encodeColors(w, pl2.BasePalette) + return pl2.encodeColors(w, pl2.BasePalette, 4) } func (pl2 *PL2) encodeTextColors(w io.Writer) error { pl2.SetTextPalette(pl2.TextColors) // if nil, generates default - return pl2.encodeColors(w, pl2.TextColors) + return pl2.encodeColors(w, pl2.TextColors, 3) } func (pl2 *PL2) encodeTransforms(w io.Writer) (err error) { From a5e625897a6295976cbbfbb7de53a2a7c245763c Mon Sep 17 00:00:00 2001 From: Ingmar uit de Bos Date: Wed, 9 Feb 2022 19:25:50 +0100 Subject: [PATCH 2/4] Fix TextTransform colors due to double multiplication and single division --- pkg/generate.go | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/pkg/generate.go b/pkg/generate.go index cd24a59..b8d889c 100644 --- a/pkg/generate.go +++ b/pkg/generate.go @@ -2,28 +2,40 @@ package pkg import ( "image/color" + "fmt" "math" color2 "github.com/lucasb-eyer/go-colorful" ) func (pl2 *PL2) regenerate() { + fmt.Print("> SetMainPalette\n") pl2.SetMainPalette(pl2.BasePalette) + fmt.Print("> SetTextPalette\n") pl2.SetTextPalette(pl2.TextColors) + fmt.Print("> generateTransforms\n") pl2.generateTransforms() + fmt.Print("> generateTextColorTransforms\n") pl2.generateTextColorTransforms() } func (pl2 *PL2) generateTransforms() { + fmt.Print("---- generateLightingTransforms\n") pl2.generateLightingTransforms() + fmt.Print("---- generateBlendModeTransforms\n") pl2.generateBlendModeTransforms() + fmt.Print("---- generateColorVariationTransforms\n") pl2.generateColorVariationTransforms() + fmt.Print("---- generateOtherTransforms\n") pl2.generateOtherTransforms() } func (pl2 *PL2) generateLightingTransforms() { + fmt.Print("---- generateLightLevelVariations\n") pl2.generateLightLevelVariations() + fmt.Print("---- generateInvColorVariations\n") pl2.generateInvColorVariations() + fmt.Print("---- generateSelectedUnitTransforms\n") pl2.generateSelectedUnitTransforms() } @@ -460,12 +472,13 @@ func (pl2 *PL2) generateTextColorTransforms() { ar, ag, ab, _ := a.RGBA() br, _, _, _ := b.RGBA() - intensity := int(br) + intensity := int(br / math.MaxUint8) return color.RGBA{ - R: uint8((int(ar) * intensity) / math.MaxUint8), - G: uint8((int(ag) * intensity) / math.MaxUint8), - B: uint8((int(ab) * intensity) / math.MaxUint8), + R: uint8((int(ar / math.MaxUint8) * intensity) / math.MaxUint8), + G: uint8((int(ag / math.MaxUint8) * intensity) / math.MaxUint8), + B: uint8((int(ab / math.MaxUint8) * intensity) / math.MaxUint8), + A: uint8(math.MaxUint8), } } From 9f1d781f9ffeeca57471a6be214d668265f542c8 Mon Sep 17 00:00:00 2001 From: Ingmar uit de Bos Date: Wed, 9 Feb 2022 19:56:15 +0100 Subject: [PATCH 3/4] Fix generateRGBTransforms with proper color ranges --- pkg/generate.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/generate.go b/pkg/generate.go index b8d889c..0581a0a 100644 --- a/pkg/generate.go +++ b/pkg/generate.go @@ -354,7 +354,7 @@ func (pl2 *PL2) generateRGBTransforms() { gg := float64(g) * float64(g) bb := float64(b) * float64(b) - m := math.Sqrt(rr + gg + bb) + m := math.Sqrt(rr + gg + bb) / math.MaxUint8 pl2.RedTones[palIdx] = uint8(pl2.BasePalette.Index(fn(m, 0, 0))) pl2.GreenTones[palIdx] = uint8(pl2.BasePalette.Index(fn(0, m, 0))) From 9960b90a8be8890df3d1945a51e0bc1e0122aab2 Mon Sep 17 00:00:00 2001 From: Ingmar uit de Bos Date: Wed, 9 Feb 2022 20:05:08 +0100 Subject: [PATCH 4/4] Fix multiplicative blend and clean up comments --- pkg/generate.go | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/pkg/generate.go b/pkg/generate.go index 0581a0a..ab5d51e 100644 --- a/pkg/generate.go +++ b/pkg/generate.go @@ -2,40 +2,28 @@ package pkg import ( "image/color" - "fmt" "math" color2 "github.com/lucasb-eyer/go-colorful" ) func (pl2 *PL2) regenerate() { - fmt.Print("> SetMainPalette\n") pl2.SetMainPalette(pl2.BasePalette) - fmt.Print("> SetTextPalette\n") pl2.SetTextPalette(pl2.TextColors) - fmt.Print("> generateTransforms\n") pl2.generateTransforms() - fmt.Print("> generateTextColorTransforms\n") pl2.generateTextColorTransforms() } func (pl2 *PL2) generateTransforms() { - fmt.Print("---- generateLightingTransforms\n") pl2.generateLightingTransforms() - fmt.Print("---- generateBlendModeTransforms\n") pl2.generateBlendModeTransforms() - fmt.Print("---- generateColorVariationTransforms\n") pl2.generateColorVariationTransforms() - fmt.Print("---- generateOtherTransforms\n") pl2.generateOtherTransforms() } func (pl2 *PL2) generateLightingTransforms() { - fmt.Print("---- generateLightLevelVariations\n") pl2.generateLightLevelVariations() - fmt.Print("---- generateInvColorVariations\n") pl2.generateInvColorVariations() - fmt.Print("---- generateSelectedUnitTransforms\n") pl2.generateSelectedUnitTransforms() } @@ -165,7 +153,7 @@ func (pl2 *PL2) generateMultiplicativeTransforms() { pl2.MultiplicativeBlend = make([]Transform, multiplyBlends) fn := func(src, dst uint8) uint8 { - return uint8(math.Sqrt(float64(src)) * math.Sqrt(float64(dst))) + return uint8((float64(src) * float64(dst)) / math.MaxUint8) } for _ = range pl2.MultiplicativeBlend {