ColorMatrix

Struct ColorMatrix 

Source
pub struct ColorMatrix { /* private fields */ }
Expand description

A ColorMatrix represents an image through a list of Inks. It has no real meaning in CPC world but can be used for image transformaton There is no mode information

Implementations§

Source§

impl ColorMatrix

Source

pub const INK_MASK_BACKGROUND: Ink = Ink::BRIGHTWHITE

Source

pub const INK_MASK_FOREGROUND: Ink = Ink::BLACK

Source

pub const INK_NOT_USED_IN_MASK: Ink = Ink::RED

Source

pub fn from_screen( data: &[u8], bytes_width: usize, mode: Mode, palette: &Palette, ) -> Self

Source

pub fn from_sprite( data: &[u8], pixels_width: u16, mode: Mode, palette: &Palette, ) -> Self

Source§

impl ColorMatrix

Source

pub fn new(width: usize, height: usize) -> Self

Create a new empty color matrix for the given dimensions

Source

pub fn extract_mask_and_sprite( &self, mask_ink: impl Into<Ink>, replacement_ink: impl Into<Ink>, ) -> (Self, Self)

The matrix represents both the mask (with an unexpected color), and the sprite (<ith the expected color). This method returns two matrices:

  • The mask where bright white stands for pixels of the sprite and black stands for the pixels of the background
  • The sprite where the background is replaced by a selected ink (Ideally the one that will be considered as being pen 0)
Source

pub fn convert_to_mask(&mut self, mask: Ink) -> &mut Self

Destroy the image to build the mask according to the background ink

Source

pub fn replace_ink(&mut self, from: Ink, to: Ink) -> &mut Self

Exchange all the occurrences of from Ink with to ink

Source

pub fn empty() -> Self

Source

pub fn empty_like(&self) -> Self

Create a new ColorMatrix that encodes a new image full of black

Source

pub fn double_horizontally(&mut self)

Double the width (usefull for chuncky conversions)

Source

pub fn remove_odd_columns(&mut self)

Source

pub fn height(&self) -> u32

Get the height (in pixels) of the image TODO Use a trait for that

Source

pub fn get_ink(&self, x: usize, y: usize) -> &Ink

Returns the ink at the right position

Source

pub fn set_ink(&mut self, x: usize, y: usize, ink: Ink)

Set ink

Source

pub fn add_line(&mut self, position: usize, line: &[Ink])

Add a line within the image Panic if impossible

Source

pub fn get_line(&self, y: usize) -> &[Ink]

Returns a reference on the wanted line of inks

Source

pub fn add_column(&mut self, position: usize, column: &[Ink])

Add a column within the image Panic if impossible

Source

pub fn get_column(&self, x: usize) -> Vec<Ink>

Build a vector of Inks that contains all the inks of the given column

Source

pub fn window( &self, start_x: usize, start_y: usize, width: usize, height: usize, ) -> Self

Return a copy of the inks for the given window definition

Source

pub fn nb_inks(&self) -> usize

Return the number of different inks in the image

Source

pub fn extract_palette(&self, mode: Mode) -> Palette

Returns the palette used (as soon as there is less than the maximum number of inks fr the requested mode)

Source

pub fn reduce_colors_for_mode( &mut self, mode: Mode, strategy: ColorConversionStrategy, ) -> Result<(), Error>

Modify the image in order to keep the right amount of inks

Source

pub fn reduce_colors_with( &mut self, inks: &[Ink], strategy: ColorConversionStrategy, ) -> Result<(), Error>

Modify the image in order to use only the provided palette

Source

pub fn width(&self) -> u32

Get the width (in bytes) of the image TODO Use a trait for that

Source

pub fn convert_from_fname( fname: &str, conversion: ConversionRule, ) -> Result<Self>

Source

pub fn convert( img: &ImageBuffer<Rgb<u8>, Vec<u8>>, conversion: ConversionRule, ) -> Self

Source

pub fn diff(&self, other: &Self) -> Self

Compute a difference map to see the problematic positions

Source

pub fn diff_to_positions(&self) -> Vec<(usize, usize)>

From a ColorMatrix computed with the diff method, returns the (x,y) coordinates having a difference

Source

pub fn as_image(&self) -> ImageBuffer<Rgba<u8>, Vec<u8>>

Convert the buffer as an image

Source

pub fn as_sprite( &self, mode: Mode, palette: Option<Palette>, missing_pen: Option<Pen>, ) -> Sprite

Convert the matrix as a sprite, given the right mode and an optional palette

Source

pub fn as_mode1_sprite_with_different_inks_per_line( &self, palette: &[(Ink, Ink, Ink, Ink)], dummy_palette: &Palette, missing_pen: Option<Pen>, ) -> Sprite

Convert the matrix as a sprite in mode1. Pen 1/2/3 are changed at each line. Pen 0 is constant

Source

pub fn inks(&self) -> Inks<'_>

Generate an iterator on the pixels

Trait Implementations§

Source§

impl Clone for ColorMatrix

Source§

fn clone(&self) -> ColorMatrix

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ColorMatrix

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl From<Vec<Vec<Ink>>> for ColorMatrix

Source§

fn from(data: Vec<Vec<Ink>>) -> Self

Converts to this type from the input type.
Source§

impl Hash for ColorMatrix

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for ColorMatrix

Source§

fn eq(&self, other: &ColorMatrix) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Eq for ColorMatrix

Source§

impl StructuralPartialEq for ColorMatrix

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> FmtForward for T

Source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
Source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
Source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
Source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
Source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
Source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
Source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
Source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
Source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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
Source§

impl<T> Pipe for T
where T: ?Sized,

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
Source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
Source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.