From 59ef65de708941baecd4549aeabfeb8dc7337b87 Mon Sep 17 00:00:00 2001 From: electria Date: Wed, 29 Jul 2026 15:37:51 -0700 Subject: [PATCH] refactor: try to integrate jpegxl_rs with hooks The problem is, libjxl_rs does not offer a way to get metadata before decoding the entire image. As such, there is no reasonable way to implement ImageDecoder here; I think it's possible to make it decode the image on init, but that would lead to unexpected behavior performance-wise. --- src/jxl.rs | 22 ++++++++++++++++++++++ src/main.rs | 1 + 2 files changed, 23 insertions(+) create mode 100644 src/jxl.rs diff --git a/src/jxl.rs b/src/jxl.rs new file mode 100644 index 0000000..26de36f --- /dev/null +++ b/src/jxl.rs @@ -0,0 +1,22 @@ +pub struct JxlDecoder<'a> { + metadata: jpegxl_rs::decode::Metadata, + inner: jpegxl_rs::decode::JxlDecoder<'a, 'a>, +} + +impl<'a> image::ImageDecoder for JxlDecoder<'a> { + fn color_type(&self) -> image::ColorType { + image::ColorType::Rgba8 + } + fn icc_profile(&mut self) -> image::ImageResult>> { + Ok(self.metadata.icc_profile.clone()) + } + fn dimensions(&self) -> (u32, u32) {} + fn read_image(self, buf: &mut [u8]) -> image::ImageResult<()> + where + Self: Sized, + { + } + fn read_image_boxed(self: Box, buf: &mut [u8]) -> image::ImageResult<()> { + self.read_image(buf) + } +} diff --git a/src/main.rs b/src/main.rs index 3d8618d..ed2e77e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,6 +7,7 @@ use iced::{ }; use image::{EncodableLayout, RgbaImage, imageops}; +mod jxl; mod utils; #[derive(Clone, Debug)]