Struct openexr::core::output_part::OutputPart [−][src]
#[repr(transparent)]pub struct OutputPart<'a> { /* fields omitted */ }
Implementations
pub fn new(
multi_part_file: &MultiPartOutputFile,
part_number: i32
) -> Result<OutputPart<'_>, Error>
pub fn new(
multi_part_file: &MultiPartOutputFile,
part_number: i32
) -> Result<OutputPart<'_>, Error>
Get an interface to the part part_number
of the MultiPartOutputFile
multi_part_file
.
Set the current frame buffer – copies the FrameBuffer object into the OutputPart object.
The current frame buffer is the source of the pixel
data written to the file. The current frame buffer
must be set at least once before OutputPart::write_pixels
is
called. The current frame buffer can be changed
after each call to OutputPart::write_pixels
.
Errors
Error::InvalidArgument
- If the pixel type of theChannel
s in theHeader
do not match the types in the frame buffer, or if the sampling rates do not match.
Get a reference to the frame buffer.
Write pixel data.
Retrieves the next num_scan_lines
worth of data from
the current frame buffer, starting with the scan line indicated by
OutputPart::current_scan_line
and stores the data in the output file, and
progressing in the direction indicated by header().line_order()
.
To produce a complete and correct file, exactly m scan lines must
be written, where m is equal to
header().data_window().max.y - header().data_window().min.y + 1
.
Errors
Error::Io
- If an I/O error occurs while writing the image dataError::InvalidArgument
- Ifcurrent_scan_line() + num_scan_lines
is outside the data window.Error::Base
- If any other error occurs.
Safety
This method is wildly unsafe as on the C++ side it’s reading from
pointers offset from the base pointers supplied by the
crate::core::frame_buffer::Slice
in
the FrameBuffer
. In particular, by setting an
crate::core::frame_buffer::SliceBuilder::origin
you can cause write_pixels
to read from arbitrary memory locations.
Access to the current scan line:
Returns the y coordinate of the first scan line
that will be read from the current frame buffer during the next
call to OutputPart::write_pixels
.
If line_order() == INCREASING_Y
:
The current scan line before the first call to write_pixels() is header().data_window().min.y. After writing each scan line, the current scan line is incremented by 1.
If line_order() == DECREASING_Y
:
The current scan line before the first call to write_pixels() is header().data_window().max.y. After writing each scan line, the current scan line is decremented by 1.
Shortcut to copy all pixels from an InputFile
into this file,
without uncompressing and then recompressing the pixel data.
This file’s header must be compatible with the InputFile
’s
header: The two header’s “dataWindow”, “compression”,
“lineOrder” and “channels” attributes must be the same.
Errors
Error::InvalidArgument
- If the headers do not matchError::LogicError
- If scan lines have already been written to this file.
Shortcut to copy all pixels from an InputPart
into this file,
without uncompressing and then recompressing the pixel data.
This file’s header must be compatible with the InputPart
’s
header: The two header’s “dataWindow”, “compression”,
“lineOrder” and “channels” attributes must be the same.
Errors
Error::InvalidArgument
- If the headers do not matchError::LogicError
- If scan lines have already been written to this file.
Updating the preview image:
Supplies a new set of pixels for the preview image attribute in the file’s header.
This is necessary because images are often stored in a file incrementally, a few scan lines at a time, while the image is being generated. Since the preview image is an attribute in the file’s header, it gets stored in the file as soon as the file is opened, but we may not know what the preview image should look like until we have written the last scan line of the main image.
Errors
Error::LogicError
- If the header does not contain a preview imageError::Base
- If any other error occurs