MicroPython:Библиотеки/framebuf

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Модуль framebuf – манипуляции с кадровым буфером[1]

В этом модуле реализован стандартный кадровый буфер, который можно использовать для создания bitmap-изображений, которые затем можно отправлять на дисплей.

Класс «FrameBuffer»

Класс FrameBuffer предоставляет пиксельный буфер, из которого можно брать пиксели, линии, прямоугольники, текст и даже другие буферы FrameBuffer. Он используется для генерирования данных для отображения на экране.

Например:

import framebuf

# Объекту FrameBuffer нужно 2 байта для каждого RGB565-пикселя:
fbuf = framebuf.FrameBuffer(bytearray(10 * 100 * 2), 10, 100, framebuf.RGB565)

fbuf.fill(0)
fbuf.text('MicroPython!', 0, 0, 0xffff)
fbuf.hline(0, 10, 96, 0xffff)

Конструкторы

  • Класс framebuf.FrameBuffer(buffer, width, height, format, stride=width, /) – конструирует объект FrameBuffer с помощью следующих аргументов:
    • buffer – объект с буферным протоколом, который должен быть достаточно большим, чтобы вместить в себя все пиксели, заданные шириной, высотой и форматом FrameBuffer.
    • width – ширина объекта FrameBuffer в пикселях.
    • height – высота объекта FrameBuffer в пикселях.
    • format – здесь задается тип пикселей, используемых в FrameBuffer. Допустимые значения для этого аргумента перечислены в разделе «Константы» ниже. В этом аргументе задается разрядность цветового формата и то, каким образом будет осуществляться раскладка битов в буфере buffer. Аргумент c в некоторых методах ниже – это малое целое, обозначающее нужный цвет. Какой именно цвет используется, будет зависеть от формата FrameBuffer.
    • stride – шаговое значение, обозначающее длину горизонтальной линии пикселей во FrameBuffer. По умолчанию здесь стоит width, но если у вас FrameBuffer находится внутри другого FrameBuffer или экрана, это значение, возможно, надо будет адаптировать. Если при адаптации значение будет увеличено, то буфер buffer должен быть достаточно велик, чтобы вместить в себя это увеличенное значение.

Во всех эти аргументах (включая опциональный stride) должны быть заданы корректные значения. Если задать некорректный размер буфера или неправильное разрешение, это может привести к непредсказуемым ошибкам.

Рисование примитивных фигур

Методы ниже позволяют рисовать фигуры внутри FrameBuffer.

  • FrameBuffer.fill(c) – заполняет весь FrameBuffer заданным цветом.
  • FrameBuffer.pixel(x, y[, c]) – если аргумент c задан не будет, этот метод прочтет цветовое значение заданного пикселя. Если аргумент c будет задан, этот метод окрасит заданный пиксель в заданное цветовое значение.
  • FrameBuffer.hline(x, y, w, c), FrameBuffer.vline(x, y, h, c) и FrameBuffer.line(x1, y1, x2, y2, c) – рисует линию толщиной в 1 пиксель, используя заданные координаты и заданный цвет. Линия, рисуемая методом line(), заканчивается на второй паре координат, тогда как hline() и vline() просто рисуют горизонтальные и вертикальные линии заданной длины.
  • FrameBuffer.rect(x, y, w, h, c) и FrameBuffer.fill_rect(x, y, w, h, c) – рисуют прямоугольник заданного размера и цвета на заданном месте. Метод rect() рисует только 1-пиксельный контур, тогда как fill_rect() рисует и контур, и внутреннюю часть прямоугольника.

Рисование текста

  • FrameBuffer.text(s, x, y[, c]) – рисует текст в FrameBuffer при помощи координат, которые играют роль верхнего левого угла текстового блока. Цвет текста можно задать с помощью опционального аргумента c, но если он задан не будет, автоматически будет использовано значение «1». Все символы имеют размер 8х8 пикселей, и в данный момент возможности поменять шрифт, к сожалению, нет.

Другие методы

  • FrameBuffer.scroll(xstep, ystep) – смещает содержимое FrameBuffer по заданному вектору. Это может оставить в FrameBuffer отпечаток предыдущих цветов.
  • FrameBuffer.blit(fbuf, x, y[, key]) – рисует поверх текущего FrameBuffer еще один FrameBuffer, используя заданные координаты. Значение в аргументе key – это целое число, обозначающее цвет, который будет считаться прозрачным: система просто не будет рисовать пиксели этого цвета.

Этот метод работает с экземплярами FrameBuffer, использующими разные форматы, но итоговые цвета могут получиться не такими, как планировалось, из-за несоответствия цветовых форматов.

Константы

  • framebuf.MONO_VLSB – монохромный (1-битный) цветовой формат. В этом случае биты байта будут расположены вертикально, а 0-вой бит будет находиться в самой верхней части экрана. Соответственно, каждый байт будет занимать 8 вертикальных пикселей. Последующие байты будут располагаться правее – пока не достигнут самой правой части экрана. Следующая полоса байтов будет рендериться, начиная с самой левой части экрана, но на 8 пикселей ниже, и снова – до самой правой части экрана. И по такому принципу дальше будут рендериться все остальные пиксели.
  • framebuf.MONO_HLSB – монохромный (1-битный) цветовой формат. В этом случае пиксели будут рендериться горизонтально. Каждый байт будет занимать 8 горизонтальных пикселей, из которых левее всех будет находиться 7-ой бит. Все последующие байты будут рендериться на последующих горизонтальных локациях – пока не будет достигнута самая правая часть экрана. Следующие байты будут рендериться в следующем ряду – на один пиксель ниже.
  • framebuf.MONO_HMSB – монохромный (1-битный) цветовой формат. В этом режиме пиксели будут рендериться горизонтально. Каждый байт будет занимать 8 горизонтальных пикселей, из которых левее всех будет находиться 0-ой бит. Все последующие байты будут рендериться на последующих горизонтальных локациях – пока не будет достигнута самая правая часть экрана. Следующие байты будут рендериться в следующем ряду – на один пиксель ниже.
  • framebuf.RGB565 – RGB-формат (от англ. «Red, Green, Blue», что значит «красный, зеленый, синий»). 16-бит, 5+6+5.
  • framebuf.GS2_HMSB – 2-битный цветовой формат с разными градациями серого цвета.
  • framebuf.GS4_HMSB – 4-битный цветовой формат с разными градациями серого цвета.
  • framebuf.GS8 – 8-битный цветовой формат с разными градациями серого цвета.

См.также

Внешние ссылки