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:
decode_bytes — toma &[u8] y devuelve Result<peniko::Image>.
load_path — toma &Path + max_bytes cap y devuelve
Result<peniko::Image>, con guardia de tamaño en disco (las apps
no quieren leer un .iso de 4 GB pensando que es una imagen).
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.