pub struct NeuQuant { /* private fields */ }
👎Deprecated: Use the
color_quant
crate insteadExpand description
Neural network color quantizer
§Examples
use image::imageops::colorops::{index_colors, ColorMap};
use image::math::nq::NeuQuant;
use image::{ImageBuffer, Rgba, RgbaImage};
// Create simple color image with RGBA pixels.
let (w, h) = (2, 2);
let red: Rgba<u8> = [255, 0, 0, 255].into();
let green: Rgba<u8> = [0, 255, 0, 255].into();
let blue: Rgba<u8> = [0, 0, 255, 255].into();
let white: Rgba<u8> = [255, 255, 255, 255].into();
let mut color_image = RgbaImage::new(w, h);
color_image.put_pixel(0, 0, red);
color_image.put_pixel(1, 0, green);
color_image.put_pixel(0, 1, blue);
color_image.put_pixel(1, 1, white);
// Create a `NeuQuant` colormap that will build an approximate color palette that best matches
// the original image.
// Note, the NeuQuant algorithm is only designed to work with 6-8 bit output, so `colors`
// should be a power of 2 in the range [64, 256].
let pixels = color_image.clone().into_raw();
let cmap = NeuQuant::new(1, 256, &pixels);
// Map the original image through the color map to create an indexed image stored in a
// `GrayImage`.
let palletized = index_colors(&color_image, &cmap);
// Map indexed image back `RgbaImage`. Note the NeuQuant algorithm creates an approximation of
// the original colors, so even in this simple example the output is not pixel equivalent to
// the original.
let mapped = ImageBuffer::from_fn(w, h, |x, y| -> Rgba<u8> {
let p = palletized.get_pixel(x, y);
cmap.lookup(p.0[0] as usize)
.expect("indexed color out-of-range")
.into()
});
Implementations§
source§impl NeuQuant
impl NeuQuant
The implementation only calls the corresponding inner color_quant
methods.
These exist purely to keep a type separate from color_quant::NeuQuant
and the interface
stable for this major version. The type will be changed to a pure re-export in the next
version or might be removed.
Trait Implementations§
source§impl ColorMap for NeuQuant
impl ColorMap for NeuQuant
source§fn has_lookup(&self) -> bool
fn has_lookup(&self) -> bool
Indicate NeuQuant implements lookup
.
source§fn index_of(&self, color: &Rgba<u8>) -> usize
fn index_of(&self, color: &Rgba<u8>) -> usize
Returns the index of the closest match of
color
in the color map.Auto Trait Implementations§
impl Freeze for NeuQuant
impl RefUnwindSafe for NeuQuant
impl Send for NeuQuant
impl Sync for NeuQuant
impl Unpin for NeuQuant
impl UnwindSafe for NeuQuant
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
Mutably borrows from an owned value. Read more
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>
Converts
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>
Converts
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