pub struct LutKernel { /* private fields */ }Expand description
Lookup table (LUT) based color transformation
Implementations§
Source§impl LutKernel
impl LutKernel
Sourcepub fn apply_1d(
&self,
_device: &GpuDevice,
input: &[u8],
output: &mut [u8],
lut: &[u8],
_width: u32,
_height: u32,
) -> Result<()>
pub fn apply_1d( &self, _device: &GpuDevice, input: &[u8], output: &mut [u8], lut: &[u8], _width: u32, _height: u32, ) -> Result<()>
Apply 1D LUT transformation (CPU fallback).
The LUT layout is [CH0_LUT[0..lut_size], CH1_LUT[0..lut_size], …].
For each pixel and each channel c, the output value is
lut[c * lut_size + idx] where idx = (pixel_value * (lut_size-1)) / 255.
Pixels and the LUT are treated as having the same number of channels,
inferred from lut.len() / lut_size. If lut.len() is not a multiple
of lut_size, the extra channel bytes are copied unchanged.
§Arguments
_device- GPU device (CPU fallback: unused)input- Input image bufferoutput- Output image buffer (same length asinput)lut- 1D lookup table (size:lut_size * channels)_width- Image width (unused; length is inferred from buffers)_height- Image height (unused; length is inferred from buffers)
§Errors
Returns an error if lut_size is zero or the LUT is empty.
Sourcepub fn apply_3d(
&self,
_device: &GpuDevice,
input: &[u8],
output: &mut [u8],
lut: &[f32],
_width: u32,
_height: u32,
) -> Result<()>
pub fn apply_3d( &self, _device: &GpuDevice, input: &[u8], output: &mut [u8], lut: &[f32], _width: u32, _height: u32, ) -> Result<()>
Apply 3D LUT transformation with trilinear interpolation (CPU fallback).
The LUT is a cubic grid of size N × N × N (where N = lut_size)
storing RGB triplets, laid out as
lut[(r_idx * N*N + g_idx * N + b_idx) * 3 + channel].
Input pixels are expected to be interleaved 3-channel (RGB) data. Any extra channels beyond the first three are passed through unchanged.
§Arguments
_device- GPU device (CPU fallback: unused)input- Input image buffer (interleaved RGB, 3 bytes per pixel minimum)output- Output image buffer (same length asinput)lut- 3D LUT (lut_size^3 * 3f32 entries, values in[0.0, 1.0])_width- Image width (unused; length is inferred from buffers)_height- Image height (unused; length is inferred from buffers)
§Errors
Returns an error if lut_size is zero or the LUT is too small.
Auto Trait Implementations§
impl Freeze for LutKernel
impl RefUnwindSafe for LutKernel
impl Send for LutKernel
impl Sync for LutKernel
impl Unpin for LutKernel
impl UnsafeUnpin for LutKernel
impl UnwindSafe for LutKernel
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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>
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>
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