pub struct PineappleViewBuffer<'a, T, Container> { /* private fields */ }Expand description
A row-major buffer that defines an image view/crop/subregion
The cropped object represents a zero-copy reference to a larger PineappleBuffer. To enable zero-copy, the full image has to share the same lifetime as the cropped object. This should generally always be the case since we perform operations on cropped objects iteratively across all segmented objects from the same image.
§Examples
use pineapple_core::im::{PineappleBuffer, PineappleViewBuffer};
let width = 3;
let height = 3;
let channels = 1;
let data = vec![0, 1, 2, 3, 4, 5, 6, 7, 8];
let buffer = PineappleBuffer::<u8, Vec<u8>>::new(width, height, channels, data).unwrap();
let crop = PineappleViewBuffer::new(1, 1, 2, 2, &buffer);
for subpixel in crop.iter() {
let _ = subpixel;
}Implementations§
Source§impl<'a, T, Container> PineappleViewBuffer<'a, T, Container>
impl<'a, T, Container> PineappleViewBuffer<'a, T, Container>
Sourcepub fn new(
x: u32,
y: u32,
w: u32,
h: u32,
buffer: &'a PineappleBuffer<T, Container>,
) -> Self
pub fn new( x: u32, y: u32, w: u32, h: u32, buffer: &'a PineappleBuffer<T, Container>, ) -> Self
Initialize a copy-free object specifying a cropped/subregion of an image
§Examples
use pineapple_core::im::{PineappleBuffer, PineappleViewBuffer};
let width = 3;
let height = 3;
let channels = 1;
let data: Vec<u8> = vec![0, 1, 2, 3, 4, 5, 6, 7, 8];
let buffer = PineappleBuffer::<u8, Vec<u8>>::new(width, height, channels, data).unwrap();
let crop = PineappleViewBuffer::new(1, 1, 2, 2, &buffer);Source§impl<T, Container> PineappleViewBuffer<'_, T, Container>
impl<T, Container> PineappleViewBuffer<'_, T, Container>
Source§impl<'a, T, Container> PineappleViewBuffer<'a, T, Container>
impl<'a, T, Container> PineappleViewBuffer<'a, T, Container>
Sourcepub fn descriptors(&'a self) -> Vec<f32>
pub fn descriptors(&'a self) -> Vec<f32>
Compute all view descriptors
Source§impl<'a, T, Container> PineappleViewBuffer<'a, T, Container>
impl<'a, T, Container> PineappleViewBuffer<'a, T, Container>
Sourcepub fn iter(&'a self) -> SubpixelIterator<'a, T, Container>
pub fn iter(&'a self) -> SubpixelIterator<'a, T, Container>
Return an iterator over pixels containing all channels
Sourcepub fn iter_pixels(&'a self) -> PixelIterator<'a, T, Container>
pub fn iter_pixels(&'a self) -> PixelIterator<'a, T, Container>
Return an iterator over pixels containing all channels
Trait Implementations§
Source§impl<'a, T: Clone, Container: Clone> Clone for PineappleViewBuffer<'a, T, Container>
impl<'a, T: Clone, Container: Clone> Clone for PineappleViewBuffer<'a, T, Container>
Source§fn clone(&self) -> PineappleViewBuffer<'a, T, Container>
fn clone(&self) -> PineappleViewBuffer<'a, T, Container>
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreAuto Trait Implementations§
impl<'a, T, Container> Freeze for PineappleViewBuffer<'a, T, Container>
impl<'a, T, Container> RefUnwindSafe for PineappleViewBuffer<'a, T, Container>where
Container: RefUnwindSafe,
T: RefUnwindSafe,
impl<'a, T, Container> Send for PineappleViewBuffer<'a, T, Container>
impl<'a, T, Container> Sync for PineappleViewBuffer<'a, T, Container>
impl<'a, T, Container> Unpin for PineappleViewBuffer<'a, T, Container>
impl<'a, T, Container> UnwindSafe for PineappleViewBuffer<'a, T, Container>where
Container: RefUnwindSafe,
T: RefUnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.