Struct gif::Frame

source ·
pub struct Frame<'a> {
    pub delay: u16,
    pub dispose: DisposalMethod,
    pub transparent: Option<u8>,
    pub needs_user_input: bool,
    pub top: u16,
    pub left: u16,
    pub width: u16,
    pub height: u16,
    pub interlaced: bool,
    pub palette: Option<Vec<u8>>,
    pub buffer: Cow<'a, [u8]>,
}
Expand description

A GIF frame

Fields§

§delay: u16

Frame delay in units of 10 ms.

§dispose: DisposalMethod

Disposal method.

§transparent: Option<u8>

Transparent index (if available).

§needs_user_input: bool

True if the frame needs user input to be displayed.

§top: u16

Offset from the top border of the canvas.

§left: u16

Offset from the left border of the canvas.

§width: u16

Width of the frame.

§height: u16

Height of the frame.

§interlaced: bool

True if the image is interlaced.

§palette: Option<Vec<u8>>

Frame local color palette if available.

§buffer: Cow<'a, [u8]>

Buffer containing the image data. Only indices unless configured differently.

Implementations§

source§

impl Frame<'static>

source

pub fn from_rgba(width: u16, height: u16, pixels: &mut [u8]) -> Frame<'static>

Creates a frame from pixels in RGBA format.

This is a lossy method. The gif format does not support arbitrary alpha but only a 1-bit transparency mask per pixel. Any non-zero alpha value will be interpreted as a fully opaque pixel. Additionally, only 256 colors can appear in a single frame. The palette will be reduced by the NeuQuant algorithm if necessary. Different frames have independent palettes.

Note: This method is not optimized for speed.

§Panics:
  • If the length of pixels does not equal width * height * 4.
source

pub fn from_rgba_speed( width: u16, height: u16, pixels: &mut [u8], speed: i32, ) -> Frame<'static>

Creates a frame from pixels in RGBA format.

speed is a value in the range [1, 30]. The higher the value the faster it runs at the cost of image quality. A speed of 10 is a good compromise between speed and quality.

This is a lossy method. The gif format does not support arbitrary alpha but only a 1-bit transparency mask per pixel. Any non-zero alpha value will be interpreted as a fully opaque pixel. Additionally, only 256 colors can appear in a single frame. The palette will be reduced by the NeuQuant algorithm if necessary. Different frames have independent palettes.

§Panics:
  • If the length of pixels does not equal width * height * 4.
  • If speed < 1 or speed > 30
source

pub fn from_palette_pixels( width: u16, height: u16, pixels: impl Into<Vec<u8>>, palette: impl Into<Vec<u8>>, transparent: Option<u8>, ) -> Frame<'static>

Creates a frame from a palette and indexed pixels.

§Panics:
  • If the length of pixels does not equal width * height.
  • If the length of palette > 256 * 3.
source

pub fn from_indexed_pixels( width: u16, height: u16, pixels: impl Into<Vec<u8>>, transparent: Option<u8>, ) -> Frame<'static>

Creates a frame from indexed pixels in the global palette.

§Panics:
  • If the length of pixels does not equal width * height.
source

pub fn from_rgb(width: u16, height: u16, pixels: &[u8]) -> Frame<'static>

Creates a frame from pixels in RGB format.

This is a lossy method. In the gif format only 256 colors can appear in a single frame. The palette will be reduced by the NeuQuant algorithm if necessary. Different frames have independent palettes.

Note: This method is not optimized for speed.

§Panics:
  • If the length of pixels does not equal width * height * 3.
source

pub fn from_rgb_speed( width: u16, height: u16, pixels: &[u8], speed: i32, ) -> Frame<'static>

Creates a frame from pixels in RGB format.

speed is a value in the range [1, 30].

This is a lossy method. In the gif format only 256 colors can appear in a single frame. The palette will be reduced by the NeuQuant algorithm if necessary. Different frames have independent palettes.

The higher the value the faster it runs at the cost of image quality. A speed of 10 is a good compromise between speed and quality.

§Panics:
  • If the length of pixels does not equal width * height * 3.
  • If speed < 1 or speed > 30
source

pub(crate) fn take(&mut self) -> Self

Leaves empty buffer and empty palette behind

source§

impl Frame<'_>

source

pub fn make_lzw_pre_encoded(&mut self)

Replace frame’s buffer with a LZW-compressed one for use with Encoder::write_lzw_pre_encoded_frame.

Frames can be compressed in any order, separately from the Encoder, which can be used to compress frames in parallel.

Trait Implementations§

source§

impl<'a> Clone for Frame<'a>

source§

fn clone(&self) -> Frame<'a>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'a> Debug for Frame<'a>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'a> Default for Frame<'a>

source§

fn default() -> Frame<'a>

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl<'a> Freeze for Frame<'a>

§

impl<'a> RefUnwindSafe for Frame<'a>

§

impl<'a> Send for Frame<'a>

§

impl<'a> Sync for Frame<'a>

§

impl<'a> Unpin for Frame<'a>

§

impl<'a> UnwindSafe for Frame<'a>

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> CloneToUninit for T
where T: Clone,

source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> ToOwned for T
where T: Clone,

source§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

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

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.