# [−][src]Struct image::flat::View

    pub struct View<Buffer, P: Pixel> where
        Buffer: AsRef<[P::Subpixel]>,  { /* fields omitted */ }

A flat buffer that can be used as an image view.

This is a nearly trivial wrapper around a buffer but at least sanitizes by checking the buffer length first and constraining the pixel type.

Note that this does not eliminate panics as the `AsRef<[T]>` implementation of `Buffer` may be unreliable, i.e. return different buffers at different times. This of course is a non-issue for all common collections where the bounds check once must be enough.

# Inner invariants

- For all indices inside bounds, the corresponding index is valid in the buffer
- `P::channel_count()` agrees with `self.inner.layout.channels`

## Methods

### `impl<Buffer, P: Pixel> View<Buffer, P> where
Buffer: AsRef<[P::Subpixel]>,` [src]

#### `pub fn into_inner(self) -> FlatSamples<Buffer>`[src]

Take out the sample buffer.

Gives up the normalization invariants on the buffer format.

#### `pub fn flat(&self) -> &FlatSamples<Buffer>`[src]

Get a reference on the inner sample descriptor.

There is no mutable counterpart as modifying the buffer format, including strides and lengths, could invalidate the accessibility invariants of the `View`. It is not specified if the inner buffer is the same as the buffer of the image from which this view was created. It might have been truncated as an optimization.

#### `pub fn samples(&self) -> &Buffer`[src]

Get a reference on the inner buffer.

There is no mutable counter part since it is not intended to allow you to reassign the buffer or otherwise change its size or properties.

#### `pub fn get_sample(&self, channel: u8, x: u32, y: u32) -> Option<&P::Subpixel>`[src]

Get a reference to a selected subpixel if it is in-bounds.

This method will return `None` when the sample is out-of-bounds. All errors that could occur due to overflow have been eliminated while construction the `View`.

#### `pub fn get_mut_sample(
&mut self,
channel: u8,
x: u32,
y: u32
) -> Option<&mut P::Subpixel> where
Buffer: AsMut<[P::Subpixel]>,` [src]

Get a mutable reference to a selected subpixel if it is in-bounds.

This is relevant only when constructed with `FlatSamples::as_view_with_mut_samples`. This method will return `None` when the sample is out-of-bounds. All errors that could occur due to overflow have been eliminated while construction the `View`.

WARNING: Note that of course samples may alias, so that the mutable reference returned here can in fact modify more than the coordinate in the argument.

#### `pub fn min_length(&self) -> usize`[src]

Get the minimum length of a buffer such that all in-bounds samples have valid indices.

See `FlatSamples::min_length`. This method will always succeed.

#### `pub fn image_slice(&self) -> &[P::Subpixel]`[src]

Return the portion of the buffer that holds sample values.

While this can not fail–the validity of all coordinates has been validated during the conversion from `FlatSamples`–the resulting slice may still contain holes.

#### `pub fn image_mut_slice(&mut self) -> &mut [P::Subpixel] where
Buffer: AsMut<[P::Subpixel]>,` [src]

Return the mutable portion of the buffer that holds sample values.

This is relevant only when constructed with `FlatSamples::as_view_with_mut_samples`. While this can not fail–the validity of all coordinates has been validated during the conversion from `FlatSamples`–the resulting slice may still contain holes.

#### `pub fn shrink_to(&mut self, width: u32, height: u32)`[src]

Shrink the inner image.

The new dimensions will be the minimum of the previous dimensions. Since the set of in-bounds pixels afterwards is a subset of the current ones, this is allowed on a `View`. Note that you can not change the number of channels as an intrinsic property of `P`.

#### `pub fn try_upgrade(self) -> Result<ViewMut<Buffer, P>, (Error, Self)> where
Buffer: AsMut<[P::Subpixel]>,` [src]

Try to convert this into an image with mutable pixels.

The resulting image implements `GenericImage` in addition to `GenericImageView`. While this has mutable samples, it does not enforce that pixel can not alias and that samples are packed enough for a mutable pixel reference. This is slightly cheaper than the chain `self.into_inner().as_view_mut()` and keeps the `View` alive on failure.

    let mut buffer = RgbImage::new(480, 640).into_flat_samples();
    let view = buffer.as_view_with_mut_samples::<Rgb<u8>>().unwrap();

    // Inspect some pixels, …

    // Doesn't fail because it was originally an `RgbImage`.
    let view_mut = view.try_upgrade().unwrap();

## Trait Implementations

### `impl<Buffer, P: Pixel> GenericImageView for View<Buffer, P> where
Buffer: AsRef<[P::Subpixel]>,` [src]

#### `type Pixel = P`

The type of pixel.

#### `type InnerImageView = Self`

Underlying image type. This is mainly used by SubImages in order to always have a reference to the original image. This allows for less indirections and it eases the use of nested SubImages. Read more

#### `fn dimensions(&self) -> (u32, u32)`[src]

The width and height of this image.

#### `fn bounds(&self) -> (u32, u32, u32, u32)`[src]

The bounding rectangle of this image.

#### `fn in_bounds(&self, x: u32, y: u32) -> bool`[src]

Returns true if this x, y coordinate is contained inside the image.

#### `fn get_pixel(&self, x: u32, y: u32) -> Self::Pixel`[src]

Returns the pixel located at (x, y) Read more

#### `fn inner(&self) -> &Self`[src]

Returns a reference to the underlying image.

#### `fn width(&self) -> u32`[src]

The width of this image.

#### `fn height(&self) -> u32`[src]

The height of this image.

#### `unsafe fn unsafe_get_pixel(&self, x: u32, y: u32) -> Self::Pixel`[src]

Returns the pixel located at (x, y) Read more

####
ⓘImportant traits for Pixels<'a, I>

### Important traits for Pixels<'a, I>

`impl<'a, I: GenericImageView> Iterator for Pixels<'a, I> type Item = (u32, u32, I::Pixel);`
`fn pixels(&self) -> Pixels<Self>`[src]

Returns an Iterator over the pixels of this image. The iterator yields the coordinates of each pixel along with their value Read more

#### `fn view(
&self,
x: u32,
y: u32,
width: u32,
height: u32
) -> SubImage<&Self::InnerImageView>`[src]

Returns an subimage that is an immutable view into this image.

### `impl<Buffer: Clone, P: Clone + Pixel> Clone for View<Buffer, P> where
Buffer: AsRef<[P::Subpixel]>,` [src]

#### `fn clone(&self) -> View<Buffer, P>`[src]

Returns a copy of the value. Read more

#### `fn clone_from(&mut self, source: &Self)`1.0.0[src]

Performs copy-assignment from `source`. Read more

### `impl<Buffer: Debug, P: Debug + Pixel> Debug for View<Buffer, P> where
Buffer: AsRef<[P::Subpixel]>,` [src]

#### `fn fmt(&self, f: &mut Formatter) -> Result`[src]

Formats the value using the given formatter. Read more

## Auto Trait Implementations

### `impl<Buffer, P> Send for View<Buffer, P> where
Buffer: Send,
P: Send,`

### `impl<Buffer, P> Unpin for View<Buffer, P> where
Buffer: Unpin,
P: Unpin,`

### `impl<Buffer, P> Sync for View<Buffer, P> where
Buffer: Sync,
P: Sync,`

### `impl<Buffer, P> UnwindSafe for View<Buffer, P> where
Buffer: UnwindSafe,
P: UnwindSafe,`

### `impl<Buffer, P> RefUnwindSafe for View<Buffer, P> where
Buffer: RefUnwindSafe,
P: RefUnwindSafe,`

## Blanket Implementations

### `impl<T> ToOwned for T where
T: Clone,` [src]

#### `type Owned = T`

The resulting type after obtaining ownership.

#### `fn to_owned(&self) -> T`[src]

Creates owned data from borrowed data, usually by cloning. Read more

#### `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

