libepaper 2.0.0
A C++23 library for controlling Waveshare e-paper displays on Raspberry Pi, featuring transparent sleep/wake management and a fluent builder API.
Loading...
Searching...
No Matches
Namespaces | Functions | Variables
pixel_codec.hpp File Reference

Centralized pixel encoding/decoding utilities for framebuffers. More...

#include "epaper/color/color.hpp"
#include "epaper/core/types.hpp"
#include "epaper/drivers/driver.hpp"
#include <array>
#include <cstddef>
#include <cstdint>
#include <span>
Include dependency graph for pixel_codec.hpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Namespaces

namespace  epaper
 
namespace  epaper::pixel_constants
 

Functions

constexpr auto epaper::spectra6_color_to_value (Color color) noexcept -> std::uint8_t
 Convert a Color to its 3-bit Spectra6 value.
 
constexpr auto epaper::spectra6_value_to_color (std::uint8_t value) noexcept -> Color
 Convert a 3-bit Spectra6 value to Color.
 
constexpr auto epaper::color_to_rgb (Color color) noexcept -> RGB
 Convert a Color enum to RGB values.
 
constexpr auto epaper::rgb_to_grayscale (std::uint8_t r, std::uint8_t g, std::uint8_t b) noexcept -> std::uint8_t
 Convert RGB values to grayscale using standard luminance formula.
 
constexpr auto epaper::rgb_to_color_bw (std::uint8_t r, std::uint8_t g, std::uint8_t b) noexcept -> Color
 Convert RGB to Color for black/white mode.
 
constexpr auto epaper::rgb_to_color_grayscale4 (std::uint8_t r, std::uint8_t g, std::uint8_t b) noexcept -> Color
 Convert RGB to Color for 4-level grayscale mode.
 
constexpr auto epaper::rgb_to_color (DisplayMode mode, std::uint8_t r, std::uint8_t g, std::uint8_t b) noexcept -> Color
 Convert RGB to Color based on display mode.
 
constexpr auto epaper::calculate_bw_position (std::size_t width, std::size_t x, std::size_t y) noexcept -> std::pair< std::size_t, std::uint8_t >
 Calculate byte index and bit mask for B/W mode pixel.
 
constexpr auto epaper::calculate_gray_position (std::size_t width, std::size_t x, std::size_t y) noexcept -> std::pair< std::size_t, std::uint8_t >
 Calculate byte index and pixel shift for Grayscale4 mode pixel.
 
constexpr auto epaper::calculate_spectra6_position (std::size_t width, std::size_t x, std::size_t y) noexcept -> std::pair< std::size_t, std::size_t >
 Calculate byte index and bit offset for Spectra6 (3-bit) mode pixel.
 
auto epaper::get_pixel_bw (std::span< const std::byte > buffer, std::size_t width, std::size_t x, std::size_t y) noexcept -> Color
 Read a pixel from a B/W mode buffer.
 
auto epaper::get_pixel_grayscale4 (std::span< const std::byte > buffer, std::size_t width, std::size_t x, std::size_t y) noexcept -> Color
 Read a pixel from a Grayscale4 mode buffer.
 
auto epaper::get_pixel_bwr_bwy (std::span< const std::byte > buffer, std::size_t width, std::size_t height, std::size_t x, std::size_t y, bool is_bwr) noexcept -> Color
 Read a pixel from a BWR or BWY mode buffer.
 
auto epaper::get_pixel_spectra6 (std::span< const std::byte > buffer, std::size_t width, std::size_t x, std::size_t y) noexcept -> Color
 Read a pixel from a Spectra6 mode buffer.
 
auto epaper::get_pixel_from_buffer (DisplayMode mode, std::span< const std::byte > buffer, std::size_t width, std::size_t height, std::size_t x, std::size_t y) noexcept -> Color
 Read a pixel from a buffer based on display mode.
 
auto epaper::set_pixel_bw (std::span< std::byte > buffer, std::size_t width, std::size_t x, std::size_t y, Color color) noexcept -> void
 Write a pixel to a B/W mode buffer.
 
