Files
MicroH7Board.Firmware/Color16.h
T
2025-05-13 02:03:18 +03:00

62 lines
1.4 KiB
C++

#pragma once
struct Color16 {
static constexpr std::uint8_t MaxRed = 0x1f;
static constexpr std::uint8_t MaxGreen = 0x3f;
static constexpr std::uint8_t MaxBlue = 0x1f;
constexpr Color16() : value(0){}
constexpr Color16(std::uint16_t v) : value(v){}
static constexpr Color16 red() {
Color16 result;
result.r(MaxRed);
result.g(0);
result.b(0);
return result;
}
static constexpr Color16 green() {
Color16 result;
result.r(0);
result.g(MaxGreen);
result.b(0);
return result;
}
static constexpr Color16 blue() {
Color16 result;
result.r(0);
result.g(0);
result.b(MaxBlue);
return result;
}
static constexpr Color16 white() {
Color16 result;
result.r(MaxRed);
result.g(MaxGreen);
result.b(MaxBlue);
return result;
}
std::uint16_t value;
constexpr std::uint8_t r() const{
return (value & 0xf800) >> 11;
}
constexpr std::uint8_t g() const{
return (value & 0x7e0) >> 5;
}
constexpr std::uint8_t b() const{
return (value & 0x1f);
}
constexpr void r(std::uint8_t v){
value = (value & ~0xf800) | (v << 11);
}
constexpr void g(std::uint8_t v){
value = (value & ~0x7e0) | (v << 5);
}
constexpr void b(std::uint8_t v){
value = (value & ~0x1f) | (v);
}
};