Struct Header
pub struct Header { pub channels: ChannelList, pub compression: Compression, pub blocks: BlockDescription, pub line_order: LineOrder, pub layer_size: Vec2<usize>, pub deep: bool, pub deep_data_version: Option<i32>, pub chunk_count: usize, pub max_samples_per_pixel: Option<usize>, pub shared_attributes: ImageAttributes, pub own_attributes: LayerAttributes }
Describes a single layer in a file. A file can have any number of layers. The meta data contains one header per layer.
Fields
channels: ChannelListList of channels in this layer.
compression: CompressionHow the pixel data of all channels in this layer is compressed. May be
Compression::Uncompressed.blocks: BlockDescriptionDescribes how the pixels of this layer are divided into smaller blocks. A single block can be loaded without processing all bytes of a file.
Also describes whether a file contains multiple resolution levels: mip maps or rip maps. This allows loading not the full resolution, but the smallest sensible resolution.
line_order: LineOrderIn what order the tiles of this header occur in the file.
layer_size: Vec2<usize>The resolution of this layer. Equivalent to the size of the
DataWindow.deep: boolWhether this layer contains deep data.
deep_data_version: Option<i32>This library supports only deep data version 1.
chunk_count: usizeNumber of chunks, that is, scan line blocks or tiles, that this image has been divided into. This number is calculated once at the beginning of the read process or when creating a header object.
This value includes all chunks of all resolution levels.
Warning This value is relied upon. You should probably use
Header::with_encoding, which automatically updates the chunk count.max_samples_per_pixel: Option<usize>Maximum number of samples in a single pixel in a deep image.
shared_attributes: ImageAttributesIncludes mandatory fields like pixel aspect or display window which must be the same for all layers.
own_attributes: LayerAttributesDoes not include the attributes required for reading the file contents. Excludes standard fields that must be the same for all headers.
Implementations
impl Header
fn new(name: Text, data_size: impl Into<Vec2<usize>>, channels: SmallVec<[ChannelDescription; 5]>) -> SelfCreate a new Header with the specified name, display window and channels. Use
Header::with_encodingand the similar methods to add further properties to the header.The other settings are left to their default values:
- RLE compression
- display window equal to data window
- tiles (64 x 64 px)
- unspecified line order
- no custom attributes
const fn with_display_window(self, display_window: IntegerBounds) -> SelfSet the display window, that is, the global clipping rectangle. Must be the same for all headers of a file.
const fn with_position(self, position: Vec2<i32>) -> SelfSet the offset of this layer.
fn with_encoding(self, compression: Compression, blocks: BlockDescription, line_order: LineOrder) -> SelfSet compression, tiling, and line order. Automatically computes chunk count.
fn with_attributes(self, own_attributes: LayerAttributes) -> SelfSet all attributes of the header that are not shared with all other headers in the image.
Set all attributes of the header that are shared with all other headers in the image.
fn enumerate_ordered_blocks(&self) -> impl Iterator<Item = (usize, TileIndices)> + SendIterate over all blocks, in the order specified by the headers line order attribute. Unspecified line order is treated as increasing line order. Also enumerates the index of each block in the header, as if it were sorted in increasing line order.
fn blocks_increasing_y_order(&self) -> impl ExactSizeIterator<Item = TileIndices> + DoubleEndedIteratorIterate over all tile indices in this header in
LineOrder::Increasingorder.const fn max_block_pixel_size(&self) -> Vec2<usize>The default pixel resolution of a single block (tile or scan line block). Not all blocks have this size, because they may be cutoff at the end of the image.
fn get_block_data_window_pixel_coordinates(&self, tile: TileCoordinates) -> Result<IntegerBounds>Calculate the position of a block in the global infinite 2D space of a file. May be negative.
fn get_absolute_block_pixel_coordinates(&self, tile: TileCoordinates) -> Result<IntegerBounds>Calculate the pixel index rectangle inside this header. Is not negative. Starts at
0.fn get_block_data_indices(&self, block: &CompressedBlock) -> Result<TileCoordinates>Return the tile index, converting scan line block coordinates to tile indices. Starts at
0and is not negative.fn get_scan_line_block_tile_coordinates(&self, block_y_coordinate: i32) -> Result<TileCoordinates>Computes the absolute tile coordinate data indices, which start at
0.fn max_block_byte_size(&self) -> usizeMaximum byte length of an uncompressed or compressed block, used for validation.
fn total_pixel_bytes(&self) -> usizeReturns the number of bytes that the pixels of this header will require when stored without compression. Respects multi-resolution levels and subsampling.
fn max_pixel_file_bytes(&self) -> usizeApproximates the maximum number of bytes that the pixels of this header will consume in a file. Due to compression, the actual byte size may be smaller.
fn validate(&self, is_multilayer: bool, long_names: &mut bool, strict: bool) -> UnitResultValidate this instance.
fn read_all(read: &mut PeekRead<impl Read>, version: &Requirements, pedantic: bool) -> Result<Headers>Read the headers without validating them.
fn write_all(headers: &[Self], write: &mut impl Write, is_multilayer: bool) -> UnitResultWithout validation, write the headers to the byte stream.
fn all_named_attributes(&self) -> impl '_ + Iterator<Item = (&TextSlice, AttributeValue)>Iterate over all
(name, attribute_value)pairs in this header that would be written to a file. The order of attributes is arbitrary and may change in future versions. Will always contain all strictly required attributes, such as channels, compression, data window, and similar. Hint: Useattribute.kind_name()to obtain the standardized name of the attribute type. Does not validate the header or attributes.fn read(read: &mut PeekRead<impl Read>, requirements: &Requirements, pedantic: bool) -> Result<Self>Read the value without validating.
fn write(&self, write: &mut impl Write) -> UnitResultWithout validation, write this instance to the byte stream.
fn data_window(&self) -> IntegerBoundsThe rectangle describing the bounding box of this layer within the infinite global 2D space of the file.
Trait Implementations
impl Clone for Header
fn clone(&self) -> Self
impl Debug for Header
fn fmt(&self, f: &mut Formatter<'_>) -> Result
impl PartialEq for Header
fn eq(&self, other: &Self) -> bool
impl StructuralPartialEq for Header
Auto Trait Implementations
impl Freeze for Header
impl RefUnwindSafe for Header
impl Send for Header
impl Sync for Header
impl Unpin for Header
impl UnsafeUnpin for Header
impl UnwindSafe for Header
Blanket Implementations
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for Header
where
ST: ?Sized,
DT: ?Sized,
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for Header
where
ST: ?Sized,
DT: ?Sized,
impl<T> Any for Header
where
T: 'static + ?Sized,
fn type_id(&self) -> TypeId
impl<T> Borrow<T> for Header
where
T: ?Sized,
fn borrow(&self) -> &T
impl<T> BorrowMut<T> for Header
where
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
impl<T> CloneToUninit for Header
where
T: Clone,
unsafe fn clone_to_uninit(&self, dest: *mut u8)
impl<T> From<T> for Header
fn from(t: T) -> TReturns the argument unchanged.
impl<T> Pointable for Header
const ALIGN: usize = _;type Init = T;unsafe fn init(init: <T as Pointable>::Init) -> usizeunsafe fn deref<'a>(ptr: usize) -> &'a Tunsafe fn deref_mut<'a>(ptr: usize) -> &'a mut Tunsafe fn drop(ptr: usize)
impl<T> Read<Exclusive, BecauseExclusive> for Header
where
T: ?Sized,
impl<T> ToOwned for Header
where
T: Clone,
type Owned = T;fn to_owned(&self) -> Tfn clone_into(&self, target: &mut T)
impl<T, U> Into<U> for Header
where
U: From<T>,
fn into(self) -> UCalls
U::from(self).That is, this conversion is whatever the implementation of
[From]<T> for Uchooses to do.
impl<T, U> TryFrom<U> for Header
where
U: Into<T>,
type Error = never;fn try_from(value: U) -> Result<T, never>
impl<T, U> TryInto<U> for Header
where
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error;fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>