From 3ea719e9417e62c36c4654a629222f4f1a01c11c Mon Sep 17 00:00:00 2001 From: RunDevelopment Date: Mon, 8 Jun 2026 21:37:27 +0200 Subject: [PATCH] Change `Frame` from `RgbaImage` to `DynamicImage` --- src/animation.rs | 14 +++++++------- src/codecs/gif.rs | 2 +- src/io/image_reader_type.rs | 1 - tests/reference_images.rs | 6 ++---- 4 files changed, 10 insertions(+), 13 deletions(-) diff --git a/src/animation.rs b/src/animation.rs index b8c3ac8de7..410cacf85f 100644 --- a/src/animation.rs +++ b/src/animation.rs @@ -2,7 +2,7 @@ use std::cmp::Ordering; use std::time::Duration; use crate::error::ImageResult; -use crate::RgbaImage; +use crate::DynamicImage; /// An implementation dependent iterator, reading the frames as requested pub struct Frames<'a> { @@ -43,7 +43,7 @@ pub struct Frame { left: u32, /// y offset top: u32, - buffer: RgbaImage, + buffer: DynamicImage, } /// The delay of a frame relative to the previous one. @@ -68,7 +68,7 @@ pub struct Delay { impl Frame { /// Constructs a new frame without any delay. #[must_use] - pub fn new(buffer: RgbaImage) -> Frame { + pub fn new(buffer: DynamicImage) -> Frame { Frame { delay: Delay::from_ratio(Ratio { numer: 0, denom: 1 }), left: 0, @@ -79,7 +79,7 @@ impl Frame { /// Constructs a new frame #[must_use] - pub fn from_parts(buffer: RgbaImage, left: u32, top: u32, delay: Delay) -> Frame { + pub fn from_parts(buffer: DynamicImage, left: u32, top: u32, delay: Delay) -> Frame { Frame { delay, left, @@ -96,18 +96,18 @@ impl Frame { /// Returns the image buffer #[must_use] - pub fn buffer(&self) -> &RgbaImage { + pub fn buffer(&self) -> &DynamicImage { &self.buffer } /// Returns a mutable image buffer - pub fn buffer_mut(&mut self) -> &mut RgbaImage { + pub fn buffer_mut(&mut self) -> &mut DynamicImage { &mut self.buffer } /// Returns the image buffer #[must_use] - pub fn into_buffer(self) -> RgbaImage { + pub fn into_buffer(self) -> DynamicImage { self.buffer } diff --git a/src/codecs/gif.rs b/src/codecs/gif.rs index dea103e67f..a3b2506543 100644 --- a/src/codecs/gif.rs +++ b/src/codecs/gif.rs @@ -579,7 +579,7 @@ impl GifEncoder { // get the delay before converting img_frame let frame_delay = img_frame.delay().into_ratio().to_integer(); // convert img_frame into RgbaImage - let mut rbga_frame = img_frame.into_buffer(); + let mut rbga_frame = img_frame.into_buffer().to_rgba8(); let (width, height) = self.gif_dimensions(rbga_frame.width(), rbga_frame.height())?; // Create the gif::Frame from the animation::Frame diff --git a/src/io/image_reader_type.rs b/src/io/image_reader_type.rs index 9405c10b10..2256c5f7da 100644 --- a/src/io/image_reader_type.rs +++ b/src/io/image_reader_type.rs @@ -845,7 +845,6 @@ impl<'stream> ImageReader<'stream> { let x = frame_decoded.attributes().x; let y = frame_decoded.attributes().y; let delay = frame_decoded.attributes().delay.unwrap_or(no_delay); - let frame = frame.into_rgba8(); let frame = Frame::from_parts(frame, x, y, delay); Some(Ok(frame)) diff --git a/tests/reference_images.rs b/tests/reference_images.rs index 1188f0512c..bb58d29e14 100644 --- a/tests/reference_images.rs +++ b/tests/reference_images.rs @@ -106,8 +106,7 @@ fn main() -> std::process::ExitCode { // Select a single frame let frame = frames.drain(frame_num..).next().unwrap(); - // Convert the frame to a`RgbaImage` - DynamicImage::from(frame.into_buffer()) + frame.into_buffer() } #[cfg(feature = "png")] @@ -121,8 +120,7 @@ fn main() -> std::process::ExitCode { // Select a single frame let frame = frames.drain(frame_num..).next().unwrap(); - // Convert the frame to a`RgbaImage` - DynamicImage::from(frame.into_buffer()) + frame.into_buffer() } _ => unreachable!( "Format is unspported or disabled. Should have been detected earlier"