From 9b7bd5696a21496fa0c38a17e69c5c0658acfe73 Mon Sep 17 00:00:00 2001 From: Genny Date: Mon, 11 Oct 2021 03:35:38 -0500 Subject: Implement images iterator --- src/gif.rs | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) (limited to 'src/gif.rs') diff --git a/src/gif.rs b/src/gif.rs index 5b58ed1..3a56850 100644 --- a/src/gif.rs +++ b/src/gif.rs @@ -2,7 +2,9 @@ use std::{fs::File, io::Write, path::Path}; use crate::{ block::{extension::Extension, Block, ColorTable, ScreenDescriptor, Version}, + colorimage, writer::GifBuilder, + ColorImage, }; pub struct Gif { pub header: Version, @@ -58,19 +60,43 @@ impl Gif { pub fn save>(&self, path: P) -> std::io::Result<()> { File::create(path.as_ref())?.write_all(&self.to_vec()) } -} -/*struct FrameIterator { + pub fn images<'a>(&'a self) -> ImageIterator<'a> { + ImageIterator { inner: self } + } +} +pub struct ImageIterator<'a> { + inner: &'a Gif, } -impl Iterator for FrameIterator { - type Item = (); +impl<'a> Iterator for ImageIterator<'a> { + type Item = Image<'a>; fn next(&mut self) -> Option { todo!() } -}*/ +} + +pub struct Image<'a> { + pub(crate) width: u16, + pub(crate) height: u16, + left_offset: u16, + top_offset: u16, + pub(crate) palette: &'a ColorTable, + pub(crate) transparent_index: Option, + pub(crate) indicies: &'a [u8], +} + +impl<'a> Image<'a> { + pub fn dimesnions(&self) -> (u16, u16) { + (self.width, self.height) + } + + pub fn position(&self) -> (u16, u16) { + (self.left_offset, self.top_offset) + } +} #[cfg(test)] pub mod gif { -- cgit 1.4.1-3-g733a5