pub trait ReadSpecificChannel: Sized + CheckDuplicates {
    type RecursivePixelReader: RecursivePixelReader;

    // Required method
    fn create_recursive_reader(
        &self,
        channels: &ChannelList
    ) -> Result<Self::RecursivePixelReader>;

    // Provided methods
    fn required<Sample>(
        self,
        channel_name: impl Into<Text>
    ) -> ReadRequiredChannel<Self, Sample> { ... }
    fn optional<Sample>(
        self,
        channel_name: impl Into<Text>,
        default_sample: Sample
    ) -> ReadOptionalChannel<Self, Sample> { ... }
    fn collect_pixels<Pixel, PixelStorage, CreatePixels, SetPixel>(
        self,
        create_pixels: CreatePixels,
        set_pixel: SetPixel
    ) -> CollectPixels<Self, Pixel, PixelStorage, CreatePixels, SetPixel>
       where <Self::RecursivePixelReader as RecursivePixelReader>::RecursivePixel: IntoTuple<Pixel>,
             <Self::RecursivePixelReader as RecursivePixelReader>::RecursiveChannelDescriptions: IntoNonRecursive,
             CreatePixels: Fn(Vec2<usize>, &<<Self::RecursivePixelReader as RecursivePixelReader>::RecursiveChannelDescriptions as IntoNonRecursive>::NonRecursive) -> PixelStorage,
             SetPixel: Fn(&mut PixelStorage, Vec2<usize>, Pixel) { ... }
}
Expand description

Can be attached one more channel reader. Call required or optional on this object to declare another channel to be read from the file. Call collect_pixels at last to define how the previously declared pixels should be stored.

Required Associated Types§

source

type RecursivePixelReader: RecursivePixelReader

A separate internal reader for the pixels. Will be of type Recursive<_, SampleReader<_>>, depending on the pixels of the specific channel combination.

Required Methods§

source

fn create_recursive_reader( &self, channels: &ChannelList ) -> Result<Self::RecursivePixelReader>

Create a separate internal reader for the pixels of the specific channel combination.

Provided Methods§

source

fn required<Sample>( self, channel_name: impl Into<Text> ) -> ReadRequiredChannel<Self, Sample>

Plan to read an additional channel from the image, with the specified name. If the channel cannot be found in the image when the image is read, the image will not be loaded. The generic parameter can usually be inferred from the closure in collect_pixels.

source

fn optional<Sample>( self, channel_name: impl Into<Text>, default_sample: Sample ) -> ReadOptionalChannel<Self, Sample>

Plan to read an additional channel from the image, with the specified name. If the file does not contain this channel, the specified default sample will be returned instead. You can check whether the channel has been loaded by checking the presence of the optional channel description before instantiating your own image. The generic parameter can usually be inferred from the closure in collect_pixels.

source

fn collect_pixels<Pixel, PixelStorage, CreatePixels, SetPixel>( self, create_pixels: CreatePixels, set_pixel: SetPixel ) -> CollectPixels<Self, Pixel, PixelStorage, CreatePixels, SetPixel>where <Self::RecursivePixelReader as RecursivePixelReader>::RecursivePixel: IntoTuple<Pixel>, <Self::RecursivePixelReader as RecursivePixelReader>::RecursiveChannelDescriptions: IntoNonRecursive, CreatePixels: Fn(Vec2<usize>, &<<Self::RecursivePixelReader as RecursivePixelReader>::RecursiveChannelDescriptions as IntoNonRecursive>::NonRecursive) -> PixelStorage, SetPixel: Fn(&mut PixelStorage, Vec2<usize>, Pixel),

Using two closures, define how to store the pixels. The first closure creates an image, and the second closure inserts a single pixel. The type of the pixel can be defined by the second closure; it must be a tuple containing f16, f32, u32 or Sample values. See the examples for more information.

Implementors§

source§

impl ReadSpecificChannel for NoneMore

source§

impl<DefaultSample, ReadChannels> ReadSpecificChannel for ReadOptionalChannel<ReadChannels, DefaultSample>where ReadChannels: ReadSpecificChannel, DefaultSample: FromNativeSample + 'static,

source§

impl<Sample, ReadChannels> ReadSpecificChannel for ReadRequiredChannel<ReadChannels, Sample>where ReadChannels: ReadSpecificChannel, Sample: FromNativeSample + 'static,