From baf3b6b918a0c48cd20f12cfc56f5e5c2ea6064c Mon Sep 17 00:00:00 2001 From: Michael Miller Date: Sun, 22 Jan 2023 11:28:46 -0800 Subject: [PATCH] Conversion and promotion fixes (#626) --- src/internal/NeoGamma.h | 4 ++-- src/internal/Rgb48Color.h | 6 +++--- src/internal/RgbColor.cpp | 6 +++--- src/internal/RgbwColor.cpp | 8 ++++---- src/internal/SegmentDigit.cpp | 2 +- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/internal/NeoGamma.h b/src/internal/NeoGamma.h index 94a4747..2c4cf96 100644 --- a/src/internal/NeoGamma.h +++ b/src/internal/NeoGamma.h @@ -82,14 +82,14 @@ public: Rgb48Color Correct(const Rgb48Color& original) { - return RgbColor(T_METHOD::Correct(original.R), + return Rgb48Color(T_METHOD::Correct(original.R), T_METHOD::Correct(original.G), T_METHOD::Correct(original.B)); } Rgbw64Color Correct(const Rgbw64Color& original) { - return RgbwColor(T_METHOD::Correct(original.R), + return Rgbw64Color(T_METHOD::Correct(original.R), T_METHOD::Correct(original.G), T_METHOD::Correct(original.B), T_METHOD::Correct(original.W)); diff --git a/src/internal/Rgb48Color.h b/src/internal/Rgb48Color.h index f9776b1..a16dc86 100644 --- a/src/internal/Rgb48Color.h +++ b/src/internal/Rgb48Color.h @@ -63,9 +63,9 @@ struct Rgb48Color : RgbColorBase // ------------------------------------------------------------------------ Rgb48Color(const RgbColor& color) { - R = (color.R == 0) ? 0 : (color.R << 8 | 0xff); - G = (color.G == 0) ? 0 : (color.G << 8 | 0xff); - B = (color.B == 0) ? 0 : (color.B << 8 | 0xff); + R = (uint16_t)color.R * 257; // 257 = MAXUINT16/MAXUINT8 = 65535/255 + G = (uint16_t)color.R * 257; + B = (uint16_t)color.R * 257; }; // ------------------------------------------------------------------------ diff --git a/src/internal/RgbColor.cpp b/src/internal/RgbColor.cpp index 406d78e..560d2b7 100644 --- a/src/internal/RgbColor.cpp +++ b/src/internal/RgbColor.cpp @@ -162,9 +162,9 @@ void RgbColor::Lighten(uint8_t delta) RgbColor RgbColor::LinearBlend(const RgbColor& left, const RgbColor& right, float progress) { - return RgbColor( left.R + ((right.R - left.R) * progress), - left.G + ((right.G - left.G) * progress), - left.B + ((right.B - left.B) * progress)); + return RgbColor( left.R + (((int16_t)right.R - left.R) * progress), + left.G + (((int16_t)right.G - left.G) * progress), + left.B + (((int16_t)right.B - left.B) * progress)); } RgbColor RgbColor::BilinearBlend(const RgbColor& c00, diff --git a/src/internal/RgbwColor.cpp b/src/internal/RgbwColor.cpp index 10b3727..b11997b 100644 --- a/src/internal/RgbwColor.cpp +++ b/src/internal/RgbwColor.cpp @@ -165,10 +165,10 @@ void RgbwColor::Lighten(uint8_t delta) RgbwColor RgbwColor::LinearBlend(const RgbwColor& left, const RgbwColor& right, float progress) { - return RgbwColor( left.R + ((right.R - left.R) * progress), - left.G + ((right.G - left.G) * progress), - left.B + ((right.B - left.B) * progress), - left.W + ((right.W - left.W) * progress) ); + return RgbwColor( left.R + (((int16_t)right.R - left.R) * progress), + left.G + (((int16_t)right.G - left.G) * progress), + left.B + (((int16_t)right.B - left.B) * progress), + left.W + (((int16_t)right.W - left.W) * progress) ); } RgbwColor RgbwColor::BilinearBlend(const RgbwColor& c00, diff --git a/src/internal/SegmentDigit.cpp b/src/internal/SegmentDigit.cpp index b310f59..7b2cfd9 100644 --- a/src/internal/SegmentDigit.cpp +++ b/src/internal/SegmentDigit.cpp @@ -159,7 +159,7 @@ SevenSegDigit SevenSegDigit::LinearBlend(const SevenSegDigit& left, const SevenS for (uint8_t iSegment = 0; iSegment < SegmentCount; iSegment++) { - result.Segment[iSegment] = left.Segment[iSegment] + ((right.Segment[iSegment] - left.Segment[iSegment]) * progress); + result.Segment[iSegment] = left.Segment[iSegment] + (((int16_t)right.Segment[iSegment] - left.Segment[iSegment]) * progress); } return result; }