diff options
author | Genny <gen@nyble.dev> | 2021-10-11 03:35:38 -0500 |
---|---|---|
committer | Genny <gen@nyble.dev> | 2021-10-11 03:35:38 -0500 |
commit | 9b7bd5696a21496fa0c38a17e69c5c0658acfe73 (patch) | |
tree | b18b5016968892b7c85a9a80f42d320a9b52ab69 /src/gif.rs | |
parent | 4cbbd1e9476722c266eaa746f620da5a01523bc0 (diff) | |
download | gifed-9b7bd5696a21496fa0c38a17e69c5c0658acfe73.tar.gz gifed-9b7bd5696a21496fa0c38a17e69c5c0658acfe73.zip |
Implement images iterator
Diffstat (limited to 'src/gif.rs')
-rw-r--r-- | src/gif.rs | 36 |
1 files changed, 31 insertions, 5 deletions
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<P: AsRef<Path>>(&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<Self::Item> { 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<u8>, + 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 { |