framebuf — çerçeve arabelleği (frame buffer) işleme¶
framebuf modülü, ilkel çizim işlemleri içeren küçük, tahsis gerektirmeyen bir piksel arabelleği sağlar. Harici ekranları (OLED, LCD, e-kağıt vb.) sürmek için tasarlanmıştır.
Not
Yakalanan çerçeveler üzerinde görüntü işleme çalışmaları için bunun yerine OpenMV’nin çok daha zengin image.Image sınıfını kullanın – framebuf‘a göre çok daha fazla çizim ilkeli, renk dönüşümü ve analiz özelliği sunar.
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.
Örnek:
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)
Yapıcılar¶
- class framebuf.FrameBuffer(buffer: Any, width: int, height: int, format: int, stride: int | None = None, /)¶
Bir
FrameBuffernesnesi oluşturur.buffer– arabellek protokolünü destekleyen herhangi bir nesne; seçilenformat‘tastride * heightpiksel tutacak kadar büyük olmalıdır.width– çerçeve arabelleğinin piksel cinsinden genişliği.height– çerçeve arabelleğinin piksel cinsinden yüksekliği.format– piksel formatı; aşağıdaki Sabitler altında listelenen sabitlerden biridir. Format, hembufferiçindeki her pikselin boyutunu hem de herhangi bir çizim metoduna iletilen bir renk tamsayısıc‘nin nasıl yorumlanacağını belirler.stride– herhangi bir dolgu dahil, yatay satır başına piksel sayısı. Varsayılan olarakwidth‘tir. Daha büyük bir arabelleğin bir alt bölgesini kullanmak için bunu ayarlayın.
Çok küçük bir
bufferveya geçersiz boyutlar geçirmek tanımsız sonuçlar üretir – yapıcı her kombinasyonu doğrulamaz.
Çizim metotları¶
- FrameBuffer.fill_rect(x: int, y: int, w: int, h: int, c: int) None¶
(x, y)konumundawxhboyutunda bir dikdörtgenicrengiyle doldurur.f=Trueilerect()eşdeğeridir.
- FrameBuffer.pixel(x: int, y: int, c: int | None = None) int | None¶
cargümanı olmadan,(x, y)konumundaki pikselin renk değerini döndürür.cverildiğinde, o pikselicrengine ayarlar.
- 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¶
crenginde 1 piksel kalınlığında bir çizgi çizer.hline()vevline()verilen uzunlukta yatay/dikey bir çizgi çizer;line()iki keyfi nokta arasında bir çizgi çizer.
- FrameBuffer.rect(x: int, y: int, w: int, h: int, c: int, f: bool = False) None¶
(x, y)konumundawxhboyutunda bir dikdörtgenicrenginde çizer.fTrueise dikdörtgen doldurulur; aksi takdirde yalnızca 1 piksel kalınlığında bir ana hat çizilir.
- FrameBuffer.ellipse(x: int, y: int, xr: int, yr: int, c: int, f: bool = False, m: int = 0) None¶
(x, y)merkezli, x-yarıçapıxrve y-yarıçapıyrolan bir elipsicrenginde çizer. Eşit yarıçaplar bir daire üretir.f=Trueşekli yalnızca ana hatlarıyla çizmek yerine doldurur.m, çizimi belirli çeyreklere kısıtlayan bir bit maskesidir (sağ üstten saat yönünün tersine numaralandırılmış):Bit
Çeyrek
Bölge
bit 0
Q1
Sağ üst
bit 1
Q2
Sol üst
bit 2
Q3
Sol alt
bit 3
Q4
Sağ alt
Varsayılan
m=0dört çeyreğin tümünü çizer.
- FrameBuffer.poly(x: int, y: int, coords: Any, c: int, f: bool = False) None¶
(x, y)ofsetinde keyfi bir kapalı çokgen (dışbükey veya içbükey)crenginde çizer.coords,array('h', [x0, y0, x1, y1, ..., xn, yn])şeklinde düzenlenmiş işaretli 16 bitlik tamsayılardan oluşan birarrayolmalıdır.f=Trueçokgeni yalnızca ana hatlarıyla çizmek yerine doldurur.
- FrameBuffer.text(s: str, x: int, y: int, c: int = 1) None¶
sdizesini, sol üst köşesi(x, y)konumunda olacak şekildecrenginde çizer. Yerleşik yazı tipi 8x8 piksel olarak sabittir ve değiştirilemez.cvarsayılan olarak1‘dir.
- FrameBuffer.scroll(xstep: int, ystep: int) None¶
Arabellek içeriğini
(xstep, ystep)kadar kaydırır. Arabelleğin dışından kaydırılarak giren pikseller temizlenmez, bu nedenle önceki içeriğin bir “hayaleti” arkadaki kenarda kalabilir.
- FrameBuffer.blit(fbuf: FrameBuffer | Tuple, x: int, y: int, key: int = -1, palette: FrameBuffer | None = None) None¶
Başka bir çerçeve arabelleği
fbuf‘u, sol üst köşesi(x, y)konumunda olacak şekilde bunun üzerine çizer.keyverilirse, o renk değeriyle eşleşen herhangi bir kaynak piksel saydam olarak ele alınır ve çizilmez. Birpalettesağlandığında, karşılaştırma hamfbufdeğerine değil, palet çıktısına göre yapılır.fbufbirFrameBufferörneği veya yapıcı imzasıyla eşleşen bir demet/liste olabilir:(buffer, width, height, format) (buffer, width, height, format, stride)
Kaynak bir demet/liste olduğunda,
buffersalt okunur olabilir.palette, farklı formatlardaki arabellekler arasında blit yapılmasına olanak tanır – örneğin, tek renkli bir glifi bir RGB565 arabelleğine işlemek gibi. Formatı hedefle eşleşen, yüksekliği 1 ve genişliği kaynak renklerin sayısına eşit (N bit/piksel kaynak için2**N) birFrameBuffer‘dır. Kaynak piksel değerii, çizilmeden öncepalette[i, 0]konumundaki renkle değiştirilir.
Sabitler¶
Aşağıdaki format değerleri yapıcı tarafından kabul edilir. “Piksel başına bayt” sütunu, destekleyici arabelleği boyutlandırırken gereken çarpandır.
Sabit |
Bayt/piksel |
Piksel düzeni |
|---|---|---|
|
0.125 |
Tek renkli (1 bit). Her bayt, bit 0 en üste en yakın olacak şekilde dikey olarak istiflenmiş 8 piksel tutar. 8 pikselden oluşan satırlar arabellek boyunca soldan sağa ilerler, ardından bir sonraki 8 piksellik satıra geçer. |
|
0.125 |
Tek renkli (1 bit). Her bayt, bit 7 en solda olacak şekilde 8 yatay piksel tutar. Satırlar dikey olarak birer piksel ilerler. |
|
0.125 |
Tek renkli (1 bit). |
|
0.25 |
2 bitlik gri tonlama (4 seviye), yatay olarak en anlamlı bit önce paketlenmiş. |
|
0.5 |
4 bitlik gri tonlama (16 seviye), yatay olarak en anlamlı nibble önce paketlenmiş. |
|
1 |
8 bitlik gri tonlama (256 seviye). |
|
2 |
5 kırmızı, 6 yeşil ve 5 mavi bitli 16 bitlik RGB. |
framebuf.MVLSB, framebuf.MONO_VLSB için kullanımdan kaldırılmış bir takma addır; yeni kodda ikincisini tercih edin.
Eski yapıcı¶
- framebuf.FrameBuffer1(buffer: Any, width: int, height: int, stride: int | None = None, /) FrameBuffer¶
FrameBuffer(buffer, width, height, framebuf.MONO_VLSB, stride)için kullanımdan kaldırılmış kısayol. Geriye dönük uyumluluk için korunmuştur; bunun yerine tamFrameBufferyapıcısını kullanın.