Struct image::ImageBuffer [−][src]
pub struct ImageBuffer<P: Pixel, Container> { /* fields omitted */ }
Expand description
Generic image buffer
This is an image parameterised by its Pixel types, represented by a width and height and a
container of channel data. It provides direct access to its pixels and implements the
GenericImageView
and GenericImage
traits. In many ways, this is the standard buffer
implementing those traits. Using this concrete type instead of a generic type parameter has
been shown to improve performance.
The crate defines a few type aliases with regularly used pixel types for your convenience, such
as RgbImage
, GrayImage
etc.
To convert between images of different Pixel types use DynamicImage
.
You can retrieve a complete description of the buffer’s layout and contents through
as_flat_samples
and as_flat_samples_mut
. This can be handy to also use the contents in
a foreign language, map it as a GPU host buffer or other similar tasks.
Examples
Create a simple canvas and paint a small cross.
use image::{RgbImage, Rgb}; let mut img = RgbImage::new(32, 32); for x in 15..=17 { for y in 8..24 { img.put_pixel(x, y, Rgb([255, 0, 0])); img.put_pixel(y, x, Rgb([255, 0, 0])); } }
Overlays an image on top of a larger background raster.
use image::{GenericImage, GenericImageView, ImageBuffer, open}; let on_top = open("path/to/some.png").unwrap().into_rgb(); let mut img = ImageBuffer::from_fn(512, 512, |x, y| { if (x + y) % 2 == 0 { image::Rgb([0, 0, 0]) } else { image::Rgb([255, 255, 255]) } }); image::imageops::overlay(&mut img, &on_top, 128, 128);
Convert an RgbaImage to a GrayImage.
use image::{open, DynamicImage}; let rgba = open("path/to/some.png").unwrap().into_rgba(); let gray = DynamicImage::ImageRgba8(rgba).into_luma();
Implementations
Contructs a buffer from a generic container
(for example a Vec
or a slice)
Returns None
if the container is not big enough (including when the image dimensions
necessitate an allocation of more bytes than supported by the container).
Returns an iterator over the pixels of this image. The iteration order is x = 0 to width then y = 0 to height
Returns an iterator over the rows of this image.
Only non-empty rows can be iterated in this manner. In particular the iterator will not
yield any item when the width of the image is 0
or a pixel type without any channels is
used. This ensures that its length can always be represented by usize
.
pub fn enumerate_pixels(&self) -> EnumeratePixels<'_, P>ⓘ
pub fn enumerate_pixels(&self) -> EnumeratePixels<'_, P>ⓘ
Enumerates over the pixels of the image. The iterator yields the coordinates of each pixel along with a reference to them. The iteration order is x = 0 to width then y = 0 to height Starting from the top left.
pub fn enumerate_rows(&self) -> EnumerateRows<'_, P>ⓘNotable traits for EnumerateRows<'a, P>impl<'a, P: Pixel + 'a> Iterator for EnumerateRows<'a, P> where
P::Subpixel: 'a, type Item = (u32, EnumeratePixels<'a, P>);
pub fn enumerate_rows(&self) -> EnumerateRows<'_, P>ⓘNotable traits for EnumerateRows<'a, P>impl<'a, P: Pixel + 'a> Iterator for EnumerateRows<'a, P> where
P::Subpixel: 'a, type Item = (u32, EnumeratePixels<'a, P>);
impl<'a, P: Pixel + 'a> Iterator for EnumerateRows<'a, P> where
P::Subpixel: 'a, type Item = (u32, EnumeratePixels<'a, P>);
Enumerates over the rows of the image. The iterator yields the y-coordinate of each row along with a reference to them.
Gets a reference to the pixel at location (x, y)
Panics
Panics if (x, y)
is out of the bounds (width, height)
.
Get the format of the buffer when viewed as a matrix of samples.
pub fn into_flat_samples(self) -> FlatSamples<Container> where
Container: AsRef<[P::Subpixel]>,
pub fn into_flat_samples(self) -> FlatSamples<Container> where
Container: AsRef<[P::Subpixel]>,
Return the raw sample buffer with its stride an dimension information.
The returned buffer is guaranteed to be well formed in all cases. It is layed out by
colors, width then height, meaning channel_stride <= width_stride <= height_stride
. All
strides are in numbers of elements but those are mostly u8
in which case the strides are
also byte strides.
pub fn as_flat_samples(&self) -> FlatSamples<&[P::Subpixel]> where
Container: AsRef<[P::Subpixel]>,
pub fn as_flat_samples(&self) -> FlatSamples<&[P::Subpixel]> where
Container: AsRef<[P::Subpixel]>,
Return a view on the raw sample buffer.
See into_flat_samples
for more details.
pub fn as_flat_samples_mut(&mut self) -> FlatSamples<&mut [P::Subpixel]> where
Container: AsMut<[P::Subpixel]>,
pub fn as_flat_samples_mut(&mut self) -> FlatSamples<&mut [P::Subpixel]> where
Container: AsMut<[P::Subpixel]>,
Return a mutable view on the raw sample buffer.
See into_flat_samples
for more details.
Returns an iterator over the mutable pixels of this image.
Returns an iterator over the mutable rows of this image.
Only non-empty rows can be iterated in this manner. In particular the iterator will not
yield any item when the width of the image is 0
or a pixel type without any channels is
used. This ensures that its length can always be represented by usize
.
pub fn enumerate_pixels_mut(&mut self) -> EnumeratePixelsMut<'_, P>ⓘ
pub fn enumerate_pixels_mut(&mut self) -> EnumeratePixelsMut<'_, P>ⓘ
Enumerates over the pixels of the image. The iterator yields the coordinates of each pixel along with a mutable reference to them.
pub fn enumerate_rows_mut(&mut self) -> EnumerateRowsMut<'_, P>ⓘNotable traits for EnumerateRowsMut<'a, P>impl<'a, P: Pixel + 'a> Iterator for EnumerateRowsMut<'a, P> where
P::Subpixel: 'a, type Item = (u32, EnumeratePixelsMut<'a, P>);
pub fn enumerate_rows_mut(&mut self) -> EnumerateRowsMut<'_, P>ⓘNotable traits for EnumerateRowsMut<'a, P>impl<'a, P: Pixel + 'a> Iterator for EnumerateRowsMut<'a, P> where
P::Subpixel: 'a, type Item = (u32, EnumeratePixelsMut<'a, P>);
impl<'a, P: Pixel + 'a> Iterator for EnumerateRowsMut<'a, P> where
P::Subpixel: 'a, type Item = (u32, EnumeratePixelsMut<'a, P>);
Enumerates over the rows of the image. The iterator yields the y-coordinate of each row along with a mutable reference to them.
Gets a reference to the mutable pixel at location (x, y)
Panics
Panics if (x, y)
is out of the bounds (width, height)
.
pub fn save_with_format<Q>(
&self,
path: Q,
format: ImageFormat
) -> ImageResult<()> where
Q: AsRef<Path>,
pub fn save_with_format<Q>(
&self,
path: Q,
format: ImageFormat
) -> ImageResult<()> where
Q: AsRef<Path>,
Saves the buffer to a file at the specified path in the specified format.
See save_buffer_with_format
for
supported types.
Creates a new image buffer based on a Vec<P::Subpixel>
.
Panics
Panics when the resulting image is larger the the maximum size of a vector.
Constructs a new ImageBuffer by copying a pixel
Panics
Panics when the resulting image is larger the the maximum size of a vector.
Constructs a new ImageBuffer by repeated application of the supplied function.
The arguments to the function are the pixel’s x and y coordinates.
Panics
Panics when the resulting image is larger the the maximum size of a vector.
Creates an image buffer out of an existing buffer. Returns None if the buffer is not big enough.
Trait Implementations
impl<'a, 'b, Container, FromType: Pixel + 'static, ToType: Pixel + 'static> ConvertBuffer<ImageBuffer<ToType, Vec<<ToType as Pixel>::Subpixel, Global>>> for ImageBuffer<FromType, Container> where
Container: Deref<Target = [FromType::Subpixel]>,
ToType: FromColor<FromType>,
FromType::Subpixel: 'static,
ToType::Subpixel: 'static,
impl<'a, 'b, Container, FromType: Pixel + 'static, ToType: Pixel + 'static> ConvertBuffer<ImageBuffer<ToType, Vec<<ToType as Pixel>::Subpixel, Global>>> for ImageBuffer<FromType, Container> where
Container: Deref<Target = [FromType::Subpixel]>,
ToType: FromColor<FromType>,
FromType::Subpixel: 'static,
ToType::Subpixel: 'static,
Examples
Convert RGB image to gray image.
use image::buffer::ConvertBuffer; use image::GrayImage; let image_path = "examples/fractal.png"; let image = image::open(&image_path) .expect("Open file failed") .to_rgba(); let gray_image: GrayImage = image.convert();
impl<P, Container> GenericImage for ImageBuffer<P, Container> where
P: Pixel + 'static,
Container: Deref<Target = [P::Subpixel]> + DerefMut,
P::Subpixel: 'static,
impl<P, Container> GenericImage for ImageBuffer<P, Container> where
P: Pixel + 'static,
Container: Deref<Target = [P::Subpixel]> + DerefMut,
P::Subpixel: 'static,
Puts a pixel at location (x, y), ignoring bounds checking.
Put a pixel at location (x, y), taking into account alpha channels
DEPRECATED: This method will be removed. Blend the pixel directly instead.
type InnerImage = Self
type InnerImage = 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
Gets a reference to the mutable pixel at location (x, y)
. Indexed from top left. Read more
Put a pixel at location (x, y). Indexed from top left. Read more
Copies all of the pixels from one part of this image to another part of this image. Read more
Returns a mutable reference to the underlying image.
fn copy_from<O>(&mut self, other: &O, x: u32, y: u32) -> ImageResult<()> where
O: GenericImageView<Pixel = Self::Pixel>,
fn copy_from<O>(&mut self, other: &O, x: u32, y: u32) -> ImageResult<()> where
O: GenericImageView<Pixel = Self::Pixel>,
Copies all of the pixels from another image into this image. Read more
Returns a mutable subimage that is a view into this image.
If you want an immutable subimage instead, use GenericImageView::view
The coordinates set the position of the top left corner of the SubImage. Read more
impl<P, Container> GenericImageView for ImageBuffer<P, Container> where
P: Pixel + 'static,
Container: Deref<Target = [P::Subpixel]> + Deref,
P::Subpixel: 'static,
impl<P, Container> GenericImageView for ImageBuffer<P, Container> where
P: Pixel + 'static,
Container: Deref<Target = [P::Subpixel]> + Deref,
P::Subpixel: 'static,
Returns the pixel located at (x, y), ignoring bounds checking.
type Pixel = P
type Pixel = P
The type of pixel.
type InnerImageView = Self
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
Returns the pixel located at (x, y). Indexed from top left. Read more
Returns a reference to the underlying image.
Returns true if this x, y coordinate is contained inside the image.
Returns an Iterator over the pixels of this image. The iterator yields the coordinates of each pixel along with their value Read more
Returns an subimage that is an immutable view into this image.
You can use GenericImage::sub_image
if you need a mutable view instead.
The coordinates set the position of the top left corner of the view. Read more
impl<P: PartialEq + Pixel, Container: PartialEq> PartialEq<ImageBuffer<P, Container>> for ImageBuffer<P, Container>
impl<P: PartialEq + Pixel, Container: PartialEq> PartialEq<ImageBuffer<P, Container>> for ImageBuffer<P, Container>
This method tests for self
and other
values to be equal, and is used
by ==
. Read more
This method tests for !=
.
Auto Trait Implementations
impl<P, Container> RefUnwindSafe for ImageBuffer<P, Container> where
Container: RefUnwindSafe,
P: RefUnwindSafe,
impl<P, Container> Send for ImageBuffer<P, Container> where
Container: Send,
P: Send,
impl<P, Container> Sync for ImageBuffer<P, Container> where
Container: Sync,
P: Sync,
impl<P, Container> Unpin for ImageBuffer<P, Container> where
Container: Unpin,
P: Unpin,
impl<P, Container> UnwindSafe for ImageBuffer<P, Container> where
Container: UnwindSafe,
P: UnwindSafe,
Blanket Implementations
Mutably borrows from an owned value. Read more