auto epaper::set_pixel_grayscale4 (std::span< std::byte > buffer, std::size_t width, std::size_t x, std::size_t y, Color color) noexcept -> void
 Write a pixel to a Grayscale4 mode buffer.
 
auto epaper::set_pixel_bwr_bwy (std::span< std::byte > buffer, std::size_t width, std::size_t height, std::size_t x, std::size_t y, Color color, bool is_bwr) noexcept -> void
 Write a pixel to a BWR or BWY mode buffer.
 
auto epaper::set_pixel_spectra6 (std::span< std::byte > buffer, std::size_t width, std::size_t x, std::size_t y, Color color) noexcept -> void
 Write a pixel to a Spectra6 mode buffer.
 
auto epaper::set_pixel_in_buffer (DisplayMode mode, std::span< std::byte > buffer, std::size_t width, std::size_t height, std::size_t x, std::size_t y, Color color) noexcept -> void
 Write a pixel to a buffer based on display mode.
 

Variables

constexpr std::array< Color, 8 > epaper::SPECTRA6_VALUE_TO_COLOR
 Mapping from 3-bit Spectra6 value to Color enum.
 
Black/White Mode Constants
constexpr std::uint8_t epaper::pixel_constants::BW_PIXELS_PER_BYTE = 8
 
constexpr std::uint8_t epaper::pixel_constants::BW_MSB_MASK = 0x80
 
Grayscale4 Mode Constants
constexpr std::uint8_t epaper::pixel_constants::GRAY_PIXELS_PER_BYTE = 4
 
constexpr std::uint8_t epaper::pixel_constants::GRAY_BITS_PER_PIXEL = 2
 
constexpr std::uint8_t epaper::pixel_constants::GRAY_PIXEL_MASK = 0xC0
 
Spectra6 Mode Constants
constexpr std::uint8_t epaper::pixel_constants::SPECTRA6_BITS_PER_PIXEL = 3
 
constexpr std::uint8_t epaper::pixel_constants::SPECTRA6_COLOR_MASK = 0x07
 
Grayscale Thresholds (for RGB conversion)
constexpr std::uint8_t epaper::pixel_constants::GRAY_THRESHOLD_WHITE = 192
 
constexpr std::uint8_t epaper::pixel_constants::GRAY_THRESHOLD_LIGHT = 128
 
constexpr std::uint8_t epaper::pixel_constants::GRAY_THRESHOLD_DARK = 64
 

Detailed Description

Centralized pixel encoding/decoding utilities for framebuffers.

Provides all the bit manipulation logic for reading and writing pixels in various display modes. This eliminates duplication between Display and MockDriver while documenting the exact framebuffer format for each mode.

Supported Display Modes:

Design Principles:

Bit Layout Examples:

Black/White (1bpp MSB-first):
Byte: [p0 p1 p2 p3 p4 p5 p6 p7]
p0 = MSB (bit 7), p7 = LSB (bit 0)
1 = White, 0 = Black
Grayscale4 (2bpp):
Byte: [p0_hi p0_lo | p1_hi p1_lo | p2_hi p2_lo | p3_hi p3_lo]
00 = Black, 01 = Gray2, 10 = Gray1, 11 = White
BWR/BWY (dual-plane 1bpp):
Plane 0 (BW): [b0 b1 b2 ... ] (1=White, 0=Black)
Plane 1 (Color): [c0 c1 c2 ... ] (0=Color, 1=Transparent) [active-low]
Color pixel = (BW=0, Color=0), White = (BW=1, Color=1)
Spectra6 (3bpp cross-byte):
3 pixels = 9 bits = 1 byte + 1 bit:
[p0_b2 p0_b1 p0_b0 | p1_b2 p1_b1 p1_b0 | p2_b2 p2_b1 p2_b0 ...]
Values: 0=Black, 1=White, 2=Red, 3=Yellow, 4=Blue, 5=Green
See also
DisplayMode, Color, MonoFramebuffer, MultiPlaneFramebuffer