framebuf --- thao tác với bộ đệm khung hình¶
Mô-đun framebuf cung cấp một bộ đệm điểm ảnh nhỏ gọn, không cấp phát thêm bộ nhớ, với các thao tác vẽ cơ bản. Mô-đun được thiết kế để điều khiển các màn hình ngoài (OLED, LCD, e-paper, v.v.).
Ghi chú
Để xử lý ảnh từ các khung hình đã chụp, hãy dùng lớp image.Image phong phú hơn của OpenMV -- lớp này cung cấp nhiều hàm vẽ, chuyển đổi màu sắc và tính năng phân tích hơn nhiều so với 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.
Ví dụ:
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)
Hàm khởi tạo¶
- class framebuf.FrameBuffer(buffer: Any, width: int, height: int, format: int, stride: int | None = None, /)¶
Khởi tạo đối tượng
FrameBuffer.buffer-- bất kỳ đối tượng nào hỗ trợ giao thức bộ đệm; phải đủ lớn để chứastride * heightđiểm ảnh vớiformatđã chọn.width-- chiều rộng của bộ đệm khung hình tính theo điểm ảnh.height-- chiều cao của bộ đệm khung hình tính theo điểm ảnh.format-- định dạng điểm ảnh; một trong các hằng số được liệt kê tại Hằng số bên dưới. Định dạng xác định cả kích thước mỗi điểm ảnh trongbuffervà cách số nguyên màu sắcctruyền vào bất kỳ phương thức vẽ nào được diễn giải.stride-- số điểm ảnh mỗi hàng ngang, kể cả phần đệm. Mặc định làwidth. Đặt giá trị này để sử dụng một vùng con của bộ đệm lớn hơn.
Truyền
bufferquá nhỏ, hoặc kích thước không hợp lệ, sẽ tạo ra kết quả không xác định -- hàm khởi tạo không kiểm tra mọi tổ hợp.
Phương thức vẽ¶
- FrameBuffer.fill_rect(x: int, y: int, w: int, h: int, c: int) None¶
Tô hình chữ nhật kích thước
wxhtại(x, y)bằng màu sắcc. Tương đương vớirect()vớif=True.
- FrameBuffer.pixel(x: int, y: int, c: int | None = None) int | None¶
Khi không có đối số
c, trả về giá trị màu sắc của điểm ảnh tại(x, y). Khi cóc, đặt điểm ảnh đó thành màu sắcc.
- 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¶
Vẽ một đường thẳng dày 1 điểm ảnh với màu sắc
c.hline()vàvline()vẽ đường ngang/dọc với chiều dài cho trước;line()vẽ đường thẳng giữa hai điểm tùy ý.
- FrameBuffer.rect(x: int, y: int, w: int, h: int, c: int, f: bool = False) None¶
Vẽ hình chữ nhật tại
(x, y)có kích thướcwxhvới màu sắcc. NếuflàTruethì hình chữ nhật được tô đầy; ngược lại chỉ vẽ đường viền dày 1 điểm ảnh.
- FrameBuffer.ellipse(x: int, y: int, xr: int, yr: int, c: int, f: bool = False, m: int = 0) None¶
Vẽ hình elip có tâm tại
(x, y)với bán kính x làxrvà bán kính y làyrvới màu sắcc. Khi hai bán kính bằng nhau thì tạo thành hình tròn.f=Truetô đầy hình thay vì chỉ vẽ đường viền.mlà mặt nạ bit giới hạn việc vẽ trong các góc phần tư cụ thể (được đánh số ngược chiều kim đồng hồ từ góc trên-phải):Bit
Góc phần tư
Vùng
bit 0
Q1
Trên-phải
bit 1
Q2
Trên-trái
bit 2
Q3
Dưới-trái
bit 3
Q4
Dưới-phải
Giá trị mặc định
m=0vẽ tất cả bốn góc phần tư.
- FrameBuffer.poly(x: int, y: int, coords: Any, c: int, f: bool = False) None¶
Vẽ một đa giác khép kín tùy ý (lồi hoặc lõm) tại offset
(x, y)với màu sắcc.coordsphải là mộtarraygồm các số nguyên có dấu 16-bit được sắp xếp theo dạngarray('h', [x0, y0, x1, y1, ..., xn, yn]).f=Truetô đầy đa giác thay vì chỉ vẽ đường viền.
- FrameBuffer.text(s: str, x: int, y: int, c: int = 1) None¶
Vẽ chuỗi
svới góc trên-trái tại(x, y)bằng màu sắcc. Font tích hợp cố định ở 8x8 điểm ảnh và không thể thay đổi.cmặc định là1.
- FrameBuffer.scroll(xstep: int, ystep: int) None¶
Dịch chuyển nội dung bộ đệm theo
(xstep, ystep). Các điểm ảnh được dịch vào từ bên ngoài bộ đệm không được xóa, do đó có thể còn "bóng ma" của nội dung trước tại cạnh sau.
- FrameBuffer.blit(fbuf: FrameBuffer | Tuple, x: int, y: int, key: int = -1, palette: FrameBuffer | None = None) None¶
Vẽ bộ đệm khung hình
fbufkhác lên trên bộ đệm này với góc trên-trái tại(x, y).Nếu
keyđược chỉ định, bất kỳ điểm ảnh nguồn nào khớp với giá trị màu sắc đó sẽ được coi là trong suốt và không được vẽ. Khi cópalette, phép so sánh được thực hiện trên đầu ra palette, không phải giá trị thôfbuf.fbufcó thể là một thực thểFrameBufferhoặc một tuple/list khớp với chữ ký hàm khởi tạo:(buffer, width, height, format) (buffer, width, height, format, stride)
Khi nguồn là tuple/list,
buffercó thể chỉ đọc.palettecho phép blit giữa các bộ đệm có định dạng khác nhau -- ví dụ, vẽ một glyph đơn sắc vào bộ đệm RGB565. Đây là mộtFrameBuffercó định dạng khớp với đích, cao 1 và rộng bằng số màu sắc nguồn (2**Ncho nguồn N-bit-mỗi-pixel). Giá trị điểm ảnh nguồniđược thay thế bằng màu sắc tạipalette[i, 0]trước khi vẽ.
Hằng số¶
Các giá trị format sau được chấp nhận bởi hàm khởi tạo. Cột "byte mỗi điểm ảnh" là hệ số nhân cần thiết khi tính kích thước bộ đệm nền.
Hằng số |
Byte/điểm ảnh |
Bố cục điểm ảnh |
|---|---|---|
|
0.125 |
Đơn sắc (1-bit). Mỗi byte chứa 8 điểm ảnh xếp dọc với bit 0 gần đỉnh nhất. Các hàng 8 điểm ảnh tiến từ trái sang phải qua bộ đệm, rồi xuống hàng 8 điểm ảnh tiếp theo. |
|
0.125 |
Đơn sắc (1-bit). Mỗi byte chứa 8 điểm ảnh ngang với bit 7 bên trái nhất. Các hàng tiến từng điểm ảnh theo chiều dọc. |
|
0.125 |
Đơn sắc (1-bit). Giống |
|
0.25 |
Thang xám 2-bit (4 mức), được đóng gói ngang với bit có trọng số cao nhất trước. |
|
0.5 |
Thang xám 4-bit (16 mức), được đóng gói ngang với nibble có trọng số cao nhất trước. |
|
1 |
Thang xám 8-bit (256 mức). |
|
2 |
RGB 16-bit với 5 bit đỏ, 6 bit xanh lá và 5 bit xanh lam. |
framebuf.MVLSB là bí danh đã lỗi thời của framebuf.MONO_VLSB; hãy dùng tên sau trong mã mới.
Hàm khởi tạo kế thừa¶
- framebuf.FrameBuffer1(buffer: Any, width: int, height: int, stride: int | None = None, /) FrameBuffer¶
Phím tắt đã lỗi thời cho
FrameBuffer(buffer, width, height, framebuf.MONO_VLSB, stride). Được giữ lại để tương thích ngược; hãy dùng hàm khởi tạo đầy đủFrameBufferthay thế.