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 FrameBuffer nesnesi oluşturur.

  • buffer – arabellek protokolünü destekleyen herhangi bir nesne; seçilen format‘ta stride * height piksel 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, hem buffer iç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 olarak width‘tir. Daha büyük bir arabelleğin bir alt bölgesini kullanmak için bunu ayarlayın.

Çok küçük bir buffer veya geçersiz boyutlar geçirmek tanımsız sonuçlar üretir – yapıcı her kombinasyonu doğrulamaz.

Çizim metotları

FrameBuffer.fill(c: int) None

Tüm çerçeve arabelleğini c rengiyle doldurur.

FrameBuffer.fill_rect(x: int, y: int, w: int, h: int, c: int) None

(x, y) konumunda w x h boyutunda bir dikdörtgeni c rengiyle doldurur. f=True ile rect() eşdeğeridir.

FrameBuffer.pixel(x: int, y: int, c: int | None = None) int | None

c argümanı olmadan, (x, y) konumundaki pikselin renk değerini döndürür. c verildiğinde, o pikseli c rengine 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

c renginde 1 piksel kalınlığında bir çizgi çizer. hline() ve vline() 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) konumunda w x h boyutunda bir dikdörtgeni c renginde çizer. f True ise 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ı xr ve y-yarıçapı yr olan bir elipsi c renginde ç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=0 dö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) c renginde çizer. coords, array('h', [x0, y0, x1, y1, ..., xn, yn]) şeklinde düzenlenmiş işaretli 16 bitlik tamsayılardan oluşan bir array olmalı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

s dizesini, sol üst köşesi (x, y) konumunda olacak şekilde c renginde çizer. Yerleşik yazı tipi 8x8 piksel olarak sabittir ve değiştirilemez. c varsayılan olarak 1‘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.

key verilirse, o renk değeriyle eşleşen herhangi bir kaynak piksel saydam olarak ele alınır ve çizilmez. Bir palette sağlandığında, karşılaştırma ham fbuf değerine değil, palet çıktısına göre yapılır.

fbuf bir FrameBuffer ö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, buffer salt 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çin 2**N) bir FrameBuffer‘dır. Kaynak piksel değeri i, çizilmeden önce palette[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

MONO_VLSB

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.

MONO_HLSB

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.

MONO_HMSB

0.125

Tek renkli (1 bit). MONO_HLSB gibi ancak bit 0 en solda.

GS2_HMSB

0.25

2 bitlik gri tonlama (4 seviye), yatay olarak en anlamlı bit önce paketlenmiş.

GS4_HMSB

0.5

4 bitlik gri tonlama (16 seviye), yatay olarak en anlamlı nibble önce paketlenmiş.

GS8

1

8 bitlik gri tonlama (256 seviye).

RGB565

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 tam FrameBuffer yapıcısını kullanın.