Struct ravif::Img [−][src]
pub struct Img<Container> {
pub buf: Container,
pub stride: usize,
pub width: u32,
pub height: u32,
}Expand description
Basic struct used for both owned (alias ImgVec) and borrowed (alias ImgRef) image fragments.
Note: the fields are pub only because of borrow checker limitations. Please consider them as read-only.
Fields
buf: ContainerDon’t access struct fields directly. Use buf(), buf_mut() or into_buf()
Storage for the pixels. Usually Vec<Pixel> or &[Pixel]. See ImgVec and ImgRef.
Note that future version will make this field private. Use .rows() and .pixels() iterators where possible, or buf()/buf_mut()/into_buf().
stride: usizeDon’t access struct fields directly. Use stride()
Number of pixels to skip in the container to advance to the next row.
Note: pixels between width and stride may not be usable, and may not even exist in the last row.
width: u32Don’t access struct fields directly. Use width()
Width of the image in pixels.
Note that this isn’t same as the width of the row in the buf, see stride
height: u32Don’t access struct fields directly. Use height()
Height of the image in pixels.
Implementations
impl<Container> Img<Container>[src]
impl<Container> Img<Container>[src]pub fn width(&self) -> usize[src]
pub fn width(&self) -> usize[src]Width of the image in pixels.
Note that this isn’t same as the width of the row in image data, see stride()
pub fn stride(&self) -> usize[src]
pub fn stride(&self) -> usize[src]Number of pixels to skip in the container to advance to the next row.
Note the last row may have fewer pixels than the stride. Some APIs use number of bytes for a stride. You may need to multiply this one by number of pixels.
pub fn buf(&self) -> &Container[src]
pub fn buf(&self) -> &Container[src]Immutable reference to the pixel storage. Warning: exposes stride. Use pixels() or rows() insetad.
See also into_contiguous_buf().
pub fn buf_mut(&mut self) -> &mut Container[src]
pub fn buf_mut(&mut self) -> &mut Container[src]Mutable reference to the pixel storage. Warning: exposes stride. Use pixels_mut() or rows_mut() insetad.
See also into_contiguous_buf().
pub fn into_buf(self) -> Container[src]
pub fn into_buf(self) -> Container[src]Get the pixel storage by consuming the image. Be careful about stride — see into_contiguous_buf() for a safe version.
pub fn rows_buf<'a, T>(&self, buf: &'a [T]) -> RowsIter<'a, T> where
T: 'a, [src]
T: 'a,
this was meant to be private, use new_buf() and/or rows()
impl<'a, T> Img<&'a [T]>[src]
impl<'a, T> Img<&'a [T]>[src]#[must_use]pub fn sub_image(
&self,
left: usize,
top: usize,
width: usize,
height: usize
) -> Img<&'a [T]>[src]
#[must_use]pub fn sub_image(
&self,
left: usize,
top: usize,
width: usize,
height: usize
) -> Img<&'a [T]>[src]Make a reference for a part of the image, without copying any pixels.
Panics
It will panic if sub_image is outside of the image area (left + width must be <= container width, etc.)
impl<'a, T> Img<&'a [T]> where
T: Clone, [src]
impl<'a, T> Img<&'a [T]> where
T: Clone, [src]#[must_use]pub fn to_contiguous_buf(&self) -> (Cow<'_, [T]>, usize, usize)[src]
#[must_use]pub fn to_contiguous_buf(&self) -> (Cow<'_, [T]>, usize, usize)[src]Returns a reference to the buffer, width, height. Guarantees that the buffer is contiguous,
i.e. it’s width*height elements long, and [x + y*width] addresses each pixel.
It will create a copy if the buffer isn’t contiguous (width != stride).
For a more efficient version, see into_contiguous_buf()
impl<'a, T> Img<&'a mut [T]>[src]
impl<'a, T> Img<&'a mut [T]>[src]#[must_use]pub fn sub_image(
&'a mut self,
left: usize,
top: usize,
width: usize,
height: usize
) -> Img<&'a [T]>[src]
#[must_use]pub fn sub_image(
&'a mut self,
left: usize,
top: usize,
width: usize,
height: usize
) -> Img<&'a [T]>[src]Turn this into immutable reference, and slice a subregion of it
impl<'a, T> Img<&'a [T]> where
T: Copy, [src]
impl<'a, T> Img<&'a [T]> where
T: Copy, [src]#[must_use]pub fn pixels(&self) -> PixelsIter<'_, T>[src]
#[must_use]pub fn pixels(&self) -> PixelsIter<'_, T>[src]impl<'a, T> Img<&'a [T]>[src]
impl<'a, T> Img<&'a [T]>[src]#[must_use]pub fn pixels_ref(&self) -> PixelsRefIter<'_, T>[src]
#[must_use]pub fn pixels_ref(&self) -> PixelsRefIter<'_, T>[src]impl<'a, T> Img<&'a mut [T]> where
T: Copy, [src]
impl<'a, T> Img<&'a mut [T]> where
T: Copy, [src]#[must_use]pub fn pixels(&self) -> PixelsIter<'_, T>[src]
#[must_use]pub fn pixels(&self) -> PixelsIter<'_, T>[src]Panics
if width is 0
#[must_use]pub fn pixels_mut(&mut self) -> PixelsIterMut<'_, T>[src]
#[must_use]pub fn pixels_mut(&mut self) -> PixelsIterMut<'_, T>[src]Panics
if width is 0
impl<'a, T> Img<Vec<T, Global>> where
T: Copy, [src]
impl<'a, T> Img<Vec<T, Global>> where
T: Copy, [src]#[must_use]pub fn pixels(&self) -> PixelsIter<'_, T>[src]
#[must_use]pub fn pixels(&self) -> PixelsIter<'_, T>[src]Panics
if width is 0
#[must_use]pub fn pixels_mut(&mut self) -> PixelsIterMut<'_, T>[src]
#[must_use]pub fn pixels_mut(&mut self) -> PixelsIterMut<'_, T>[src]Panics
if width is 0
impl<'a, T> Img<&'a mut [T]>[src]
impl<'a, T> Img<&'a mut [T]>[src]impl<T> Img<Vec<T, Global>>[src]
impl<T> Img<Vec<T, Global>>[src]#[must_use]pub fn sub_image_mut(
&mut self,
left: usize,
top: usize,
width: usize,
height: usize
) -> Img<&mut [T]>[src]
#[must_use]pub fn sub_image_mut(
&mut self,
left: usize,
top: usize,
width: usize,
height: usize
) -> Img<&mut [T]>[src]Create a mutable view into a region within the image. See sub_image() for read-only views.
#[must_use]pub fn sub_image(
&self,
left: usize,
top: usize,
width: usize,
height: usize
) -> Img<&[T]>[src]
#[must_use]pub fn sub_image(
&self,
left: usize,
top: usize,
width: usize,
height: usize
) -> Img<&[T]>[src]Make a reference for a part of the image, without copying any pixels.
#[must_use]pub fn as_ref(&self) -> Img<&[T]>[src]
#[must_use]pub fn as_ref(&self) -> Img<&[T]>[src]Make a reference to this image to pass it to functions without giving up ownership
The reference should be passed by value (ImgRef, not &ImgRef).
If you need a mutable reference, see as_mut() and sub_image_mut()
pub fn as_mut(&mut self) -> Img<&mut [T]>[src]
pub fn as_mut(&mut self) -> Img<&mut [T]>[src]Make a mutable reference to the entire image
The reference should be passed by value (ImgRefMut, not &mut ImgRefMut).
See also sub_image_mut() and rows_mut()
pub fn iter(&self) -> Iter<'_, T>[src]
Size of this buffer may be unpredictable. Use .rows() instead
#[must_use]pub fn rows(&self) -> RowsIter<'_, T>[src]
#[must_use]pub fn rows(&self) -> RowsIter<'_, T>[src]Iterate over rows of the image as slices
Each slice is guaranteed to be exactly width pixels wide.
#[must_use]pub fn rows_mut(&mut self) -> RowsIterMut<'_, T>[src]
#[must_use]pub fn rows_mut(&mut self) -> RowsIterMut<'_, T>[src]Iterate over rows of the image as mutable slices
Each slice is guaranteed to be exactly width pixels wide.
impl<Container> Img<Container>[src]
impl<Container> Img<Container>[src]pub fn new_stride(
buf: Container,
width: usize,
height: usize,
stride: usize
) -> Img<Container>[src]
pub fn new_stride(
buf: Container,
width: usize,
height: usize,
stride: usize
) -> Img<Container>[src]Same as new(), except each row is located stride number of pixels after the previous one.
Stride can be equal to width or larger. If it’s larger, then pixels between end of previous row and start of the next are considered a padding, and may be ignored.
The Container is usually a Vec or a slice.
pub fn new(buf: Container, width: usize, height: usize) -> Img<Container>[src]
pub fn new(buf: Container, width: usize, height: usize) -> Img<Container>[src]Create new image with Container (which can be Vec, &[] or something else) with given width and height in pixels.
Assumes the pixels in container are contiguous, layed out row by row with width pixels per row and at least height rows.
If the container is larger than width×height pixels, the extra rows are a considered a padding and may be ignored.
impl<T> Img<Vec<T, Global>> where
T: Copy, [src]
impl<T> Img<Vec<T, Global>> where
T: Copy, [src]#[must_use]pub fn into_contiguous_buf(self) -> (Vec<T, Global>, usize, usize)[src]
#[must_use]pub fn into_contiguous_buf(self) -> (Vec<T, Global>, usize, usize)[src]Returns the buffer, width, height. Guarantees that the buffer is contiguous,
i.e. it’s width*height elements long, and [x + y*width] addresses each pixel.
Efficiently performs operation in-place. For other containers use pixels().collect().
#[must_use]pub fn as_contiguous_buf(&mut self) -> (&[T], usize, usize)[src]
#[must_use]pub fn as_contiguous_buf(&mut self) -> (&[T], usize, usize)[src]Returns a reference to the buffer, width, height. Guarantees that the buffer is contiguous,
i.e. it’s width*height elements long, and [x + y*width] addresses each pixel.
Efficiently performs operation in-place. For other containers use pixels().collect().
impl<'_, T> Img<Cow<'_, [T]>> where
T: Clone, [src]
impl<'_, T> Img<Cow<'_, [T]>> where
T: Clone, [src]pub fn into_owned(self) -> Img<Vec<T, Global>>[src]
pub fn into_owned(self) -> Img<Vec<T, Global>>[src]Convert underlying buffer to owned (e.g. slice to vec)
See also to_contiguous_buf().0.into_owned()
Trait Implementations
impl<'a, T> Hash for Img<&'a mut [T]> where
T: Hash, [src]
impl<'a, T> Hash for Img<&'a mut [T]> where
T: Hash, [src]impl<Pixel, Container> ImgExt<Pixel> for Img<Container> where
Container: AsRef<[Pixel]>, [src]
impl<Pixel, Container> ImgExt<Pixel> for Img<Container> where
Container: AsRef<[Pixel]>, [src]pub fn rows_padded(&self) -> Chunks<'_, Pixel>[src]
pub fn rows_padded(&self) -> Chunks<'_, Pixel>[src]Iterate over the entire buffer as rows, including all padding
Rows will have up to stride width, but the last row may be shorter.
pub fn width_padded(&self) -> usize[src]
pub fn width_padded(&self) -> usize[src]Maximum possible width of the data, including the stride. Read more
pub fn height_padded(&self) -> usize[src]
pub fn height_padded(&self) -> usize[src]Height in number of full strides. If the underlying buffer is not an even multiple of strides, the last row is ignored. Read more
impl<Pixel, Container> ImgExtMut<Pixel> for Img<Container> where
Container: AsMut<[Pixel]>, [src]
impl<Pixel, Container> ImgExtMut<Pixel> for Img<Container> where
Container: AsMut<[Pixel]>, [src]#[must_use]pub fn rows_padded_mut(&mut self) -> ChunksMut<'_, Pixel>[src]
#[must_use]pub fn rows_padded_mut(&mut self) -> ChunksMut<'_, Pixel>[src]Iterate over the entire buffer as rows, including all padding
Rows will have up to stride width, but the last row may be shorter.
Panics
If stride is 0
pub fn as_mut(&mut self) -> Img<&mut [Pixel]>[src]
pub fn as_mut(&mut self) -> Img<&mut [Pixel]>[src]Borrow the container mutably
impl<'a, Pixel> Index<(u32, u32)> for Img<&'a [Pixel]> where
Pixel: Copy, [src]
impl<'a, Pixel> Index<(u32, u32)> for Img<&'a [Pixel]> where
Pixel: Copy, [src]pub fn index(
&self,
index: (u32, u32)
) -> &<Img<&'a [Pixel]> as Index<(u32, u32)>>::Output[src]
pub fn index(
&self,
index: (u32, u32)
) -> &<Img<&'a [Pixel]> as Index<(u32, u32)>>::Output[src]Read a pixel at (x,y) location (e.g. px = img[(x,y)])
Coordinates may be outside width/height if the buffer has enough padding.
The x coordinate can’t exceed stride.
type Output = Pixel
type Output = PixelThe returned type after indexing.
impl<'a, Pixel> Index<(u32, u32)> for Img<Vec<Pixel, Global>> where
Pixel: Copy, [src]
impl<'a, Pixel> Index<(u32, u32)> for Img<Vec<Pixel, Global>> where
Pixel: Copy, [src]pub fn index(
&self,
index: (u32, u32)
) -> &<Img<Vec<Pixel, Global>> as Index<(u32, u32)>>::Output[src]
pub fn index(
&self,
index: (u32, u32)
) -> &<Img<Vec<Pixel, Global>> as Index<(u32, u32)>>::Output[src]Read a pixel at (x,y) location (e.g. px = img[(x,y)])
Coordinates may be outside width/height if the buffer has enough padding.
The x coordinate can’t exceed stride.
type Output = Pixel
type Output = PixelThe returned type after indexing.
impl<'a, Pixel> Index<(u32, u32)> for Img<&'a mut [Pixel]> where
Pixel: Copy, [src]
impl<'a, Pixel> Index<(u32, u32)> for Img<&'a mut [Pixel]> where
Pixel: Copy, [src]pub fn index(
&self,
index: (u32, u32)
) -> &<Img<&'a mut [Pixel]> as Index<(u32, u32)>>::Output[src]
pub fn index(
&self,
index: (u32, u32)
) -> &<Img<&'a mut [Pixel]> as Index<(u32, u32)>>::Output[src]Read a pixel at (x,y) location (e.g. px = img[(x,y)])
Coordinates may be outside width/height if the buffer has enough padding.
The x coordinate can’t exceed stride.
type Output = Pixel
type Output = PixelThe returned type after indexing.
impl<'a, Pixel> Index<(usize, usize)> for Img<Vec<Pixel, Global>> where
Pixel: Copy, [src]
impl<'a, Pixel> Index<(usize, usize)> for Img<Vec<Pixel, Global>> where
Pixel: Copy, [src]pub fn index(
&self,
index: (usize, usize)
) -> &<Img<Vec<Pixel, Global>> as Index<(usize, usize)>>::Output[src]
pub fn index(
&self,
index: (usize, usize)
) -> &<Img<Vec<Pixel, Global>> as Index<(usize, usize)>>::Output[src]Read a pixel at (x,y) location (e.g. px = img[(x,y)])
Coordinates may be outside width/height if the buffer has enough padding.
The x coordinate can’t exceed stride.
type Output = Pixel
type Output = PixelThe returned type after indexing.
impl<'a, Pixel> Index<(usize, usize)> for Img<&'a [Pixel]> where
Pixel: Copy, [src]
impl<'a, Pixel> Index<(usize, usize)> for Img<&'a [Pixel]> where
Pixel: Copy, [src]pub fn index(
&self,
index: (usize, usize)
) -> &<Img<&'a [Pixel]> as Index<(usize, usize)>>::Output[src]
pub fn index(
&self,
index: (usize, usize)
) -> &<Img<&'a [Pixel]> as Index<(usize, usize)>>::Output[src]Read a pixel at (x,y) location (e.g. px = img[(x,y)])
Coordinates may be outside width/height if the buffer has enough padding.
The x coordinate can’t exceed stride.
type Output = Pixel
type Output = PixelThe returned type after indexing.
impl<'a, Pixel> Index<(usize, usize)> for Img<&'a mut [Pixel]> where
Pixel: Copy, [src]
impl<'a, Pixel> Index<(usize, usize)> for Img<&'a mut [Pixel]> where
Pixel: Copy, [src]pub fn index(
&self,
index: (usize, usize)
) -> &<Img<&'a mut [Pixel]> as Index<(usize, usize)>>::Output[src]
pub fn index(
&self,
index: (usize, usize)
) -> &<Img<&'a mut [Pixel]> as Index<(usize, usize)>>::Output[src]Read a pixel at (x,y) location (e.g. px = img[(x,y)])
Coordinates may be outside width/height if the buffer has enough padding.
The x coordinate can’t exceed stride.
type Output = Pixel
type Output = PixelThe returned type after indexing.
impl<Container> IntoIterator for Img<Container> where
Container: IntoIterator, [src]
impl<Container> IntoIterator for Img<Container> where
Container: IntoIterator, [src]Deprecated. Use .rows() or .pixels() iterators which are more predictable
pub fn into_iter(self) -> <Container as IntoIterator>::IntoIter[src]
pub fn into_iter(self) -> <Container as IntoIterator>::IntoIter[src]Deprecated. Use .rows() or .pixels() iterators which are more predictable
type Item = <Container as IntoIterator>::Item
type Item = <Container as IntoIterator>::ItemThe type of the elements being iterated over.
type IntoIter = <Container as IntoIterator>::IntoIter
type IntoIter = <Container as IntoIterator>::IntoIterWhich kind of iterator are we turning this into?
impl<'a, 'b, T, U> PartialEq<Img<&'b mut [U]>> for Img<&'a mut [T]> where
T: PartialEq<U>, [src]
impl<'a, 'b, T, U> PartialEq<Img<&'b mut [U]>> for Img<&'a mut [T]> where
T: PartialEq<U>, [src]impl<Container> Copy for Img<Container> where
Container: Copy, [src]
Container: Copy,
impl<'a, T> Eq for Img<&'a mut [T]> where
T: Eq, [src]
T: Eq,
impl<T> Eq for Img<Vec<T, Global>> where
T: Eq, [src]
T: Eq,
impl<'a, T> Eq for Img<&'a [T]> where
T: Eq, [src]
T: Eq,
Auto Trait Implementations
impl<Container> RefUnwindSafe for Img<Container> where
Container: RefUnwindSafe,
Container: RefUnwindSafe,
impl<Container> Send for Img<Container> where
Container: Send,
Container: Send,
impl<Container> Sync for Img<Container> where
Container: Sync,
Container: Sync,
impl<Container> Unpin for Img<Container> where
Container: Unpin,
Container: Unpin,
impl<Container> UnwindSafe for Img<Container> where
Container: UnwindSafe,
Container: UnwindSafe,
Blanket Implementations
impl<T> BorrowMut<T> for T where
T: ?Sized, [src]
impl<T> BorrowMut<T> for T where
T: ?Sized, [src]pub fn borrow_mut(&mut self) -> &mut T[src]
pub fn borrow_mut(&mut self) -> &mut T[src]Mutably borrows from an owned value. Read more
impl<T> Pointable for T
impl<T> Pointable for Timpl<T> ToOwned for T where
T: Clone, [src]
impl<T> ToOwned for T where
T: Clone, [src]type Owned = T
type Owned = TThe resulting type after obtaining ownership.
pub fn to_owned(&self) -> T[src]
pub fn to_owned(&self) -> T[src]Creates owned data from borrowed data, usually by cloning. Read more
pub fn clone_into(&self, target: &mut T)[src]
pub fn clone_into(&self, target: &mut T)[src]🔬 This is a nightly-only experimental API. (toowned_clone_into)
recently added
Uses borrowed data to replace owned data, usually by cloning. Read more