diff options
Diffstat (limited to 'evc/src/frame.rs')
-rw-r--r-- | evc/src/frame.rs | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/evc/src/frame.rs b/evc/src/frame.rs index 6e565b6..1269bf2 100644 --- a/evc/src/frame.rs +++ b/evc/src/frame.rs @@ -1,4 +1,8 @@ -use crate::{pixel::Pixel, ser::Source, view::View}; +use crate::{ + pixel::Pixel, + ser::{Sink, Source}, + view::View, +}; use std::{ io, ops::{Index, IndexMut}, @@ -20,15 +24,30 @@ impl Frame { } pub fn read(source: &mut impl Source, size: (usize, usize)) -> io::Result<Self> { let mut frame = Frame::new(size); - for x in 0..size.0 { - for y in 0..size.1 { + for y in 0..size.1 { + for x in 0..size.0 { let pixel = source.get::<Pixel>()?; frame[(x, y)] = pixel; } } Ok(frame) } - pub fn view<'a>(&'a self, offset: (usize, usize), size: (usize, usize)) -> View<'a> { + pub fn write(&self, sink: &mut impl Sink) -> io::Result<()> { + for y in 0..self.size.1 { + for x in 0..self.size.0 { + sink.put(self[(x, y)])?; + } + } + Ok(()) + } + pub fn view<'a>(&'a self, offset: (usize, usize), size: (usize, usize)) -> View<&'a Frame> { + View::new(self, offset, size) + } + pub fn view_mut<'a>( + &'a mut self, + offset: (usize, usize), + size: (usize, usize), + ) -> View<&'a mut Frame> { View::new(self, offset, size) } } |