pub struct DirectoryOffset<K: TiffKind> {
pub offset: K::OffsetType,
pub pointer: IfdPointer,
/* private fields */
}Expand description
The offset of an encoded directory in the file.
Both the offset and pointer field are a complete description of the start offset of the
dictionary which is used to point to it. The struct also describes the extent covered by the
encoding of the directory. The constructors new allow the checked
conversion. Note that even though the offsets are public do not expect their information to
propagate when modified.
Fields§
§offset: K::OffsetTypeThe start of the directory as a Tiff value.
This is a bit of a wart in the strongly typed design of the encoder. The value type must
itself know how to be represented in the Tiff file but that may differ based on endianess
as well as the offset size (u32 or BigTIFF’s u64). Thankfully we’re allowed to
represent offsets with LONG or IFD in the usual case.
pointer: IfdPointerThe start of the directory as a pure offset.
Implementations§
Source§impl<K: TiffKind> DirectoryOffset<K>
impl<K: TiffKind> DirectoryOffset<K>
Sourcepub fn new(pointer: IfdPointer, dir: &Directory) -> TiffResult<Self>
pub fn new(pointer: IfdPointer, dir: &Directory) -> TiffResult<Self>
Construct the directory pointer information from its raw offset.
Fails in these cases:
- if start offset is too large to be represented with the chosen TIFF format, i.e. a value
larger than
u32::MAXwith a standard tiff which is only valid in a BigTiff. This returnsTiffError::IntSizeError. - the extent of the directory would overflow the file length. This returns a
TiffError::UsageError.
The library does not validate the contents or offset in any way, it just performs the necessary math assuming the data is an accurate representation of existing content.
§Examples
If you have any custom way of writing a directory to a file that can not go through the
usual TiffEncoder::extra_directory then you can reconstruct the offset information as
long as you provide all the necessary data to the library. You can then use it as a parent
directory, i.e. have the library overwrite its next field.
use tiff::{
encoder::{TiffEncoder, DirectoryOffset},
Directory,
tags::IfdPointer,
};
let mut tiff = TiffEncoder::new(&mut file)?;
// … some custom data writes, assume we know where a directory was written
let known_offset = IfdPointer(1024);
let known_contents: Directory = reconstruction_of_your_directory();
let reconstructed = DirectoryOffset::new(known_offset, &known_contents)?;
// Now we can use it as if the directory was written by the `TiffEncoder` itself.
let mut chain = tiff.extra_directory()?;
chain.set_parent(&reconstructed);
chain.finish_with_offsets()?;
Trait Implementations§
Source§impl<K: Clone + TiffKind> Clone for DirectoryOffset<K>where
K::OffsetType: Clone,
impl<K: Clone + TiffKind> Clone for DirectoryOffset<K>where
K::OffsetType: Clone,
Source§fn clone(&self) -> DirectoryOffset<K>
fn clone(&self) -> DirectoryOffset<K>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more