pull/70/head
Peter Hinch 2024-07-09 13:17:25 +01:00
rodzic df7656802a
commit f114c2b6c0
2 zmienionych plików z 34 dodań i 1 usunięć

Wyświetl plik

@ -10,7 +10,10 @@ All drivers provide a display class subclassed from the built-in
* Graphics via the `FrameBuffer` graphics primitives. * Graphics via the `FrameBuffer` graphics primitives.
* Text rendering in arbitrary fonts via `Writer` and `Cwriter` classes (see * Text rendering in arbitrary fonts via `Writer` and `Cwriter` classes (see
[font_to_py.py](https://github.com/peterhinch/micropython-font-to-py.git)). [font_to_py.py](https://github.com/peterhinch/micropython-font-to-py.git)).
* Use with nano-gui and [micro-gui](https://github.com/peterhinch/micropython-micro-gui/). * Use with nano-gui, [micro-gui](https://github.com/peterhinch/micropython-micro-gui/)
and [micropython-touch](https://github.com/peterhinch/micropython-touch).
* Photo image display in conjunction with any of the above GUI's: see
[IMAGE_DISPLAY.md](./IMAGE_DISPLAY.md) (on selected larger displays).
It should be noted that in the interests of conserving RAM these drivers offer It should be noted that in the interests of conserving RAM these drivers offer
a bare minimum of functionality required to support the above. Most drivers a bare minimum of functionality required to support the above. Most drivers

Wyświetl plik

@ -209,6 +209,36 @@ ba = bytearray(img.data) # Put in RAM because of above issue
fb = framebuf.FrameBuffer(ba, img.cols, img.rows, img.mode) fb = framebuf.FrameBuffer(ba, img.cols, img.rows, img.mode)
ssd.blit(fb, col, row) # blit to a given location ssd.blit(fb, col, row) # blit to a given location
``` ```
Until this issue is resolved a frozen Python image may be blitted to all or part
of the screen with this code:
```py
def blit(ssd, img, row=0, col=0):
def scale(x, sz):
return x * sz if sz else x // 2
mvb = ssd.mvb # Memoryview of display's bytearray.
irows = min(img.rows, ssd.height - row) # Clip rows
icols = min(img.cols, ssd.width - col) # Clip cols
if (mode := img.mode) != ssd.mode:
raise ValueError("Image and display have differing modes.")
sz = size[mode] # Allow for no. of bytes per pixel
ibytes = scale(img.cols, sz) # Bytes per row of unclipped image data
dbytes = scale(icols, sz) # Bytes per row to output to display
dwidth = scale(ssd.width, sz) # Display width in bytes
d = scale(row * ssd.width + col, sz) # Destination index
s = 0 # Source index
while irows:
mvb[d : d + dbytes] = img.data[s : s + dbytes]
s += ibytes
d += dwidth
irows -= 1
```
called as follows:
```py
import my_picture as img # Python image file
# Instantiate ssd as per the GUI in use
blit(ssd, img, 0, 0) # Display at top left of screen
```
## 3.4 Frame Buffer Access ## 3.4 Frame Buffer Access