### `impl<T, U> Into<U> for T where
U: From<T>,` [src]

#### `fn into(self) -> U`[src]

Performs the conversion.

### `impl<T> From<T> for T`[src]

#### `fn from(t: T) -> T`[src]

Performs the conversion.

### `impl<T, U> TryFrom<U> for T where
U: Into<T>,` [src]

#### `type Error = Infallible`

The type returned in the event of a conversion error.

#### `fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>`[src]

Performs the conversion.

### `impl<T, U> TryInto<U> for T where
U: TryFrom<T>,` [src]

#### `type Error = <U as TryFrom<T>>::Error`

The type returned in the event of a conversion error.

#### `fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>`[src]

Performs the conversion.

### `impl<T> BorrowMut<T> for T where
T: ?Sized,` [src]

#### `fn borrow_mut(&mut self) -> &mut T`[src]

Mutably borrows from an owned value. Read more

### `impl<T> Borrow<T> for T where
T: ?Sized,` [src]

#### `fn borrow(&self) -> &T`[src]

Immutably borrows from an owned value. Read more

### `impl<T> Any for T where
T: 'static + ?Sized,` [src]

#### `fn type_id(&self) -> TypeId`[src]

Gets the `TypeId` of `self`. Read more

### `impl<T> SetParameter for T`[src]

#### `fn set<T>(&mut self, value: T) -> <T as Parameter<Self>>::Result where
T: Parameter<Self>,` [src]

Sets `value` as a parameter of `self`.

# Help

## Keyboard Shortcuts

`?`
  Show this help dialog
`S`
  Focus the search field
`↑`
  Move up in search results
`↓`
  Move down in search results
`↹`
  Switch tab
`⏎`
  Go to active search result
`+`
  Expand all sections
`-`
  Collapse all sections

## Search Tricks

Prefix searches with a type followed by a colon (e.g., `fn:`) to restrict the search to a given type.

Accepted types are: `fn`, `mod`, `struct`, `enum`, `trait`, `type`, `macro`, and `const`.

Search functions by type signature (e.g., `vec -> usize` or `* -> vec`)

Search multiple things at once by splitting your query with comma (e.g., `str,u8` or `String,struct:Vec,test`)