io.github.dinamo541.corefx.ui

ImageUtil

Static utilityUtilidad estática final JavaFX

Loads images from a classpath resource, a URL or a local file through one predictable API, then offers common view-shaping helpers (scaled, circular, rounded ImageViews) and lightweight pure-Java pixel processing (grayscale, node snapshots) — all on the native platform, no extra deps. Carga imágenes desde un recurso del classpath, una URL o un archivo local a través de una sola API predecible, y luego ofrece ayudantes comunes de modelado de vistas (ImageViews escaladas, circulares, redondeadas) y procesamiento de píxeles ligero en Java puro (escala de grises, capturas de nodos) — todo en la plataforma nativa, sin dependencias extra.

Smart location resolutionResolución inteligente de ubicaciones

The loader is deliberately forgiving: a location containing a URI scheme (https://, file:) is used verbatim; anything else is first resolved against the classpath, then handed to JavaFX as a fallback. So "/img/logo.png", a remote URL, and a local file path all work through the same call. El loader es deliberadamente tolerante: una ubicación que contiene un esquema de URI (https://, file:) se usa tal cual; cualquier otra cosa se resuelve primero contra el classpath y luego se entrega a JavaFX como alternativa. Así "/img/logo.png", una URL remota y una ruta de archivo local funcionan todas con la misma llamada.

Quick startInicio rápido

Image logo   = ImageUtil.load("/img/logo.png");           // classpath
Image remote = ImageUtil.load("https://example.com/a.png"); // URL
Image opt    = ImageUtil.loadOrNull("/img/maybe.png");     // null if missing

ImageView avatar = ImageUtil.circularView(logo, 40);       // 80×80 circle
ImageView card   = ImageUtil.roundedView(logo, 200, 120, 16);
ImageView gray   = ImageUtil.view(ImageUtil.toGrayscale(logo));

LoadingCarga

static Image load(String location)

Loads from classpath / URL / file. Throws IllegalArgumentException if the location is null/blank or the image can't be loaded.Carga desde classpath / URL / archivo. Lanza IllegalArgumentException si la ubicación es null/en blanco o la imagen no se puede cargar.

static Image load(String location, double reqWidth, double reqHeight, boolean preserveRatio, boolean smooth)

Rescales at load time (more memory-efficient than loading full size then scaling). Pass 0 for a dimension to infer it from the other while preserving ratio.Reescala al momento de la carga (más eficiente en memoria que cargar a tamaño completo y luego escalar). Pasa 0 en una dimensión para inferirla de la otra preservando la proporción.

static Image load(Class<?> anchor, String resourcePath)

Loads a classpath resource relative to anchor — handy for images packaged next to a specific class. Throws if the resource is missing/unreadable.Carga un recurso del classpath relativo a anchor — útil para imágenes empaquetadas junto a una clase específica. Lanza excepción si el recurso falta o no se puede leer.

static Image loadOrNull(String location)

Returns null instead of throwing when the image is missing/unreadable — for optional decorations where absence is fine.Devuelve null en vez de lanzar excepción cuando la imagen falta o no se puede leer — para decoraciones opcionales donde la ausencia está bien.

View shapingModelado de vistas

MethodMétodoResultResultado
view(image)An ImageView with smoothing on.Un ImageView con suavizado activado.
view(image, fitW, fitH)Scaled to fit the box, aspect ratio preserved.Escalado para encajar en la caja, preservando la proporción.
circularView(image, radius)Clipped to a centered circle — perfect for avatars. radius must be positive.Recortado a un círculo centrado — perfecto para avatares. radius debe ser positivo.
roundedView(image, w, h, arc)Rounded-rectangle clip; w/h positive, arc clamped to ≥ 0.Recorte de rectángulo redondeado; w/h positivos, arc acotado a ≥ 0.

Pixel processingProcesamiento de píxeles

static Image toGrayscale(Image source)

A grayscale copy using standard luminance weights (0.299/0.587/0.114), leaving the original untouched. If the image can't be read, source is returned as-is.Una copia en escala de grises usando pesos de luminancia estándar (0.299/0.587/0.114), dejando intacto el original. Si la imagen no se puede leer, se devuelve source tal cual.

static WritableImage snapshot(Node node)

Renders any node to an image with a transparent background. Must run on the JavaFX Application Thread.Renderiza cualquier nodo a una imagen con fondo transparente. Debe ejecutarse en el JavaFX Application Thread.

⚠️
load throws, loadOrNull doesn'tload lanza, loadOrNull no

Use load for required assets (fail fast on a typo) and loadOrNull for optional ones. toGrayscale on small or unreadable images returns the source unchanged rather than failing.Usa load para recursos obligatorios (falla rápido ante un error de tipeo) y loadOrNull para los opcionales. toGrayscale sobre imágenes pequeñas o ilegibles devuelve el origen sin cambios en vez de fallar.

RecommendationsRecomendaciones

Prefer the rescaling load(...) overload for large images you'll display small — it saves memory versus scaling an ImageView.Prefiere la sobrecarga de load(...) con reescalado para imágenes grandes que mostrarás en pequeño — ahorra memoria frente a escalar un ImageView.

Note: Message.loadIcon delegates here, so icon loading benefits from the same flexible resolution.Nota: Message.loadIcon delega aquí, así que la carga de iconos se beneficia de la misma resolución flexible.