tawasuyu

tawasuyu/llimphi

Sovereign retained-mode GPU UI framework in Rust (wgpu+vello+taffy+parley), Elm loop, 40+ widgets.

Rust 660Markdown 302TOML 157RON 312382 Definiciones

⎇ 168cd187519c0ad575d3ce63baee2f164c38d9d1 llimphi-image/LEEME.md Markdown · 41 líneas · 1.6 KB Historia crudo

chore: refresco desde el monorepo — 27 crates nuevos (anim, lottie, svg, mesh, image, layer, test, wire-view, widgets rag-sidebar/router/lazy-list/rive-button) y sync de los 95 existentes 93253cc22 · Sergio ·

1# llimphi-image
2
3*Read this in English: [README.md](README.md).*
4
5Decode pipeline para `peniko::Image`.
6
7Hoy el caller que quiere mostrar una imagen con `View::image()` hace:
8```ignore
9let reader = ImageReader::open(path)?.with_guessed_format()?;
10let img = reader.decode()?;
11let rgba = img.to_rgba8();
12let (w, h) = (rgba.width(), rgba.height());
13let blob = Blob::from(rgba.into_raw());
14let pen = Image::new(blob, ImageFormat::Rgba8, w, h);
15```
16Cinco líneas + dos llamadas a `?` por cada caller (nahual viewer,
17mirada wallpaper, viewer de gallería, etc.). Este crate las
18encapsula en dos helpers:
19
20- `decode_bytes` — toma `&[u8]` y devuelve `Result<peniko::Image>`.
21- `load_path` — toma `&Path` + `max_bytes` cap y devuelve
22  `Result<peniko::Image>`, con guardia de tamaño en disco (las apps
23  no quieren leer un .iso de 4 GB pensando que es una imagen).
24
25Con la feature `net` (opt-in, ureq síncrono) se suman descarga + caché por
26URL: `fetch_bytes`/`load_url` (bloqueantes, para correr en un worker) y
27`ImageCache` (`Clone + Send + Sync`) que la `view` consulta en el hilo UI
28mientras un `Handle::spawn` la puebla. El crate base queda sin dep de red.
29
30`image` (del crate `image`) se construye con `to_rgba8` siempre — la
31conversión necesaria para `peniko::ImageFormat::Rgba8`. Para imagen
32ya en `rgba8` en memoria (sin necesidad de decodificación), ver
33`from_rgba8`.
34
35Formatos: los que active la feature del crate `image` upstream (en
36el workspace, hoy: PNG, JPEG, WEBP). Otros se pueden habilitar
37agregando la feature; el helper no lo limita.
38
39---
40
41Parte de **llimphi** — ver [llimphi](../LEEME.md).

LEEME.md

llimphi-image

Read this in English: README.md.

Decode pipeline para peniko::Image.

Hoy el caller que quiere mostrar una imagen con View::image() hace:

let reader = ImageReader::open(path)?.with_guessed_format()?;
let img = reader.decode()?;
let rgba = img.to_rgba8();
let (w, h) = (rgba.width(), rgba.height());
let blob = Blob::from(rgba.into_raw());
let pen = Image::new(blob, ImageFormat::Rgba8, w, h);

Cinco líneas + dos llamadas a ? por cada caller (nahual viewer, mirada wallpaper, viewer de gallería, etc.). Este crate las encapsula en dos helpers:

Con la feature net (opt-in, ureq síncrono) se suman descarga + caché por URL: fetch_bytes/load_url (bloqueantes, para correr en un worker) y ImageCache (Clone + Send + Sync) que la view consulta en el hilo UI mientras un Handle::spawn la puebla. El crate base queda sin dep de red.

image (del crate image) se construye con to_rgba8 siempre — la conversión necesaria para peniko::ImageFormat::Rgba8. Para imagen ya en rgba8 en memoria (sin necesidad de decodificación), ver from_rgba8.

Formatos: los que active la feature del crate image upstream (en el workspace, hoy: PNG, JPEG, WEBP). Otros se pueden habilitar agregando la feature; el helper no lo limita.


Parte de llimphi — ver llimphi.