diff --git a/src/main.rs b/src/main.rs index 4a7180e..c02ff95 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,7 +5,10 @@ use iced::{ keyboard::{self, Key, key}, theme, widget, window, }; -use image::{EncodableLayout, ImageReader, RgbaImage, codecs::webp::WebPEncoder, imageops}; +use image::{ + DynamicImage, EncodableLayout, ImageDecoder, ImageReader, RgbaImage, codecs::webp::WebPEncoder, + imageops, +}; use rfd::FileDialog; #[derive(Clone, Debug)] @@ -124,7 +127,27 @@ impl State { } }; - let decoded_image = match reader.decode() { + let mut decoder = match reader.into_decoder() { + Ok(d) => d, + Err(e) => { + return Some(format!( + "failed to create decoder for '{}': {e}", + path.as_ref().display() + )); + } + }; + + let oreintation = match decoder.orientation() { + Ok(o) => o, + Err(e) => { + return Some(format!( + "failed to get oreintation of '{}': {e}", + path.as_ref().display() + )); + } + }; + + let mut decoded_image = match DynamicImage::from_decoder(decoder) { Ok(i) => i, Err(e) => { return Some(format!( @@ -134,6 +157,8 @@ impl State { } }; + decoded_image.apply_orientation(oreintation); + self.image = Some(decoded_image.into_rgba8()); None