Struct SubImage
pub struct SubImage<I> { /* private fields */ }
dep_image
only.Expand description
A View into another image
Instances of this struct can be created using:
GenericImage::sub_image
to create a mutable view,GenericImageView::view
to create an immutable view,SubImage::new
to instantiate the struct directly.
Note that this does not implement GenericImage
, but it dereferences to one which allows you
to use it as if it did. See Design Considerations below for details.
§Design Considerations
For reasons relating to coherence, this is not itself a GenericImage
or a GenericImageView
.
In short, we want to reserve the ability of adding traits implemented for all generic images
but in a different manner for SubImage
. This may be required to ensure that stacking
sub-images comes at no double indirect cost.
If, ultimately, this is not needed then a directly implementation of GenericImage
can and
will get added. This inconvenience may alternatively get resolved if Rust allows some forms of
specialization, which might make this trick unnecessary and thus also allows for a direct
implementation.
Implementations§
§impl<I> SubImage<I>
impl<I> SubImage<I>
pub fn new(image: I, x: u32, y: u32, width: u32, height: u32) -> SubImage<I>
pub fn new(image: I, x: u32, y: u32, width: u32, height: u32) -> SubImage<I>
Construct a new subimage
The coordinates set the position of the top left corner of the SubImage
.
pub fn change_bounds(&mut self, x: u32, y: u32, width: u32, height: u32)
pub fn change_bounds(&mut self, x: u32, y: u32, width: u32, height: u32)
Change the coordinates of this subimage.
pub fn to_image(
&self,
) -> ImageBuffer<<<I as Deref>::Target as GenericImageView>::Pixel, Vec<<<<I as Deref>::Target as GenericImageView>::Pixel as Pixel>::Subpixel>>
pub fn to_image( &self, ) -> ImageBuffer<<<I as Deref>::Target as GenericImageView>::Pixel, Vec<<<<I as Deref>::Target as GenericImageView>::Pixel as Pixel>::Subpixel>>
Convert this subimage to an ImageBuffer
§impl<I> SubImage<I>
Methods for readable images.
impl<I> SubImage<I>
Methods for readable images.
pub fn view(
&self,
x: u32,
y: u32,
width: u32,
height: u32,
) -> SubImage<&<I as Deref>::Target>
pub fn view( &self, x: u32, y: u32, width: u32, height: u32, ) -> SubImage<&<I as Deref>::Target>
Create a sub-view of the image.
The coordinates given are relative to the current view on the underlying image.
Note that this method is preferred to the one from GenericImageView
. This is accessible
with the explicit method call syntax but it should rarely be needed due to causing an
extra level of indirection.
use image::{GenericImageView, RgbImage, SubImage};
let buffer = RgbImage::new(10, 10);
let subimage: SubImage<&RgbImage> = buffer.view(0, 0, 10, 10);
let subview: SubImage<&RgbImage> = subimage.view(0, 0, 10, 10);
// Less efficient and NOT &RgbImage
let _: SubImage<&_> = GenericImageView::view(&*subimage, 0, 0, 10, 10);
Trait Implementations§
impl<I> Copy for SubImage<I>where
I: Copy,
Auto Trait Implementations§
impl<I> Freeze for SubImage<I>where
I: Freeze,
impl<I> RefUnwindSafe for SubImage<I>where
I: RefUnwindSafe,
impl<I> Send for SubImage<I>where
I: Send,
impl<I> Sync for SubImage<I>where
I: Sync,
impl<I> Unpin for SubImage<I>where
I: Unpin,
impl<I> UnwindSafe for SubImage<I>where
I: UnwindSafe,
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
Source§impl<T> ByteSized for T
impl<T> ByteSized for T
Source§const BYTE_ALIGN: usize = _
const BYTE_ALIGN: usize = _
Source§fn byte_align(&self) -> usize
fn byte_align(&self) -> usize
Source§fn ptr_size_ratio(&self) -> [usize; 2]
fn ptr_size_ratio(&self) -> [usize; 2]
Source§impl<T, R> Chain<R> for Twhere
T: ?Sized,
impl<T, R> Chain<R> for Twhere
T: ?Sized,
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> ExtAny for T
impl<T> ExtAny for T
Source§fn type_hash_with<H: Hasher>(&self, hasher: H) -> u64
fn type_hash_with<H: Hasher>(&self, hasher: H) -> u64
TypeId
of Self
using a custom hasher.Source§fn as_any_mut(&mut self) -> &mut dyn Anywhere
Self: Sized,
fn as_any_mut(&mut self) -> &mut dyn Anywhere
Self: Sized,
Source§impl<T> ExtMem for Twhere
T: ?Sized,
impl<T> ExtMem for Twhere
T: ?Sized,
Source§const NEEDS_DROP: bool = _
const NEEDS_DROP: bool = _
Source§fn mem_align_of<T>() -> usize
fn mem_align_of<T>() -> usize
Source§fn mem_align_of_val(&self) -> usize
fn mem_align_of_val(&self) -> usize
Source§fn mem_size_of<T>() -> usize
fn mem_size_of<T>() -> usize
Source§fn mem_size_of_val(&self) -> usize
fn mem_size_of_val(&self) -> usize
Source§fn mem_needs_drop(&self) -> bool
fn mem_needs_drop(&self) -> bool
true
if dropping values of this type matters. Read moreSource§fn mem_forget(self)where
Self: Sized,
fn mem_forget(self)where
Self: Sized,
self
without running its destructor. Read moreSource§fn mem_replace(&mut self, other: Self) -> Selfwhere
Self: Sized,
fn mem_replace(&mut self, other: Self) -> Selfwhere
Self: Sized,
Source§unsafe fn mem_zeroed<T>() -> T
unsafe fn mem_zeroed<T>() -> T
unsafe_layout
only.T
represented by the all-zero byte-pattern. Read moreSource§unsafe fn mem_transmute_copy<Src, Dst>(src: &Src) -> Dst
unsafe fn mem_transmute_copy<Src, Dst>(src: &Src) -> Dst
unsafe_layout
only.T
represented by the all-zero byte-pattern. Read moreSource§fn mem_as_bytes(&self) -> &[u8] ⓘ
fn mem_as_bytes(&self) -> &[u8] ⓘ
unsafe_slice
only.§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
Source§impl<T> Hook for T
impl<T> Hook for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
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> ⓘ
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> ⓘ
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 more