framebuf — 프레임 버퍼 조작¶
framebuf 모듈은 기본적인 그리기 작업을 갖춘 작고 할당이 필요 없는 픽셀 버퍼를 제공합니다. 이는 외부 디스플레이(OLED, LCD, e-paper 등)를 구동하기 위한 것입니다.
참고
캡처된 프레임에 대한 이미지 처리 작업에는 OpenMV의 훨씬 풍부한 image.Image 클래스를 대신 사용하십시오. 이는 framebuf보다 훨씬 많은 그리기 프리미티브, 색상 변환 및 분석 기능을 제공합니다.
class FrameBuffer¶
A FrameBuffer wraps a user-supplied buffer-protocol object
(typically a bytearray) and exposes methods to draw pixels,
lines, rectangles, ellipses, polygons, text and other FrameBuffers into it.
예제:
import framebuf
# FrameBuffer needs 2 bytes for every RGB565 pixel.
fbuf = framebuf.FrameBuffer(bytearray(100 * 10 * 2), 100, 10, framebuf.RGB565)
fbuf.fill(0)
fbuf.text("MicroPython!", 0, 0, 0xffff)
fbuf.hline(0, 9, 96, 0xffff)
생성자¶
- class framebuf.FrameBuffer(buffer: Any, width: int, height: int, format: int, stride: int | None = None, /)¶
FrameBuffer객체를 생성합니다.buffer– 버퍼 프로토콜을 지원하는 모든 객체. 선택한format에서stride * height픽셀을 담을 수 있을 만큼 충분히 커야 합니다.width– 프레임 버퍼의 너비(픽셀 단위).height– 프레임 버퍼의 높이(픽셀 단위).format– 픽셀 형식. 아래 상수에 나열된 상수 중 하나입니다. 형식은buffer에서 각 픽셀의 크기와, 그리기 메서드에 전달되는 색상 정수c가 해석되는 방식을 모두 결정합니다.stride– 패딩을 포함한 가로 행당 픽셀 수입니다. 기본값은width입니다. 더 큰 버퍼의 하위 영역을 사용하려면 이를 설정하십시오.
너무 작은
buffer나 유효하지 않은 크기를 전달하면 정의되지 않은 결과가 발생합니다. 생성자는 모든 조합을 검증하지 않습니다.
그리기 메서드¶
- FrameBuffer.fill_rect(x: int, y: int, w: int, h: int, c: int) None¶
(x, y)에서wxh크기의 사각형을 색상c로 채웁니다.f=True를 사용한rect()와 동일합니다.
- FrameBuffer.pixel(x: int, y: int, c: int | None = None) int | None¶
c인수가 없으면(x, y)위치 픽셀의 색상 값을 반환합니다.c가 주어지면 해당 픽셀을 색상c로 설정합니다.
- FrameBuffer.hline(x: int, y: int, w: int, c: int) None¶
- FrameBuffer.vline(x: int, y: int, h: int, c: int) None¶
- FrameBuffer.line(x1: int, y1: int, x2: int, y2: int, c: int) None¶
색상
c로 1픽셀 두께의 선을 그립니다.hline()과vline()은 주어진 길이의 가로/세로 선을 그리고,line()은 임의의 두 점 사이에 선을 그립니다.
- FrameBuffer.rect(x: int, y: int, w: int, h: int, c: int, f: bool = False) None¶
(x, y)에wxh크기의 사각형을 색상c로 그립니다.f가True이면 사각형이 채워지고, 그렇지 않으면 1픽셀 윤곽선만 그려집니다.
- FrameBuffer.ellipse(x: int, y: int, xr: int, yr: int, c: int, f: bool = False, m: int = 0) None¶
(x, y)를 중심으로 x 반지름xr과 y 반지름yr을 가진 타원을 색상c로 그립니다. 반지름이 같으면 원이 됩니다.f=True는 윤곽선만 그리는 대신 도형을 채웁니다.m은 특정 사분면(오른쪽 위에서 반시계 방향으로 번호 매김)으로 그리기를 제한하는 비트마스크입니다:비트
사분면
영역
비트 0
Q1
오른쪽 위
비트 1
Q2
왼쪽 위
비트 2
Q3
왼쪽 아래
비트 3
Q4
오른쪽 아래
기본값
m=0은 네 사분면을 모두 그립니다.
- FrameBuffer.poly(x: int, y: int, coords: Any, c: int, f: bool = False) None¶
오프셋
(x, y)에 임의의 닫힌 다각형(볼록 또는 오목)을 색상c로 그립니다.coords는array('h', [x0, y0, x1, y1, ..., xn, yn])형태로 배치된 부호 있는 16비트 정수의array여야 합니다.f=True는 윤곽선만 그리는 대신 다각형을 채웁니다.
- FrameBuffer.text(s: str, x: int, y: int, c: int = 1) None¶
문자열
s를 왼쪽 위 모서리가(x, y)에 오도록 색상c로 그립니다. 내장 폰트는 8x8 픽셀로 고정되어 있으며 변경할 수 없습니다.c의 기본값은1입니다.
- FrameBuffer.scroll(xstep: int, ystep: int) None¶
버퍼 내용을
(xstep, ystep)만큼 이동시킵니다. 버퍼 외부에서 들어온 픽셀은 지워지지 않으므로, 이전 내용의 “잔상”이 후행 가장자리에 남을 수 있습니다.
- FrameBuffer.blit(fbuf: FrameBuffer | Tuple, x: int, y: int, key: int = -1, palette: FrameBuffer | None = None) None¶
다른 프레임 버퍼
fbuf를 왼쪽 위 모서리가(x, y)에 오도록 이 버퍼 위에 그립니다.key가 주어지면 해당 색상 값과 일치하는 소스 픽셀은 투명한 것으로 처리되어 그려지지 않습니다.palette가 제공되면 비교는 원시fbuf값이 아니라 팔레트 출력과 이루어집니다.fbuf는FrameBuffer인스턴스이거나 생성자 시그니처와 일치하는 튜플/리스트일 수 있습니다:(buffer, width, height, format) (buffer, width, height, format, stride)
소스가 튜플/리스트인 경우
buffer는 읽기 전용일 수 있습니다.palette는 서로 다른 형식의 버퍼 간 blit를 허용합니다. 예를 들어 단색 글리프를 RGB565 버퍼에 렌더링하는 경우입니다. 이는 형식이 대상과 일치하고 높이가 1이며 너비가 소스 색상 수(N비트/픽셀 소스의 경우2**N)와 동일한FrameBuffer입니다. 소스 픽셀 값i는 그리기 전에palette[i, 0]의 색상으로 대체됩니다.
상수¶
다음 format 값이 생성자에 의해 허용됩니다. “픽셀당 바이트” 열은 백킹 버퍼 크기를 정할 때 필요한 배수입니다.
상수 |
픽셀당 바이트 |
픽셀 레이아웃 |
|---|---|---|
|
0.125 |
단색(1비트). 각 바이트는 위에 가장 가까운 비트 0과 함께 세로로 쌓인 8개의 픽셀을 담습니다. 8픽셀 행은 버퍼를 가로질러 왼쪽에서 오른쪽으로 진행한 다음 다음 8픽셀 행으로 넘어갑니다. |
|
0.125 |
단색(1비트). 각 바이트는 비트 7이 가장 왼쪽인 8개의 가로 픽셀을 담습니다. 행은 세로로 한 픽셀씩 진행합니다. |
|
0.125 |
단색(1비트). |
|
0.25 |
2비트 그레이스케일(4레벨), 최상위 비트 우선으로 가로로 패킹됩니다. |
|
0.5 |
4비트 그레이스케일(16레벨), 최상위 니블 우선으로 가로로 패킹됩니다. |
|
1 |
8비트 그레이스케일(256레벨). |
|
2 |
빨강 5비트, 초록 6비트, 파랑 5비트를 가진 16비트 RGB. |
framebuf.MVLSB는 framebuf.MONO_VLSB의 사용 중단된 별칭입니다. 새 코드에서는 후자를 선호하십시오.
레거시 생성자¶
- framebuf.FrameBuffer1(buffer: Any, width: int, height: int, stride: int | None = None, /) FrameBuffer¶
FrameBuffer(buffer, width, height, framebuf.MONO_VLSB, stride)에 대한 사용 중단된 단축 표현입니다. 하위 호환성을 위해 유지되며, 대신 전체FrameBuffer생성자를 사용하십시오.