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
impl ColorMatrix
pub const INK_MASK_BACKGROUND: Ink = Ink::BRIGHTWHITE
pub const INK_MASK_FOREGROUND: Ink = Ink::BLACK
pub const INK_NOT_USED_IN_MASK: Ink = Ink::RED
pub fn from_screen( data: &[u8], bytes_width: usize, mode: Mode, palette: &Palette, ) -> Self
pub fn from_sprite( data: &[u8], pixels_width: u16, mode: Mode, palette: &Palette, ) -> Self
Source§impl ColorMatrix
impl ColorMatrix
Sourcepub fn new(width: usize, height: usize) -> Self
pub fn new(width: usize, height: usize) -> Self
Create a new empty color matrix for the given dimensions
Sourcepub fn extract_mask_and_sprite(
&self,
mask_ink: impl Into<Ink>,
replacement_ink: impl Into<Ink>,
) -> (Self, Self)
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)
Sourcepub fn convert_to_mask(&mut self, mask: Ink) -> &mut Self
pub fn convert_to_mask(&mut self, mask: Ink) -> &mut Self
Destroy the image to build the mask according to the background ink
Sourcepub fn replace_ink(&mut self, from: Ink, to: Ink) -> &mut Self
pub fn replace_ink(&mut self, from: Ink, to: Ink) -> &mut Self
Exchange all the occurrences of from Ink with to ink
pub fn empty() -> Self
Sourcepub fn empty_like(&self) -> Self
pub fn empty_like(&self) -> Self
Create a new ColorMatrix that encodes a new image full of black
Sourcepub fn double_horizontally(&mut self)
pub fn double_horizontally(&mut self)
Double the width (usefull for chuncky conversions)
pub fn remove_odd_columns(&mut self)
Sourcepub fn add_line(&mut self, position: usize, line: &[Ink])
pub fn add_line(&mut self, position: usize, line: &[Ink])
Add a line within the image Panic if impossible
Sourcepub fn add_column(&mut self, position: usize, column: &[Ink])
pub fn add_column(&mut self, position: usize, column: &[Ink])
Add a column within the image Panic if impossible
Sourcepub fn get_column(&self, x: usize) -> Vec<Ink>
pub fn get_column(&self, x: usize) -> Vec<Ink>
Build a vector of Inks that contains all the inks of the given column
Sourcepub fn window(
&self,
start_x: usize,
start_y: usize,
width: usize,
height: usize,
) -> Self
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
Sourcepub fn extract_palette(&self, mode: Mode) -> Palette
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)
Sourcepub fn reduce_colors_for_mode(
&mut self,
mode: Mode,
strategy: ColorConversionStrategy,
) -> Result<(), Error>
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
Sourcepub fn reduce_colors_with(
&mut self,
inks: &[Ink],
strategy: ColorConversionStrategy,
) -> Result<(), Error>
pub fn reduce_colors_with( &mut self, inks: &[Ink], strategy: ColorConversionStrategy, ) -> Result<(), Error>
Modify the image in order to use only the provided palette
pub fn convert_from_fname( fname: &str, conversion: ConversionRule, ) -> Result<Self>
pub fn convert( img: &ImageBuffer<Rgb<u8>, Vec<u8>>, conversion: ConversionRule, ) -> Self
Sourcepub fn diff(&self, other: &Self) -> Self
pub fn diff(&self, other: &Self) -> Self
Compute a difference map to see the problematic positions
Sourcepub fn diff_to_positions(&self) -> Vec<(usize, usize)>
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
Sourcepub fn as_sprite(
&self,
mode: Mode,
palette: Option<Palette>,
missing_pen: Option<Pen>,
) -> Sprite
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
Trait Implementations§
Source§impl Clone for ColorMatrix
impl Clone for ColorMatrix
Source§fn clone(&self) -> ColorMatrix
fn clone(&self) -> ColorMatrix
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for ColorMatrix
impl Debug for ColorMatrix
Source§impl Hash for ColorMatrix
impl Hash for ColorMatrix
Source§impl PartialEq for ColorMatrix
impl PartialEq for ColorMatrix
impl Eq for ColorMatrix
impl StructuralPartialEq for ColorMatrix
Auto Trait Implementations§
impl Freeze for ColorMatrix
impl RefUnwindSafe for ColorMatrix
impl Send for ColorMatrix
impl Sync for ColorMatrix
impl Unpin for ColorMatrix
impl UnwindSafe for ColorMatrix
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.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 moreSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
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
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
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
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.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
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.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
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.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
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.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
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.