Struct tiff::encoder::ImageEncoder
source · pub struct ImageEncoder<'a, W: 'a + Write + Seek, C: ColorType, K: TiffKind, D: Compression = Uncompressed> {
encoder: DirectoryEncoder<'a, W, K>,
strip_idx: u64,
strip_count: u64,
row_samples: u64,
width: u32,
height: u32,
rows_per_strip: u64,
strip_offsets: Vec<K::OffsetType>,
strip_byte_count: Vec<K::OffsetType>,
dropped: bool,
compression: D,
_phantom: PhantomData<C>,
}
Expand description
Type to encode images strip by strip.
You should call finish
on this when you are finished with it.
Encoding can silently fail while this is dropping.
§Examples
use tiff::encoder::*;
use tiff::tags::Tag;
let mut tiff = TiffEncoder::new(&mut file).unwrap();
let mut image = tiff.new_image::<colortype::RGB8>(100, 100).unwrap();
// You can encode tags here
image.encoder().write_tag(Tag::Artist, "Image-tiff").unwrap();
// Strip size can be configured before writing data
image.rows_per_strip(2).unwrap();
let mut idx = 0;
while image.next_strip_sample_count() > 0 {
let sample_count = image.next_strip_sample_count() as usize;
image.write_strip(&image_data[idx..idx+sample_count]).unwrap();
idx += sample_count;
}
image.finish().unwrap();
You can also call write_data function wich will encode by strip and finish
Fields§
§encoder: DirectoryEncoder<'a, W, K>
§strip_idx: u64
§strip_count: u64
§row_samples: u64
§width: u32
§height: u32
§rows_per_strip: u64
§strip_offsets: Vec<K::OffsetType>
§strip_byte_count: Vec<K::OffsetType>
§dropped: bool
§compression: D
§_phantom: PhantomData<C>
Implementations§
source§impl<'a, W: 'a + Write + Seek, T: ColorType, K: TiffKind, D: Compression> ImageEncoder<'a, W, T, K, D>
impl<'a, W: 'a + Write + Seek, T: ColorType, K: TiffKind, D: Compression> ImageEncoder<'a, W, T, K, D>
fn new(
encoder: DirectoryEncoder<'a, W, K>,
width: u32,
height: u32,
) -> TiffResult<Self>where
D: Default,
fn with_compression( encoder: DirectoryEncoder<'a, W, K>, width: u32, height: u32, compression: D, ) -> TiffResult<Self>
sourcepub fn next_strip_sample_count(&self) -> u64
pub fn next_strip_sample_count(&self) -> u64
Number of samples the next strip should have.
sourcepub fn write_strip(&mut self, value: &[T::Inner]) -> TiffResult<()>
pub fn write_strip(&mut self, value: &[T::Inner]) -> TiffResult<()>
Write a single strip.
sourcepub fn write_data(self, data: &[T::Inner]) -> TiffResult<()>
pub fn write_data(self, data: &[T::Inner]) -> TiffResult<()>
Write strips from data
sourcepub fn resolution(&mut self, unit: ResolutionUnit, value: Rational)
pub fn resolution(&mut self, unit: ResolutionUnit, value: Rational)
Set image resolution
sourcepub fn resolution_unit(&mut self, unit: ResolutionUnit)
pub fn resolution_unit(&mut self, unit: ResolutionUnit)
Set image resolution unit
sourcepub fn x_resolution(&mut self, value: Rational)
pub fn x_resolution(&mut self, value: Rational)
Set image x-resolution
sourcepub fn y_resolution(&mut self, value: Rational)
pub fn y_resolution(&mut self, value: Rational)
Set image y-resolution
sourcepub fn rows_per_strip(&mut self, value: u32) -> TiffResult<()>
pub fn rows_per_strip(&mut self, value: u32) -> TiffResult<()>
Set image number of lines per strip
This function needs to be called before any calls to write_data
or
write_strip
and will return an error otherwise.
fn finish_internal(&mut self) -> TiffResult<()>
sourcepub fn encoder(&mut self) -> &mut DirectoryEncoder<'a, W, K>
pub fn encoder(&mut self) -> &mut DirectoryEncoder<'a, W, K>
Get a reference of the underlying DirectoryEncoder
sourcepub fn finish(self) -> TiffResult<()>
pub fn finish(self) -> TiffResult<()>
Write out image and ifd directory.
Trait Implementations§
Auto Trait Implementations§
impl<'a, W, C, K, D> Freeze for ImageEncoder<'a, W, C, K, D>where
D: Freeze,
impl<'a, W, C, K, D> RefUnwindSafe for ImageEncoder<'a, W, C, K, D>where
D: RefUnwindSafe,
C: RefUnwindSafe,
W: RefUnwindSafe,
<K as TiffKind>::OffsetType: RefUnwindSafe,
impl<'a, W, C, K, D> Send for ImageEncoder<'a, W, C, K, D>
impl<'a, W, C, K, D> Sync for ImageEncoder<'a, W, C, K, D>
impl<'a, W, C, K, D> Unpin for ImageEncoder<'a, W, C, K, D>
impl<'a, W, C, K, D = Uncompressed> !UnwindSafe for ImageEncoder<'a, W, C, K, D>
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> 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 more