271. Доступ к пикселям фреймбуфера
Добавление простых вспомогательных функций доступа к пикселям фреймбуфера.
Урок 271 из 356 · tests/chapter_05_rendering_pipeline/test_271_framebuffer_pixel_access.py
Файл для обновления
emulator/rendering/framebuffer.pyПочему этот шаг важен
Теперь фреймбуфер хранит плоский список RGB-пикселей. Код рендеринга не должен всюду повторять формулу плоского индекса, поэтому Framebuffer предоставляет два небольших вспомогательных метода:
get_pixel(x, y) -> RGBColor
set_pixel(x, y, color) -> NoneЧто такое плоское индексирование пикселей? Плоское индексирование хранит 2D-координаты изображения в 1D-списке.
Формула
index = y * width + xМинимальный пример при width = 4:
(x=0, y=0) -> index 0
(x=1, y=0) -> index 1
(x=0, y=1) -> index 4
(x=2, y=1) -> index 6Пример возможной реализации
class Framebuffer:
...
def get_pixel(self, x: int, y: int) -> RGBColor:
return self.pixels[y * self.width + x]
def set_pixel(self, x: int, y: int, color: RGBColor) -> None:
self.pixels[y * self.width + x] = colorВажное упрощение
Этот шаг курса намеренно оставляет вспомогательные методы небольшими. В будущем можно добавить проверку для:
x/y out of bounds
negative coordinates
RGB tuple length
RGB component byte range 0-255Пока тесты используют только допустимые координаты и допустимые RGB-цвета.
Вне рамок этого шага
- проверка координат
- проверка RGB
- поиск в палитре
- рендеринг таблиц шаблонов
- рендеринг таблиц имён
- отображение через pygame
Запустить этот урок
uv run pytest tests/chapter_05_rendering_pipeline/test_271_framebuffer_pixel_access.py -v